From 8d6edc3270616b119645fbdf8752c0ea37de0731 Mon Sep 17 00:00:00 2001 From: Erik Kline Date: Mon, 29 Feb 2016 16:00:01 +0900 Subject: [PATCH] Add 464xlat notification callback Bug: 26238390 Bug: 26991160 Change-Id: I556e779c642d19cd8d26637dd98055157d005f77 --- .../net/java/android/net/ip/IpManager.java | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/services/net/java/android/net/ip/IpManager.java b/services/net/java/android/net/ip/IpManager.java index 46ecc50aeafce..afae9563cb19d 100644 --- a/services/net/java/android/net/ip/IpManager.java +++ b/services/net/java/android/net/ip/IpManager.java @@ -66,9 +66,6 @@ public class IpManager extends StateMachine { private static final boolean DBG = true; private static final boolean VDBG = false; - private static final boolean NO_CALLBACKS = false; - private static final boolean SEND_CALLBACKS = true; - // For message logging. private static final Class[] sMessageClasses = { IpManager.class, DhcpClient.class }; private static final SparseArray sWhatToString = @@ -98,6 +95,10 @@ public class IpManager extends StateMachine { public void onProvisioningSuccess(LinkProperties newLp) {} public void onProvisioningFailure(LinkProperties newLp) {} + // This is called whenever 464xlat is being enabled or disabled (i.e. + // started or stopped). + public void on464XlatChange(boolean enabled) {} + // Invoked on LinkProperties changes. public void onLinkPropertiesChange(LinkProperties newLp) {} @@ -207,6 +208,13 @@ public class IpManager extends StateMachine { private static final int MAX_LOG_RECORDS = 1000; + private static final boolean NO_CALLBACKS = false; + private static final boolean SEND_CALLBACKS = true; + + // This must match the interface prefix in clatd.c. + // TODO: Revert this hack once IpManager and Nat464Xlat work in concert. + private static final String CLAT_PREFIX = "v4-"; + private final Object mLock = new Object(); private final State mStoppedState = new StoppedState(); private final State mStoppingState = new StoppingState(); @@ -215,6 +223,7 @@ public class IpManager extends StateMachine { private final String mTag; private final Context mContext; private final String mInterfaceName; + private final String mClatInterfaceName; @VisibleForTesting protected final Callback mCallback; private final INetworkManagementService mNwService; @@ -255,6 +264,7 @@ public class IpManager extends StateMachine { mContext = context; mInterfaceName = ifName; + mClatInterfaceName = CLAT_PREFIX + ifName; mCallback = callback; mNwService = nwService; @@ -265,7 +275,22 @@ public class IpManager extends StateMachine { public void update() { sendMessage(EVENT_NETLINK_LINKPROPERTIES_CHANGED); } - }); + }) { + @Override + public void interfaceAdded(String iface) { + if (mClatInterfaceName.equals(iface)) { + mCallback.on464XlatChange(true); + } + } + + @Override + public void interfaceRemoved(String iface) { + if (mClatInterfaceName.equals(iface)) { + mCallback.on464XlatChange(false); + } + } + }; + try { mNwService.registerObserver(mNetlinkTracker); } catch (RemoteException e) {