diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2014-10-30 13:27:53 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-10-30 13:27:54 +0000 |
commit | bbb2c5b28ad153afef40e27efbb8241988f33583 (patch) | |
tree | 4318a7e67aff59334ec0edfa192fcc4ce5f1e7b4 /services | |
parent | 9710b04f35efae696c9ee6343671eff3568f5678 (diff) | |
parent | e21a26b3ba78b0238f4ed4a09b43319a2320fbaa (diff) | |
download | frameworks_base-bbb2c5b28ad153afef40e27efbb8241988f33583.zip frameworks_base-bbb2c5b28ad153afef40e27efbb8241988f33583.tar.gz frameworks_base-bbb2c5b28ad153afef40e27efbb8241988f33583.tar.bz2 |
Merge "Add support for running 464xlat on wifi as well." into lmp-mr1-dev
Diffstat (limited to 'services')
-rw-r--r-- | services/core/java/com/android/server/NetworkManagementService.java | 11 | ||||
-rw-r--r-- | services/core/java/com/android/server/connectivity/Nat464Xlat.java | 40 |
2 files changed, 41 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index d03a154..0f033d7 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -940,6 +940,17 @@ public class NetworkManagementService extends INetworkManagementService.Stub } @Override + public void setInterfaceIpv6NdOffload(String iface, boolean enable) { + mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); + try { + mConnector.execute( + "interface", "ipv6ndoffload", iface, (enable ? "enable" : "disable")); + } catch (NativeDaemonConnectorException e) { + throw e.rethrowAsParcelableException(); + } + } + + @Override public void addRoute(int netId, RouteInfo route) { modifyRoute("add", "" + netId, route); } diff --git a/services/core/java/com/android/server/connectivity/Nat464Xlat.java b/services/core/java/com/android/server/connectivity/Nat464Xlat.java index c7a2ce1..c145ca3 100644 --- a/services/core/java/com/android/server/connectivity/Nat464Xlat.java +++ b/services/core/java/com/android/server/connectivity/Nat464Xlat.java @@ -17,6 +17,7 @@ package com.android.server.connectivity; import static android.net.ConnectivityManager.TYPE_MOBILE; +import static android.net.ConnectivityManager.TYPE_WIFI; import java.net.Inet4Address; @@ -53,7 +54,7 @@ public class Nat464Xlat extends BaseNetworkObserver { // ConnectivityService Handler for LinkProperties updates. private final Handler mHandler; - // The network we're running on. + // The network we're running on, and its type. private final NetworkAgentInfo mNetwork; // Internal state variables. @@ -211,23 +212,41 @@ public class Nat464Xlat extends BaseNetworkObserver { return stacked; } + private LinkAddress getLinkAddress(String iface) { + try { + InterfaceConfiguration config = mNMService.getInterfaceConfig(iface); + return config.getLinkAddress(); + } catch(RemoteException|IllegalStateException e) { + Slog.e(TAG, "Error getting link properties: " + e); + return null; + } + } + + private void maybeSetIpv6NdOffload(String iface, boolean on) { + if (mNetwork.networkInfo.getType() != TYPE_WIFI) { + return; + } + try { + Slog.d(TAG, (on ? "En" : "Dis") + "abling ND offload on " + iface); + mNMService.setInterfaceIpv6NdOffload(iface, on); + } catch(RemoteException|IllegalStateException e) { + Slog.w(TAG, "Changing IPv6 ND offload on " + iface + "failed: " + e); + } + } + @Override public void interfaceAdded(String iface) { // Called by the InterfaceObserver on its own thread, so can race with stop(). if (isStarted() && mIface.equals(iface)) { Slog.i(TAG, "interface " + iface + " added, mIsRunning " + mIsRunning + "->true"); - LinkAddress clatAddress; - try { - InterfaceConfiguration config = mNMService.getInterfaceConfig(iface); - clatAddress = config.getLinkAddress(); - } catch(RemoteException e) { - Slog.e(TAG, "Error getting link properties: " + e); - return; - } - if (!mIsRunning) { + LinkAddress clatAddress = getLinkAddress(iface); + if (clatAddress == null) { + return; + } mIsRunning = true; + maybeSetIpv6NdOffload(mBaseIface, false); LinkProperties lp = new LinkProperties(mNetwork.linkProperties); lp.addStackedLink(makeLinkProperties(clatAddress)); Slog.i(TAG, "Adding stacked link " + mIface + " on top of " + mBaseIface); @@ -255,6 +274,7 @@ public class Nat464Xlat extends BaseNetworkObserver { } catch (RemoteException|IllegalStateException e) { // Well, we tried. } + maybeSetIpv6NdOffload(mBaseIface, true); LinkProperties lp = new LinkProperties(mNetwork.linkProperties); lp.removeStackedLink(mIface); clear(); |