summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apishim/29/com/android/networkstack/apishim/api29/NetworkInformationShimImpl.java6
-rw-r--r--apishim/30/com/android/networkstack/apishim/NetworkInformationShimImpl.java6
-rw-r--r--apishim/common/com/android/networkstack/apishim/NetworkInformationShim.java6
-rw-r--r--common/moduleutils/src/android/net/util/InterfaceParams.java4
-rw-r--r--src/android/net/ip/IpClient.java24
-rw-r--r--src/com/android/server/connectivity/NetworkMonitor.java2
-rw-r--r--tests/integration/src/android/net/ip/IpClientIntegrationTest.java19
-rw-r--r--tests/lib/src/com/android/testutils/NetworkStatsUtils.kt29
-rw-r--r--tests/unit/src/android/net/apf/ApfTest.java4
-rw-r--r--tests/unit/src/android/net/util/InterfaceParamsTest.java2
-rw-r--r--tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java2
11 files changed, 88 insertions, 16 deletions
diff --git a/apishim/29/com/android/networkstack/apishim/api29/NetworkInformationShimImpl.java b/apishim/29/com/android/networkstack/apishim/api29/NetworkInformationShimImpl.java
index ca96eeb..b24b473 100644
--- a/apishim/29/com/android/networkstack/apishim/api29/NetworkInformationShimImpl.java
+++ b/apishim/29/com/android/networkstack/apishim/api29/NetworkInformationShimImpl.java
@@ -78,4 +78,10 @@ public class NetworkInformationShimImpl implements NetworkInformationShim {
// Not supported on this API level
return null;
}
+
+ @NonNull
+ @Override
+ public LinkProperties makeSensitiveFieldsParcelingCopy(@NonNull final LinkProperties lp) {
+ return new LinkProperties(lp);
+ }
}
diff --git a/apishim/30/com/android/networkstack/apishim/NetworkInformationShimImpl.java b/apishim/30/com/android/networkstack/apishim/NetworkInformationShimImpl.java
index 496a5fd..6466662 100644
--- a/apishim/30/com/android/networkstack/apishim/NetworkInformationShimImpl.java
+++ b/apishim/30/com/android/networkstack/apishim/NetworkInformationShimImpl.java
@@ -75,4 +75,10 @@ public class NetworkInformationShimImpl extends
if (nc == null) return null;
return nc.getSSID();
}
+
+ @NonNull
+ @Override
+ public LinkProperties makeSensitiveFieldsParcelingCopy(@NonNull final LinkProperties lp) {
+ return lp.makeSensitiveFieldsParcelingCopy();
+ }
}
diff --git a/apishim/common/com/android/networkstack/apishim/NetworkInformationShim.java b/apishim/common/com/android/networkstack/apishim/NetworkInformationShim.java
index 9170785..c266043 100644
--- a/apishim/common/com/android/networkstack/apishim/NetworkInformationShim.java
+++ b/apishim/common/com/android/networkstack/apishim/NetworkInformationShim.java
@@ -50,4 +50,10 @@ public interface NetworkInformationShim {
*/
@Nullable
String getSSID(@Nullable NetworkCapabilities nc);
+
+ /**
+ * @see LinkProperties#makeSensitiveFieldsParcelingCopy()
+ */
+ @NonNull
+ LinkProperties makeSensitiveFieldsParcelingCopy(@NonNull LinkProperties lp);
}
diff --git a/common/moduleutils/src/android/net/util/InterfaceParams.java b/common/moduleutils/src/android/net/util/InterfaceParams.java
index 3ba02b5..7e05a8d 100644
--- a/common/moduleutils/src/android/net/util/InterfaceParams.java
+++ b/common/moduleutils/src/android/net/util/InterfaceParams.java
@@ -38,6 +38,7 @@ import java.net.SocketException;
public class InterfaceParams {
public final String name;
public final int index;
+ public final boolean hasMacAddress;
public final MacAddress macAddr;
public final int defaultMtu;
@@ -69,7 +70,8 @@ public class InterfaceParams {
checkArgument((index > 0), "invalid interface index");
this.name = name;
this.index = index;
- this.macAddr = (macAddr != null) ? macAddr : MacAddress.fromBytes(new byte[] {
+ this.hasMacAddress = (macAddr != null);
+ this.macAddr = hasMacAddress ? macAddr : MacAddress.fromBytes(new byte[] {
0x02, 0x00, 0x00, 0x00, 0x00, 0x00 });
this.defaultMtu = (defaultMtu > IPV6_MIN_MTU) ? defaultMtu : IPV6_MIN_MTU;
}
diff --git a/src/android/net/ip/IpClient.java b/src/android/net/ip/IpClient.java
index dcd1827..47f955a 100644
--- a/src/android/net/ip/IpClient.java
+++ b/src/android/net/ip/IpClient.java
@@ -69,6 +69,8 @@ import com.android.internal.util.Preconditions;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
import com.android.internal.util.WakeupMessage;
+import com.android.networkstack.apishim.NetworkInformationShim;
+import com.android.networkstack.apishim.NetworkInformationShimImpl;
import com.android.networkstack.apishim.ShimUtils;
import com.android.server.NetworkObserverRegistry;
import com.android.server.NetworkStackService.NetworkStackServiceManager;
@@ -112,6 +114,7 @@ public class IpClient extends StateMachine {
private static final ConcurrentHashMap<String, SharedLog> sSmLogs = new ConcurrentHashMap<>();
private static final ConcurrentHashMap<String, LocalLog> sPktLogs = new ConcurrentHashMap<>();
private final NetworkStackIpMemoryStore mIpMemoryStore;
+ private final NetworkInformationShim mShim = NetworkInformationShimImpl.newInstance();
/**
* Dump all state machine and connectivity packet logs to the specified writer.
@@ -165,11 +168,15 @@ public class IpClient extends StateMachine {
private static final String PREFIX = "INVOKE ";
private final IIpClientCallbacks mCallback;
private final SharedLog mLog;
+ @NonNull
+ private final NetworkInformationShim mShim;
@VisibleForTesting
- protected IpClientCallbacksWrapper(IIpClientCallbacks callback, SharedLog log) {
+ protected IpClientCallbacksWrapper(IIpClientCallbacks callback, SharedLog log,
+ @NonNull NetworkInformationShim shim) {
mCallback = callback;
mLog = log;
+ mShim = shim;
}
private void log(String msg) {
@@ -224,7 +231,7 @@ public class IpClient extends StateMachine {
public void onProvisioningSuccess(LinkProperties newLp) {
log("onProvisioningSuccess({" + newLp + "})");
try {
- mCallback.onProvisioningSuccess(newLp);
+ mCallback.onProvisioningSuccess(mShim.makeSensitiveFieldsParcelingCopy(newLp));
} catch (RemoteException e) {
log("Failed to call onProvisioningSuccess", e);
}
@@ -236,7 +243,7 @@ public class IpClient extends StateMachine {
public void onProvisioningFailure(LinkProperties newLp) {
log("onProvisioningFailure({" + newLp + "})");
try {
- mCallback.onProvisioningFailure(newLp);
+ mCallback.onProvisioningFailure(mShim.makeSensitiveFieldsParcelingCopy(newLp));
} catch (RemoteException e) {
log("Failed to call onProvisioningFailure", e);
}
@@ -248,7 +255,7 @@ public class IpClient extends StateMachine {
public void onLinkPropertiesChange(LinkProperties newLp) {
log("onLinkPropertiesChange({" + newLp + "})");
try {
- mCallback.onLinkPropertiesChange(newLp);
+ mCallback.onLinkPropertiesChange(mShim.makeSensitiveFieldsParcelingCopy(newLp));
} catch (RemoteException e) {
log("Failed to call onLinkPropertiesChange", e);
}
@@ -530,7 +537,7 @@ public class IpClient extends StateMachine {
sPktLogs.putIfAbsent(mInterfaceName, new LocalLog(MAX_PACKET_RECORDS));
mConnectivityPacketLog = sPktLogs.get(mInterfaceName);
mMsgStateLogger = new MessageHandlingLogger();
- mCallback = new IpClientCallbacksWrapper(callback, mLog);
+ mCallback = new IpClientCallbacksWrapper(callback, mLog, mShim);
// TODO: Consider creating, constructing, and passing in some kind of
// InterfaceController.Dependencies class.
@@ -1302,7 +1309,7 @@ public class IpClient extends StateMachine {
private void doImmediateProvisioningFailure(int failureType) {
logError("onProvisioningFailure(): %s", failureType);
recordMetric(failureType);
- mCallback.onProvisioningFailure(new LinkProperties(mLinkProperties));
+ mCallback.onProvisioningFailure(mLinkProperties);
}
private boolean startIPv4() {
@@ -1423,7 +1430,7 @@ public class IpClient extends StateMachine {
if (mStartTimeMillis > 0) {
// Completed a life-cycle; send a final empty LinkProperties
// (cleared in resetLinkProperties() above) and record an event.
- mCallback.onLinkPropertiesChange(new LinkProperties(mLinkProperties));
+ mCallback.onLinkPropertiesChange(mLinkProperties);
recordMetric(IpManagerEvent.COMPLETE_LIFECYCLE);
mStartTimeMillis = 0;
}
@@ -1898,8 +1905,7 @@ public class IpClient extends StateMachine {
mDhcpClient.sendMessage(DhcpClient.EVENT_LINKADDRESS_CONFIGURED);
} else {
logError("Failed to set IPv4 address.");
- dispatchCallback(PROV_CHANGE_LOST_PROVISIONING,
- new LinkProperties(mLinkProperties));
+ dispatchCallback(PROV_CHANGE_LOST_PROVISIONING, mLinkProperties);
transitionTo(mStoppingState);
}
break;
diff --git a/src/com/android/server/connectivity/NetworkMonitor.java b/src/com/android/server/connectivity/NetworkMonitor.java
index 484f67e..e914a55 100644
--- a/src/com/android/server/connectivity/NetworkMonitor.java
+++ b/src/com/android/server/connectivity/NetworkMonitor.java
@@ -617,7 +617,7 @@ public class NetworkMonitor extends StateMachine {
private void notifyNetworkTested(
int result, @Nullable String redirectUrl, PersistableBundle extras) {
try {
- if (mCallbackVersion <= 5) {
+ if (mCallbackVersion <= 4) {
mCallback.notifyNetworkTested(result, redirectUrl);
} else {
mCallback.notifyNetworkTestedWithExtras(
diff --git a/tests/integration/src/android/net/ip/IpClientIntegrationTest.java b/tests/integration/src/android/net/ip/IpClientIntegrationTest.java
index 4bbee9a..a6543bc 100644
--- a/tests/integration/src/android/net/ip/IpClientIntegrationTest.java
+++ b/tests/integration/src/android/net/ip/IpClientIntegrationTest.java
@@ -52,6 +52,7 @@ import static junit.framework.Assert.fail;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
@@ -920,6 +921,24 @@ public class IpClientIntegrationTest {
}
@Test
+ public void testInterfaceParams() throws Exception {
+ InterfaceParams params = InterfaceParams.getByName(mIfaceName);
+ assertNotNull(params);
+ assertEquals(mIfaceName, params.name);
+ assertTrue(params.index > 0);
+ assertNotNull(params.macAddr);
+ assertTrue(params.hasMacAddress);
+
+ // Sanity check.
+ params = InterfaceParams.getByName("lo");
+ assertNotNull(params);
+ assertEquals("lo", params.name);
+ assertTrue(params.index > 0);
+ assertNotNull(params.macAddr);
+ assertFalse(params.hasMacAddress);
+ }
+
+ @Test
public void testDhcpInit() throws Exception {
startIpClientProvisioning(false /* isDhcpLeaseCacheEnabled */,
false /* shouldReplyRapidCommitAck */, false /* isPreconnectionEnabled */,
diff --git a/tests/lib/src/com/android/testutils/NetworkStatsUtils.kt b/tests/lib/src/com/android/testutils/NetworkStatsUtils.kt
index c82011c..51e9e4d 100644
--- a/tests/lib/src/com/android/testutils/NetworkStatsUtils.kt
+++ b/tests/lib/src/com/android/testutils/NetworkStatsUtils.kt
@@ -17,14 +17,19 @@
package com.android.testutils
import android.net.NetworkStats
+import kotlin.test.assertTrue
+@JvmOverloads
fun orderInsensitiveEquals(
leftStats: NetworkStats,
- rightStats: NetworkStats
+ rightStats: NetworkStats,
+ compareTime: Boolean = false
): Boolean {
if (leftStats == rightStats) return true
- if (leftStats.getElapsedRealtime() != rightStats.getElapsedRealtime() ||
- leftStats.size() != rightStats.size()) return false
+ if (compareTime && leftStats.getElapsedRealtime() != rightStats.getElapsedRealtime()) {
+ return false
+ }
+ if (leftStats.size() != rightStats.size()) return false
val left = NetworkStats.Entry()
val right = NetworkStats.Entry()
// Order insensitive compare.
@@ -32,8 +37,26 @@ fun orderInsensitiveEquals(
leftStats.getValues(i, left)
val j: Int = rightStats.findIndexHinted(left.iface, left.uid, left.set, left.tag,
left.metered, left.roaming, left.defaultNetwork, i)
+ if (j == -1) return false
rightStats.getValues(j, right)
if (left != right) return false
}
return true
}
+
+/**
+ * Assert that two {@link NetworkStats} are equals, assuming the order of the records are not
+ * necessarily the same.
+ *
+ * @note {@code elapsedRealtime} is not compared by default, given that in test cases that is not
+ * usually used.
+ */
+@JvmOverloads
+fun assertNetworkStatsEquals(
+ expected: NetworkStats,
+ actual: NetworkStats,
+ compareTime: Boolean = false
+) {
+ assertTrue(orderInsensitiveEquals(expected, actual, compareTime),
+ "expected: " + expected + "but was: " + actual)
+}
diff --git a/tests/unit/src/android/net/apf/ApfTest.java b/tests/unit/src/android/net/apf/ApfTest.java
index f018fde..d85d059 100644
--- a/tests/unit/src/android/net/apf/ApfTest.java
+++ b/tests/unit/src/android/net/apf/ApfTest.java
@@ -67,6 +67,7 @@ import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import com.android.internal.util.HexDump;
+import com.android.networkstack.apishim.NetworkInformationShimImpl;
import com.android.server.networkstack.tests.R;
import com.android.server.util.NetworkStackConstants;
@@ -936,7 +937,8 @@ public class ApfTest {
private byte[] mLastApfProgram;
MockIpClientCallback() {
- super(mock(IIpClientCallbacks.class), mock(SharedLog.class));
+ super(mock(IIpClientCallbacks.class), mock(SharedLog.class),
+ NetworkInformationShimImpl.newInstance());
}
@Override
diff --git a/tests/unit/src/android/net/util/InterfaceParamsTest.java b/tests/unit/src/android/net/util/InterfaceParamsTest.java
index 5a2b9c6..1be4368 100644
--- a/tests/unit/src/android/net/util/InterfaceParamsTest.java
+++ b/tests/unit/src/android/net/util/InterfaceParamsTest.java
@@ -17,6 +17,7 @@
package android.net.util;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -49,6 +50,7 @@ public class InterfaceParamsTest {
assertEquals("lo", ifParams.name);
assertTrue(ifParams.index > 0);
assertNotNull(ifParams.macAddr);
+ assertFalse(ifParams.hasMacAddress);
assertTrue(ifParams.defaultMtu >= NetworkStackConstants.ETHER_MTU);
}
}
diff --git a/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java b/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java
index 89c4218..f61bb7e 100644
--- a/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java
+++ b/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java
@@ -1432,7 +1432,7 @@ public class NetworkMonitorTest {
public void testNotifyNetwork_NotifyNetworkTestedOldInterfaceVersion() throws Exception {
// Use old interface version so notifyNetworkTested is used over
// notifyNetworkTestedWithExtras
- resetCallbacks(5);
+ resetCallbacks(4);
// Trigger Network validation
setStatus(mHttpsConnection, 204);