Handle neighbor lost event am: e600bef8f9 am: dab9bb4938 am: a108e9b47d

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/net/ethernet/+/1586426

Change-Id: Ic5a7f0485035462b017adf15c4ae1c5c1b5baa82
This commit is contained in:
Pavan Kumar M
2021-12-16 02:24:00 +00:00
committed by Automerger Merge Worker
2 changed files with 32 additions and 0 deletions

View File

@@ -346,6 +346,11 @@ public class EthernetNetworkFactory extends NetworkFactory {
mHandler.post(() -> updateLinkProperties(newLp));
}
@Override
public void onReachabilityLost(String logMsg) {
mHandler.post(() -> updateNeighborLostEvent(logMsg));
}
@Override
public void onQuit() {
mIpClient = null;
@@ -479,6 +484,17 @@ public class EthernetNetworkFactory extends NetworkFactory {
}
}
void updateNeighborLostEvent(String logMsg) {
Log.i(TAG, "updateNeighborLostEvent " + logMsg);
// Reachability lost will be seen only if the gateway is not reachable.
// Since ethernet FW doesn't have the mechanism to scan for new networks
// like WiFi, simply restart.
// If there is a better network, that will become default and apps
// will be able to use internet. If ethernet gets connected again,
// and has backhaul connectivity, it will become default.
restart();
}
/** Returns true if state has been modified */
boolean updateLinkState(boolean up) {
if (mLinkUp == up) return false;

View File

@@ -434,4 +434,20 @@ public class EthernetNetworkFactoryTest {
ConnectivityManager.TYPE_NONE);
mNetFactory.removeInterface(iface);
}
@Test
public void testReachabilityLoss() throws Exception {
String iface = "eth0";
createAndVerifyProvisionedInterface(iface);
mIpClientCallbacks.onReachabilityLost("ReachabilityLost");
mLooper.dispatchAll();
// Reachability loss should trigger a stop and start, since the interface is still there
verify(mIpClient).shutdown();
verify(mNetworkAgent).unregister();
verify(mDeps).makeIpClient(any(Context.class), anyString(), any());
verify(mIpClient).startProvisioning(any());
}
}