Add initTestNetwork with a list of LinkAddress

To support setup test network with both ipv4 and ipv6. Add overloading
function for initTestNetwork to allow specify mutiple addresses.

Also allow to get TestNetworkInterface from this test network, so the
caller can use it to send and write packets.

Test: atest EthernetTetheringTest
Change-Id: Ic7626582c021dee824f95900e4de8efee861a9ea
diff --git a/staticlibs/testutils/devicetests/com/android/testutils/TestNetworkTracker.kt b/staticlibs/testutils/devicetests/com/android/testutils/TestNetworkTracker.kt
index 36c09ce..40731ea 100644
--- a/staticlibs/testutils/devicetests/com/android/testutils/TestNetworkTracker.kt
+++ b/staticlibs/testutils/devicetests/com/android/testutils/TestNetworkTracker.kt
@@ -31,17 +31,35 @@
 import java.util.concurrent.TimeUnit
 
 /**
- * Create a test network based on a TUN interface.
+ * Create a test network based on a TUN interface with a LinkAddress.
  *
  * This method will block until the test network is available. Requires
  * [android.Manifest.permission.CHANGE_NETWORK_STATE] and
  * [android.Manifest.permission.MANAGE_TEST_NETWORKS].
  */
-fun initTestNetwork(context: Context, interfaceAddr: LinkAddress, setupTimeoutMs: Long = 10_000L):
-        TestNetworkTracker {
+fun initTestNetwork(
+    context: Context,
+    interfaceAddr: LinkAddress,
+    setupTimeoutMs: Long = 10_000L
+): TestNetworkTracker {
+    return initTestNetwork(context, listOf(interfaceAddr), setupTimeoutMs)
+}
+
+/**
+ * Create a test network based on a TUN interface with giving LinkAddress list.
+ *
+ * This method will block until the test network is available. Requires
+ * [android.Manifest.permission.CHANGE_NETWORK_STATE] and
+ * [android.Manifest.permission.MANAGE_TEST_NETWORKS].
+ */
+fun initTestNetwork(
+    context: Context,
+    linkAddrs: List<LinkAddress>,
+    setupTimeoutMs: Long = 10_000L
+): TestNetworkTracker {
     val tnm = context.getSystemService(TestNetworkManager::class.java)
-    val iface = if (isAtLeastS()) tnm.createTunInterface(listOf(interfaceAddr))
-            else tnm.createTunInterface(arrayOf(interfaceAddr))
+    val iface = if (isAtLeastS()) tnm.createTunInterface(linkAddrs)
+            else tnm.createTunInterface(linkAddrs.toTypedArray())
     return TestNetworkTracker(context, iface, tnm, setupTimeoutMs)
 }
 
@@ -61,6 +79,7 @@
 
     private val networkCallback: NetworkCallback
     val network: Network
+    val testIface: TestNetworkInterface
 
     init {
         val networkFuture = CompletableFuture<Network>()
@@ -85,6 +104,8 @@
             teardown()
             throw e
         }
+
+        testIface = iface
     }
 
     fun teardown() {