diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2013-02-28 16:16:03 +0900 |
---|---|---|
committer | Lorenzo Colitti <lorenzo@google.com> | 2013-02-28 16:33:48 +0900 |
commit | 79751848d1c3a5139eb5ccd6ddecaf84c2a09783 (patch) | |
tree | 71f86448bdb5a5a0328bdcf4d655be663f90ffb2 | |
parent | c732976e6b40be5a23eee2df2bff23101abc1f91 (diff) | |
download | frameworks_base-79751848d1c3a5139eb5ccd6ddecaf84c2a09783.zip frameworks_base-79751848d1c3a5139eb5ccd6ddecaf84c2a09783.tar.gz frameworks_base-79751848d1c3a5139eb5ccd6ddecaf84c2a09783.tar.bz2 |
Expose clatd commands to NetworkManagementService.
For now, we only support running one clat at a time. This is
enforced by the netd ClatdController code.
Bug: 8276725
Change-Id: I8a50305f9182f4da0f80716081211625a0202583
-rw-r--r-- | core/java/android/os/INetworkManagementService.aidl | 15 | ||||
-rw-r--r-- | services/java/com/android/server/NetworkManagementService.java | 39 |
2 files changed, 54 insertions, 0 deletions
diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl index c765457..4b83611 100644 --- a/core/java/android/os/INetworkManagementService.aidl +++ b/core/java/android/os/INetworkManagementService.aidl @@ -362,4 +362,19 @@ interface INetworkManagementService * Clear a process (pid) from being associated with an interface. */ void clearDnsInterfaceForPid(int pid); + + /** + * Start the clatd (464xlat) service + */ + void startClatd(String interfaceName); + + /** + * Stop the clatd (464xlat) service + */ + void stopClatd(); + + /** + * Determine whether the clatd (464xlat) service has been started + */ + boolean isClatdStarted(); } diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java index 5630b08..7686705 100644 --- a/services/java/com/android/server/NetworkManagementService.java +++ b/services/java/com/android/server/NetworkManagementService.java @@ -23,6 +23,7 @@ import static android.net.NetworkStats.SET_DEFAULT; import static android.net.NetworkStats.TAG_NONE; import static android.net.NetworkStats.UID_ALL; import static android.net.TrafficStats.UID_TETHERING; +import static com.android.server.NetworkManagementService.NetdResponseCode.ClatdStatusResult; import static com.android.server.NetworkManagementService.NetdResponseCode.InterfaceGetCfgResult; import static com.android.server.NetworkManagementService.NetdResponseCode.InterfaceListResult; import static com.android.server.NetworkManagementService.NetdResponseCode.IpFwdStatusResult; @@ -122,6 +123,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub public static final int QuotaCounterResult = 220; public static final int TetheringStatsResult = 221; public static final int DnsProxyQueryResult = 222; + public static final int ClatdStatusResult = 223; public static final int InterfaceChange = 600; public static final int BandwidthControl = 601; @@ -1498,6 +1500,43 @@ public class NetworkManagementService extends INetworkManagementService.Stub } } + @Override + public void startClatd(String interfaceName) throws IllegalStateException { + mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); + + try { + mConnector.execute("clatd", "start", interfaceName); + } catch (NativeDaemonConnectorException e) { + throw e.rethrowAsParcelableException(); + } + } + + @Override + public void stopClatd() throws IllegalStateException { + mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); + + try { + mConnector.execute("clatd", "stop"); + } catch (NativeDaemonConnectorException e) { + throw e.rethrowAsParcelableException(); + } + } + + @Override + public boolean isClatdStarted() { + mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); + + final NativeDaemonEvent event; + try { + event = mConnector.execute("clatd", "status"); + } catch (NativeDaemonConnectorException e) { + throw e.rethrowAsParcelableException(); + } + + event.checkCode(ClatdStatusResult); + return event.getMessage().endsWith("started"); + } + /** {@inheritDoc} */ @Override public void monitor() { |