summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorPaul Jensen <pauljensen@google.com>2016-04-05 00:22:20 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2016-04-05 00:22:22 +0000
commit78b8d2feb70093e8717e924ed41176d6d8417e60 (patch)
treeb6ab12ab5646e06d249683b86e998c212eb397ef /service
parent720aba804a5c7fa5e4cc92af60b129e3e0013666 (diff)
parent3e954f2804d376c9ca08e23c00b266c668f65e53 (diff)
Merge "Plumb WiFi multicast filter through to ApfFilter" into nyc-dev
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java8
-rw-r--r--service/java/com/android/server/wifi/WifiStateMachine.java95
2 files changed, 32 insertions, 71 deletions
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 67a4b6ced..32d0e3645 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -1803,7 +1803,7 @@ public class WifiServiceImpl extends IWifiManager.Stub {
if (mMulticasters.size() != 0) {
return;
} else {
- mWifiStateMachine.startFilteringMulticastV4Packets();
+ mWifiStateMachine.startFilteringMulticastPackets();
}
}
}
@@ -1814,11 +1814,11 @@ public class WifiServiceImpl extends IWifiManager.Stub {
synchronized (mMulticasters) {
mMulticastEnabled++;
mMulticasters.add(new Multicaster(tag, binder));
- // Note that we could call stopFilteringMulticastV4Packets only when
+ // Note that we could call stopFilteringMulticastPackets only when
// our new size == 1 (first call), but this function won't
// be called often and by making the stopPacket call each
// time we're less fragile and self-healing.
- mWifiStateMachine.stopFilteringMulticastV4Packets();
+ mWifiStateMachine.stopFilteringMulticastPackets();
}
int uid = Binder.getCallingUid();
@@ -1855,7 +1855,7 @@ public class WifiServiceImpl extends IWifiManager.Stub {
removed.unlinkDeathRecipient();
}
if (mMulticasters.size() == 0) {
- mWifiStateMachine.startFilteringMulticastV4Packets();
+ mWifiStateMachine.startFilteringMulticastPackets();
}
final long ident = Binder.clearCallingIdentity();
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java
index c6bf0aef5..0c779b92c 100644
--- a/service/java/com/android/server/wifi/WifiStateMachine.java
+++ b/service/java/com/android/server/wifi/WifiStateMachine.java
@@ -599,9 +599,6 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
/* Tracks current frequency mode */
private AtomicInteger mFrequencyBand = new AtomicInteger(WifiManager.WIFI_FREQUENCY_BAND_AUTO);
- /* Tracks if we are filtering Multicast v4 packets. Default is to filter. */
- private AtomicBoolean mFilteringMulticastV4Packets = new AtomicBoolean(true);
-
// Channel for sending replies.
private AsyncChannel mReplyChannel = new AsyncChannel();
@@ -719,10 +716,6 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
static final int CMD_ENABLE_RSSI_POLL = BASE + 82;
/* RSSI poll */
static final int CMD_RSSI_POLL = BASE + 83;
- /* Set up packet filtering */
- static final int CMD_START_PACKET_FILTERING = BASE + 84;
- /* Clear packet filter */
- static final int CMD_STOP_PACKET_FILTERING = BASE + 85;
/* Enable suspend mode optimizations in the driver */
static final int CMD_SET_SUSPEND_OPT_ENABLED = BASE + 86;
/* Delayed NETWORK_DISCONNECT */
@@ -735,10 +728,6 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
private int testNetworkDisconnectCounter = 0;
- /* arg1 values to CMD_STOP_PACKET_FILTERING and CMD_START_PACKET_FILTERING */
- static final int MULTICAST_V6 = 1;
- static final int MULTICAST_V4 = 0;
-
/* Set the frequency band */
static final int CMD_SET_FREQUENCY_BAND = BASE + 90;
/* Enable TDLS on a specific MAC address */
@@ -892,6 +881,9 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
/* Push a new APF program to the HAL */
static final int CMD_INSTALL_PACKET_FILTER = BASE + 202;
+ /* Enable/disable fallback packet filtering */
+ static final int CMD_SET_FALLBACK_PACKET_FILTERING = BASE + 203;
+
// For message logging.
private static final Class[] sMessageClasses = {
AsyncChannel.class, WifiStateMachine.class, DhcpClient.class };
@@ -1176,6 +1168,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
mLastSignalLevel = -1;
mIpManager = mFacade.makeIpManager(mContext, mInterfaceName, new IpManagerCallback());
+ mIpManager.setMulticastFilter(true);
mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
mScanIntent = getPrivateBroadcast(ACTION_START_SCAN, SCAN_REQUEST);
@@ -1408,6 +1401,11 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
public void installPacketFilter(byte[] filter) {
sendMessage(CMD_INSTALL_PACKET_FILTER, filter);
}
+
+ @Override
+ public void setFallbackMulticastFilter(boolean enabled) {
+ sendMessage(CMD_SET_FALLBACK_PACKET_FILTERING, enabled);
+ }
}
private void stopIpManager() {
@@ -2557,31 +2555,15 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
/**
* Start filtering Multicast v4 packets
*/
- public void startFilteringMulticastV4Packets() {
- mFilteringMulticastV4Packets.set(true);
- sendMessage(CMD_START_PACKET_FILTERING, MULTICAST_V4, 0);
+ public void startFilteringMulticastPackets() {
+ mIpManager.setMulticastFilter(true);
}
/**
* Stop filtering Multicast v4 packets
*/
- public void stopFilteringMulticastV4Packets() {
- mFilteringMulticastV4Packets.set(false);
- sendMessage(CMD_STOP_PACKET_FILTERING, MULTICAST_V4, 0);
- }
-
- /**
- * Start filtering Multicast v4 packets
- */
- public void startFilteringMulticastV6Packets() {
- sendMessage(CMD_START_PACKET_FILTERING, MULTICAST_V6, 0);
- }
-
- /**
- * Stop filtering Multicast v4 packets
- */
- public void stopFilteringMulticastV6Packets() {
- sendMessage(CMD_STOP_PACKET_FILTERING, MULTICAST_V6, 0);
+ public void stopFilteringMulticastPackets() {
+ mIpManager.setMulticastFilter(false);
}
/**
@@ -3336,6 +3318,9 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
case CMD_INSTALL_PACKET_FILTER:
sb.append(" len=" + ((byte[])msg.obj).length);
break;
+ case CMD_SET_FALLBACK_PACKET_FILTERING:
+ sb.append(" enabled=" + (boolean)msg.obj);
+ break;
case CMD_ROAM_WATCHDOG_TIMER:
sb.append(" ");
sb.append(Integer.toString(msg.arg1));
@@ -5033,6 +5018,13 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
case CMD_INSTALL_PACKET_FILTER:
mWifiNative.installPacketFilter((byte[]) message.obj);
break;
+ case CMD_SET_FALLBACK_PACKET_FILTERING:
+ if ((boolean) message.obj) {
+ mWifiNative.startFilteringMulticastV4Packets();
+ } else {
+ mWifiNative.stopFilteringMulticastV4Packets();
+ }
+ break;
default:
loge("Error! unhandled message" + message);
break;
@@ -5227,8 +5219,6 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
case CMD_STOP_DRIVER:
case CMD_SET_OPERATIONAL_MODE:
case CMD_SET_FREQUENCY_BAND:
- case CMD_START_PACKET_FILTERING:
- case CMD_STOP_PACKET_FILTERING:
messageHandlingStatus = MESSAGE_HANDLING_STATUS_DEFERRED;
deferMessage(message);
break;
@@ -5405,8 +5395,6 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
case CMD_STOP_DRIVER:
case CMD_SET_OPERATIONAL_MODE:
case CMD_SET_FREQUENCY_BAND:
- case CMD_START_PACKET_FILTERING:
- case CMD_STOP_PACKET_FILTERING:
deferMessage(message);
break;
default:
@@ -5468,8 +5456,6 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
case WifiMonitor.ASSOCIATION_REJECTION_EVENT:
case WifiMonitor.WPS_OVERLAP_EVENT:
case CMD_SET_FREQUENCY_BAND:
- case CMD_START_PACKET_FILTERING:
- case CMD_STOP_PACKET_FILTERING:
case CMD_START_SCAN:
case CMD_DISCONNECT:
case CMD_REASSOCIATE:
@@ -5515,16 +5501,13 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
/* initialize network state */
setNetworkDetailedState(DetailedState.DISCONNECTED);
- /* Remove any filtering on Multicast v6 at start */
+ // Disable legacy multicast filtering, which on some chipsets defaults to enabled.
+ // Legacy IPv6 multicast filtering blocks ICMPv6 router advertisements which breaks IPv6
+ // provisioning. Legacy IPv4 multicast filtering may be re-enabled later via
+ // IpManager.Callback.setFallbackMulticastFilter()
+ mWifiNative.stopFilteringMulticastV4Packets();
mWifiNative.stopFilteringMulticastV6Packets();
- /* Reset Multicast v4 filtering state */
- if (mFilteringMulticastV4Packets.get()) {
- mWifiNative.startFilteringMulticastV4Packets();
- } else {
- mWifiNative.stopFilteringMulticastV4Packets();
- }
-
if (mOperationalMode != CONNECT_MODE) {
mWifiNative.disconnect();
mWifiConfigManager.disableAllNetworksNative();
@@ -5641,24 +5624,6 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
mWifiConfigManager.enableAllNetworks();
}
break;
- case CMD_START_PACKET_FILTERING:
- if (message.arg1 == MULTICAST_V6) {
- mWifiNative.startFilteringMulticastV6Packets();
- } else if (message.arg1 == MULTICAST_V4) {
- mWifiNative.startFilteringMulticastV4Packets();
- } else {
- loge("Illegal arugments to CMD_START_PACKET_FILTERING");
- }
- break;
- case CMD_STOP_PACKET_FILTERING:
- if (message.arg1 == MULTICAST_V6) {
- mWifiNative.stopFilteringMulticastV6Packets();
- } else if (message.arg1 == MULTICAST_V4) {
- mWifiNative.stopFilteringMulticastV4Packets();
- } else {
- loge("Illegal arugments to CMD_STOP_PACKET_FILTERING");
- }
- break;
case CMD_SET_SUSPEND_OPT_ENABLED:
if (message.arg1 == 1) {
setSuspendOptimizationsNative(SUSPEND_DUE_TO_SCREEN, true);
@@ -5759,8 +5724,6 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
case CMD_STOP_DRIVER:
case CMD_SET_OPERATIONAL_MODE:
case CMD_SET_FREQUENCY_BAND:
- case CMD_START_PACKET_FILTERING:
- case CMD_STOP_PACKET_FILTERING:
case CMD_START_SCAN:
case CMD_DISCONNECT:
case CMD_REASSOCIATE:
@@ -5791,8 +5754,6 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
case CMD_START_DRIVER:
case CMD_STOP_DRIVER:
case CMD_SET_FREQUENCY_BAND:
- case CMD_START_PACKET_FILTERING:
- case CMD_STOP_PACKET_FILTERING:
case CMD_START_SCAN:
case CMD_DISCONNECT:
case CMD_REASSOCIATE: