summaryrefslogtreecommitdiffstats
path: root/core/java/android/net/EthernetDataTracker.java
diff options
context:
space:
mode:
authorMike J. Chen <mjchen@google.com>2011-09-30 18:05:44 -0700
committerMike Lockwood <lockwood@android.com>2011-10-28 10:14:51 -0400
commit8f1667ac786538d34bfe94209d0e5942b141d29d (patch)
tree859954a2dbf6ac830e7e95d0f9086d6dc87f34bc /core/java/android/net/EthernetDataTracker.java
parent923a41816c5290f86de87f76e571065c9ce0f5d9 (diff)
downloadframeworks_base-8f1667ac786538d34bfe94209d0e5942b141d29d.zip
frameworks_base-8f1667ac786538d34bfe94209d0e5942b141d29d.tar.gz
frameworks_base-8f1667ac786538d34bfe94209d0e5942b141d29d.tar.bz2
Fix disconnect from wired ethernet issues.
When a cable was unplugged, we were telling the driver to release the ip address so if a cable on a different network was plugged in, it would still try to use it's old ip address on the new network, which probably didn't work. Also, we didn't notify ConnectivityService about the state change in the unplug case. Some of this was done in the interface removed case, but we never remove the interface in Tungsten, just unplug. So refactor the common disconnect code into a disconnect() function that's called by both the link status change (unplug) and interface removal (only applies to things like USB ethernet dongles) cases. Change-Id: I19d7ceb540d6a0e24df1b55314a13af78f1e593d Signed-off-by: Mike J. Chen <mjchen@google.com>
Diffstat (limited to 'core/java/android/net/EthernetDataTracker.java')
-rw-r--r--core/java/android/net/EthernetDataTracker.java26
1 files changed, 17 insertions, 9 deletions
diff --git a/core/java/android/net/EthernetDataTracker.java b/core/java/android/net/EthernetDataTracker.java
index 21ecc22..02e81b6 100644
--- a/core/java/android/net/EthernetDataTracker.java
+++ b/core/java/android/net/EthernetDataTracker.java
@@ -79,10 +79,7 @@ public class EthernetDataTracker implements NetworkStateTracker {
if (up) {
mTracker.reconnect();
} else {
- NetworkUtils.stopDhcp(mIface);
- mTracker.mNetworkInfo.setIsAvailable(false);
- mTracker.mNetworkInfo.setDetailedState(DetailedState.DISCONNECTED,
- null, null);
+ mTracker.disconnect();
}
}
}
@@ -129,11 +126,7 @@ public class EthernetDataTracker implements NetworkStateTracker {
runDhcp();
}
- private void interfaceRemoved(String iface) {
- if (!iface.equals(mIface))
- return;
-
- Log.d(TAG, "Removing " + iface);
+ public void disconnect() {
NetworkUtils.stopDhcp(mIface);
@@ -147,6 +140,21 @@ public class EthernetDataTracker implements NetworkStateTracker {
msg = mCsHandler.obtainMessage(EVENT_STATE_CHANGED, mNetworkInfo);
msg.sendToTarget();
+ IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
+ INetworkManagementService service = INetworkManagementService.Stub.asInterface(b);
+ try {
+ service.clearInterfaceAddresses(mIface);
+ } catch (Exception e) {
+ Log.e(TAG, "Failed to clear addresses or disable ipv6" + e);
+ }
+ }
+
+ private void interfaceRemoved(String iface) {
+ if (!iface.equals(mIface))
+ return;
+
+ Log.d(TAG, "Removing " + iface);
+ disconnect();
mIface = "";
}