Add a new API to get the network ID range of IPSec tunnel interface
- Add a new API to get the network ID range of IPSec tunnel interface. - Use the new API in IpSecServiceTest to make sure the result is the same. Follow-up commit will change the logic in IpSecService#reserveNetId(), the modified test can ensure the correctness of the new change. Bug: 172183305 Test: atest FrameworksNetTests:IpSecServiceTest Change-Id: Ic605e48941fc9d6482cdcd01a8adcdc9b6d586a6
This commit is contained in:
@@ -7,6 +7,7 @@ package android.net {
|
||||
|
||||
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 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.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void requestBackgroundNetwork(@NonNull android.net.NetworkRequest, @Nullable 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);
|
||||
|
||||
@@ -5040,4 +5040,21 @@ public class ConnectivityManager {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.server;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.util.SparseBooleanArray;
|
||||
|
||||
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
|
||||
public static final int MIN_NET_ID = 100; // some reserved marks
|
||||
// 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")
|
||||
private final SparseBooleanArray mNetIdInUse = new SparseBooleanArray();
|
||||
|
||||
@@ -35,6 +35,7 @@ import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.INetd;
|
||||
import android.net.IpSecAlgorithm;
|
||||
import android.net.IpSecConfig;
|
||||
@@ -47,6 +48,7 @@ import android.os.Process;
|
||||
import android.system.ErrnoException;
|
||||
import android.system.Os;
|
||||
import android.system.StructStat;
|
||||
import android.util.Range;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
@@ -647,9 +649,9 @@ public class IpSecServiceTest {
|
||||
|
||||
@Test
|
||||
public void testReserveNetId() {
|
||||
int start = mIpSecService.TUN_INTF_NETID_START;
|
||||
for (int i = 0; i < mIpSecService.TUN_INTF_NETID_RANGE; i++) {
|
||||
assertEquals(start + i, mIpSecService.reserveNetId());
|
||||
final Range<Integer> netIdRange = ConnectivityManager.getIpSecNetIdRange();
|
||||
for (int netId = netIdRange.getLower(); netId <= netIdRange.getUpper(); netId++) {
|
||||
assertEquals(netId, mIpSecService.reserveNetId());
|
||||
}
|
||||
|
||||
// Check that resource exhaustion triggers an exception
|
||||
@@ -661,7 +663,7 @@ public class IpSecServiceTest {
|
||||
|
||||
// Now release one and try again
|
||||
int releasedNetId =
|
||||
mIpSecService.TUN_INTF_NETID_START + mIpSecService.TUN_INTF_NETID_RANGE / 2;
|
||||
netIdRange.getLower() + (netIdRange.getUpper() - netIdRange.getLower()) / 2;
|
||||
mIpSecService.releaseNetId(releasedNetId);
|
||||
assertEquals(releasedNetId, mIpSecService.reserveNetId());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user