Move transport parsing to EthernetTrackerConfig
Test: EthernetTrackerTest Change-Id: I849ab478a101955c71e7881eb6609f5630a0062a
This commit is contained in:
parent
3a4c4c593a
commit
c28cd83cee
2 changed files with 69 additions and 37 deletions
|
|
@ -18,6 +18,10 @@ package com.android.server.ethernet;
|
|||
|
||||
import static android.net.EthernetManager.ETHERNET_STATE_DISABLED;
|
||||
import static android.net.EthernetManager.ETHERNET_STATE_ENABLED;
|
||||
import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET;
|
||||
import static android.net.NetworkCapabilities.TRANSPORT_LOWPAN;
|
||||
import static android.net.NetworkCapabilities.TRANSPORT_VPN;
|
||||
import static android.net.NetworkCapabilities.TRANSPORT_WIFI_AWARE;
|
||||
import static android.net.TestNetworkManager.TEST_TAP_PREFIX;
|
||||
|
||||
import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE;
|
||||
|
|
@ -639,7 +643,7 @@ public class EthernetTracker {
|
|||
nc = mNetworkCapabilities.get(hwAddress);
|
||||
if (nc == null) {
|
||||
final boolean isTestIface = iface.matches(TEST_IFACE_REGEXP);
|
||||
nc = createDefaultNetworkCapabilities(isTestIface, /* overrideTransport */ null);
|
||||
nc = createDefaultNetworkCapabilities(isTestIface, TRANSPORT_ETHERNET);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -780,9 +784,9 @@ public class EthernetTracker {
|
|||
}
|
||||
|
||||
private static NetworkCapabilities createDefaultNetworkCapabilities(
|
||||
boolean isTestIface, @Nullable String overrideTransport) {
|
||||
boolean isTestIface, int transportType) {
|
||||
NetworkCapabilities.Builder builder =
|
||||
createNetworkCapabilities(/* commaSeparatedCapabilities */ null, overrideTransport)
|
||||
createNetworkCapabilities(/* commaSeparatedCapabilities */ null, transportType)
|
||||
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
|
||||
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
|
||||
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING)
|
||||
|
|
@ -811,7 +815,7 @@ public class EthernetTracker {
|
|||
*/
|
||||
@VisibleForTesting
|
||||
static NetworkCapabilities.Builder createNetworkCapabilities(
|
||||
@Nullable String commaSeparatedCapabilities, @Nullable String overrideTransport) {
|
||||
@Nullable String commaSeparatedCapabilities, int transportType) {
|
||||
|
||||
final NetworkCapabilities.Builder builder =
|
||||
TextUtils.isEmpty(commaSeparatedCapabilities)
|
||||
|
|
@ -822,33 +826,7 @@ public class EthernetTracker {
|
|||
// attempt to add it. Since we can only have one override, all errors with it will
|
||||
// gracefully default back to TRANSPORT_ETHERNET and warn the user. VPN is not allowed as an
|
||||
// override type. Wifi Aware and LoWPAN are currently unsupported as well.
|
||||
int transport = NetworkCapabilities.TRANSPORT_ETHERNET;
|
||||
if (!TextUtils.isEmpty(overrideTransport)) {
|
||||
try {
|
||||
int parsedTransport = Integer.valueOf(overrideTransport);
|
||||
if (parsedTransport == NetworkCapabilities.TRANSPORT_VPN
|
||||
|| parsedTransport == NetworkCapabilities.TRANSPORT_WIFI_AWARE
|
||||
|| parsedTransport == NetworkCapabilities.TRANSPORT_LOWPAN) {
|
||||
Log.e(TAG, "Override transport '" + parsedTransport + "' is not supported. "
|
||||
+ "Defaulting to TRANSPORT_ETHERNET");
|
||||
} else {
|
||||
transport = parsedTransport;
|
||||
}
|
||||
} catch (NumberFormatException nfe) {
|
||||
Log.e(TAG, "Override transport type '" + overrideTransport + "' "
|
||||
+ "could not be parsed. Defaulting to TRANSPORT_ETHERNET");
|
||||
}
|
||||
}
|
||||
|
||||
// Apply the transport. If the user supplied a valid number that is not a valid transport
|
||||
// then adding will throw an exception. Default back to TRANSPORT_ETHERNET if that happens
|
||||
try {
|
||||
builder.addTransportType(transport);
|
||||
} catch (IllegalArgumentException iae) {
|
||||
Log.e(TAG, transport + " is not a valid NetworkCapability.TRANSPORT_* value. "
|
||||
+ "Defaulting to TRANSPORT_ETHERNET");
|
||||
builder.addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET);
|
||||
}
|
||||
builder.addTransportType(transportType);
|
||||
|
||||
builder.setLinkUpstreamBandwidthKbps(100 * 1000);
|
||||
builder.setLinkDownstreamBandwidthKbps(100 * 1000);
|
||||
|
|
@ -1049,7 +1027,35 @@ public class EthernetTracker {
|
|||
final String mIface;
|
||||
final String mCapabilities;
|
||||
final String mIpConfig;
|
||||
final String mTransport;
|
||||
final int mTransport;
|
||||
|
||||
private static int parseTransportType(String transportString) {
|
||||
if (TextUtils.isEmpty(transportString)) {
|
||||
return TRANSPORT_ETHERNET;
|
||||
}
|
||||
|
||||
final int parsedTransport;
|
||||
try {
|
||||
parsedTransport = Integer.valueOf(transportString);
|
||||
} catch (NumberFormatException e) {
|
||||
Log.e(TAG, "Failed to parse transport type", e);
|
||||
return TRANSPORT_ETHERNET;
|
||||
}
|
||||
|
||||
if (!NetworkCapabilities.isValidTransport(parsedTransport)) {
|
||||
return TRANSPORT_ETHERNET;
|
||||
}
|
||||
|
||||
switch (parsedTransport) {
|
||||
case TRANSPORT_VPN:
|
||||
case TRANSPORT_WIFI_AWARE:
|
||||
case TRANSPORT_LOWPAN:
|
||||
Log.e(TAG, "Unsupported transport type '" + parsedTransport + "'");
|
||||
return TRANSPORT_ETHERNET;
|
||||
default:
|
||||
return parsedTransport;
|
||||
}
|
||||
}
|
||||
|
||||
EthernetTrackerConfig(String configString) {
|
||||
Objects.requireNonNull(configString, "EthernetTrackerConfig requires non-null config");
|
||||
|
|
@ -1057,7 +1063,7 @@ public class EthernetTracker {
|
|||
mIface = tokens[0];
|
||||
mCapabilities = tokens.length > 1 ? tokens[1] : null;
|
||||
mIpConfig = tokens.length > 2 && !TextUtils.isEmpty(tokens[2]) ? tokens[2] : null;
|
||||
mTransport = tokens.length > 3 ? tokens[3] : null;
|
||||
mTransport = tokens.length > 3 ? parseTransportType(tokens[3]) : TRANSPORT_ETHERNET;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -284,11 +284,15 @@ public class EthernetTrackerTest {
|
|||
|
||||
private void assertParsedNetworkCapabilities(
|
||||
NetworkCapabilities expectedNetworkCapabilities,
|
||||
String configCapabiltiies,
|
||||
String configCapabilities,
|
||||
String configTransports) {
|
||||
final String ipConfig = "";
|
||||
final String configString =
|
||||
String.join(";", TEST_IFACE, configCapabilities, ipConfig, configTransports);
|
||||
final EthernetTrackerConfig config = new EthernetTrackerConfig(configString);
|
||||
assertEquals(
|
||||
expectedNetworkCapabilities,
|
||||
EthernetTracker.createNetworkCapabilities(configCapabiltiies, configTransports)
|
||||
EthernetTracker.createNetworkCapabilities(config.mCapabilities, config.mTransport)
|
||||
.build());
|
||||
}
|
||||
|
||||
|
|
@ -296,7 +300,7 @@ public class EthernetTrackerTest {
|
|||
public void testCreateEthernetTrackerConfigReturnsCorrectValue() {
|
||||
final String capabilities = "2";
|
||||
final String ipConfig = "3";
|
||||
final String transport = "4";
|
||||
final String transport = "1";
|
||||
final String configString = String.join(";", TEST_IFACE, capabilities, ipConfig, transport);
|
||||
|
||||
final EthernetTrackerConfig config = new EthernetTrackerConfig(configString);
|
||||
|
|
@ -304,7 +308,29 @@ public class EthernetTrackerTest {
|
|||
assertEquals(TEST_IFACE, config.mIface);
|
||||
assertEquals(capabilities, config.mCapabilities);
|
||||
assertEquals(ipConfig, config.mIpConfig);
|
||||
assertEquals(transport, config.mTransport);
|
||||
assertEquals(NetworkCapabilities.TRANSPORT_WIFI, config.mTransport);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateEthernetTrackerConfig_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);
|
||||
assertEquals(NetworkCapabilities.TRANSPORT_ETHERNET, config.mTransport);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateEthernetTrackerConfig_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);
|
||||
assertEquals(NetworkCapabilities.TRANSPORT_ETHERNET, config.mTransport);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
Loading…
Reference in a new issue