Merge "Limit the translation code on NAT-T keepalive" into main
This commit is contained in:
@@ -553,6 +553,8 @@ public class KeepaliveTracker {
|
|||||||
|
|
||||||
private KeepaliveInfo handleUpdateKeepaliveForClat(KeepaliveInfo ki)
|
private KeepaliveInfo handleUpdateKeepaliveForClat(KeepaliveInfo ki)
|
||||||
throws InvalidSocketException, InvalidPacketException {
|
throws InvalidSocketException, InvalidPacketException {
|
||||||
|
// Translation applies to only NAT-T keepalive
|
||||||
|
if (ki.mType != KeepaliveInfo.TYPE_NATT) return ki;
|
||||||
// Only try to translate address if the packet source address is the clat's source address.
|
// Only try to translate address if the packet source address is the clat's source address.
|
||||||
if (!ki.mPacket.getSrcAddress().equals(ki.getNai().getClatv4SrcAddress())) return ki;
|
if (!ki.mPacket.getSrcAddress().equals(ki.getNai().getClatv4SrcAddress())) return ki;
|
||||||
|
|
||||||
|
|||||||
@@ -612,17 +612,60 @@ public class AutomaticOnOffKeepaliveTrackerTest {
|
|||||||
verifyNoMoreInteractions(ignoreStubs(testInfo.socketKeepaliveCallback));
|
verifyNoMoreInteractions(ignoreStubs(testInfo.socketKeepaliveCallback));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
private void setupTestNaiForClat(InetAddress v6Src, InetAddress v6Dst) throws Exception {
|
||||||
public void testStartNattKeepalive_addressTranslationOnClat() throws Exception {
|
doReturn(v6Dst).when(mNai).translateV4toClatV6(any());
|
||||||
final InetAddress v6AddrSrc = InetAddresses.parseNumericAddress("2001:db8::1");
|
doReturn(v6Src).when(mNai).getClatv6SrcAddress();
|
||||||
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();
|
doReturn(InetAddress.getByAddress(V4_SRC_ADDR)).when(mNai).getClatv4SrcAddress();
|
||||||
// Setup nai to add clat address
|
// Setup nai to add clat address
|
||||||
final LinkProperties stacked = new LinkProperties();
|
final LinkProperties stacked = new LinkProperties();
|
||||||
stacked.setInterfaceName(TEST_V4_IFACE);
|
stacked.setInterfaceName(TEST_V4_IFACE);
|
||||||
|
final InetAddress srcAddress = InetAddress.getByAddress(
|
||||||
|
new byte[] { (byte) 192, 0, 0, (byte) 129 });
|
||||||
|
mNai.linkProperties.addLinkAddress(new LinkAddress(srcAddress, 24));
|
||||||
mNai.linkProperties.addStackedLink(stacked);
|
mNai.linkProperties.addStackedLink(stacked);
|
||||||
|
}
|
||||||
|
|
||||||
|
private TestKeepaliveInfo doStartTcpKeepalive(InetAddress srcAddr) throws Exception {
|
||||||
|
final KeepalivePacketData kpd = new TcpKeepalivePacketData(
|
||||||
|
srcAddr,
|
||||||
|
12345 /* srcPort */,
|
||||||
|
InetAddress.getByAddress(new byte[] { 8, 8, 8, 8}) /* dstAddr */,
|
||||||
|
12345 /* dstPort */, new byte[] {1}, 111 /* tcpSeq */,
|
||||||
|
222 /* tcpAck */, 800 /* tcpWindow */, 2 /* tcpWindowScale */,
|
||||||
|
4 /* ipTos */, 64 /* ipTtl */);
|
||||||
|
final TestKeepaliveInfo testInfo = new TestKeepaliveInfo(kpd);
|
||||||
|
|
||||||
|
final KeepaliveInfo ki = mKeepaliveTracker.new KeepaliveInfo(
|
||||||
|
testInfo.socketKeepaliveCallback, mNai, kpd,
|
||||||
|
TEST_KEEPALIVE_INTERVAL_SEC, KeepaliveInfo.TYPE_TCP, testInfo.fd);
|
||||||
|
mKeepaliveTracker.setReturnedKeepaliveInfo(ki);
|
||||||
|
|
||||||
|
// Setup TCP keepalive.
|
||||||
|
mAOOKeepaliveTracker.startTcpKeepalive(mNai, testInfo.fd, TEST_KEEPALIVE_INTERVAL_SEC,
|
||||||
|
testInfo.socketKeepaliveCallback);
|
||||||
|
HandlerUtils.waitForIdle(mTestHandler, TIMEOUT_MS);
|
||||||
|
return testInfo;
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void testStartTcpKeepalive_addressTranslationOnClat() throws Exception {
|
||||||
|
setupTestNaiForClat(InetAddresses.parseNumericAddress("2001:db8::1") /* v6Src */,
|
||||||
|
InetAddresses.parseNumericAddress("2001:db8::2") /* v6Dst */);
|
||||||
|
final InetAddress srcAddr = InetAddress.getByAddress(V4_SRC_ADDR);
|
||||||
|
doStartTcpKeepalive(srcAddr);
|
||||||
|
final ArgumentCaptor<TcpKeepalivePacketData> tpdCaptor =
|
||||||
|
ArgumentCaptor.forClass(TcpKeepalivePacketData.class);
|
||||||
|
verify(mNai).onStartTcpSocketKeepalive(
|
||||||
|
eq(TEST_SLOT), eq(TEST_KEEPALIVE_INTERVAL_SEC), tpdCaptor.capture());
|
||||||
|
final TcpKeepalivePacketData tpd = tpdCaptor.getValue();
|
||||||
|
// Verify the addresses still be the same address when clat is started.
|
||||||
|
assertEquals(srcAddr, tpd.getSrcAddress());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testStartNattKeepalive_addressTranslationOnClat() throws Exception {
|
||||||
|
final InetAddress v6AddrSrc = InetAddresses.parseNumericAddress("2001:db8::1");
|
||||||
|
final InetAddress v6AddrDst = InetAddresses.parseNumericAddress("2001:db8::2");
|
||||||
|
setupTestNaiForClat(v6AddrSrc, v6AddrDst);
|
||||||
|
|
||||||
final TestKeepaliveInfo testInfo = doStartNattKeepalive();
|
final TestKeepaliveInfo testInfo = doStartNattKeepalive();
|
||||||
final ArgumentCaptor<NattKeepalivePacketData> kpdCaptor =
|
final ArgumentCaptor<NattKeepalivePacketData> kpdCaptor =
|
||||||
@@ -899,24 +942,8 @@ public class AutomaticOnOffKeepaliveTrackerTest {
|
|||||||
new byte[] { (byte) 192, 0, 0, (byte) 129 });
|
new byte[] { (byte) 192, 0, 0, (byte) 129 });
|
||||||
mNai.linkProperties.addLinkAddress(new LinkAddress(srcAddress, 24));
|
mNai.linkProperties.addLinkAddress(new LinkAddress(srcAddress, 24));
|
||||||
|
|
||||||
final KeepalivePacketData kpd = new TcpKeepalivePacketData(
|
final TestKeepaliveInfo testInfo =
|
||||||
InetAddress.getByAddress(new byte[] { (byte) 192, 0, 0, (byte) 129 }) /* srcAddr */,
|
doStartTcpKeepalive(InetAddress.getByAddress(V4_SRC_ADDR));
|
||||||
12345 /* srcPort */,
|
|
||||||
InetAddress.getByAddress(new byte[] { 8, 8, 8, 8}) /* dstAddr */,
|
|
||||||
12345 /* dstPort */, new byte[] {1}, 111 /* tcpSeq */,
|
|
||||||
222 /* tcpAck */, 800 /* tcpWindow */, 2 /* tcpWindowScale */,
|
|
||||||
4 /* ipTos */, 64 /* ipTtl */);
|
|
||||||
final TestKeepaliveInfo testInfo = new TestKeepaliveInfo(kpd);
|
|
||||||
|
|
||||||
final KeepaliveInfo ki = mKeepaliveTracker.new KeepaliveInfo(
|
|
||||||
testInfo.socketKeepaliveCallback, mNai, kpd,
|
|
||||||
TEST_KEEPALIVE_INTERVAL_SEC, KeepaliveInfo.TYPE_TCP, testInfo.fd);
|
|
||||||
mKeepaliveTracker.setReturnedKeepaliveInfo(ki);
|
|
||||||
|
|
||||||
// Setup TCP keepalive.
|
|
||||||
mAOOKeepaliveTracker.startTcpKeepalive(mNai, testInfo.fd, TEST_KEEPALIVE_INTERVAL_SEC,
|
|
||||||
testInfo.socketKeepaliveCallback);
|
|
||||||
HandlerUtils.waitForIdle(mTestHandler, TIMEOUT_MS);
|
|
||||||
|
|
||||||
// A closed socket will result in EVENT_HANGUP and trigger error to
|
// A closed socket will result in EVENT_HANGUP and trigger error to
|
||||||
// FileDescriptorEventListener.
|
// FileDescriptorEventListener.
|
||||||
@@ -924,6 +951,6 @@ public class AutomaticOnOffKeepaliveTrackerTest {
|
|||||||
HandlerUtils.waitForIdle(mTestHandler, TIMEOUT_MS);
|
HandlerUtils.waitForIdle(mTestHandler, TIMEOUT_MS);
|
||||||
|
|
||||||
// The keepalive should be removed in AutomaticOnOffKeepaliveTracker.
|
// The keepalive should be removed in AutomaticOnOffKeepaliveTracker.
|
||||||
getAutoKiForBinder(testInfo.binder);
|
assertNull(getAutoKiForBinder(testInfo.binder));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user