Merge "Notify NetworkStats only when interfaces changed in updateLinkProperties"
This commit is contained in:
commit
0f4cb380f0
3 changed files with 23 additions and 4 deletions
|
|
@ -7500,7 +7500,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
}
|
||||
|
||||
private void updateLinkProperties(NetworkAgentInfo networkAgent, @NonNull LinkProperties newLp,
|
||||
@NonNull LinkProperties oldLp) {
|
||||
@Nullable LinkProperties oldLp) {
|
||||
int netId = networkAgent.network.getNetId();
|
||||
|
||||
// The NetworkAgent does not know whether clatd is running on its network or not, or whether
|
||||
|
|
@ -7552,7 +7552,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
}
|
||||
// Start or stop DNS64 detection and 464xlat according to network state.
|
||||
networkAgent.clatd.update();
|
||||
notifyIfacesChangedForNetworkStats();
|
||||
// Notify NSS when relevant events happened. Currently, NSS only cares about
|
||||
// interface changed to update clat interfaces accounting.
|
||||
final boolean interfacesChanged = oldLp == null
|
||||
|| !Objects.equals(newLp.getAllInterfaceNames(), oldLp.getAllInterfaceNames());
|
||||
if (interfacesChanged) {
|
||||
notifyIfacesChangedForNetworkStats();
|
||||
}
|
||||
networkAgent.networkMonitor().notifyLinkPropertiesChanged(
|
||||
new LinkProperties(newLp, true /* parcelSensitiveFields */));
|
||||
notifyNetworkCallbacks(networkAgent, ConnectivityManager.CALLBACK_IP_CHANGED);
|
||||
|
|
@ -8315,7 +8321,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
}
|
||||
}
|
||||
|
||||
public void handleUpdateLinkProperties(NetworkAgentInfo nai, LinkProperties newLp) {
|
||||
public void handleUpdateLinkProperties(@NonNull NetworkAgentInfo nai,
|
||||
@NonNull LinkProperties newLp) {
|
||||
ensureRunningOnConnectivityServiceThread();
|
||||
|
||||
if (!mNetworkAgentInfos.contains(nai)) {
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import static android.net.NetworkCapabilities.TRANSPORT_TEST;
|
|||
import static com.android.net.module.util.CollectionUtils.contains;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.IDnsResolver;
|
||||
import android.net.INetd;
|
||||
|
|
@ -420,7 +421,7 @@ public class Nat464Xlat {
|
|||
* 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(@NonNull LinkProperties oldLp, @NonNull LinkProperties lp) {
|
||||
public void fixupLinkProperties(@Nullable LinkProperties oldLp, @NonNull LinkProperties lp) {
|
||||
// This must be done even if clatd is not running, because otherwise shouldStartClat would
|
||||
// never return true.
|
||||
lp.setNat64Prefix(selectNat64Prefix());
|
||||
|
|
@ -433,6 +434,8 @@ public class Nat464Xlat {
|
|||
}
|
||||
|
||||
Log.d(TAG, "clatd running, updating NAI for " + mIface);
|
||||
// oldLp can't be null here since shouldStartClat checks null LinkProperties to start clat.
|
||||
// Thus, the status won't pass isRunning check if the oldLp is null.
|
||||
for (LinkProperties stacked: oldLp.getStackedLinks()) {
|
||||
if (Objects.equals(mIface, stacked.getInterfaceName())) {
|
||||
lp.addStackedLink(stacked);
|
||||
|
|
|
|||
|
|
@ -7236,6 +7236,15 @@ public class ConnectivityServiceTest {
|
|||
expectNotifyNetworkStatus(onlyCell(), onlyCell(), MOBILE_IFNAME);
|
||||
reset(mStatsManager);
|
||||
|
||||
// Verify change fields other than interfaces does not trigger a notification to NSS.
|
||||
cellLp.addLinkAddress(new LinkAddress("192.0.2.4/24"));
|
||||
cellLp.addRoute(new RouteInfo((IpPrefix) null, InetAddress.getByName("192.0.2.4"),
|
||||
MOBILE_IFNAME));
|
||||
cellLp.setDnsServers(List.of(InetAddress.getAllByName("8.8.8.8")));
|
||||
mCellNetworkAgent.sendLinkProperties(cellLp);
|
||||
verifyNoMoreInteractions(mStatsManager);
|
||||
reset(mStatsManager);
|
||||
|
||||
// Default network switch should update ifaces.
|
||||
mWiFiNetworkAgent.connect(false);
|
||||
mWiFiNetworkAgent.sendLinkProperties(wifiLp);
|
||||
|
|
|
|||
Loading…
Reference in a new issue