From 0c30d949df02680632ce1dd33fb67efe2f92b65f Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Thu, 19 Mar 2020 15:52:09 +0000 Subject: [PATCH] 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 Merged-In: I015219cbd03626c38fb5156d0cb2991ba7d7def7 (cherry picked from commit 64d12ea20ce3cd822518e0f15ed7483a2fb91a50) --- .../src/com/android/server/ethernet/EthernetTracker.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/service-t/src/com/android/server/ethernet/EthernetTracker.java b/service-t/src/com/android/server/ethernet/EthernetTracker.java index d1f1402311..336ddef23a 100644 --- a/service-t/src/com/android/server/ethernet/EthernetTracker.java +++ b/service-t/src/com/android/server/ethernet/EthernetTracker.java @@ -262,6 +262,7 @@ final class EthernetTracker { private void removeInterface(String iface) { mFactory.removeInterface(iface); + maybeUpdateServerModeInterfaceState(iface, false); } private void stopTrackingInterface(String iface) { @@ -308,6 +309,8 @@ final class EthernetTracker { Log.d(TAG, "Started tracking interface " + iface); mFactory.addInterface(iface, hwAddress, nc, ipConfiguration); + } else { + maybeUpdateServerModeInterfaceState(iface, true); } // Note: if the interface already has link (e.g., if we crashed and got @@ -341,12 +344,9 @@ final class EthernetTracker { } mListeners.finishBroadcast(); } - - updateServerModeInterfaceState(iface, up, mode); } - private void updateServerModeInterfaceState(String iface, boolean up, int mode) { - final boolean available = up && (mode == INTERFACE_MODE_SERVER); + private void maybeUpdateServerModeInterfaceState(String iface, boolean available) { if (available == mTetheredInterfaceWasAvailable || !iface.equals(mDefaultInterface)) return; final int pendingCbs = mTetheredInterfaceRequests.beginBroadcast();