Loading services/net/java/android/net/apf/ApfFilter.java +5 −3 Original line number Diff line number Diff line Loading @@ -147,10 +147,11 @@ public class ApfFilter { private boolean mMulticastFilter; private ApfFilter(ApfCapabilities apfCapabilities, NetworkInterface networkInterface, IpManager.Callback ipManagerCallback) { IpManager.Callback ipManagerCallback, boolean multicastFilter) { mApfCapabilities = apfCapabilities; mIpManagerCallback = ipManagerCallback; mNetworkInterface = networkInterface; mMulticastFilter = multicastFilter; maybeStartFilter(); } Loading Loading @@ -752,7 +753,8 @@ public class ApfFilter { * filtering using APF programs. */ public static ApfFilter maybeCreate(ApfCapabilities apfCapabilities, NetworkInterface networkInterface, IpManager.Callback ipManagerCallback) { NetworkInterface networkInterface, IpManager.Callback ipManagerCallback, boolean multicastFilter) { if (apfCapabilities == null || networkInterface == null) return null; if (apfCapabilities.apfVersionSupported == 0) return null; if (apfCapabilities.maximumApfProgramSize < 512) { Loading @@ -768,7 +770,7 @@ public class ApfFilter { Log.e(TAG, "Unsupported APF version: " + apfCapabilities.apfVersionSupported); return null; } return new ApfFilter(apfCapabilities, networkInterface, ipManagerCallback); return new ApfFilter(apfCapabilities, networkInterface, ipManagerCallback, multicastFilter); } public synchronized void shutdown() { Loading services/net/java/android/net/ip/IpManager.java +32 −1 Original line number Diff line number Diff line Loading @@ -116,6 +116,10 @@ public class IpManager extends StateMachine { // Install an APF program to filter incoming packets. public void installPacketFilter(byte[] filter) {} // If multicast filtering cannot be accomplished with APF, this function will be called to // actuate multicast filtering using another means. public void setFallbackMulticastFilter(boolean enabled) {} } public static class WaitForProvisioningCallback extends Callback { Loading Loading @@ -222,6 +226,7 @@ public class IpManager extends StateMachine { private static final int EVENT_NETLINK_LINKPROPERTIES_CHANGED = 5; private static final int CMD_UPDATE_TCP_BUFFER_SIZES = 6; private static final int CMD_UPDATE_HTTP_PROXY = 7; private static final int CMD_SET_MULTICAST_FILTER = 8; private static final int MAX_LOG_RECORDS = 1000; Loading Loading @@ -258,6 +263,7 @@ public class IpManager extends StateMachine { private String mTcpBufferSizes; private ProxyInfo mHttpProxy; private ApfFilter mApfFilter; private boolean mMulticastFiltering; /** * Member variables accessed both from within the StateMachine thread Loading Loading @@ -390,6 +396,14 @@ public class IpManager extends StateMachine { sendMessage(CMD_UPDATE_HTTP_PROXY, proxyInfo); } /** * Enable or disable the multicast filter. Attempts to use APF to accomplish the filtering, * if not, Callback.setFallbackMulticastFilter() is called. */ public void setMulticastFilter(boolean enabled) { sendMessage(CMD_SET_MULTICAST_FILTER, enabled); } public LinkProperties getLinkProperties() { synchronized (mLock) { return new LinkProperties(mLinkProperties); Loading Loading @@ -729,6 +743,10 @@ public class IpManager extends StateMachine { handleLinkPropertiesUpdate(NO_CALLBACKS); break; case CMD_SET_MULTICAST_FILTER: mMulticastFiltering = (boolean) msg.obj; break; case DhcpClient.CMD_ON_QUIT: // Everything is already stopped. Log.e(mTag, "Unexpected CMD_ON_QUIT (already stopped)."); Loading Loading @@ -769,7 +787,10 @@ public class IpManager extends StateMachine { @Override public void enter() { mApfFilter = ApfFilter.maybeCreate(mConfiguration.mApfCapabilities, mNetworkInterface, mCallback); mCallback, mMulticastFiltering); // TODO: investigate the effects of any multicast filtering racing/interfering with the // rest of this IP configuration startup. if (mApfFilter == null) mCallback.setFallbackMulticastFilter(mMulticastFiltering); // Set privacy extensions. try { mNwService.setInterfaceIpv6PrivacyExtensions(mInterfaceName, true); Loading Loading @@ -882,6 +903,16 @@ public class IpManager extends StateMachine { handleLinkPropertiesUpdate(SEND_CALLBACKS); break; case CMD_SET_MULTICAST_FILTER: { mMulticastFiltering = (boolean) msg.obj; if (mApfFilter != null) { mApfFilter.setMulticastFilter(mMulticastFiltering); } else { mCallback.setFallbackMulticastFilter(mMulticastFiltering); } break; } case DhcpClient.CMD_PRE_DHCP_ACTION: if (VDBG) { Log.d(mTag, "onPreDhcpAction()"); } if (mConfiguration.mRequestedPreDhcpAction) { Loading Loading
services/net/java/android/net/apf/ApfFilter.java +5 −3 Original line number Diff line number Diff line Loading @@ -147,10 +147,11 @@ public class ApfFilter { private boolean mMulticastFilter; private ApfFilter(ApfCapabilities apfCapabilities, NetworkInterface networkInterface, IpManager.Callback ipManagerCallback) { IpManager.Callback ipManagerCallback, boolean multicastFilter) { mApfCapabilities = apfCapabilities; mIpManagerCallback = ipManagerCallback; mNetworkInterface = networkInterface; mMulticastFilter = multicastFilter; maybeStartFilter(); } Loading Loading @@ -752,7 +753,8 @@ public class ApfFilter { * filtering using APF programs. */ public static ApfFilter maybeCreate(ApfCapabilities apfCapabilities, NetworkInterface networkInterface, IpManager.Callback ipManagerCallback) { NetworkInterface networkInterface, IpManager.Callback ipManagerCallback, boolean multicastFilter) { if (apfCapabilities == null || networkInterface == null) return null; if (apfCapabilities.apfVersionSupported == 0) return null; if (apfCapabilities.maximumApfProgramSize < 512) { Loading @@ -768,7 +770,7 @@ public class ApfFilter { Log.e(TAG, "Unsupported APF version: " + apfCapabilities.apfVersionSupported); return null; } return new ApfFilter(apfCapabilities, networkInterface, ipManagerCallback); return new ApfFilter(apfCapabilities, networkInterface, ipManagerCallback, multicastFilter); } public synchronized void shutdown() { Loading
services/net/java/android/net/ip/IpManager.java +32 −1 Original line number Diff line number Diff line Loading @@ -116,6 +116,10 @@ public class IpManager extends StateMachine { // Install an APF program to filter incoming packets. public void installPacketFilter(byte[] filter) {} // If multicast filtering cannot be accomplished with APF, this function will be called to // actuate multicast filtering using another means. public void setFallbackMulticastFilter(boolean enabled) {} } public static class WaitForProvisioningCallback extends Callback { Loading Loading @@ -222,6 +226,7 @@ public class IpManager extends StateMachine { private static final int EVENT_NETLINK_LINKPROPERTIES_CHANGED = 5; private static final int CMD_UPDATE_TCP_BUFFER_SIZES = 6; private static final int CMD_UPDATE_HTTP_PROXY = 7; private static final int CMD_SET_MULTICAST_FILTER = 8; private static final int MAX_LOG_RECORDS = 1000; Loading Loading @@ -258,6 +263,7 @@ public class IpManager extends StateMachine { private String mTcpBufferSizes; private ProxyInfo mHttpProxy; private ApfFilter mApfFilter; private boolean mMulticastFiltering; /** * Member variables accessed both from within the StateMachine thread Loading Loading @@ -390,6 +396,14 @@ public class IpManager extends StateMachine { sendMessage(CMD_UPDATE_HTTP_PROXY, proxyInfo); } /** * Enable or disable the multicast filter. Attempts to use APF to accomplish the filtering, * if not, Callback.setFallbackMulticastFilter() is called. */ public void setMulticastFilter(boolean enabled) { sendMessage(CMD_SET_MULTICAST_FILTER, enabled); } public LinkProperties getLinkProperties() { synchronized (mLock) { return new LinkProperties(mLinkProperties); Loading Loading @@ -729,6 +743,10 @@ public class IpManager extends StateMachine { handleLinkPropertiesUpdate(NO_CALLBACKS); break; case CMD_SET_MULTICAST_FILTER: mMulticastFiltering = (boolean) msg.obj; break; case DhcpClient.CMD_ON_QUIT: // Everything is already stopped. Log.e(mTag, "Unexpected CMD_ON_QUIT (already stopped)."); Loading Loading @@ -769,7 +787,10 @@ public class IpManager extends StateMachine { @Override public void enter() { mApfFilter = ApfFilter.maybeCreate(mConfiguration.mApfCapabilities, mNetworkInterface, mCallback); mCallback, mMulticastFiltering); // TODO: investigate the effects of any multicast filtering racing/interfering with the // rest of this IP configuration startup. if (mApfFilter == null) mCallback.setFallbackMulticastFilter(mMulticastFiltering); // Set privacy extensions. try { mNwService.setInterfaceIpv6PrivacyExtensions(mInterfaceName, true); Loading Loading @@ -882,6 +903,16 @@ public class IpManager extends StateMachine { handleLinkPropertiesUpdate(SEND_CALLBACKS); break; case CMD_SET_MULTICAST_FILTER: { mMulticastFiltering = (boolean) msg.obj; if (mApfFilter != null) { mApfFilter.setMulticastFilter(mMulticastFiltering); } else { mCallback.setFallbackMulticastFilter(mMulticastFiltering); } break; } case DhcpClient.CMD_PRE_DHCP_ACTION: if (VDBG) { Log.d(mTag, "onPreDhcpAction()"); } if (mConfiguration.mRequestedPreDhcpAction) { Loading