diff options
3 files changed, 20 insertions, 0 deletions
diff --git a/core/java/com/android/server/net/NetlinkTracker.java b/core/java/com/android/server/net/NetlinkTracker.java index d45982eff8ba..5b421d988e0a 100644 --- a/core/java/com/android/server/net/NetlinkTracker.java +++ b/core/java/com/android/server/net/NetlinkTracker.java @@ -102,6 +102,19 @@ public class NetlinkTracker extends BaseNetworkObserver { } @Override + public void interfaceRemoved(String iface) { + maybeLog("interfaceRemoved", iface); + if (mInterfaceName.equals(iface)) { + // Our interface was removed. Clear our LinkProperties and tell our owner that they are + // now empty. Note that from the moment that the interface is removed, any further + // interface-specific messages (e.g., RTM_DELADDR) will not reach us, because the netd + // code that parses them will not be able to resolve the ifindex to an interface name. + clearLinkProperties(); + mCallback.update(); + } + } + + @Override public void addressUpdated(String iface, LinkAddress address) { if (mInterfaceName.equals(iface)) { maybeLog("addressUpdated", iface, address); diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java index d10df02a3f2f..2cba93fdab90 100644 --- a/services/core/java/com/android/server/connectivity/Tethering.java +++ b/services/core/java/com/android/server/connectivity/Tethering.java @@ -1211,6 +1211,11 @@ public class Tethering extends BaseNetworkObserver { Log.e(TAG, "Error Tethering: " + e.toString()); setLastError(ConnectivityManager.TETHER_ERROR_TETHER_IFACE_ERROR); + try { + mNMService.untetherInterface(mIfaceName); + } catch (Exception ee) { + Log.e(TAG, "Error untethering after failure!" + ee.toString()); + } transitionTo(mInitialState); return; } diff --git a/services/net/java/android/net/ip/IpManager.java b/services/net/java/android/net/ip/IpManager.java index 4a83c6fdaeca..54aeb3db7319 100644 --- a/services/net/java/android/net/ip/IpManager.java +++ b/services/net/java/android/net/ip/IpManager.java @@ -302,6 +302,7 @@ public class IpManager extends StateMachine { }) { @Override public void interfaceAdded(String iface) { + super.interfaceAdded(iface); if (mClatInterfaceName.equals(iface)) { mCallback.setNeighborDiscoveryOffload(false); } @@ -309,6 +310,7 @@ public class IpManager extends StateMachine { @Override public void interfaceRemoved(String iface) { + super.interfaceRemoved(iface); if (mClatInterfaceName.equals(iface)) { // TODO: consider sending a message to the IpManager main // StateMachine thread, in case "NDO enabled" state becomes |