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

Commit fea8bde9 authored by Lucas Lin's avatar Lucas Lin Committed by Automerger Merge Worker
Browse files

Merge changes Ib80f814f,Ic605e489 am: ae7491e2 am: 46bafc65 am: 7b190776

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1626209

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I47862eeec4f74a0901b8b866dd6ffa906bd9e62f
parents 13fd8db4 7b190776
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -7,6 +7,7 @@ package android.net {


  public class ConnectivityManager {
  public class ConnectivityManager {
    method @NonNull @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public java.util.List<android.net.NetworkStateSnapshot> getAllNetworkStateSnapshot();
    method @NonNull @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public java.util.List<android.net.NetworkStateSnapshot> getAllNetworkStateSnapshot();
    method @NonNull public static android.util.Range<java.lang.Integer> getIpSecNetIdRange();
    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void registerSystemDefaultNetworkCallback(@NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void registerSystemDefaultNetworkCallback(@NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void requestBackgroundNetwork(@NonNull android.net.NetworkRequest, @NonNull android.os.Handler, @NonNull android.net.ConnectivityManager.NetworkCallback);
    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void requestBackgroundNetwork(@NonNull android.net.NetworkRequest, @NonNull android.os.Handler, @NonNull android.net.ConnectivityManager.NetworkCallback);
    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_TEST_NETWORKS, android.Manifest.permission.NETWORK_STACK}) public void simulateDataStall(int, long, @NonNull android.net.Network, @NonNull android.os.PersistableBundle);
    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_TEST_NETWORKS, android.Manifest.permission.NETWORK_STACK}) public void simulateDataStall(int, long, @NonNull android.net.Network, @NonNull android.os.PersistableBundle);
+17 −0
Original line number Original line Diff line number Diff line
@@ -5053,4 +5053,21 @@ public class ConnectivityManager {
            throw e.rethrowFromSystemServer();
            throw e.rethrowFromSystemServer();
        }
        }
    }
    }

    // The first network ID of IPSec tunnel interface.
    private static final int TUN_INTF_NETID_START = 0xFC00;
    // The network ID range of IPSec tunnel interface.
    private static final int TUN_INTF_NETID_RANGE = 0x0400;

    /**
     * Get the network ID range reserved for IPSec tunnel interfaces.
     *
     * @return A Range which indicates the network ID range of IPSec tunnel interface.
     * @hide
     */
    @SystemApi(client = MODULE_LIBRARIES)
    @NonNull
    public static Range<Integer> getIpSecNetIdRange() {
        return new Range(TUN_INTF_NETID_START, TUN_INTF_NETID_START + TUN_INTF_NETID_RANGE - 1);
    }
}
}
+9 −10
Original line number Original line Diff line number Diff line
@@ -56,6 +56,7 @@ import android.system.Os;
import android.system.OsConstants;
import android.system.OsConstants;
import android.text.TextUtils;
import android.text.TextUtils;
import android.util.Log;
import android.util.Log;
import android.util.Range;
import android.util.Slog;
import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.util.SparseBooleanArray;
@@ -756,13 +757,9 @@ public class IpSecService extends IIpSecService.Stub {
        }
        }
    }
    }


    // These values have been reserved in NetIdManager
    @VisibleForTesting static final int TUN_INTF_NETID_START = 0xFC00;

    public static final int TUN_INTF_NETID_RANGE = 0x0400;

    private final SparseBooleanArray mTunnelNetIds = new SparseBooleanArray();
    private final SparseBooleanArray mTunnelNetIds = new SparseBooleanArray();
    private int mNextTunnelNetIdIndex = 0;
    final Range<Integer> mNetIdRange = ConnectivityManager.getIpSecNetIdRange();
    private int mNextTunnelNetId = mNetIdRange.getLower();


    /**
    /**
     * Reserves a netId within the range of netIds allocated for IPsec tunnel interfaces
     * Reserves a netId within the range of netIds allocated for IPsec tunnel interfaces
@@ -775,11 +772,13 @@ public class IpSecService extends IIpSecService.Stub {
     */
     */
    @VisibleForTesting
    @VisibleForTesting
    int reserveNetId() {
    int reserveNetId() {
        final int range = mNetIdRange.getUpper() - mNetIdRange.getLower() + 1;
        synchronized (mTunnelNetIds) {
        synchronized (mTunnelNetIds) {
            for (int i = 0; i < TUN_INTF_NETID_RANGE; i++) {
            for (int i = 0; i < range; i++) {
                int index = mNextTunnelNetIdIndex;
                final int netId = mNextTunnelNetId;
                int netId = index + TUN_INTF_NETID_START;
                if (++mNextTunnelNetId > mNetIdRange.getUpper()) {
                if (++mNextTunnelNetIdIndex >= TUN_INTF_NETID_RANGE) mNextTunnelNetIdIndex = 0;
                    mNextTunnelNetId = mNetIdRange.getLower();
                }
                if (!mTunnelNetIds.get(netId)) {
                if (!mTunnelNetIds.get(netId)) {
                    mTunnelNetIds.put(netId, true);
                    mTunnelNetIds.put(netId, true);
                    return netId;
                    return netId;
+2 −1
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server;
package com.android.server;


import android.annotation.NonNull;
import android.annotation.NonNull;
import android.net.ConnectivityManager;
import android.util.SparseBooleanArray;
import android.util.SparseBooleanArray;


import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.GuardedBy;
@@ -31,7 +32,7 @@ public class NetIdManager {
    // Sequence number for Networks; keep in sync with system/netd/NetworkController.cpp
    // Sequence number for Networks; keep in sync with system/netd/NetworkController.cpp
    public static final int MIN_NET_ID = 100; // some reserved marks
    public static final int MIN_NET_ID = 100; // some reserved marks
    // Top IDs reserved by IpSecService
    // Top IDs reserved by IpSecService
    public static final int MAX_NET_ID = 65535 - IpSecService.TUN_INTF_NETID_RANGE;
    public static final int MAX_NET_ID = ConnectivityManager.getIpSecNetIdRange().getLower() - 1;


    @GuardedBy("mNetIdInUse")
    @GuardedBy("mNetIdInUse")
    private final SparseBooleanArray mNetIdInUse = new SparseBooleanArray();
    private final SparseBooleanArray mNetIdInUse = new SparseBooleanArray();
+6 −4
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;


import android.content.Context;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.INetd;
import android.net.INetd;
import android.net.IpSecAlgorithm;
import android.net.IpSecAlgorithm;
import android.net.IpSecConfig;
import android.net.IpSecConfig;
@@ -47,6 +48,7 @@ import android.os.Process;
import android.system.ErrnoException;
import android.system.ErrnoException;
import android.system.Os;
import android.system.Os;
import android.system.StructStat;
import android.system.StructStat;
import android.util.Range;


import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import androidx.test.runner.AndroidJUnit4;
@@ -647,9 +649,9 @@ public class IpSecServiceTest {


    @Test
    @Test
    public void testReserveNetId() {
    public void testReserveNetId() {
        int start = mIpSecService.TUN_INTF_NETID_START;
        final Range<Integer> netIdRange = ConnectivityManager.getIpSecNetIdRange();
        for (int i = 0; i < mIpSecService.TUN_INTF_NETID_RANGE; i++) {
        for (int netId = netIdRange.getLower(); netId <= netIdRange.getUpper(); netId++) {
            assertEquals(start + i, mIpSecService.reserveNetId());
            assertEquals(netId, mIpSecService.reserveNetId());
        }
        }


        // Check that resource exhaustion triggers an exception
        // Check that resource exhaustion triggers an exception
@@ -661,7 +663,7 @@ public class IpSecServiceTest {


        // Now release one and try again
        // Now release one and try again
        int releasedNetId =
        int releasedNetId =
                mIpSecService.TUN_INTF_NETID_START + mIpSecService.TUN_INTF_NETID_RANGE / 2;
                netIdRange.getLower() + (netIdRange.getUpper() - netIdRange.getLower()) / 2;
        mIpSecService.releaseNetId(releasedNetId);
        mIpSecService.releaseNetId(releasedNetId);
        assertEquals(releasedNetId, mIpSecService.reserveNetId());
        assertEquals(releasedNetId, mIpSecService.reserveNetId());
    }
    }