diff options
| author | 2016-04-05 13:35:07 +0000 | |
|---|---|---|
| committer | 2016-04-05 13:35:09 +0000 | |
| commit | 19e84f7b750c97d5d7440af16c7ba18bf759e5dc (patch) | |
| tree | 9c04b8c27fefb26cb93fe3fb2eb20f497f9dd406 | |
| parent | a46be16612573ce083404e8731a96ec30eba3c48 (diff) | |
| parent | c42c97540f6ca25ffd77fcc2c9cac94993277e77 (diff) | |
Merge changes Ibb63f6b4,Ib64559a5 into nyc-dev
* changes:
Clean up netd state when tethering fails.
Clear LinkProperties on interface removed.
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 |