summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2013-02-28 16:16:03 +0900
committerLorenzo Colitti <lorenzo@google.com>2013-02-28 16:33:48 +0900
commit79751848d1c3a5139eb5ccd6ddecaf84c2a09783 (patch)
tree71f86448bdb5a5a0328bdcf4d655be663f90ffb2
parentc732976e6b40be5a23eee2df2bff23101abc1f91 (diff)
downloadframeworks_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.aidl15
-rw-r--r--services/java/com/android/server/NetworkManagementService.java39
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() {