Snap for 10749022 from 2679759d6768b2e2315ae512f9bbddc655841f32 to mainline-uwb-release Change-Id: I7f21eda3c905842a4f7de95a27c0ba14da963a7a
diff --git a/src/android/net/apf/ApfFilter.java b/src/android/net/apf/ApfFilter.java index 5c8ff49..4ab6ade 100644 --- a/src/android/net/apf/ApfFilter.java +++ b/src/android/net/apf/ApfFilter.java
@@ -17,7 +17,6 @@ package android.net.apf; import static android.net.util.SocketUtils.makePacketSocketAddress; -import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY; import static android.system.OsConstants.AF_PACKET; import static android.system.OsConstants.ARPHRD_ETHER; import static android.system.OsConstants.ETH_P_ARP; @@ -34,7 +33,6 @@ import static com.android.net.module.util.NetworkStackConstants.ICMPV6_ROUTER_ADVERTISEMENT; import static com.android.net.module.util.NetworkStackConstants.ICMPV6_ROUTER_SOLICITATION; import static com.android.net.module.util.NetworkStackConstants.IPV6_ADDR_LEN; -import static com.android.networkstack.util.NetworkStackUtils.APF_USE_RA_LIFETIME_CALCULATION_FIX_VERSION; import android.content.BroadcastReceiver; import android.content.Context; @@ -67,7 +65,6 @@ import com.android.internal.util.IndentingPrintWriter; import com.android.net.module.util.CollectionUtils; import com.android.net.module.util.ConnectivityUtils; -import com.android.net.module.util.DeviceConfigUtils; import com.android.net.module.util.InterfaceParams; import com.android.net.module.util.SocketUtils; import com.android.networkstack.util.NetworkStackUtils; @@ -390,9 +387,6 @@ // Ignore non-zero RDNSS lifetimes below this value. private final int mMinRdnssLifetimeSec; - // Flag to use the RA lifetime calculation fix in aosp/2276160. - private final boolean mUseLifetimeCalculationFix; - // Detects doze mode state transitions. private final BroadcastReceiver mDeviceIdleReceiver = new BroadcastReceiver() { @Override @@ -415,37 +409,15 @@ @GuardedBy("this") private int mIPv4PrefixLength; - /** - * Dependencies for the ApfFilter. Useful to be mocked in tests. - */ - public static class Dependencies { - /** - * Return whether a feature guarded by a feature flag is enabled. - * @see NetworkStackUtils#isFeatureEnabled(Context, String, String) - */ - public boolean isFeatureEnabled(final Context context, final String name, - boolean defaultEnabled) { - return DeviceConfigUtils.isFeatureEnabled(context, NAMESPACE_CONNECTIVITY, name, - defaultEnabled); - } - } - - public ApfFilter(Context context, ApfConfiguration config, InterfaceParams ifParams, - IpClientCallbacksWrapper ipClientCallback, IpConnectivityLog log) { - this(context, config, ifParams, ipClientCallback, log, new Dependencies()); - } - @VisibleForTesting public ApfFilter(Context context, ApfConfiguration config, InterfaceParams ifParams, - IpClientCallbacksWrapper ipClientCallback, IpConnectivityLog log, Dependencies deps) { + IpClientCallbacksWrapper ipClientCallback, IpConnectivityLog log) { mApfCapabilities = config.apfCapabilities; mIpClientCallback = ipClientCallback; mInterfaceParams = ifParams; mMulticastFilter = config.multicastFilter; mDrop802_3Frames = config.ieee802_3Filter; mMinRdnssLifetimeSec = config.minRdnssLifetimeSec; - mUseLifetimeCalculationFix = deps.isFeatureEnabled(context, - APF_USE_RA_LIFETIME_CALCULATION_FIX_VERSION, true /* defaultEnabled */); mContext = context; if (mApfCapabilities.hasDataAccess()) { @@ -956,17 +928,8 @@ // Filter for a fraction of the lifetime and adjust for the age of the RA. @GuardedBy("ApfFilter.this") int filterLifetime() { - // Use a flag from device config to toggle on/off the use of lifetime calculation fix - // in aosp/2276160. The old buggy behavior drops more RAs in some circumstances which - // probably use less battery. We can change it immediately if any OEM complains about - // additional battery usage after the fix. - if (mUseLifetimeCalculationFix) { - return (int) (mMinLifetime / FRACTION_OF_LIFETIME_TO_FILTER) - - (int) (mProgramBaseTime - mLastSeen); - } else { - // The old buggy formula, always filter a fraction of the remaining lifetime. - return (int) (currentLifetime() / FRACTION_OF_LIFETIME_TO_FILTER); - } + return (int) (mMinLifetime / FRACTION_OF_LIFETIME_TO_FILTER) + - (int) (mProgramBaseTime - mLastSeen); } @GuardedBy("ApfFilter.this")
diff --git a/src/com/android/networkstack/util/NetworkStackUtils.java b/src/com/android/networkstack/util/NetworkStackUtils.java index fe60cdd..8f775eb 100755 --- a/src/com/android/networkstack/util/NetworkStackUtils.java +++ b/src/com/android/networkstack/util/NetworkStackUtils.java
@@ -269,13 +269,6 @@ "ip_reachability_ignore_incompleted_ipv6_default_router_version"; /** - * Experiment flag to use the RA lifetime calculation fix in aosp/2276160. It can be disabled - * if OEM finds additional battery usage and want to use the old buggy behavior again. - */ - public static final String APF_USE_RA_LIFETIME_CALCULATION_FIX_VERSION = - "apf_use_ra_lifetime_calculation_fix_version"; - - /** * Experiment flag to enable DHCPv6 Prefix Delegation(RFC8415) in IpClient. */ public static final String IPCLIENT_DHCPV6_PREFIX_DELEGATION_VERSION =
diff --git a/tests/unit/src/android/net/apf/ApfTest.java b/tests/unit/src/android/net/apf/ApfTest.java index f1719c3..e728bfe 100644 --- a/tests/unit/src/android/net/apf/ApfTest.java +++ b/tests/unit/src/android/net/apf/ApfTest.java
@@ -31,18 +31,14 @@ import static com.android.net.module.util.NetworkStackConstants.ICMPV6_ECHO_REQUEST_TYPE; import static com.android.net.module.util.NetworkStackConstants.IPV6_ADDR_LEN; -import static com.android.networkstack.util.NetworkStackUtils.APF_USE_RA_LIFETIME_CALCULATION_FIX_VERSION; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import static org.mockito.Mockito.anyBoolean; import static org.mockito.Mockito.atLeastOnce; -import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; import android.content.Context; import android.net.InetAddresses; @@ -123,14 +119,11 @@ private static final int MIN_APF_VERSION = 2; @Mock IpConnectivityLog mLog; - @Mock ApfFilter.Dependencies mDependencies; @Mock Context mContext; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); - when(mDependencies.isFeatureEnabled(eq(mContext), - eq(APF_USE_RA_LIFETIME_CALCULATION_FIX_VERSION), anyBoolean())).thenReturn(true); // Load up native shared library containing APF interpreter exposed via JNI. System.loadLibrary("networkstacktestsjni"); } @@ -951,8 +944,7 @@ config.apfCapabilities = MOCK_APF_PCAP_CAPABILITIES; config.multicastFilter = DROP_MULTICAST; config.ieee802_3Filter = DROP_802_3_FRAMES; - TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog, - mDependencies); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); apfFilter.setLinkProperties(lp); byte[] program = ipClientCallback.getApfProgram(); byte[] data = new byte[ApfFilter.Counter.totalSize()]; @@ -1001,9 +993,8 @@ private long mCurrentTimeMs = SystemClock.elapsedRealtime(); public TestApfFilter(Context context, ApfConfiguration config, - IpClientCallbacksWrapper ipClientCallback, IpConnectivityLog log, - ApfFilter.Dependencies deps) throws Exception { - super(context, config, InterfaceParams.getByName("lo"), ipClientCallback, log, deps); + IpClientCallbacksWrapper 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. @@ -1184,8 +1175,7 @@ LinkAddress link = new LinkAddress(InetAddress.getByAddress(MOCK_IPV4_ADDR), 19); LinkProperties lp = new LinkProperties(); lp.addLinkAddress(link); - TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog, - mDependencies); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); apfFilter.setLinkProperties(lp); return apfFilter; } @@ -1223,8 +1213,7 @@ ApfConfiguration config = getDefaultConfig(); config.multicastFilter = DROP_MULTICAST; - TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog, - mDependencies); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); apfFilter.setLinkProperties(lp); byte[] program = ipClientCallback.getApfProgram(); @@ -1276,8 +1265,7 @@ public void testApfFilterIPv6() throws Exception { MockIpClientCallback ipClientCallback = new MockIpClientCallback(); ApfConfiguration config = getDefaultConfig(); - TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog, - mDependencies); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); byte[] program = ipClientCallback.getApfProgram(); // Verify empty IPv6 packet is passed @@ -1532,8 +1520,7 @@ lp.addLinkAddress(link); ApfConfiguration config = getDefaultConfig(); - TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog, - mDependencies); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); apfFilter.setLinkProperties(lp); // Construct IPv4 mDNS packet @@ -1770,8 +1757,7 @@ ApfConfiguration config = getDefaultConfig(); config.ieee802_3Filter = DROP_802_3_FRAMES; - TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog, - mDependencies); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); apfFilter.setLinkProperties(lp); byte[] program = ipClientCallback.getApfProgram(); @@ -1832,7 +1818,7 @@ apfFilter.shutdown(); config.multicastFilter = DROP_MULTICAST; config.ieee802_3Filter = DROP_802_3_FRAMES; - apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog, mDependencies); + apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); apfFilter.setLinkProperties(lp); program = ipClientCallback.getApfProgram(); assertDrop(program, mcastv4packet.array()); @@ -2017,8 +2003,7 @@ ApfConfiguration config = getDefaultConfig(); config.multicastFilter = DROP_MULTICAST; config.ieee802_3Filter = DROP_802_3_FRAMES; - TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog, - mDependencies); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); // Verify initially ARP request filter is off, and GARP filter is on. verifyArpFilter(ipClientCallback.getApfProgram(), PASS); @@ -2078,8 +2063,7 @@ final ApfConfiguration config = getDefaultConfig(); config.multicastFilter = DROP_MULTICAST; config.ieee802_3Filter = DROP_802_3_FRAMES; - final TestApfFilter apfFilter = new TestApfFilter(mContext, config, cb, mLog, - mDependencies); + final TestApfFilter apfFilter = new TestApfFilter(mContext, config, cb, mLog); byte[] program; final int srcPort = 12345; final int dstPort = 54321; @@ -2272,8 +2256,7 @@ final ApfConfiguration config = getDefaultConfig(); config.multicastFilter = DROP_MULTICAST; config.ieee802_3Filter = DROP_802_3_FRAMES; - final TestApfFilter apfFilter = new TestApfFilter(mContext, config, cb, mLog, - mDependencies); + final TestApfFilter apfFilter = new TestApfFilter(mContext, config, cb, mLog); byte[] program; final int srcPort = 1024; final int dstPort = 4500; @@ -2434,7 +2417,7 @@ public void testRaToString() throws Exception { MockIpClientCallback cb = new MockIpClientCallback(); ApfConfiguration config = getDefaultConfig(); - TestApfFilter apfFilter = new TestApfFilter(mContext, config, cb, mLog, mDependencies); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, cb, mLog); byte[] packet = buildLargeRa(); ApfFilter.Ra ra = apfFilter.new Ra(packet, packet.length); @@ -2555,8 +2538,7 @@ ApfConfiguration config = getDefaultConfig(); config.multicastFilter = DROP_MULTICAST; config.ieee802_3Filter = DROP_802_3_FRAMES; - TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog, - mDependencies); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); byte[] program = ipClientCallback.getApfProgram(); final int ROUTER_LIFETIME = 1000; @@ -2680,8 +2662,7 @@ final ApfConfiguration config = getDefaultConfig(); config.multicastFilter = DROP_MULTICAST; config.ieee802_3Filter = DROP_802_3_FRAMES; - final TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog, - mDependencies); + final TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); byte[] program = ipClientCallback.getApfProgram(); final int RA_REACHABLE_TIME = 1800; final int RA_RETRANSMISSION_TIMER = 1234; @@ -2723,8 +2704,7 @@ final ApfConfiguration config = getDefaultConfig(); config.multicastFilter = DROP_MULTICAST; config.ieee802_3Filter = DROP_802_3_FRAMES; - final TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog, - mDependencies); + final TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog); byte[] program = ipClientCallback.getApfProgram(); final int routerLifetime = 1000; @@ -2758,42 +2738,6 @@ apfFilter.shutdown(); } - // The ByteBuffer is always created by ByteBuffer#wrap in the helper functions - @SuppressWarnings("ByteBufferBackingArray") - @Test - public void testRaWithoutLifetimeCalculationFix() throws Exception { - final MockIpClientCallback ipClientCallback = new MockIpClientCallback(); - final ApfConfiguration config = getDefaultConfig(); - config.multicastFilter = DROP_MULTICAST; - config.ieee802_3Filter = DROP_802_3_FRAMES; - // Disable the RA lifetime calculation fix in aosp/2276160 - when(mDependencies.isFeatureEnabled(eq(mContext), - eq(APF_USE_RA_LIFETIME_CALCULATION_FIX_VERSION), anyBoolean())).thenReturn(false); - final TestApfFilter apfFilter = new TestApfFilter(mContext, config, ipClientCallback, mLog, - mDependencies); - byte[] program = ipClientCallback.getApfProgram(); - - final int routerLifetime = 1000; - final int timePassedSeconds = 12; - - // Verify that when the program is generated and installed without the RA lifetime - // calculation fix, it should be installed with the old buggy behavior. - ByteBuffer basePacket = makeBaseRaPacket(); - verifyRaLifetime(apfFilter, ipClientCallback, basePacket, routerLifetime); - apfFilter.increaseCurrentTimeSeconds(timePassedSeconds); - synchronized (apfFilter) { - apfFilter.installNewProgramLocked(); - } - program = ipClientCallback.getApfProgram(); - final int ageLimit = (routerLifetime - timePassedSeconds) / 6; - assertDrop(program, basePacket.array()); - assertDrop(program, basePacket.array(), ageLimit); - assertPass(program, basePacket.array(), ageLimit + 1); - assertPass(program, basePacket.array(), routerLifetime); - - apfFilter.shutdown(); - } - /** * Stage a file for testing, i.e. make it native accessible. Given a resource ID, * copy that resource into the app's data directory and return the path to it. @@ -2829,7 +2773,7 @@ ApfConfiguration config = getDefaultConfig(); config.multicastFilter = DROP_MULTICAST; config.ieee802_3Filter = DROP_802_3_FRAMES; - TestApfFilter apfFilter = new TestApfFilter(mContext, config, cb, mLog, mDependencies); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, cb, mLog); for (int i = 0; i < 1000; i++) { byte[] packet = new byte[r.nextInt(maxRandomPacketSize + 1)]; r.nextBytes(packet); @@ -2850,7 +2794,7 @@ ApfConfiguration config = getDefaultConfig(); config.multicastFilter = DROP_MULTICAST; config.ieee802_3Filter = DROP_802_3_FRAMES; - TestApfFilter apfFilter = new TestApfFilter(mContext, config, cb, mLog, mDependencies); + TestApfFilter apfFilter = new TestApfFilter(mContext, config, cb, mLog); for (int i = 0; i < 1000; i++) { byte[] packet = new byte[r.nextInt(maxRandomPacketSize + 1)]; r.nextBytes(packet);