Merge cherrypicks of ['android-review.googlesource.com/3561446', 'googleplex-android-review.googlesource.com/32890139'] into 25Q2-release.
Change-Id: I4a3e1269d983006c8397da2e8c03efec0805369d
diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java b/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java
index 36fad31..4c760d6 100644
--- a/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java
+++ b/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java
@@ -101,7 +101,7 @@
@NonNull MdnsInterfaceSocket socket) {
mActiveSockets.remove(socketKey);
mSocketCreationCallback.onSocketDestroyed(socketKey);
- maybeCleanupPacketHandler(socketKey);
+ maybeCleanupPacketHandler(socketKey, socket);
}
private void notifySocketDestroyed(@NonNull SocketKey socketKey) {
@@ -115,8 +115,9 @@
for (int i = mActiveSockets.size() - 1; i >= 0; i--) {
// Iterate from the end so the socket can be removed
final SocketKey socketKey = mActiveSockets.keyAt(i);
+ final MdnsInterfaceSocket socket = mActiveSockets.valueAt(i);
notifySocketDestroyed(socketKey);
- maybeCleanupPacketHandler(socketKey);
+ maybeCleanupPacketHandler(socketKey, socket);
}
}
}
@@ -143,9 +144,13 @@
return null;
}
- private void maybeCleanupPacketHandler(@NonNull SocketKey socketKey) {
+ private void maybeCleanupPacketHandler(@NonNull SocketKey socketKey,
+ @NonNull MdnsInterfaceSocket socket) {
if (isSocketActive(socketKey)) return;
- mSocketPacketHandlers.remove(socketKey);
+ final ReadPacketHandler handler = mSocketPacketHandlers.remove(socketKey);
+ if (handler != null) {
+ socket.removePacketHandler(handler);
+ }
}
private class ReadPacketHandler implements MulticastPacketReader.PacketHandler {
diff --git a/service-t/src/com/android/server/ethernet/EthernetTracker.java b/service-t/src/com/android/server/ethernet/EthernetTracker.java
index 7a192ce..c09a94d 100644
--- a/service-t/src/com/android/server/ethernet/EthernetTracker.java
+++ b/service-t/src/com/android/server/ethernet/EthernetTracker.java
@@ -992,7 +992,11 @@
if (isAtLeastB && capabilitiesString.equals("*")) {
// On Android B+, a "*" string defaults to the same set of default
// capabilities assigned to unconfigured interfaces.
- return new NetworkCapabilities(DEFAULT_CAPABILITIES);
+ // Note that the transport type is populated later with the result of
+ // parseTransportType().
+ return new NetworkCapabilities.Builder(DEFAULT_CAPABILITIES)
+ .removeTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
+ .build();
}
for (String strNetworkCapability : capabilitiesString.split(",")) {
diff --git a/tests/unit/java/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClientTest.java b/tests/unit/java/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClientTest.java
index 4c71991..e115d5a8 100644
--- a/tests/unit/java/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClientTest.java
+++ b/tests/unit/java/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClientTest.java
@@ -357,6 +357,8 @@
verify(mProvider).unrequestSocket(callback);
verify(mSocketCreationCallback).onSocketDestroyed(mSocketKey);
verify(mSocketCreationCallback).onSocketDestroyed(otherSocketKey);
+ verify(mSocket).removePacketHandler(any());
+ verify(otherSocket).removePacketHandler(any());
}
@Test
@@ -375,8 +377,10 @@
// Notify socket destroyed
callback.onInterfaceDestroyed(mSocketKey, mSocket);
verify(mSocketCreationCallback).onSocketDestroyed(mSocketKey);
+ verify(mSocket).removePacketHandler(any());
callback.onInterfaceDestroyed(otherSocketKey, otherSocket);
verify(mSocketCreationCallback).onSocketDestroyed(otherSocketKey);
+ verify(otherSocket).removePacketHandler(any());
}
@Test
@@ -413,6 +417,7 @@
verify(creationCallback2).onSocketDestroyed(mSocketKey);
verify(creationCallback3).onSocketDestroyed(mSocketKey);
verify(creationCallback3, never()).onSocketDestroyed(socketKey2);
+ verify(mSocket).removePacketHandler(any());
}
@Test
diff --git a/tests/unit/java/com/android/server/ethernet/EthernetTrackerTest.java b/tests/unit/java/com/android/server/ethernet/EthernetTrackerTest.java
index 1a313fe..97ca8ad 100644
--- a/tests/unit/java/com/android/server/ethernet/EthernetTrackerTest.java
+++ b/tests/unit/java/com/android/server/ethernet/EthernetTrackerTest.java
@@ -18,6 +18,7 @@
import static android.net.TestNetworkManager.TEST_TAP_PREFIX;
+import static com.android.server.ethernet.EthernetTracker.DEFAULT_CAPABILITIES;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
@@ -200,7 +201,7 @@
// On Android B+, "*" defaults to using DEFAULT_CAPABILITIES.
p = new EthernetConfigParser("eth0;*;;;;;;", true /*isAtLeastB*/);
- assertThat(p.mCaps).isEqualTo(EthernetTracker.DEFAULT_CAPABILITIES);
+ assertThat(p.mCaps).isEqualTo(DEFAULT_CAPABILITIES);
// But not so before B.
p = new EthernetConfigParser("eth0;*", false /*isAtLeastB*/);
@@ -220,10 +221,24 @@
// TRANSPORT_VPN (4) is not allowed.
p = new EthernetConfigParser("eth0;;;4", false /*isAtLeastB*/);
assertThat(p.mCaps.hasSingleTransport(NetworkCapabilities.TRANSPORT_ETHERNET)).isTrue();
+ p = new EthernetConfigParser("eth0;*;;4", true /*isAtLeastB*/);
+ assertThat(p.mCaps.hasSingleTransport(NetworkCapabilities.TRANSPORT_ETHERNET)).isTrue();
// invalid capability and transport type
p = new EthernetConfigParser("eth0;-1,a,1000,,;;-1", false /*isAtLeastB*/);
assertThat(p.mCaps).isEqualTo(baseNc);
+
+ p = new EthernetConfigParser("eth0;*;;0", false /*isAtLeastB*/);
+ assertThat(p.mCaps.hasSingleTransport(NetworkCapabilities.TRANSPORT_CELLULAR)).isTrue();
+ p = new EthernetConfigParser("eth0;*;;0", true /*isAtLeastB*/);
+ assertThat(p.mCaps.hasSingleTransport(NetworkCapabilities.TRANSPORT_CELLULAR)).isTrue();
+
+ NetworkCapabilities nc = new NetworkCapabilities.Builder(DEFAULT_CAPABILITIES)
+ .removeTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
+ .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
+ .build();
+ p = new EthernetConfigParser("eth0;*;;0", true /*isAtLeastB*/);
+ assertThat(p.mCaps).isEqualTo(nc);
}
@Test