summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAswin Sankar <apsankar@google.com>2023-05-25 23:15:54 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-05-25 23:15:54 +0000
commit51f7fe991f70d443a698735cd241c6ccefa39b2b (patch)
tree01f3bf91a28d0e93be016189e68f497e78f6171b
parent0b5f2f86b2a7a5e14b3399543b4224ce0b4c5603 (diff)
parent260b35cd35a643a9de93747c6e5429f57a607d03 (diff)
downloadIwlan-51f7fe991f70d443a698735cd241c6ccefa39b2b.tar.gz
Merge "Handling for static ePDG IP addresses" into udc-dev am: 260b35cd35
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/services/Iwlan/+/23394279 Change-Id: I63145467a82d6ecdba6ac78605e843b3cb329ab3 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--src/com/google/android/iwlan/epdg/EpdgSelector.java24
-rw-r--r--test/com/google/android/iwlan/epdg/EpdgSelectorTest.java46
2 files changed, 49 insertions, 21 deletions
diff --git a/src/com/google/android/iwlan/epdg/EpdgSelector.java b/src/com/google/android/iwlan/epdg/EpdgSelector.java
index e56196c..4534b81 100644
--- a/src/com/google/android/iwlan/epdg/EpdgSelector.java
+++ b/src/com/google/android/iwlan/epdg/EpdgSelector.java
@@ -89,6 +89,7 @@ public class EpdgSelector {
private static final int NUM_EPDG_SELECTION_EXECUTORS = 2; // 1 each for normal selection, SOS.
private static final int MAX_EPDG_SELECTION_THREADS = 2; // 1 each for prefetch, tunnel bringup.
private static final int MAX_DNS_RESOLVER_THREADS = 25; // Do not expect > 25 FQDNs per carrier.
+ private static final String NO_DOMAIN = "NO_DOMAIN";
BlockingQueue<Runnable> dnsResolutionQueue =
new ArrayBlockingQueue<>(
@@ -291,6 +292,12 @@ public class EpdgSelector {
return IwlanHelper.hasIpv6Address(IwlanHelper.getAllAddressesForNetwork(network, mContext));
}
+ private void printParallelDnsResult(Map<String, List<InetAddress>> domainNameToIpAddresses) {
+ Log.d(TAG, "Parallel DNS resolution result:");
+ for (String domain : domainNameToIpAddresses.keySet()) {
+ Log.d(TAG, domain + ": " + domainNameToIpAddresses.get(domain));
+ }
+ }
/**
* Returns a list of unique IP addresses corresponding to the given domain names, in the same
* order of the input. Runs DNS resolution across parallel threads.
@@ -309,6 +316,13 @@ public class EpdgSelector {
List<CompletableFuture<Map.Entry<String, List<InetAddress>>>> futuresList =
new ArrayList<>();
for (String domainName : domainNames) {
+ if (InetAddresses.isNumericAddress(domainName)) {
+ Log.d(TAG, domainName + " is a numeric IP address!");
+ InetAddress inetAddr = InetAddresses.parseNumericAddress(domainName);
+ domainNameToIpAddr.put(NO_DOMAIN, new ArrayList<>(List.of(inetAddr)));
+ continue;
+ }
+
domainNameToIpAddr.put(domainName, new ArrayList<>());
// Dispatches separate IPv4 and IPv6 queries to avoid being blocked on either result.
if (hasIpv4Address(network)) {
@@ -377,12 +391,8 @@ public class EpdgSelector {
Log.d(TAG, "Input domainName : " + domainName);
if (InetAddresses.isNumericAddress(domainName)) {
- try {
- Log.d(TAG, domainName + " is a numeric ip address");
- ipList.add(InetAddress.getByName(domainName));
- } catch (UnknownHostException e) {
- Log.e(TAG, "Exception when resolving domainName : " + domainName + ".", e);
- }
+ Log.d(TAG, domainName + " is a numeric IP address!");
+ ipList.add(InetAddresses.parseNumericAddress(domainName));
} else {
try {
CompletableFuture<List<InetAddress>> result = new CompletableFuture();
@@ -608,6 +618,7 @@ public class EpdgSelector {
filter,
network,
PARALLEL_STATIC_RESOLUTION_TIMEOUT_DURATION_SEC);
+ printParallelDnsResult(domainNameToIpAddr);
domainNameToIpAddr.values().forEach(validIpList::addAll);
}
@@ -684,6 +695,7 @@ public class EpdgSelector {
LinkedHashMap<String, List<InetAddress>> domainNameToIpAddr =
getIP(domainNames, filter, network, PARALLEL_PLMN_RESOLUTION_TIMEOUT_DURATION_SEC);
+ printParallelDnsResult(domainNameToIpAddr);
domainNameToIpAddr.values().forEach(validIpList::addAll);
return domainNameToIpAddr;
}
diff --git a/test/com/google/android/iwlan/epdg/EpdgSelectorTest.java b/test/com/google/android/iwlan/epdg/EpdgSelectorTest.java
index 97526d1..3f23dab 100644
--- a/test/com/google/android/iwlan/epdg/EpdgSelectorTest.java
+++ b/test/com/google/android/iwlan/epdg/EpdgSelectorTest.java
@@ -195,8 +195,24 @@ public class EpdgSelectorTest {
InetAddress expectedAddress = InetAddress.getByName(TEST_IP_ADDRESS);
- assertEquals(testInetAddresses.size(), 1);
- assertEquals(testInetAddresses.get(0), expectedAddress);
+ assertEquals(1, testInetAddresses.size());
+ assertEquals(expectedAddress, testInetAddresses.get(0));
+ }
+
+ @Test
+ public void testStaticMethodDirectIpAddress_noDnsResolution() throws Exception {
+ mTestBundle.putIntArray(
+ CarrierConfigManager.Iwlan.KEY_EPDG_ADDRESS_PRIORITY_INT_ARRAY,
+ new int[] {CarrierConfigManager.Iwlan.EPDG_ADDRESS_STATIC});
+ // Carrier config directly contains the ePDG IP address.
+ mTestBundle.putString(
+ CarrierConfigManager.Iwlan.KEY_EPDG_STATIC_ADDRESS_STRING, TEST_IP_ADDRESS);
+
+ ArrayList<InetAddress> testInetAddresses =
+ getValidatedServerListWithDefaultParams(false /*isEmergency*/);
+
+ assertEquals(1, testInetAddresses.size());
+ assertEquals(InetAddresses.parseNumericAddress(TEST_IP_ADDRESS), testInetAddresses.get(0));
}
@Test
@@ -222,8 +238,8 @@ public class EpdgSelectorTest {
InetAddress expectedAddress = InetAddress.getByName(TEST_IP_ADDRESS);
- assertEquals(testInetAddresses.size(), 1);
- assertEquals(testInetAddresses.get(0), expectedAddress);
+ assertEquals(1, testInetAddresses.size());
+ assertEquals(expectedAddress, testInetAddresses.get(0));
}
@Test
@@ -252,7 +268,7 @@ public class EpdgSelectorTest {
ArrayList<InetAddress> testInetAddresses =
getValidatedServerListWithDefaultParams(false /*isEmergency*/);
- assertEquals(testInetAddresses.size(), 2);
+ assertEquals(2, testInetAddresses.size());
assertTrue(testInetAddresses.contains(InetAddress.getByName(TEST_IP_ADDRESS_1)));
assertTrue(testInetAddresses.contains(InetAddress.getByName(TEST_IP_ADDRESS_2)));
}
@@ -506,7 +522,7 @@ public class EpdgSelectorTest {
doReturn(true).when(mEpdgSelector).hasIpv4Address(mMockNetwork);
doReturn(true).when(mEpdgSelector).hasIpv6Address(mMockNetwork);
- // Set Network.getAllByName mock
+ // Set DnsResolver query mock
final String addr1 = "epdg.epc.mnc480.mcc310.pub.3gppnetwork.org";
final String addr2 = "epdg.epc.mnc120.mcc300.pub.3gppnetwork.org";
final String addr3 = "epdg.epc.mnc120.mcc311.pub.3gppnetwork.org";
@@ -526,10 +542,10 @@ public class EpdgSelectorTest {
ArrayList<InetAddress> testInetAddresses =
getValidatedServerListWithDefaultParams(false /*isEmergency*/);
- assertEquals(testInetAddresses.size(), 3);
- assertEquals(testInetAddresses.get(0), InetAddress.getByName(TEST_IP_ADDRESS_1));
- assertEquals(testInetAddresses.get(1), InetAddress.getByName(TEST_IP_ADDRESS_2));
- assertEquals(testInetAddresses.get(2), InetAddress.getByName(TEST_IP_ADDRESS));
+ assertEquals(3, testInetAddresses.size());
+ assertEquals(InetAddress.getByName(TEST_IP_ADDRESS_1), testInetAddresses.get(0));
+ assertEquals(InetAddress.getByName(TEST_IP_ADDRESS_2), testInetAddresses.get(1));
+ assertEquals(InetAddress.getByName(TEST_IP_ADDRESS), testInetAddresses.get(2));
}
private ArrayList<InetAddress> getValidatedServerListWithDefaultParams(boolean isEmergency)
@@ -609,7 +625,7 @@ public class EpdgSelectorTest {
ArrayList<InetAddress> testInetAddresses =
getValidatedServerListWithDefaultParams(false /* isEmergency */);
- assertEquals(testInetAddresses.size(), 2);
+ assertEquals(2, testInetAddresses.size());
assertTrue(testInetAddresses.contains(InetAddress.getByName(TEST_IP_ADDRESS)));
assertTrue(testInetAddresses.contains(InetAddress.getByName(TEST_IPV6_ADDRESS)));
}
@@ -683,10 +699,10 @@ public class EpdgSelectorTest {
ArrayList<InetAddress> testInetAddresses =
getValidatedServerListWithDefaultParams(isEmergency);
- assertEquals(testInetAddresses.size(), 3);
- assertEquals(testInetAddresses.get(0), InetAddress.getByName(TEST_IP_ADDRESS));
- assertEquals(testInetAddresses.get(1), InetAddress.getByName(TEST_IP_ADDRESS_1));
- assertEquals(testInetAddresses.get(2), InetAddress.getByName(TEST_IP_ADDRESS_2));
+ assertEquals(3, testInetAddresses.size());
+ assertEquals(InetAddress.getByName(TEST_IP_ADDRESS), testInetAddresses.get(0));
+ assertEquals(InetAddress.getByName(TEST_IP_ADDRESS_1), testInetAddresses.get(1));
+ assertEquals(InetAddress.getByName(TEST_IP_ADDRESS_2), testInetAddresses.get(2));
}
private void setAnswerForCellularMethod(boolean isEmergency, int mcc, int mnc)