diff --git a/Tethering/src/android/net/ip/IpServer.java b/Tethering/src/android/net/ip/IpServer.java index a213ac45f6..5cdd6abb2a 100644 --- a/Tethering/src/android/net/ip/IpServer.java +++ b/Tethering/src/android/net/ip/IpServer.java @@ -44,7 +44,6 @@ import android.net.LinkAddress; import android.net.LinkProperties; import android.net.MacAddress; import android.net.RouteInfo; -import android.net.RoutingCoordinatorManager; import android.net.TetheredClient; import android.net.TetheringManager; import android.net.TetheringManager.TetheringRequest; @@ -72,6 +71,7 @@ import com.android.internal.util.State; import com.android.modules.utils.build.SdkLevel; import com.android.net.module.util.InterfaceParams; import com.android.net.module.util.NetdUtils; +import com.android.net.module.util.RoutingCoordinatorManager; import com.android.net.module.util.SdkUtil.LateSdk; import com.android.net.module.util.SharedLog; import com.android.net.module.util.SyncStateMachine.StateInfo; diff --git a/Tethering/src/com/android/networkstack/tethering/Tethering.java b/Tethering/src/com/android/networkstack/tethering/Tethering.java index c310f16778..163fe24749 100644 --- a/Tethering/src/com/android/networkstack/tethering/Tethering.java +++ b/Tethering/src/com/android/networkstack/tethering/Tethering.java @@ -91,7 +91,6 @@ import android.net.LinkAddress; import android.net.LinkProperties; import android.net.Network; import android.net.NetworkInfo; -import android.net.RoutingCoordinatorManager; import android.net.TetherStatesParcel; import android.net.TetheredClient; import android.net.TetheringCallbackStartedParcel; @@ -138,6 +137,7 @@ import com.android.net.module.util.BaseNetdUnsolicitedEventListener; import com.android.net.module.util.CollectionUtils; import com.android.net.module.util.HandlerUtils; import com.android.net.module.util.NetdUtils; +import com.android.net.module.util.RoutingCoordinatorManager; import com.android.net.module.util.SdkUtil.LateSdk; import com.android.net.module.util.SharedLog; import com.android.networkstack.apishim.common.BluetoothPanShim; diff --git a/Tethering/src/com/android/networkstack/tethering/TetheringDependencies.java b/Tethering/src/com/android/networkstack/tethering/TetheringDependencies.java index 3f860566d3..54dbf6ca54 100644 --- a/Tethering/src/com/android/networkstack/tethering/TetheringDependencies.java +++ b/Tethering/src/com/android/networkstack/tethering/TetheringDependencies.java @@ -22,7 +22,6 @@ import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothPan; import android.content.Context; import android.net.INetd; -import android.net.RoutingCoordinatorManager; import android.net.connectivity.ConnectivityInternalApiUtil; import android.net.ip.IpServer; import android.os.Build; @@ -36,6 +35,7 @@ import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import com.android.modules.utils.build.SdkLevel; +import com.android.net.module.util.RoutingCoordinatorManager; import com.android.net.module.util.SdkUtil.LateSdk; import com.android.net.module.util.SharedLog; import com.android.networkstack.apishim.BluetoothPanShimImpl; @@ -132,7 +132,8 @@ public abstract class TetheringDependencies { public LateSdk getRoutingCoordinator(Context context) { if (!SdkLevel.isAtLeastS()) return new LateSdk<>(null); return new LateSdk<>( - ConnectivityInternalApiUtil.getRoutingCoordinatorManager(context)); + new RoutingCoordinatorManager( + context, ConnectivityInternalApiUtil.getRoutingCoordinator(context))); } /** diff --git a/Tethering/tests/unit/src/android/net/ip/IpServerTest.java b/Tethering/tests/unit/src/android/net/ip/IpServerTest.java index 00eb3b16b6..748f23cfc6 100644 --- a/Tethering/tests/unit/src/android/net/ip/IpServerTest.java +++ b/Tethering/tests/unit/src/android/net/ip/IpServerTest.java @@ -73,7 +73,6 @@ import android.net.LinkAddress; import android.net.LinkProperties; import android.net.MacAddress; import android.net.RouteInfo; -import android.net.RoutingCoordinatorManager; import android.net.dhcp.DhcpServerCallbacks; import android.net.dhcp.DhcpServingParamsParcel; import android.net.dhcp.IDhcpEventCallbacks; @@ -91,6 +90,7 @@ import androidx.test.runner.AndroidJUnit4; import com.android.modules.utils.build.SdkLevel; import com.android.net.module.util.InterfaceParams; +import com.android.net.module.util.RoutingCoordinatorManager; import com.android.net.module.util.SdkUtil.LateSdk; import com.android.net.module.util.SharedLog; import com.android.networkstack.tethering.BpfCoordinator; diff --git a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java index e9cde28a17..df7141f4fa 100644 --- a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java +++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java @@ -142,7 +142,6 @@ import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkRequest; import android.net.RouteInfo; -import android.net.RoutingCoordinatorManager; import android.net.TetherStatesParcel; import android.net.TetheredClient; import android.net.TetheredClient.AddressInfo; @@ -191,6 +190,7 @@ import com.android.internal.util.test.BroadcastInterceptingContext; import com.android.internal.util.test.FakeSettingsProvider; import com.android.net.module.util.CollectionUtils; import com.android.net.module.util.InterfaceParams; +import com.android.net.module.util.RoutingCoordinatorManager; import com.android.net.module.util.SdkUtil.LateSdk; import com.android.net.module.util.SharedLog; import com.android.net.module.util.ip.IpNeighborMonitor; diff --git a/framework/Android.bp b/framework/Android.bp index 9c75ea7569..4eda0aa260 100644 --- a/framework/Android.bp +++ b/framework/Android.bp @@ -330,7 +330,6 @@ java_library { srcs: [ // Files listed here MUST all be annotated with @RequiresApi(Build.VERSION_CODES.S) // or above as appropriate so that API checks are enforced for R+ users of this library - "src/android/net/RoutingCoordinatorManager.java", "src/android/net/connectivity/ConnectivityInternalApiUtil.java", ], visibility: [ diff --git a/framework/src/android/net/ConnectivityManager.java b/framework/src/android/net/ConnectivityManager.java index ffaf41f3b2..5e41dd9c4f 100644 --- a/framework/src/android/net/ConnectivityManager.java +++ b/framework/src/android/net/ConnectivityManager.java @@ -6737,21 +6737,11 @@ public class ConnectivityManager { } } - private static final Object sRoutingCoordinatorManagerLock = new Object(); - @GuardedBy("sRoutingCoordinatorManagerLock") - private static RoutingCoordinatorManager sRoutingCoordinatorManager = null; /** @hide */ @RequiresApi(Build.VERSION_CODES.S) - public RoutingCoordinatorManager getRoutingCoordinatorManager() { + public IBinder getRoutingCoordinatorService() { try { - synchronized (sRoutingCoordinatorManagerLock) { - if (null == sRoutingCoordinatorManager) { - sRoutingCoordinatorManager = new RoutingCoordinatorManager(mContext, - IRoutingCoordinator.Stub.asInterface( - mService.getRoutingCoordinatorService())); - } - return sRoutingCoordinatorManager; - } + return mService.getRoutingCoordinatorService(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/framework/src/android/net/connectivity/ConnectivityInternalApiUtil.java b/framework/src/android/net/connectivity/ConnectivityInternalApiUtil.java index 79f1f65303..6e87ed36e5 100644 --- a/framework/src/android/net/connectivity/ConnectivityInternalApiUtil.java +++ b/framework/src/android/net/connectivity/ConnectivityInternalApiUtil.java @@ -18,7 +18,6 @@ package android.net.connectivity; import android.content.Context; import android.net.ConnectivityManager; -import android.net.RoutingCoordinatorManager; import android.os.Build; import android.os.IBinder; @@ -54,8 +53,8 @@ public class ConnectivityInternalApiUtil { * @return an instance of the coordinator manager */ @RequiresApi(Build.VERSION_CODES.S) - public static RoutingCoordinatorManager getRoutingCoordinatorManager(Context ctx) { + public static IBinder getRoutingCoordinator(Context ctx) { final ConnectivityManager cm = ctx.getSystemService(ConnectivityManager.class); - return cm.getRoutingCoordinatorManager(); + return cm.getRoutingCoordinatorService(); } } diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index c2e4a90d0c..f01574237b 100755 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -329,6 +329,7 @@ import com.android.net.module.util.InterfaceParams; import com.android.net.module.util.LinkPropertiesUtils.CompareOrUpdateResult; import com.android.net.module.util.LinkPropertiesUtils.CompareResult; import com.android.net.module.util.LocationPermissionChecker; +import com.android.net.module.util.RoutingCoordinatorService; import com.android.net.module.util.PerUidCounter; import com.android.net.module.util.PermissionUtils; import com.android.net.module.util.TcUtils; @@ -368,7 +369,6 @@ import com.android.server.connectivity.PermissionMonitor; import com.android.server.connectivity.ProfileNetworkPreferenceInfo; import com.android.server.connectivity.ProxyTracker; import com.android.server.connectivity.QosCallbackTracker; -import com.android.server.connectivity.RoutingCoordinatorService; import com.android.server.connectivity.SatelliteAccessController; import com.android.server.connectivity.UidRangeUtils; import com.android.server.connectivity.VpnNetworkPreferenceInfo; diff --git a/framework/src/android/net/IRoutingCoordinator.aidl b/staticlibs/device/com/android/net/module/util/IRoutingCoordinator.aidl similarity index 90% rename from framework/src/android/net/IRoutingCoordinator.aidl rename to staticlibs/device/com/android/net/module/util/IRoutingCoordinator.aidl index cf02ec47aa..72a4a94720 100644 --- a/framework/src/android/net/IRoutingCoordinator.aidl +++ b/staticlibs/device/com/android/net/module/util/IRoutingCoordinator.aidl @@ -14,11 +14,15 @@ * limitations under the License. */ -package android.net; +package com.android.net.module.util; import android.net.RouteInfo; /** @hide */ +// TODO: b/350630377 - This @Descriptor annotation workaround is to prevent the DESCRIPTOR from +// being jarjared which changes the DESCRIPTOR and casues "java.lang.SecurityException: Binder +// invocation to an incorrect interface" when calling the IPC. +@Descriptor("value=no.jarjar.com.android.net.module.util.IRoutingCoordinator") interface IRoutingCoordinator { /** * Add a route for specific network diff --git a/framework/src/android/net/RoutingCoordinatorManager.java b/staticlibs/device/com/android/net/module/util/RoutingCoordinatorManager.java similarity index 96% rename from framework/src/android/net/RoutingCoordinatorManager.java rename to staticlibs/device/com/android/net/module/util/RoutingCoordinatorManager.java index a9e7eef51e..e37061cf2e 100644 --- a/framework/src/android/net/RoutingCoordinatorManager.java +++ b/staticlibs/device/com/android/net/module/util/RoutingCoordinatorManager.java @@ -14,10 +14,12 @@ * limitations under the License. */ -package android.net; +package com.android.net.module.util; import android.content.Context; +import android.net.RouteInfo; import android.os.Build; +import android.os.IBinder; import android.os.RemoteException; import androidx.annotation.NonNull; @@ -36,9 +38,9 @@ public class RoutingCoordinatorManager { @NonNull final IRoutingCoordinator mService; public RoutingCoordinatorManager(@NonNull final Context context, - @NonNull final IRoutingCoordinator service) { + @NonNull final IBinder binder) { mContext = context; - mService = service; + mService = IRoutingCoordinator.Stub.asInterface(binder); } /** diff --git a/service/src/com/android/server/connectivity/RoutingCoordinatorService.java b/staticlibs/device/com/android/net/module/util/RoutingCoordinatorService.java similarity index 99% rename from service/src/com/android/server/connectivity/RoutingCoordinatorService.java rename to staticlibs/device/com/android/net/module/util/RoutingCoordinatorService.java index 742a2ccd60..c75b860117 100644 --- a/service/src/com/android/server/connectivity/RoutingCoordinatorService.java +++ b/staticlibs/device/com/android/net/module/util/RoutingCoordinatorService.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package com.android.server.connectivity; +package com.android.net.module.util; import static com.android.net.module.util.NetdUtils.toRouteInfoParcel; import android.annotation.NonNull; import android.net.INetd; -import android.net.IRoutingCoordinator; + import android.net.RouteInfo; import android.os.RemoteException; import android.os.ServiceSpecificException; diff --git a/staticlibs/tests/unit/Android.bp b/staticlibs/tests/unit/Android.bp index 3186033e00..91f94b5784 100644 --- a/staticlibs/tests/unit/Android.bp +++ b/staticlibs/tests/unit/Android.bp @@ -27,6 +27,7 @@ android_library { "net-utils-device-common-ip", "net-utils-device-common-struct-base", "net-utils-device-common-wear", + "net-utils-service-connectivity", ], libs: [ "android.test.runner", diff --git a/tests/unit/java/com/android/server/connectivity/RoutingCoordinatorServiceTest.kt b/staticlibs/tests/unit/src/com/android/net/module/util/RoutingCoordinatorServiceTest.kt similarity index 98% rename from tests/unit/java/com/android/server/connectivity/RoutingCoordinatorServiceTest.kt rename to staticlibs/tests/unit/src/com/android/net/module/util/RoutingCoordinatorServiceTest.kt index 4e15d5fa87..b04561c8f0 100644 --- a/tests/unit/java/com/android/server/connectivity/RoutingCoordinatorServiceTest.kt +++ b/staticlibs/tests/unit/src/com/android/net/module/util/RoutingCoordinatorServiceTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.connectivity +package com.android.net.module.util import android.net.INetd import android.os.Build