Copy clat modified linkProperties into new one.

updateLinkProperties copied the linkProperties in networkAgent,
but the clat fix-up function did not copy stacked link into new one.
This caused an incorrect clat iface removal, and the IPv4 network
 to be unreachable.

Bug: 80261579
Test: 1. ping after ipv6 only data call with 2g voice call on/off
      2. runtest frameworks-net
      3. run cts -m CtsNetTestCases
Change-Id: Ide47a3b0680dddfcf3e2e759a59b19aee3605050
This commit is contained in:
junyulai
2018-06-05 16:10:04 +08:00
committed by Junyu Lai
parent c58ef904d5
commit 6adee26d73
2 changed files with 3 additions and 4 deletions

View File

@@ -4690,7 +4690,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
// The NetworkAgentInfo does not know whether clatd is running on its network or not. Before
// we do anything else, make sure its LinkProperties are accurate.
if (networkAgent.clatd != null) {
networkAgent.clatd.fixupLinkProperties(oldLp);
networkAgent.clatd.fixupLinkProperties(oldLp, newLp);
}
updateInterfaces(newLp, oldLp, netId, networkAgent.networkCapabilities);

View File

@@ -224,15 +224,14 @@ public class Nat464Xlat extends BaseNetworkObserver {
}
/**
* Copies the stacked clat link in oldLp, if any, to the LinkProperties in mNetwork.
* Copies the stacked clat link in oldLp, if any, to the passed LinkProperties.
* This is necessary because the LinkProperties in mNetwork come from the transport layer, which
* has no idea that 464xlat is running on top of it.
*/
public void fixupLinkProperties(LinkProperties oldLp) {
public void fixupLinkProperties(LinkProperties oldLp, LinkProperties lp) {
if (!isRunning()) {
return;
}
LinkProperties lp = mNetwork.linkProperties;
if (lp == null || lp.getAllInterfaceNames().contains(mIface)) {
return;
}