Merge changes Ie63a3583,I1354ec53,I3806750a,I48d0b0f9,I4da56735 into main am: d022fac1c2

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/3554879

Change-Id: I563080c93274cf0082cb5d80ce56e0d276a363dd
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Maciej Żenczykowski 2025-03-21 16:39:18 -07:00 • committed by Automerger Merge Worker
commit 80bc530874
2 changed files with 25 additions and 22 deletions

View file

@ -170,6 +170,10 @@ public class EthernetTracker {
return resources.get().getStringArray(
com.android.connectivity.resources.R.array.config_ethernet_interfaces);
}
public boolean isAtLeastB() {
return SdkLevel.isAtLeastB();
}
}
private class EthernetNetlinkMonitor extends NetlinkMonitor {
@ -758,7 +762,7 @@ public class EthernetTracker {
* <interface name|mac address>;[Network Capabilities];[IP config];[Override Transport]}
*/
private void parseEthernetConfig(String configString) {
final EthernetTrackerConfig config = new EthernetTrackerConfig(configString);
final EthernetConfigParser config = new EthernetConfigParser(configString);
NetworkCapabilities nc;
// Starting with Android B (API level 36), we provide default NetworkCapabilities
// for Ethernet interfaces when no explicit capabilities are specified in the
@ -770,9 +774,8 @@ public class EthernetTracker {
// capabilities) to prevent certain Ethernet interfaces from becoming
// the default network. To avoid breaking existing device configurations, this
// change is gated by the SDK level.
if (SdkLevel.isAtLeastB() && config.mCaps.isEmpty()) {
boolean isTestIface = config.mIface.matches(TEST_IFACE_REGEXP);
nc = createDefaultNetworkCapabilities(isTestIface, config.mTransport);
if (mDeps.isAtLeastB() && config.mCaps.isEmpty()) {
nc = createDefaultNetworkCapabilities(false /* isTestIface */, config.mTransport);
} else {
nc = createNetworkCapabilities(config.mCaps, config.mTransport).build();
}
@ -1012,13 +1015,13 @@ public class EthernetTracker {
}
@VisibleForTesting
static class EthernetTrackerConfig {
static class EthernetConfigParser {
final String mIface;
final List<Integer> mCaps;
final String mIpConfig;
final int mTransport;
private static List<Integer> parseCapabilities(String capabilitiesString) {
private static List<Integer> parseCapabilities(@Nullable String capabilitiesString) {
if (TextUtils.isEmpty(capabilitiesString)) {
return Collections.emptyList();
}
@ -1037,10 +1040,10 @@ public class EthernetTracker {
}
capabilities.add(capability);
}
return capabilities;
return Collections.unmodifiableList(capabilities);
}
private static int parseTransportType(String transportString) {
private static int parseTransportType(@Nullable String transportString) {
if (TextUtils.isEmpty(transportString)) {
return TRANSPORT_ETHERNET;
}
@ -1068,13 +1071,13 @@ public class EthernetTracker {
}
}
EthernetTrackerConfig(String configString) {
Objects.requireNonNull(configString, "EthernetTrackerConfig requires non-null config");
EthernetConfigParser(String configString) {
Objects.requireNonNull(configString, "EthernetConfigParser requires non-null config");
final String[] tokens = configString.split(";", /* limit of tokens */ 4);
mIface = tokens[0];
mCaps = tokens.length > 1 ? parseCapabilities(tokens[1]) : Collections.emptyList();
mCaps = parseCapabilities(tokens.length > 1 ? tokens[1] : null);
mIpConfig = tokens.length > 2 && !TextUtils.isEmpty(tokens[2]) ? tokens[2] : null;
mTransport = tokens.length > 3 ? parseTransportType(tokens[3]) : TRANSPORT_ETHERNET;
mTransport = parseTransportType(tokens.length > 3 ? tokens[3] : null);
}
}
}

View file

@ -46,7 +46,7 @@ import android.os.RemoteException;
import androidx.test.filters.SmallTest;
import com.android.server.ethernet.EthernetTracker.EthernetTrackerConfig;
import com.android.server.ethernet.EthernetTracker.EthernetConfigParser;
import com.android.testutils.DevSdkIgnoreRule;
import com.android.testutils.DevSdkIgnoreRunner;
import com.android.testutils.HandlerUtils;
@ -291,20 +291,20 @@ public class EthernetTrackerTest {
final String ipConfig = "";
final String configString =
String.join(";", TEST_IFACE, configCapabilities, ipConfig, configTransports);
final EthernetTrackerConfig config = new EthernetTrackerConfig(configString);
final EthernetConfigParser config = new EthernetConfigParser(configString);
assertEquals(
expectedNetworkCapabilities,
EthernetTracker.createNetworkCapabilities(config.mCaps, config.mTransport).build());
}
@Test
public void testCreateEthernetTrackerConfigReturnsCorrectValue() {
public void testCreateEthernetConfigParserReturnsCorrectValue() {
final String capabilities = "2,4,6,8";
final String ipConfig = "3";
final String transport = "1";
final String configString = String.join(";", TEST_IFACE, capabilities, ipConfig, transport);
final EthernetTrackerConfig config = new EthernetTrackerConfig(configString);
final EthernetConfigParser config = new EthernetConfigParser(configString);
assertEquals(TEST_IFACE, config.mIface);
assertThat(config.mCaps).containsExactly(2, 4, 6, 8);
@ -313,30 +313,30 @@ public class EthernetTrackerTest {
}
@Test
public void testCreateEthernetTrackerConfig_withInvalidTransport() {
public void testCreateEthernetConfigParser_withInvalidTransport() {
final String capabilities = "2";
final String ipConfig = "3";
final String transport = "100"; // Invalid transport type
final String configString = String.join(";", TEST_IFACE, capabilities, ipConfig, transport);
final EthernetTrackerConfig config = new EthernetTrackerConfig(configString);
final EthernetConfigParser config = new EthernetConfigParser(configString);
assertEquals(NetworkCapabilities.TRANSPORT_ETHERNET, config.mTransport);
}
@Test
public void testCreateEthernetTrackerConfig_withDisallowedTransport() {
public void testCreateEthernetConfigParser_withDisallowedTransport() {
final String capabilities = "2";
final String ipConfig = "3";
final String transport = "4"; // TRANSPORT_VPN is not allowed
final String configString = String.join(";", TEST_IFACE, capabilities, ipConfig, transport);
final EthernetTrackerConfig config = new EthernetTrackerConfig(configString);
final EthernetConfigParser config = new EthernetConfigParser(configString);
assertEquals(NetworkCapabilities.TRANSPORT_ETHERNET, config.mTransport);
}
@Test
public void testCreateEthernetTrackerConfigThrowsNpeWithNullInput() {
assertThrows(NullPointerException.class, () -> new EthernetTrackerConfig(null));
public void testCreateEthernetConfigParserThrowsNpeWithNullInput() {
assertThrows(NullPointerException.class, () -> new EthernetConfigParser(null));
}
@Test