Remove BaseNetworkObserver from Nat464Xlat
Let ConnectivityService talk to Nat464Xlat through NetworkAgnetInfo directly: - Nat464Xlat will be created once there is a new network bringing up, but Netd doesn't expose the method for unregistering unsolicited event. - ConnectivityService has already registered netd unsolicited event listener, so Nat464Xlat doesn't need to register unsolicited event listenser by itself, it can get the unsolicited event from ConnectivityService directly. Bug: 174837473 Test: atest FrameworksNetTests Change-Id: I751526e8ffa7d25591696ecd8d93b1585c4c20c7
This commit is contained in:
@@ -8662,6 +8662,20 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
long timestampNs, int uid) {
|
long timestampNs, int uid) {
|
||||||
mNetworkActivityTracker.setAndReportNetworkActive(isActive, timerLabel, timestampNs);
|
mNetworkActivityTracker.setAndReportNetworkActive(isActive, timerLabel, timestampNs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInterfaceLinkStateChanged(String iface, boolean up) {
|
||||||
|
for (NetworkAgentInfo nai: mNetworkAgentInfos) {
|
||||||
|
nai.clatd.interfaceLinkStateChanged(iface, up);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInterfaceRemoved(String iface) {
|
||||||
|
for (NetworkAgentInfo nai: mNetworkAgentInfos) {
|
||||||
|
nai.clatd.interfaceRemoved(iface);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final LegacyNetworkActivityTracker mNetworkActivityTracker;
|
private final LegacyNetworkActivityTracker mNetworkActivityTracker;
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.net.module.util.NetworkStackConstants;
|
import com.android.net.module.util.NetworkStackConstants;
|
||||||
import com.android.server.net.BaseNetworkObserver;
|
|
||||||
|
|
||||||
import java.net.Inet6Address;
|
import java.net.Inet6Address;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -48,7 +47,7 @@ import java.util.Objects;
|
|||||||
*
|
*
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public class Nat464Xlat extends BaseNetworkObserver {
|
public class Nat464Xlat {
|
||||||
private static final String TAG = Nat464Xlat.class.getSimpleName();
|
private static final String TAG = Nat464Xlat.class.getSimpleName();
|
||||||
|
|
||||||
// This must match the interface prefix in clatd.c.
|
// This must match the interface prefix in clatd.c.
|
||||||
@@ -174,13 +173,6 @@ public class Nat464Xlat extends BaseNetworkObserver {
|
|||||||
* and set internal state.
|
* and set internal state.
|
||||||
*/
|
*/
|
||||||
private void enterStartingState(String baseIface) {
|
private void enterStartingState(String baseIface) {
|
||||||
try {
|
|
||||||
mNMService.registerObserver(this);
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
Log.e(TAG, "Can't register iface observer for clat on " + mNetwork.toShortString());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
mNat64PrefixInUse = selectNat64Prefix();
|
mNat64PrefixInUse = selectNat64Prefix();
|
||||||
String addrStr = null;
|
String addrStr = null;
|
||||||
try {
|
try {
|
||||||
@@ -216,11 +208,6 @@ public class Nat464Xlat extends BaseNetworkObserver {
|
|||||||
* Unregister as a base observer for the stacked interface, and clear internal state.
|
* Unregister as a base observer for the stacked interface, and clear internal state.
|
||||||
*/
|
*/
|
||||||
private void leaveStartedState() {
|
private void leaveStartedState() {
|
||||||
try {
|
|
||||||
mNMService.unregisterObserver(this);
|
|
||||||
} catch (RemoteException | IllegalStateException e) {
|
|
||||||
Log.e(TAG, "Error unregistering clatd observer on " + mBaseIface + ": " + e);
|
|
||||||
}
|
|
||||||
mNat64PrefixInUse = null;
|
mNat64PrefixInUse = null;
|
||||||
mIface = null;
|
mIface = null;
|
||||||
mBaseIface = null;
|
mBaseIface = null;
|
||||||
@@ -507,12 +494,10 @@ public class Nat464Xlat extends BaseNetworkObserver {
|
|||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void interfaceLinkStateChanged(String iface, boolean up) {
|
public void interfaceLinkStateChanged(String iface, boolean up) {
|
||||||
mNetwork.handler().post(() -> { handleInterfaceLinkStateChanged(iface, up); });
|
mNetwork.handler().post(() -> { handleInterfaceLinkStateChanged(iface, up); });
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void interfaceRemoved(String iface) {
|
public void interfaceRemoved(String iface) {
|
||||||
mNetwork.handler().post(() -> handleInterfaceRemoved(iface));
|
mNetwork.handler().post(() -> handleInterfaceRemoved(iface));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -206,7 +206,6 @@ public class Nat464XlatTest {
|
|||||||
// Start clat.
|
// Start clat.
|
||||||
nat.start();
|
nat.start();
|
||||||
|
|
||||||
verify(mNms).registerObserver(eq(nat));
|
|
||||||
verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
|
verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
|
||||||
|
|
||||||
// Stacked interface up notification arrives.
|
// Stacked interface up notification arrives.
|
||||||
@@ -225,7 +224,6 @@ public class Nat464XlatTest {
|
|||||||
|
|
||||||
verify(mNetd).clatdStop(eq(BASE_IFACE));
|
verify(mNetd).clatdStop(eq(BASE_IFACE));
|
||||||
verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture());
|
verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture());
|
||||||
verify(mNms).unregisterObserver(eq(nat));
|
|
||||||
assertTrue(c.getValue().getStackedLinks().isEmpty());
|
assertTrue(c.getValue().getStackedLinks().isEmpty());
|
||||||
assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
|
assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
|
||||||
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
|
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
|
||||||
@@ -346,7 +344,6 @@ public class Nat464XlatTest {
|
|||||||
|
|
||||||
nat.start();
|
nat.start();
|
||||||
|
|
||||||
verify(mNms).registerObserver(eq(nat));
|
|
||||||
verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
|
verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
|
||||||
|
|
||||||
// Stacked interface up notification arrives.
|
// Stacked interface up notification arrives.
|
||||||
@@ -365,7 +362,6 @@ public class Nat464XlatTest {
|
|||||||
|
|
||||||
verify(mNetd).clatdStop(eq(BASE_IFACE));
|
verify(mNetd).clatdStop(eq(BASE_IFACE));
|
||||||
verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture());
|
verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture());
|
||||||
verify(mNms).unregisterObserver(eq(nat));
|
|
||||||
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
|
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
|
||||||
assertTrue(c.getValue().getStackedLinks().isEmpty());
|
assertTrue(c.getValue().getStackedLinks().isEmpty());
|
||||||
assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
|
assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
|
||||||
@@ -386,7 +382,6 @@ public class Nat464XlatTest {
|
|||||||
|
|
||||||
nat.start();
|
nat.start();
|
||||||
|
|
||||||
verify(mNms).registerObserver(eq(nat));
|
|
||||||
verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
|
verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
|
||||||
|
|
||||||
// ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...)
|
// ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...)
|
||||||
@@ -394,7 +389,6 @@ public class Nat464XlatTest {
|
|||||||
nat.stop();
|
nat.stop();
|
||||||
|
|
||||||
verify(mNetd).clatdStop(eq(BASE_IFACE));
|
verify(mNetd).clatdStop(eq(BASE_IFACE));
|
||||||
verify(mNms).unregisterObserver(eq(nat));
|
|
||||||
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
|
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
|
||||||
assertIdle(nat);
|
assertIdle(nat);
|
||||||
|
|
||||||
@@ -430,7 +424,6 @@ public class Nat464XlatTest {
|
|||||||
|
|
||||||
nat.start();
|
nat.start();
|
||||||
|
|
||||||
verify(mNms).registerObserver(eq(nat));
|
|
||||||
verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
|
verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
|
||||||
|
|
||||||
// ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...)
|
// ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...)
|
||||||
@@ -438,7 +431,6 @@ public class Nat464XlatTest {
|
|||||||
nat.stop();
|
nat.stop();
|
||||||
|
|
||||||
verify(mNetd).clatdStop(eq(BASE_IFACE));
|
verify(mNetd).clatdStop(eq(BASE_IFACE));
|
||||||
verify(mNms).unregisterObserver(eq(nat));
|
|
||||||
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
|
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
|
||||||
assertIdle(nat);
|
assertIdle(nat);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user