Create a new API to make a set of UIDs use only VPN by default

Create a new API - setVpnNetworkPreference() for the caller to
set VPN as the preference network.

VPN will be disconnected when its underlying network is gone.
To prevent packets going through an underlying network when the
underlying network is back but VPN is not connected yet, set VPN
as the only preferred network for specific apps.

Bug: 231749077
Test: 1. atest FrameworksNetTests
      2. Create a test app to register default network and check if
         the VPN is the only default network for the test app.
Change-Id: Iabcd38e2fec2aefedbf78d20e338f222d83a9e7f
This commit is contained in:
lucaslin
2022-12-19 02:35:33 +00:00
parent 3f6f60f9b7
commit 3ba7cc25c0
7 changed files with 260 additions and 5 deletions

View File

@@ -402,4 +402,27 @@ public class UidRangeUtilsTest {
expected.add(uids20_24);
assertEquals(expected, UidRangeUtils.convertArrayToUidRange(input));
}
@Test
public void testSortRangesByStartUid() throws Exception {
final UidRange uid1 = new UidRange(100, 110);
final UidRange uid2 = new UidRange(120, 130);
final UidRange[] unsortedRanges = new UidRange[] {uid2, uid1};
final UidRange[] sortedRanges = UidRangeUtils.sortRangesByStartUid(unsortedRanges);
assertEquals(uid1, sortedRanges[0]);
assertEquals(uid2, sortedRanges[1]);
}
@Test
public void testSortedRangesContainOverlap() throws Exception {
final UidRange uid1 = new UidRange(100, 110);
final UidRange uid2 = new UidRange(109, 120);
final UidRange uid3 = new UidRange(120, 130);
final UidRange[] overlapRanges1 = new UidRange[] {uid1, uid2};
final UidRange[] overlapRanges2 = new UidRange[] {uid2, uid3};
final UidRange[] notOverlapRanges = new UidRange[] {uid1, uid3};
assertTrue(UidRangeUtils.sortedRangesContainOverlap(overlapRanges1));
assertTrue(UidRangeUtils.sortedRangesContainOverlap(overlapRanges2));
assertFalse(UidRangeUtils.sortedRangesContainOverlap(notOverlapRanges));
}
}