[Thread] avoid re-setting the infra link state when the state doesn't change
In the situation where infra state changes very frequently, it may cause the border routing to frequently restart.
Bug: 377821980
Test: atest ThreadNetworkIntegrationTests
Change-Id: Id2862b0db7e01f89da20c56c4ad2f0086d4b6a98
diff --git a/thread/service/java/com/android/server/thread/ThreadNetworkControllerService.java b/thread/service/java/com/android/server/thread/ThreadNetworkControllerService.java
index e3c2a28..8747b44 100644
--- a/thread/service/java/com/android/server/thread/ThreadNetworkControllerService.java
+++ b/thread/service/java/com/android/server/thread/ThreadNetworkControllerService.java
@@ -1405,9 +1405,10 @@
}
private void setInfraLinkState(InfraLinkState newInfraLinkState) {
- if (!Objects.equals(mInfraLinkState, newInfraLinkState)) {
- LOG.i("Infra link state changed: " + mInfraLinkState + " -> " + newInfraLinkState);
+ if (Objects.equals(mInfraLinkState, newInfraLinkState)) {
+ return ;
}
+ LOG.i("Infra link state changed: " + mInfraLinkState + " -> " + newInfraLinkState);
setInfraLinkInterfaceName(newInfraLinkState.interfaceName);
setInfraLinkNat64Prefix(newInfraLinkState.nat64Prefix);
setInfraLinkDnsServers(newInfraLinkState.dnsServers);
@@ -1415,6 +1416,9 @@
}
private void setInfraLinkInterfaceName(String newInfraLinkInterfaceName) {
+ if (Objects.equals(mInfraLinkState.interfaceName, newInfraLinkInterfaceName)) {
+ return ;
+ }
ParcelFileDescriptor infraIcmp6Socket = null;
if (newInfraLinkInterfaceName != null) {
try {
@@ -1435,6 +1439,9 @@
}
private void setInfraLinkNat64Prefix(@Nullable String newNat64Prefix) {
+ if (Objects.equals(newNat64Prefix, mInfraLinkState.nat64Prefix)) {
+ return ;
+ }
try {
getOtDaemon()
.setInfraLinkNat64Prefix(
@@ -1445,6 +1452,9 @@
}
private void setInfraLinkDnsServers(List<String> newDnsServers) {
+ if (Objects.equals(newDnsServers, mInfraLinkState.dnsServers)) {
+ return ;
+ }
try {
getOtDaemon()
.setInfraLinkDnsServers(
@@ -1783,6 +1793,7 @@
// do nothing if the client is dead
}
}
+ mInfraLinkState = newInfraLinkStateBuilder().build();
}
private void onThreadEnabledChanged(int state, long listenerId) {