From d7375ac9d79b86ffae9fc1e0d92505b6bfa57eb0 Mon Sep 17 00:00:00 2001 From: Erik Kline Date: Mon, 12 Mar 2018 23:18:58 +0900 Subject: [PATCH] Support bluetooth not using MultinetworkPolicyTracker This required advancing the IpManager to IpClient refactoring (Bluetooth used IpManager and friends). Most importantly, the Bluetooth code used WaitForProvisioningCallback, so this is moved into IpClient proper now. Also: some more renaming cleanup. Test: as follows - built - flashed - booted - runtest frameworks-net passes Bug: 62476366 Bug: 72663849 Merged-In: I5e5b2c59ad3ea9ad574e8e683bcab3b09cfe0791 Merged-In: I89b45310181d952129fb2294db63654da9b4057f Change-Id: I9eee2a9d5c31cdd48a054a7edc3403584efb1864 (cherry picked from commit 8d1fe54be1b605846cca9dfe4a966b3c5e739caa) --- core/java/android/net/metrics/ApfStats.java | 2 +- .../net/java/android/net/ip/IpClient.java | 54 +++++-- .../net/java/android/net/ip/IpManager.java | 29 ---- tests/net/java/android/net/apf/ApfTest.java | 138 +++++++++--------- 4 files changed, 115 insertions(+), 108 deletions(-) diff --git a/core/java/android/net/metrics/ApfStats.java b/core/java/android/net/metrics/ApfStats.java index 3b0dc7efc45eb..76a781dd7dafc 100644 --- a/core/java/android/net/metrics/ApfStats.java +++ b/core/java/android/net/metrics/ApfStats.java @@ -20,7 +20,7 @@ import android.os.Parcel; import android.os.Parcelable; /** - * An event logged for an interface with APF capabilities when its IpManager state machine exits. + * An event logged for an interface with APF capabilities when its IpClient state machine exits. * {@hide} */ public final class ApfStats implements Parcelable { diff --git a/services/net/java/android/net/ip/IpClient.java b/services/net/java/android/net/ip/IpClient.java index a184b227aac44..87249dfc925f2 100644 --- a/services/net/java/android/net/ip/IpClient.java +++ b/services/net/java/android/net/ip/IpClient.java @@ -40,6 +40,7 @@ import android.net.util.MultinetworkPolicyTracker; import android.net.util.NetdService; import android.net.util.NetworkConstants; import android.net.util.SharedLog; +import android.os.ConditionVariable; import android.os.INetworkManagementService; import android.os.Message; import android.os.RemoteException; @@ -150,6 +151,28 @@ public class IpClient extends StateMachine { public void setNeighborDiscoveryOffload(boolean enable) {} } + public static class WaitForProvisioningCallback extends Callback { + private final ConditionVariable mCV = new ConditionVariable(); + private LinkProperties mCallbackLinkProperties; + + public LinkProperties waitForProvisioning() { + mCV.block(); + return mCallbackLinkProperties; + } + + @Override + public void onProvisioningSuccess(LinkProperties newLp) { + mCallbackLinkProperties = newLp; + mCV.open(); + } + + @Override + public void onProvisioningFailure(LinkProperties newLp) { + mCallbackLinkProperties = null; + mCV.open(); + } + } + // Use a wrapper class to log in order to ensure complete and detailed // logging. This method is lighter weight than annotations/reflection // and has the following benefits: @@ -281,6 +304,11 @@ public class IpClient extends StateMachine { return this; } + public Builder withoutMultinetworkPolicyTracker() { + mConfig.mUsingMultinetworkPolicyTracker = false; + return this; + } + public Builder withoutIpReachabilityMonitor() { mConfig.mUsingIpReachabilityMonitor = false; return this; @@ -343,6 +371,7 @@ public class IpClient extends StateMachine { /* package */ boolean mEnableIPv4 = true; /* package */ boolean mEnableIPv6 = true; + /* package */ boolean mUsingMultinetworkPolicyTracker = true; /* package */ boolean mUsingIpReachabilityMonitor = true; /* package */ int mRequestedPreDhcpActionMs; /* package */ InitialConfiguration mInitialConfig; @@ -374,6 +403,7 @@ public class IpClient extends StateMachine { return new StringJoiner(", ", getClass().getSimpleName() + "{", "}") .add("mEnableIPv4: " + mEnableIPv4) .add("mEnableIPv6: " + mEnableIPv6) + .add("mUsingMultinetworkPolicyTracker: " + mUsingMultinetworkPolicyTracker) .add("mUsingIpReachabilityMonitor: " + mUsingIpReachabilityMonitor) .add("mRequestedPreDhcpActionMs: " + mRequestedPreDhcpActionMs) .add("mInitialConfig: " + mInitialConfig) @@ -559,7 +589,6 @@ public class IpClient extends StateMachine { private final NetlinkTracker mNetlinkTracker; private final WakeupMessage mProvisioningTimeoutAlarm; private final WakeupMessage mDhcpActionTimeoutAlarm; - private final MultinetworkPolicyTracker mMultinetworkPolicyTracker; private final SharedLog mLog; private final LocalLog mConnectivityPacketLog; private final MessageHandlingLogger mMsgStateLogger; @@ -573,6 +602,7 @@ public class IpClient extends StateMachine { */ private LinkProperties mLinkProperties; private ProvisioningConfiguration mConfiguration; + private MultinetworkPolicyTracker mMultinetworkPolicyTracker; private IpReachabilityMonitor mIpReachabilityMonitor; private DhcpClient mDhcpClient; private DhcpResults mDhcpResults; @@ -685,9 +715,6 @@ public class IpClient extends StateMachine { mLinkProperties = new LinkProperties(); mLinkProperties.setInterfaceName(mInterfaceName); - mMultinetworkPolicyTracker = new MultinetworkPolicyTracker(mContext, getHandler(), - () -> { mLog.log("OBSERVED AvoidBadWifi changed"); }); - mProvisioningTimeoutAlarm = new WakeupMessage(mContext, getHandler(), mTag + ".EVENT_PROVISIONING_TIMEOUT", EVENT_PROVISIONING_TIMEOUT); mDhcpActionTimeoutAlarm = new WakeupMessage(mContext, getHandler(), @@ -719,8 +746,6 @@ public class IpClient extends StateMachine { } catch (RemoteException e) { logError("Couldn't register NetlinkTracker: %s", e); } - - mMultinetworkPolicyTracker.start(); } private void stopStateMachineUpdaters() { @@ -729,8 +754,6 @@ public class IpClient extends StateMachine { } catch (RemoteException e) { logError("Couldn't unregister NetlinkTracker: %s", e); } - - mMultinetworkPolicyTracker.shutdown(); } @Override @@ -1028,7 +1051,8 @@ public class IpClient extends StateMachine { // Note that we can still be disconnected by IpReachabilityMonitor // if the IPv6 default gateway (but not the IPv6 DNS servers; see // accompanying code in IpReachabilityMonitor) is unreachable. - final boolean ignoreIPv6ProvisioningLoss = !mMultinetworkPolicyTracker.getAvoidBadWifi(); + final boolean ignoreIPv6ProvisioningLoss = (mMultinetworkPolicyTracker != null) + && !mMultinetworkPolicyTracker.getAvoidBadWifi(); // Additionally: // @@ -1520,6 +1544,13 @@ public class IpClient extends StateMachine { return; } + if (mConfiguration.mUsingMultinetworkPolicyTracker) { + mMultinetworkPolicyTracker = new MultinetworkPolicyTracker( + mContext, getHandler(), + () -> { mLog.log("OBSERVED AvoidBadWifi changed"); }); + mMultinetworkPolicyTracker.start(); + } + if (mConfiguration.mUsingIpReachabilityMonitor && !startIpReachabilityMonitor()) { doImmediateProvisioningFailure( IpManagerEvent.ERROR_STARTING_IPREACHABILITYMONITOR); @@ -1537,6 +1568,11 @@ public class IpClient extends StateMachine { mIpReachabilityMonitor = null; } + if (mMultinetworkPolicyTracker != null) { + mMultinetworkPolicyTracker.shutdown(); + mMultinetworkPolicyTracker = null; + } + if (mDhcpClient != null) { mDhcpClient.sendMessage(DhcpClient.CMD_STOP_DHCP); mDhcpClient.doQuit(); diff --git a/services/net/java/android/net/ip/IpManager.java b/services/net/java/android/net/ip/IpManager.java index 508a43d022f41..2eb36a22de551 100644 --- a/services/net/java/android/net/ip/IpManager.java +++ b/services/net/java/android/net/ip/IpManager.java @@ -114,35 +114,6 @@ public class IpManager extends IpClient { public static class Callback extends IpClient.Callback { } - public static class WaitForProvisioningCallback extends Callback { - private LinkProperties mCallbackLinkProperties; - - public LinkProperties waitForProvisioning() { - synchronized (this) { - try { - wait(); - } catch (InterruptedException e) {} - return mCallbackLinkProperties; - } - } - - @Override - public void onProvisioningSuccess(LinkProperties newLp) { - synchronized (this) { - mCallbackLinkProperties = newLp; - notify(); - } - } - - @Override - public void onProvisioningFailure(LinkProperties newLp) { - synchronized (this) { - mCallbackLinkProperties = null; - notify(); - } - } - } - public IpManager(Context context, String ifName, Callback callback) { super(context, ifName, callback); } diff --git a/tests/net/java/android/net/apf/ApfTest.java b/tests/net/java/android/net/apf/ApfTest.java index fef702ecb8884..9364ec8489cd8 100644 --- a/tests/net/java/android/net/apf/ApfTest.java +++ b/tests/net/java/android/net/apf/ApfTest.java @@ -34,7 +34,7 @@ import android.net.NetworkUtils; import android.net.apf.ApfFilter.ApfConfiguration; import android.net.apf.ApfGenerator.IllegalInstructionException; import android.net.apf.ApfGenerator.Register; -import android.net.ip.IpManager; +import android.net.ip.IpClient; import android.net.metrics.IpConnectivityLog; import android.net.metrics.RaEvent; import android.net.util.InterfaceParams; @@ -606,7 +606,7 @@ public class ApfTest { } } - private class MockIpManagerCallback extends IpManager.Callback { + private class MockIpClientCallback extends IpClient.Callback { private final ConditionVariable mGotApfProgram = new ConditionVariable(); private byte[] mLastApfProgram; @@ -637,8 +637,8 @@ public class ApfTest { private final long mFixedTimeMs = SystemClock.elapsedRealtime(); public TestApfFilter(Context context, ApfConfiguration config, - IpManager.Callback ipManagerCallback, IpConnectivityLog log) throws Exception { - super(context, config, InterfaceParams.getByName("lo"), ipManagerCallback, log); + IpClient.Callback ipClientCallback, IpConnectivityLog log) throws Exception { + super(context, config, InterfaceParams.getByName("lo"), ipClientCallback, log); } // Pretend an RA packet has been received and show it to ApfFilter. @@ -761,29 +761,29 @@ public class ApfTest { private static final byte[] IPV4_ANY_HOST_ADDR = {0, 0, 0, 0}; // Helper to initialize a default apfFilter. - private ApfFilter setupApfFilter(IpManager.Callback ipManagerCallback, ApfConfiguration config) + private ApfFilter setupApfFilter(IpClient.Callback ipClientCallback, ApfConfiguration config) throws Exception { LinkAddress link = new LinkAddress(InetAddress.getByAddress(MOCK_IPV4_ADDR), 19); LinkProperties lp = new LinkProperties(); lp.addLinkAddress(link); - TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipManagerCallback, mLog); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); apfFilter.setLinkProperties(lp); return apfFilter; } @Test public void testApfFilterIPv4() throws Exception { - MockIpManagerCallback ipManagerCallback = new MockIpManagerCallback(); + MockIpClientCallback ipClientCallback = new MockIpClientCallback(); LinkAddress link = new LinkAddress(InetAddress.getByAddress(MOCK_IPV4_ADDR), 19); LinkProperties lp = new LinkProperties(); lp.addLinkAddress(link); ApfConfiguration config = getDefaultConfig(); config.multicastFilter = DROP_MULTICAST; - TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipManagerCallback, mLog); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); apfFilter.setLinkProperties(lp); - byte[] program = ipManagerCallback.getApfProgram(); + byte[] program = ipClientCallback.getApfProgram(); // Verify empty packet of 100 zero bytes is passed ByteBuffer packet = ByteBuffer.wrap(new byte[100]); @@ -830,10 +830,10 @@ public class ApfTest { @Test public void testApfFilterIPv6() throws Exception { - MockIpManagerCallback ipManagerCallback = new MockIpManagerCallback(); + MockIpClientCallback ipClientCallback = new MockIpClientCallback(); ApfConfiguration config = getDefaultConfig(); - TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipManagerCallback, mLog); - byte[] program = ipManagerCallback.getApfProgram(); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); + byte[] program = ipClientCallback.getApfProgram(); // Verify empty IPv6 packet is passed ByteBuffer packet = ByteBuffer.wrap(new byte[100]); @@ -868,17 +868,17 @@ public class ApfTest { final byte[] multicastIpv4Addr = {(byte)224,0,0,1}; final byte[] multicastIpv6Addr = {(byte)0xff,2,0,0,0,0,0,0,0,0,0,0,0,0,0,(byte)0xfb}; - MockIpManagerCallback ipManagerCallback = new MockIpManagerCallback(); + MockIpClientCallback ipClientCallback = new MockIpClientCallback(); LinkAddress link = new LinkAddress(InetAddress.getByAddress(unicastIpv4Addr), 24); LinkProperties lp = new LinkProperties(); lp.addLinkAddress(link); ApfConfiguration config = getDefaultConfig(); config.ieee802_3Filter = DROP_802_3_FRAMES; - TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipManagerCallback, mLog); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); apfFilter.setLinkProperties(lp); - byte[] program = ipManagerCallback.getApfProgram(); + byte[] program = ipClientCallback.getApfProgram(); // Construct IPv4 and IPv6 multicast packets. ByteBuffer mcastv4packet = ByteBuffer.wrap(new byte[100]); @@ -915,9 +915,9 @@ public class ApfTest { assertPass(program, bcastv4unicastl2packet.array()); // Turn on multicast filter and verify it works - ipManagerCallback.resetApfProgramWait(); + ipClientCallback.resetApfProgramWait(); apfFilter.setMulticastFilter(true); - program = ipManagerCallback.getApfProgram(); + program = ipClientCallback.getApfProgram(); assertDrop(program, mcastv4packet.array()); assertDrop(program, mcastv6packet.array()); assertDrop(program, bcastv4packet1.array()); @@ -925,9 +925,9 @@ public class ApfTest { assertDrop(program, bcastv4unicastl2packet.array()); // Turn off multicast filter and verify it's off - ipManagerCallback.resetApfProgramWait(); + ipClientCallback.resetApfProgramWait(); apfFilter.setMulticastFilter(false); - program = ipManagerCallback.getApfProgram(); + program = ipClientCallback.getApfProgram(); assertPass(program, mcastv4packet.array()); assertPass(program, mcastv6packet.array()); assertPass(program, bcastv4packet1.array()); @@ -935,13 +935,13 @@ public class ApfTest { assertPass(program, bcastv4unicastl2packet.array()); // Verify it can be initialized to on - ipManagerCallback.resetApfProgramWait(); + ipClientCallback.resetApfProgramWait(); apfFilter.shutdown(); config.multicastFilter = DROP_MULTICAST; config.ieee802_3Filter = DROP_802_3_FRAMES; - apfFilter = new TestApfFilter(mContext, config, ipManagerCallback, mLog); + apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); apfFilter.setLinkProperties(lp); - program = ipManagerCallback.getApfProgram(); + program = ipClientCallback.getApfProgram(); assertDrop(program, mcastv4packet.array()); assertDrop(program, mcastv6packet.array()); assertDrop(program, bcastv4packet1.array()); @@ -956,8 +956,8 @@ public class ApfTest { @Test public void testApfFilterMulticastPingWhileDozing() throws Exception { - MockIpManagerCallback ipManagerCallback = new MockIpManagerCallback(); - ApfFilter apfFilter = setupApfFilter(ipManagerCallback, getDefaultConfig()); + MockIpClientCallback ipClientCallback = new MockIpClientCallback(); + ApfFilter apfFilter = setupApfFilter(ipClientCallback, getDefaultConfig()); // Construct a multicast ICMPv6 ECHO request. final byte[] multicastIpv6Addr = {(byte)0xff,2,0,0,0,0,0,0,0,0,0,0,0,0,0,(byte)0xfb}; @@ -968,35 +968,35 @@ public class ApfTest { put(packet, IPV6_DEST_ADDR_OFFSET, multicastIpv6Addr); // Normally, we let multicast pings alone... - assertPass(ipManagerCallback.getApfProgram(), packet.array()); + assertPass(ipClientCallback.getApfProgram(), packet.array()); // ...and even while dozing... apfFilter.setDozeMode(true); - assertPass(ipManagerCallback.getApfProgram(), packet.array()); + assertPass(ipClientCallback.getApfProgram(), packet.array()); // ...but when the multicast filter is also enabled, drop the multicast pings to save power. apfFilter.setMulticastFilter(true); - assertDrop(ipManagerCallback.getApfProgram(), packet.array()); + assertDrop(ipClientCallback.getApfProgram(), packet.array()); // However, we should still let through all other ICMPv6 types. ByteBuffer raPacket = ByteBuffer.wrap(packet.array().clone()); raPacket.put(ICMP6_TYPE_OFFSET, (byte)ICMPV6_ROUTER_ADVERTISEMENT); - assertPass(ipManagerCallback.getApfProgram(), raPacket.array()); + assertPass(ipClientCallback.getApfProgram(), raPacket.array()); // Now wake up from doze mode to ensure that we no longer drop the packets. // (The multicast filter is still enabled at this point). apfFilter.setDozeMode(false); - assertPass(ipManagerCallback.getApfProgram(), packet.array()); + assertPass(ipClientCallback.getApfProgram(), packet.array()); apfFilter.shutdown(); } @Test public void testApfFilter802_3() throws Exception { - MockIpManagerCallback ipManagerCallback = new MockIpManagerCallback(); + MockIpClientCallback ipClientCallback = new MockIpClientCallback(); ApfConfiguration config = getDefaultConfig(); - ApfFilter apfFilter = setupApfFilter(ipManagerCallback, config); - byte[] program = ipManagerCallback.getApfProgram(); + ApfFilter apfFilter = setupApfFilter(ipClientCallback, config); + byte[] program = ipClientCallback.getApfProgram(); // Verify empty packet of 100 zero bytes is passed // Note that eth-type = 0 makes it an IEEE802.3 frame @@ -1012,11 +1012,11 @@ public class ApfTest { assertPass(program, packet.array()); // Now turn on the filter - ipManagerCallback.resetApfProgramWait(); + ipClientCallback.resetApfProgramWait(); apfFilter.shutdown(); config.ieee802_3Filter = DROP_802_3_FRAMES; - apfFilter = setupApfFilter(ipManagerCallback, config); - program = ipManagerCallback.getApfProgram(); + apfFilter = setupApfFilter(ipClientCallback, config); + program = ipClientCallback.getApfProgram(); // Verify that IEEE802.3 frame is dropped // In this case ethtype is used for payload length @@ -1040,10 +1040,10 @@ public class ApfTest { final int[] ipv4BlackList = {ETH_P_IP}; final int[] ipv4Ipv6BlackList = {ETH_P_IP, ETH_P_IPV6}; - MockIpManagerCallback ipManagerCallback = new MockIpManagerCallback(); + MockIpClientCallback ipClientCallback = new MockIpClientCallback(); ApfConfiguration config = getDefaultConfig(); - ApfFilter apfFilter = setupApfFilter(ipManagerCallback, config); - byte[] program = ipManagerCallback.getApfProgram(); + ApfFilter apfFilter = setupApfFilter(ipClientCallback, config); + byte[] program = ipClientCallback.getApfProgram(); // Verify empty packet of 100 zero bytes is passed // Note that eth-type = 0 makes it an IEEE802.3 frame @@ -1059,11 +1059,11 @@ public class ApfTest { assertPass(program, packet.array()); // Now add IPv4 to the black list - ipManagerCallback.resetApfProgramWait(); + ipClientCallback.resetApfProgramWait(); apfFilter.shutdown(); config.ethTypeBlackList = ipv4BlackList; - apfFilter = setupApfFilter(ipManagerCallback, config); - program = ipManagerCallback.getApfProgram(); + apfFilter = setupApfFilter(ipClientCallback, config); + program = ipClientCallback.getApfProgram(); // Verify that IPv4 frame will be dropped packet.putShort(ETH_ETHERTYPE_OFFSET, (short)ETH_P_IP); @@ -1074,11 +1074,11 @@ public class ApfTest { assertPass(program, packet.array()); // Now let us have both IPv4 and IPv6 in the black list - ipManagerCallback.resetApfProgramWait(); + ipClientCallback.resetApfProgramWait(); apfFilter.shutdown(); config.ethTypeBlackList = ipv4Ipv6BlackList; - apfFilter = setupApfFilter(ipManagerCallback, config); - program = ipManagerCallback.getApfProgram(); + apfFilter = setupApfFilter(ipClientCallback, config); + program = ipClientCallback.getApfProgram(); // Verify that IPv4 frame will be dropped packet.putShort(ETH_ETHERTYPE_OFFSET, (short)ETH_P_IP); @@ -1091,7 +1091,7 @@ public class ApfTest { apfFilter.shutdown(); } - private byte[] getProgram(MockIpManagerCallback cb, ApfFilter filter, LinkProperties lp) { + private byte[] getProgram(MockIpClientCallback cb, ApfFilter filter, LinkProperties lp) { cb.resetApfProgramWait(); filter.setLinkProperties(lp); return cb.getApfProgram(); @@ -1114,23 +1114,23 @@ public class ApfTest { @Test public void testApfFilterArp() throws Exception { - MockIpManagerCallback ipManagerCallback = new MockIpManagerCallback(); + MockIpClientCallback ipClientCallback = new MockIpClientCallback(); ApfConfiguration config = getDefaultConfig(); config.multicastFilter = DROP_MULTICAST; config.ieee802_3Filter = DROP_802_3_FRAMES; - TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipManagerCallback, mLog); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); // Verify initially ARP request filter is off, and GARP filter is on. - verifyArpFilter(ipManagerCallback.getApfProgram(), PASS); + verifyArpFilter(ipClientCallback.getApfProgram(), PASS); // Inform ApfFilter of our address and verify ARP filtering is on LinkAddress linkAddress = new LinkAddress(InetAddress.getByAddress(MOCK_IPV4_ADDR), 24); LinkProperties lp = new LinkProperties(); assertTrue(lp.addLinkAddress(linkAddress)); - verifyArpFilter(getProgram(ipManagerCallback, apfFilter, lp), DROP); + verifyArpFilter(getProgram(ipClientCallback, apfFilter, lp), DROP); // Inform ApfFilter of loss of IP and verify ARP filtering is off - verifyArpFilter(getProgram(ipManagerCallback, apfFilter, new LinkProperties()), PASS); + verifyArpFilter(getProgram(ipClientCallback, apfFilter, new LinkProperties()), PASS); apfFilter.shutdown(); } @@ -1161,7 +1161,7 @@ public class ApfTest { return packet.array(); } - // Verify that the last program pushed to the IpManager.Callback properly filters the + // Verify that the last program pushed to the IpClient.Callback properly filters the // given packet for the given lifetime. private void verifyRaLifetime(byte[] program, ByteBuffer packet, int lifetime) { final int FRACTION_OF_LIFETIME = 6; @@ -1191,12 +1191,12 @@ public class ApfTest { // Test that when ApfFilter is shown the given packet, it generates a program to filter it // for the given lifetime. - private void verifyRaLifetime(TestApfFilter apfFilter, MockIpManagerCallback ipManagerCallback, + private void verifyRaLifetime(TestApfFilter apfFilter, MockIpClientCallback ipClientCallback, ByteBuffer packet, int lifetime) throws IOException, ErrnoException { // Verify new program generated if ApfFilter witnesses RA - ipManagerCallback.resetApfProgramWait(); + ipClientCallback.resetApfProgramWait(); apfFilter.pretendPacketReceived(packet.array()); - byte[] program = ipManagerCallback.getApfProgram(); + byte[] program = ipClientCallback.getApfProgram(); verifyRaLifetime(program, packet, lifetime); } @@ -1229,21 +1229,21 @@ public class ApfTest { && (ev1.dnsslLifetime == ev2.dnsslLifetime); } - private void assertInvalidRa(TestApfFilter apfFilter, MockIpManagerCallback ipManagerCallback, + private void assertInvalidRa(TestApfFilter apfFilter, MockIpClientCallback ipClientCallback, ByteBuffer packet) throws IOException, ErrnoException { - ipManagerCallback.resetApfProgramWait(); + ipClientCallback.resetApfProgramWait(); apfFilter.pretendPacketReceived(packet.array()); - ipManagerCallback.assertNoProgramUpdate(); + ipClientCallback.assertNoProgramUpdate(); } @Test public void testApfFilterRa() throws Exception { - MockIpManagerCallback ipManagerCallback = new MockIpManagerCallback(); + MockIpClientCallback ipClientCallback = new MockIpClientCallback(); ApfConfiguration config = getDefaultConfig(); config.multicastFilter = DROP_MULTICAST; config.ieee802_3Filter = DROP_802_3_FRAMES; - TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipManagerCallback, mLog); - byte[] program = ipManagerCallback.getApfProgram(); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); + byte[] program = ipClientCallback.getApfProgram(); final int ROUTER_LIFETIME = 1000; final int PREFIX_VALID_LIFETIME = 200; @@ -1268,7 +1268,7 @@ public class ApfTest { basePacket.put(IPV6_ALL_NODES_ADDRESS); assertPass(program, basePacket.array()); - verifyRaLifetime(apfFilter, ipManagerCallback, basePacket, ROUTER_LIFETIME); + verifyRaLifetime(apfFilter, ipClientCallback, basePacket, ROUTER_LIFETIME); verifyRaEvent(new RaEvent(ROUTER_LIFETIME, -1, -1, -1, -1, -1)); ByteBuffer newFlowLabelPacket = ByteBuffer.wrap(new byte[ICMP6_RA_OPTION_OFFSET]); @@ -1286,7 +1286,7 @@ public class ApfTest { zeroLengthOptionPacket.put(basePacket); zeroLengthOptionPacket.put((byte)ICMP6_PREFIX_OPTION_TYPE); zeroLengthOptionPacket.put((byte)0); - assertInvalidRa(apfFilter, ipManagerCallback, zeroLengthOptionPacket); + assertInvalidRa(apfFilter, ipClientCallback, zeroLengthOptionPacket); // Generate several RAs with different options and lifetimes, and verify when // ApfFilter is shown these packets, it generates programs to filter them for the @@ -1304,7 +1304,7 @@ public class ApfTest { ICMP6_RA_OPTION_OFFSET + ICMP6_PREFIX_OPTION_VALID_LIFETIME_OFFSET, PREFIX_VALID_LIFETIME); verifyRaLifetime( - apfFilter, ipManagerCallback, prefixOptionPacket, PREFIX_PREFERRED_LIFETIME); + apfFilter, ipClientCallback, prefixOptionPacket, PREFIX_PREFERRED_LIFETIME); verifyRaEvent(new RaEvent( ROUTER_LIFETIME, PREFIX_VALID_LIFETIME, PREFIX_PREFERRED_LIFETIME, -1, -1, -1)); @@ -1316,7 +1316,7 @@ public class ApfTest { rdnssOptionPacket.put((byte)(ICMP6_4_BYTE_OPTION_LEN / 8)); rdnssOptionPacket.putInt( ICMP6_RA_OPTION_OFFSET + ICMP6_4_BYTE_LIFETIME_OFFSET, RDNSS_LIFETIME); - verifyRaLifetime(apfFilter, ipManagerCallback, rdnssOptionPacket, RDNSS_LIFETIME); + verifyRaLifetime(apfFilter, ipClientCallback, rdnssOptionPacket, RDNSS_LIFETIME); verifyRaEvent(new RaEvent(ROUTER_LIFETIME, -1, -1, -1, RDNSS_LIFETIME, -1)); ByteBuffer routeInfoOptionPacket = ByteBuffer.wrap( @@ -1327,7 +1327,7 @@ public class ApfTest { routeInfoOptionPacket.put((byte)(ICMP6_4_BYTE_OPTION_LEN / 8)); routeInfoOptionPacket.putInt( ICMP6_RA_OPTION_OFFSET + ICMP6_4_BYTE_LIFETIME_OFFSET, ROUTE_LIFETIME); - verifyRaLifetime(apfFilter, ipManagerCallback, routeInfoOptionPacket, ROUTE_LIFETIME); + verifyRaLifetime(apfFilter, ipClientCallback, routeInfoOptionPacket, ROUTE_LIFETIME); verifyRaEvent(new RaEvent(ROUTER_LIFETIME, -1, -1, ROUTE_LIFETIME, -1, -1)); ByteBuffer dnsslOptionPacket = ByteBuffer.wrap( @@ -1338,11 +1338,11 @@ public class ApfTest { dnsslOptionPacket.put((byte)(ICMP6_4_BYTE_OPTION_LEN / 8)); dnsslOptionPacket.putInt( ICMP6_RA_OPTION_OFFSET + ICMP6_4_BYTE_LIFETIME_OFFSET, DNSSL_LIFETIME); - verifyRaLifetime(apfFilter, ipManagerCallback, dnsslOptionPacket, ROUTER_LIFETIME); + verifyRaLifetime(apfFilter, ipClientCallback, dnsslOptionPacket, ROUTER_LIFETIME); verifyRaEvent(new RaEvent(ROUTER_LIFETIME, -1, -1, -1, -1, DNSSL_LIFETIME)); // Verify that current program filters all five RAs: - program = ipManagerCallback.getApfProgram(); + program = ipClientCallback.getApfProgram(); verifyRaLifetime(program, basePacket, ROUTER_LIFETIME); verifyRaLifetime(program, newFlowLabelPacket, ROUTER_LIFETIME); verifyRaLifetime(program, prefixOptionPacket, PREFIX_PREFERRED_LIFETIME); @@ -1384,7 +1384,7 @@ public class ApfTest { public void testRaParsing() throws Exception { final int maxRandomPacketSize = 512; final Random r = new Random(); - MockIpManagerCallback cb = new MockIpManagerCallback(); + MockIpClientCallback cb = new MockIpClientCallback(); ApfConfiguration config = getDefaultConfig(); config.multicastFilter = DROP_MULTICAST; config.ieee802_3Filter = DROP_802_3_FRAMES; @@ -1405,7 +1405,7 @@ public class ApfTest { public void testRaProcessing() throws Exception { final int maxRandomPacketSize = 512; final Random r = new Random(); - MockIpManagerCallback cb = new MockIpManagerCallback(); + MockIpClientCallback cb = new MockIpClientCallback(); ApfConfiguration config = getDefaultConfig(); config.multicastFilter = DROP_MULTICAST; config.ieee802_3Filter = DROP_802_3_FRAMES;