From 2d9992c186d82d7292f5d6aae098e6426c6117f2 Mon Sep 17 00:00:00 2001 From: Handa Wang Date: Thu, 24 Oct 2024 08:27:27 +0000 Subject: [PATCH] [Thread] tell ot-daemon about the DNS servers on the infra link This CL passes the DNS servers' information to ot-daemon which was fetched from LinkProperties of the infra link. This can enable the DNS recursive resolver feature of the Thread Border Router. The integration test case will be covered when aosp/3259932 is merged. Currently the test case CL cannot be merged because the there's a dependency PR in GitHub hasn't been merged: https://github.com/openthread/openthread/pull/10864. Bug: 365892457 Bug: 354868095 Test: atest ThreadNetworkIntegrationTests:android.net.thread.InternetAccessTest Change-Id: I66e54715ecaf8e0a43324d4afd4398e8884d8738 --- .../ThreadNetworkControllerService.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/thread/service/java/com/android/server/thread/ThreadNetworkControllerService.java b/thread/service/java/com/android/server/thread/ThreadNetworkControllerService.java index d5d24ac670..ba4eeafc2f 100644 --- a/thread/service/java/com/android/server/thread/ThreadNetworkControllerService.java +++ b/thread/service/java/com/android/server/thread/ThreadNetworkControllerService.java @@ -145,11 +145,13 @@ import libcore.util.HexEncoding; import java.io.IOException; import java.net.Inet6Address; +import java.net.InetAddress; import java.security.SecureRandom; import java.time.Clock; import java.time.DateTimeException; import java.time.Instant; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -1342,6 +1344,7 @@ final class ThreadNetworkControllerService extends IThreadNetworkController.Stub } setInfraLinkInterfaceName(newInfraLinkState.interfaceName); setInfraLinkNat64Prefix(newInfraLinkState.nat64Prefix); + setInfraLinkDnsServers(newInfraLinkState.dnsServers); mInfraLinkState = newInfraLinkState; } @@ -1375,6 +1378,16 @@ final class ThreadNetworkControllerService extends IThreadNetworkController.Stub } } + private void setInfraLinkDnsServers(List newDnsServers) { + try { + getOtDaemon() + .setInfraLinkDnsServers( + newDnsServers, new LoggingOtStatusReceiver("setInfraLinkDnsServers")); + } catch (RemoteException | ThreadNetworkException e) { + LOG.e("Failed to set infra link DNS servers " + newDnsServers, e); + } + } + private void handleThreadInterfaceStateChanged(boolean isUp) { try { mTunIfController.setInterfaceUp(isUp); @@ -1520,7 +1533,17 @@ final class ThreadNetworkControllerService extends IThreadNetworkController.Stub } return new InfraLinkState.Builder() .setInterfaceName(linkProperties.getInterfaceName()) - .setNat64Prefix(nat64Prefix); + .setNat64Prefix(nat64Prefix) + .setDnsServers(addressesToStrings(linkProperties.getDnsServers())); + } + + private static List addressesToStrings(List addresses) { + List strings = new ArrayList<>(); + + for (InetAddress address : addresses) { + strings.add(address.getHostAddress()); + } + return strings; } private static final class CallbackMetadata {