Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 512ab0d9 authored by Benedict Wong's avatar Benedict Wong
Browse files

Add configurability of LinkProperties, meteredness for Test Networks

This commit adds the ability to pass in LinkProperties and meteredness
for additional testing use cases.

Bug: ?
Test: Compiles. Test utility only.
Change-Id: Idf6c3bcae2dea5e61c0418b72b889496919be8ba
parent 3876ca9d
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.net;

import android.net.LinkAddress;
import android.net.LinkProperties;
import android.net.TestNetworkInterface;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
@@ -31,7 +32,8 @@ interface ITestNetworkManager
    TestNetworkInterface createTunInterface(in LinkAddress[] linkAddrs);
    TestNetworkInterface createTapInterface();

    void setupTestNetwork(in String iface, in IBinder binder);
    void setupTestNetwork(in String iface, in LinkProperties lp, in boolean isMetered,
            in IBinder binder);

    void teardownTestNetwork(int netId);
}
+21 −1
Original line number Diff line number Diff line
@@ -53,6 +53,26 @@ public class TestNetworkManager {
        }
    }

    /**
     * Sets up a capability-limited, testing-only network for a given interface
     *
     * @param lp The LinkProperties for the TestNetworkService to use for this test network. Note
     *     that the interface name and link addresses will be overwritten, and the passed-in values
     *     discarded.
     * @param isMetered Whether or not the network should be considered metered.
     * @param binder A binder object guarding the lifecycle of this test network.
     * @hide
     */
    public void setupTestNetwork(
            @NonNull LinkProperties lp, boolean isMetered, @NonNull IBinder binder) {
        Preconditions.checkNotNull(lp, "Invalid LinkProperties");
        try {
            mService.setupTestNetwork(lp.getInterfaceName(), lp, isMetered, binder);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Sets up a capability-limited, testing-only network for a given interface
     *
@@ -63,7 +83,7 @@ public class TestNetworkManager {
    @TestApi
    public void setupTestNetwork(@NonNull String iface, @NonNull IBinder binder) {
        try {
            mService.setupTestNetwork(iface, binder);
            mService.setupTestNetwork(iface, null, true, binder);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
+22 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server;
import static com.android.internal.util.Preconditions.checkNotNull;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.INetd;
@@ -53,6 +54,7 @@ import java.net.Inet6Address;
import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicInteger;

/** @hide */
@@ -226,6 +228,8 @@ class TestNetworkService extends ITestNetworkManager.Stub {
            @NonNull Looper looper,
            @NonNull Context context,
            @NonNull String iface,
            @Nullable LinkProperties lp,
            boolean isMetered,
            int callingUid,
            @NonNull IBinder binder)
            throws RemoteException, SocketException {
@@ -245,9 +249,19 @@ class TestNetworkService extends ITestNetworkManager.Stub {
        nc.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED);
        nc.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
        nc.setNetworkSpecifier(new StringNetworkSpecifier(iface));
        if (!isMetered) {
            nc.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
        }

        // Build LinkProperties
        LinkProperties lp = new LinkProperties();
        if (lp == null) {
            lp = new LinkProperties();
        } else {
            lp = new LinkProperties(lp);
            // Use LinkAddress(es) from the interface itself to minimize how much the caller
            // is trusted.
            lp.setLinkAddresses(new ArrayList<>());
        }
        lp.setInterfaceName(iface);

        // Find the currently assigned addresses, and add them to LinkProperties
@@ -284,7 +298,11 @@ class TestNetworkService extends ITestNetworkManager.Stub {
     * <p>This method provides a Network that is useful only for testing.
     */
    @Override
    public void setupTestNetwork(@NonNull String iface, @NonNull IBinder binder) {
    public void setupTestNetwork(
            @NonNull String iface,
            @Nullable LinkProperties lp,
            boolean isMetered,
            @NonNull IBinder binder) {
        enforceTestNetworkPermissions(mContext);

        checkNotNull(iface, "missing Iface");
@@ -315,6 +333,8 @@ class TestNetworkService extends ITestNetworkManager.Stub {
                                            mHandler.getLooper(),
                                            mContext,
                                            iface,
                                            lp,
                                            isMetered,
                                            callingUid,
                                            binder);