Send tethered interface callbacks based on interface existence.

Currently, callbacks for tethered interface availability are sent
based on interface link state. This is incorrect:

- It is acceptable and expected to be able to enable tethering on
  an interface that does not yet have link up.
- It doesn't seem useful to disable Ethernet tethering if link
  temporarily goes down.

Instead, only base the callbacks on whether an interface exists
or not.

Bug: 150644681
Test: WIP tests in aosp/1260100 pass
Change-Id: I015219cbd03626c38fb5156d0cb2991ba7d7def7
This commit is contained in:
Lorenzo Colitti
2020-03-19 14:36:24 +09:00
parent e81f99d532
commit 165b456d92

View File

@@ -262,6 +262,7 @@ final class EthernetTracker {
private void removeInterface(String iface) { private void removeInterface(String iface) {
mFactory.removeInterface(iface); mFactory.removeInterface(iface);
maybeUpdateServerModeInterfaceState(iface, false);
} }
private void stopTrackingInterface(String iface) { private void stopTrackingInterface(String iface) {
@@ -308,6 +309,8 @@ final class EthernetTracker {
Log.d(TAG, "Started tracking interface " + iface); Log.d(TAG, "Started tracking interface " + iface);
mFactory.addInterface(iface, hwAddress, nc, ipConfiguration); mFactory.addInterface(iface, hwAddress, nc, ipConfiguration);
} else {
maybeUpdateServerModeInterfaceState(iface, true);
} }
// Note: if the interface already has link (e.g., if we crashed and got // Note: if the interface already has link (e.g., if we crashed and got
@@ -341,12 +344,9 @@ final class EthernetTracker {
} }
mListeners.finishBroadcast(); mListeners.finishBroadcast();
} }
updateServerModeInterfaceState(iface, up, mode);
} }
private void updateServerModeInterfaceState(String iface, boolean up, int mode) { private void maybeUpdateServerModeInterfaceState(String iface, boolean available) {
final boolean available = up && (mode == INTERFACE_MODE_SERVER);
if (available == mTetheredInterfaceWasAvailable || !iface.equals(mDefaultInterface)) return; if (available == mTetheredInterfaceWasAvailable || !iface.equals(mDefaultInterface)) return;
final int pendingCbs = mTetheredInterfaceRequests.beginBroadcast(); final int pendingCbs = mTetheredInterfaceRequests.beginBroadcast();