summaryrefslogtreecommitdiffstats
path: root/wifi/java/android
diff options
context:
space:
mode:
authorrepo sync <isheriff@google.com>2011-09-29 12:40:02 -0700
committerrepo sync <isheriff@google.com>2011-09-29 16:59:01 -0700
commit7960d9f888e31602e17b8856c77a3826bf8c841e (patch)
tree25449b839753fd26da7e6bcb4bfcb67fda6054e3 /wifi/java/android
parent3d0d7b41728277380d2e07f8de97c7bdf6840122 (diff)
downloadframeworks_base-7960d9f888e31602e17b8856c77a3826bf8c841e.zip
frameworks_base-7960d9f888e31602e17b8856c77a3826bf8c841e.tar.gz
frameworks_base-7960d9f888e31602e17b8856c77a3826bf8c841e.tar.bz2
Fix IPv6 on wifi
Bug: 5388757 Change-Id: I3c8c776c26dad1daa9801d0455fde749c0206401
Diffstat (limited to 'wifi/java/android')
-rw-r--r--wifi/java/android/net/wifi/WifiStateMachine.java30
1 files changed, 27 insertions, 3 deletions
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index 41fc55d..d1522fb 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -1560,8 +1560,9 @@ public class WifiStateMachine extends StateMachine {
try {
mNwService.clearInterfaceAddresses(mInterfaceName);
+ mNwService.disableIpv6(mInterfaceName);
} catch (Exception e) {
- Log.e(TAG, "Failed to clear IP addresses on disconnect" + e);
+ Log.e(TAG, "Failed to clear addresses or disable ipv6" + e);
}
/* Reset data structures */
@@ -1841,6 +1842,21 @@ public class WifiStateMachine extends StateMachine {
mWifiP2pManager = (WifiP2pManager) mContext.getSystemService(Context.WIFI_P2P_SERVICE);
mWifiP2pChannel.connect(mContext, getHandler(), mWifiP2pManager.getMessenger());
+ /* IPv6 is disabled at boot time and is controlled by framework
+ * to be enabled only as long as we are connected to an access point
+ *
+ * This fixes issues, a few being:
+ * - IPv6 addresses and routes stick around after disconnection
+ * - When connected, the kernel is unaware and can fail to start IPv6 negotiation
+ * - The kernel sometimes starts autoconfiguration when 802.1x is not complete
+ */
+ try {
+ mNwService.disableIpv6(mInterfaceName);
+ } catch (RemoteException re) {
+ Log.e(TAG, "Failed to disable IPv6: " + re);
+ } catch (IllegalStateException e) {
+ Log.e(TAG, "Failed to disable IPv6: " + e);
+ }
}
}
@@ -2734,7 +2750,15 @@ public class WifiStateMachine extends StateMachine {
if (DBG) Log.d(TAG, getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
- if (!WifiConfigStore.isUsingStaticIp(mLastNetworkId)) {
+ try {
+ mNwService.enableIpv6(mInterfaceName);
+ } catch (RemoteException re) {
+ Log.e(TAG, "Failed to enable IPv6: " + re);
+ } catch (IllegalStateException e) {
+ Log.e(TAG, "Failed to enable IPv6: " + e);
+ }
+
+ if (!WifiConfigStore.isUsingStaticIp(mLastNetworkId)) {
//start DHCP
mDhcpStateMachine = DhcpStateMachine.makeDhcpStateMachine(
mContext, WifiStateMachine.this, mInterfaceName);
@@ -2758,7 +2782,7 @@ public class WifiStateMachine extends StateMachine {
sendMessage(CMD_STATIC_IP_FAILURE);
}
}
- }
+ }
@Override
public boolean processMessage(Message message) {
if (DBG) Log.d(TAG, getName() + message.toString() + "\n");