Merge "Translate v4 keepalive packet on clat started network to v6"
This commit is contained in:
@@ -6857,17 +6857,19 @@ public class ConnectivityServiceTest {
|
||||
|
||||
@Test
|
||||
public void testPacketKeepalives() throws Exception {
|
||||
InetAddress myIPv4 = InetAddress.getByName("192.0.2.129");
|
||||
final LinkAddress v4Addr = new LinkAddress("192.0.2.129/24");
|
||||
final InetAddress myIPv4 = v4Addr.getAddress();
|
||||
InetAddress notMyIPv4 = InetAddress.getByName("192.0.2.35");
|
||||
InetAddress myIPv6 = InetAddress.getByName("2001:db8::1");
|
||||
InetAddress dstIPv4 = InetAddress.getByName("8.8.8.8");
|
||||
InetAddress dstIPv6 = InetAddress.getByName("2001:4860:4860::8888");
|
||||
|
||||
doReturn(getClatInterfaceConfigParcel(v4Addr)).when(mMockNetd)
|
||||
.interfaceGetCfg(CLAT_MOBILE_IFNAME);
|
||||
final int validKaInterval = 15;
|
||||
final int invalidKaInterval = 9;
|
||||
|
||||
LinkProperties lp = new LinkProperties();
|
||||
lp.setInterfaceName("wlan12");
|
||||
lp.setInterfaceName(MOBILE_IFNAME);
|
||||
lp.addLinkAddress(new LinkAddress(myIPv6, 64));
|
||||
lp.addLinkAddress(new LinkAddress(myIPv4, 25));
|
||||
lp.addRoute(new RouteInfo(InetAddress.getByName("fe80::1234")));
|
||||
|
||||
@@ -52,6 +52,7 @@ import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.net.INetd;
|
||||
import android.net.ISocketKeepaliveCallback;
|
||||
import android.net.InetAddresses;
|
||||
import android.net.KeepalivePacketData;
|
||||
import android.net.LinkAddress;
|
||||
import android.net.LinkProperties;
|
||||
@@ -116,7 +117,8 @@ public class AutomaticOnOffKeepaliveTrackerTest {
|
||||
private static final int MOCK_RESOURCE_ID = 5;
|
||||
private static final int TEST_KEEPALIVE_INTERVAL_SEC = 10;
|
||||
private static final int TEST_KEEPALIVE_INVALID_INTERVAL_SEC = 9;
|
||||
|
||||
private static final byte[] V4_SRC_ADDR = new byte[] { (byte) 192, 0, 0, (byte) 129 };
|
||||
private static final String TEST_V4_IFACE = "v4-testIface";
|
||||
private AutomaticOnOffKeepaliveTracker mAOOKeepaliveTracker;
|
||||
private HandlerThread mHandlerThread;
|
||||
|
||||
@@ -327,6 +329,8 @@ public class AutomaticOnOffKeepaliveTrackerTest {
|
||||
NetworkInfo.DetailedState.CONNECTED, "test reason", "test extra info");
|
||||
doReturn(new Network(TEST_NETID)).when(mNai).network();
|
||||
mNai.linkProperties = new LinkProperties();
|
||||
doReturn(null).when(mNai).translateV4toClatV6(any());
|
||||
doReturn(null).when(mNai).getClatv6SrcAddress();
|
||||
|
||||
doReturn(PERMISSION_GRANTED).when(mCtx).checkPermission(any() /* permission */,
|
||||
anyInt() /* pid */, anyInt() /* uid */);
|
||||
@@ -429,8 +433,7 @@ public class AutomaticOnOffKeepaliveTrackerTest {
|
||||
}
|
||||
|
||||
private TestKeepaliveInfo doStartNattKeepalive(int intervalSeconds) throws Exception {
|
||||
final InetAddress srcAddress = InetAddress.getByAddress(
|
||||
new byte[] { (byte) 192, 0, 0, (byte) 129 });
|
||||
final InetAddress srcAddress = InetAddress.getByAddress(V4_SRC_ADDR);
|
||||
final int srcPort = 12345;
|
||||
final InetAddress dstAddress = InetAddress.getByAddress(new byte[] {8, 8, 8, 8});
|
||||
final int dstPort = 12345;
|
||||
@@ -609,6 +612,42 @@ public class AutomaticOnOffKeepaliveTrackerTest {
|
||||
verifyNoMoreInteractions(ignoreStubs(testInfo.socketKeepaliveCallback));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStartNattKeepalive_addressTranslationOnClat() throws Exception {
|
||||
final InetAddress v6AddrSrc = InetAddresses.parseNumericAddress("2001:db8::1");
|
||||
final InetAddress v6AddrDst = InetAddresses.parseNumericAddress("2001:db8::2");
|
||||
doReturn(v6AddrDst).when(mNai).translateV4toClatV6(any());
|
||||
doReturn(v6AddrSrc).when(mNai).getClatv6SrcAddress();
|
||||
doReturn(InetAddress.getByAddress(V4_SRC_ADDR)).when(mNai).getClatv4SrcAddress();
|
||||
// Setup nai to add clat address
|
||||
final LinkProperties stacked = new LinkProperties();
|
||||
stacked.setInterfaceName(TEST_V4_IFACE);
|
||||
mNai.linkProperties.addStackedLink(stacked);
|
||||
|
||||
final TestKeepaliveInfo testInfo = doStartNattKeepalive();
|
||||
final ArgumentCaptor<NattKeepalivePacketData> kpdCaptor =
|
||||
ArgumentCaptor.forClass(NattKeepalivePacketData.class);
|
||||
verify(mNai).onStartNattSocketKeepalive(
|
||||
eq(TEST_SLOT), eq(TEST_KEEPALIVE_INTERVAL_SEC), kpdCaptor.capture());
|
||||
final NattKeepalivePacketData kpd = kpdCaptor.getValue();
|
||||
// Verify the addresses are updated to v6 when clat is started.
|
||||
assertEquals(v6AddrSrc, kpd.getSrcAddress());
|
||||
assertEquals(v6AddrDst, kpd.getDstAddress());
|
||||
|
||||
triggerEventKeepalive(TEST_SLOT, SocketKeepalive.SUCCESS);
|
||||
verify(testInfo.socketKeepaliveCallback).onStarted();
|
||||
|
||||
// Remove clat address should stop the keepalive.
|
||||
doReturn(null).when(mNai).getClatv6SrcAddress();
|
||||
visibleOnHandlerThread(
|
||||
mTestHandler, () -> mAOOKeepaliveTracker.handleCheckKeepalivesStillValid(mNai));
|
||||
checkAndProcessKeepaliveStop();
|
||||
assertNull(getAutoKiForBinder(testInfo.binder));
|
||||
|
||||
verify(testInfo.socketKeepaliveCallback).onError(SocketKeepalive.ERROR_INVALID_IP_ADDRESS);
|
||||
verifyNoMoreInteractions(ignoreStubs(testInfo.socketKeepaliveCallback));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandleEventSocketKeepalive_startingFailureHardwareError() throws Exception {
|
||||
final TestKeepaliveInfo testInfo = doStartNattKeepalive();
|
||||
|
||||
Reference in New Issue
Block a user