diff options
author | Paul Jensen <pauljensen@google.com> | 2014-04-28 10:33:11 -0400 |
---|---|---|
committer | Lorenzo Colitti <lorenzo@google.com> | 2014-05-14 03:56:34 -0700 |
commit | 992f25257938ecc0378514f21c6e6e6375272976 (patch) | |
tree | 655d587b0275b1fd6c32a22f504fc6292f6f4b75 /services | |
parent | 7b81602f3c18df8a4ca0342c514af8f7e394c0d7 (diff) | |
download | frameworks_base-992f25257938ecc0378514f21c6e6e6375272976.zip frameworks_base-992f25257938ecc0378514f21c6e6e6375272976.tar.gz frameworks_base-992f25257938ecc0378514f21c6e6e6375272976.tar.bz2 |
Separate network and interface addition/removal netd APIs.
This should facilitate stacked interfaces (i.e. clatd).
Change-Id: Ib3e7a4d3847ef6ec4449451f6da42e75959baa4f
Diffstat (limited to 'services')
-rw-r--r-- | services/core/java/com/android/server/ConnectivityService.java | 28 | ||||
-rw-r--r-- | services/core/java/com/android/server/NetworkManagementService.java | 26 |
2 files changed, 50 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index cdb82e7..6cc738b 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -5088,6 +5088,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { LinkProperties newLp = networkAgent.linkProperties; int netId = networkAgent.network.netId; + updateInterfaces(newLp, oldLp, netId); updateMtu(newLp, oldLp); // TODO - figure out what to do for clat // for (LinkProperties lp : newLp.getStackedLinks()) { @@ -5096,6 +5097,30 @@ public class ConnectivityService extends IConnectivityManager.Stub { updateRoutes(newLp, oldLp, netId); updateDnses(newLp, oldLp, netId); } + + private void updateInterfaces(LinkProperties newLp, LinkProperties oldLp, int netId) { + CompareResult<String> interfaceDiff = new CompareResult<String>(); + if (oldLp != null) { + interfaceDiff = oldLp.compareAllInterfaceNames(newLp); + } else if (newLp != null) { + interfaceDiff.added = newLp.getAllInterfaceNames(); + } + for (String iface : interfaceDiff.added) { + try { + mNetd.addInterfaceToNetwork(iface, netId); + } catch (Exception e) { + loge("Exception adding interface: " + e); + } + } + for (String iface : interfaceDiff.removed) { + try { + mNetd.removeInterfaceFromNetwork(iface, netId); + } catch (Exception e) { + loge("Exception removing interface: " + e); + } + } + } + private void updateRoutes(LinkProperties newLp, LinkProperties oldLp, int netId) { CompareResult<RouteInfo> routeDiff = new CompareResult<RouteInfo>(); if (oldLp != null) { @@ -5300,8 +5325,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { if (state == NetworkInfo.State.CONNECTED) { // TODO - check if we want it (optimization) try { - mNetd.createNetwork(networkAgent.network.netId, - networkAgent.linkProperties.getInterfaceName()); + mNetd.createNetwork(networkAgent.network.netId); } catch (Exception e) { loge("Error creating Network " + networkAgent.network.netId); } diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index a0da2c0..cf91782 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -1938,11 +1938,11 @@ public class NetworkManagementService extends INetworkManagementService.Stub } @Override - public void createNetwork(int netId, String iface) { + public void createNetwork(int netId) { mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); try { - mConnector.execute("network", "create", netId, iface); + mConnector.execute("network", "create", netId); } catch (NativeDaemonConnectorException e) { throw e.rethrowAsParcelableException(); } @@ -1960,6 +1960,28 @@ public class NetworkManagementService extends INetworkManagementService.Stub } @Override + public void addInterfaceToNetwork(String iface, int netId) { + mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); + + try { + mConnector.execute("network", "addiface", netId, iface); + } catch (NativeDaemonConnectorException e) { + throw e.rethrowAsParcelableException(); + } + } + + @Override + public void removeInterfaceFromNetwork(String iface, int netId) { + mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); + + try { + mConnector.execute("network", "removeiface", netId, iface); + } catch (NativeDaemonConnectorException e) { + throw e.rethrowAsParcelableException(); + } + } + + @Override public void addLegacyRouteForNetId(int netId, RouteInfo routeInfo, int uid) { modifyLegacyRouteForNetId(netId, routeInfo, uid, ADD); } |