Register service on the specified network

Currently, NsdManager registers services on all interfaces when
one network was specified in NsdServiceInfo. It's unexpected
behavior. The service should be only advertised on specified
network. Thus, correct the behavior on NsdService and add cts
test to verify it.

Bug: 220070737
Test: atest CtsNetTestCases:android.net.cts.NsdManagerTest
Change-Id: Ief3bfa110bfa340c53edec561eb5376f6bd305e6
(cherry picked from commit 360a8e9e1b2c08c2bc598ea892ac671799a74535)
Merged-In: Ief3bfa110bfa340c53edec561eb5376f6bd305e6
diff --git a/service-t/src/com/android/server/NsdService.java b/service-t/src/com/android/server/NsdService.java
index 4086e4e..ea57bac 100644
--- a/service-t/src/com/android/server/NsdService.java
+++ b/service-t/src/com/android/server/NsdService.java
@@ -738,7 +738,13 @@
         String type = service.getServiceType();
         int port = service.getPort();
         byte[] textRecord = service.getTxtRecord();
-        return mMDnsManager.registerService(regId, name, type, port, textRecord, IFACE_IDX_ANY);
+        final Network network = service.getNetwork();
+        final int registerInterface = getNetworkInterfaceIndex(network);
+        if (network != null && registerInterface == IFACE_IDX_ANY) {
+            Log.e(TAG, "Interface to register service on not found");
+            return false;
+        }
+        return mMDnsManager.registerService(regId, name, type, port, textRecord, registerInterface);
     }
 
     private boolean unregisterService(int regId) {