summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlucaslin <lucaslin@google.com>2018-11-28 12:51:55 +0800
committerLucas Lin <lucaslin@google.com>2018-11-28 06:16:38 +0000
commit25a4ec359202a6a038b2f675684090c229cf317b (patch)
tree465daddd578dc3ca39d2d2977aa39b33cd19b54f
parent67c6ab38ba1b6dbdae46a4425dd66bb9147374c0 (diff)
downloadbase-25a4ec359202a6a038b2f675684090c229cf317b.tar.gz
Update LinkProperties to NetworkAgentInfo only when it's changed
In previous design, it will always assign newLp to nai in handleUpdateLinkProperties(). And Private dns configuration will be missing when the same LinkProperties are updated because the updated LinkProperties is not assigned back to NetworkAgentInfo. Bug: 118518971 Test: 1.Build pass. 2.runtest frameworks-net Change-Id: I405c8f29497fec438082a2cf30eb5c7b9497e1c4
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java33
1 files changed, 16 insertions, 17 deletions
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 74c80237d721..4152a978965b 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -2073,12 +2073,14 @@ public class ConnectivityService extends IConnectivityManager.Stub
return new MockableSystemProperties();
}
- private void updateTcpBufferSizes(NetworkAgentInfo nai) {
+ // TODO: Replace nai and newLp with TcpBufferSizes and check default network before calling
+ // this method.
+ private void updateTcpBufferSizes(NetworkAgentInfo nai, LinkProperties newLp) {
if (isDefaultNetwork(nai) == false) {
return;
}
- String tcpBufferSizes = nai.linkProperties.getTcpBufferSizes();
+ String tcpBufferSizes = newLp.getTcpBufferSizes();
String[] values = null;
if (tcpBufferSizes != null) {
values = tcpBufferSizes.split(",");
@@ -4728,8 +4730,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
updateUids(nai, null, nai.networkCapabilities);
}
- private void updateLinkProperties(NetworkAgentInfo networkAgent, LinkProperties oldLp) {
- LinkProperties newLp = new LinkProperties(networkAgent.linkProperties);
+ private void updateLinkProperties(NetworkAgentInfo networkAgent, LinkProperties newLp,
+ LinkProperties oldLp) {
int netId = networkAgent.network.netId;
// The NetworkAgentInfo does not know whether clatd is running on its network or not. Before
@@ -4744,7 +4746,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
// for (LinkProperties lp : newLp.getStackedLinks()) {
// updateMtu(lp, null);
// }
- updateTcpBufferSizes(networkAgent);
+ updateTcpBufferSizes(networkAgent, newLp);
updateRoutes(newLp, oldLp, netId);
updateDnses(newLp, oldLp, netId);
@@ -4754,8 +4756,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
// updateDnses will fetch the private DNS configuration from DnsManager.
mDnsManager.updatePrivateDnsStatus(netId, newLp);
- // Start or stop clat accordingly to network state.
- networkAgent.updateClat(mNMS);
if (isDefaultNetwork(networkAgent)) {
handleApplyDefaultProxy(newLp.getHttpProxy());
} else {
@@ -4766,8 +4766,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
synchronized (networkAgent) {
networkAgent.linkProperties = newLp;
}
+ // Start or stop clat accordingly to network state.
+ networkAgent.updateClat(mNMS);
notifyIfacesChangedForNetworkStats();
- notifyNetworkCallbacks(networkAgent, ConnectivityManager.CALLBACK_IP_CHANGED);
+ if (networkAgent.everConnected) {
+ notifyNetworkCallbacks(networkAgent, ConnectivityManager.CALLBACK_IP_CHANGED);
+ }
}
mKeepaliveTracker.handleCheckKeepalivesStillValid(networkAgent);
@@ -5072,13 +5076,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
"; created=" + nai.created +
"; everConnected=" + nai.everConnected);
}
- LinkProperties oldLp = nai.linkProperties;
- synchronized (nai) {
- nai.linkProperties = newLp;
- }
- if (nai.everConnected) {
- updateLinkProperties(nai, oldLp);
- }
+ updateLinkProperties(nai, newLp, new LinkProperties(nai.linkProperties));
}
private void sendUpdatedScoreToFactories(NetworkAgentInfo nai) {
@@ -5239,7 +5237,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
notifyLockdownVpn(newNetwork);
handleApplyDefaultProxy(newNetwork.linkProperties.getHttpProxy());
- updateTcpBufferSizes(newNetwork);
+ updateTcpBufferSizes(newNetwork, new LinkProperties(newNetwork.linkProperties));
mDnsManager.setDefaultDnsSystemProperties(newNetwork.linkProperties.getDnsServers());
notifyIfacesChangedForNetworkStats();
}
@@ -5654,7 +5652,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
}
handlePerNetworkPrivateDnsConfig(networkAgent, mDnsManager.getPrivateDnsConfig());
- updateLinkProperties(networkAgent, null);
+ updateLinkProperties(networkAgent, new LinkProperties(networkAgent.linkProperties),
+ null);
networkAgent.networkMonitor.sendMessage(NetworkMonitor.CMD_NETWORK_CONNECTED);
scheduleUnvalidatedPrompt(networkAgent);