From 5b0f3e418f5f024a1d989a12b48c0bce25a1f663 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20=C5=BBenczykowski?= Date: Thu, 8 Jun 2023 18:39:00 -0700 Subject: [PATCH 1/2] Annotate ClatCoordinator with RequiresApi(T) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test: TreeHugger Bug: 284253984 Signed-off-by: Maciej Żenczykowski Change-Id: I98c1aab4f7205856f4535c27838a1f0fd2526765 --- .../server/connectivity/ClatCoordinator.java | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/service/src/com/android/server/connectivity/ClatCoordinator.java b/service/src/com/android/server/connectivity/ClatCoordinator.java index fbe706cb08..d87f250773 100644 --- a/service/src/com/android/server/connectivity/ClatCoordinator.java +++ b/service/src/com/android/server/connectivity/ClatCoordinator.java @@ -30,6 +30,7 @@ import android.net.INetd; import android.net.InetAddresses; import android.net.InterfaceConfigurationParcel; import android.net.IpPrefix; +import android.os.Build; import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.os.ServiceSpecificException; @@ -58,11 +59,14 @@ import java.net.InetAddress; import java.nio.ByteBuffer; import java.util.Objects; +import androidx.annotation.RequiresApi; + /** * This coordinator is responsible for providing clat relevant functionality. * * {@hide} */ +@RequiresApi(Build.VERSION_CODES.TIRAMISU) public class ClatCoordinator { private static final String TAG = ClatCoordinator.class.getSimpleName(); @@ -251,11 +255,6 @@ public class ClatCoordinator { /** Get ingress6 BPF map. */ @Nullable public IBpfMap getBpfIngress6Map() { - // Pre-T devices don't use ClatCoordinator to access clat map. Since Nat464Xlat - // initializes a ClatCoordinator object to avoid redundant null pointer check - // while using, ignore the BPF map initialization on pre-T devices. - // TODO: probably don't initialize ClatCoordinator object on pre-T devices. - if (!SdkLevel.isAtLeastT()) return null; try { return new BpfMap<>(CLAT_INGRESS6_MAP_PATH, BpfMap.BPF_F_RDWR, ClatIngress6Key.class, ClatIngress6Value.class); @@ -268,11 +267,6 @@ public class ClatCoordinator { /** Get egress4 BPF map. */ @Nullable public IBpfMap getBpfEgress4Map() { - // Pre-T devices don't use ClatCoordinator to access clat map. Since Nat464Xlat - // initializes a ClatCoordinator object to avoid redundant null pointer check - // while using, ignore the BPF map initialization on pre-T devices. - // TODO: probably don't initialize ClatCoordinator object on pre-T devices. - if (!SdkLevel.isAtLeastT()) return null; try { return new BpfMap<>(CLAT_EGRESS4_MAP_PATH, BpfMap.BPF_F_RDWR, ClatEgress4Key.class, ClatEgress4Value.class); @@ -285,11 +279,6 @@ public class ClatCoordinator { /** Get cookie tag map */ @Nullable public IBpfMap getBpfCookieTagMap() { - // Pre-T devices don't use ClatCoordinator to access clat map. Since Nat464Xlat - // initializes a ClatCoordinator object to avoid redundant null pointer check - // while using, ignore the BPF map initialization on pre-T devices. - // TODO: probably don't initialize ClatCoordinator object on pre-T devices. - if (!SdkLevel.isAtLeastT()) return null; try { return new BpfMap<>(COOKIE_TAG_MAP_PATH, BpfMap.BPF_F_RDWR, CookieTagMapKey.class, CookieTagMapValue.class); From 7b05987701c0b4d9c0b446bccc7889fcca5a5b0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20=C5=BBenczykowski?= Date: Thu, 8 Jun 2023 18:50:41 -0700 Subject: [PATCH 2/2] Annotate ClatCoordinator with RequiresApi(T), part 2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test: TreeHugger Bug: 284253984 Signed-off-by: Maciej Żenczykowski Change-Id: I4994dd8d4e5e303bca6c33928d359064632b3c4d --- .../src/com/android/server/ConnectivityService.java | 1 + .../com/android/server/connectivity/Nat464Xlat.java | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index fad6aaa749..f10e98db9d 100755 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -1431,6 +1431,7 @@ public class ConnectivityService extends IConnectivityManager.Stub /** * @see ClatCoordinator */ + @RequiresApi(Build.VERSION_CODES.TIRAMISU) public ClatCoordinator getClatCoordinator(INetd netd) { return new ClatCoordinator( new ClatCoordinator.Dependencies() { diff --git a/service/src/com/android/server/connectivity/Nat464Xlat.java b/service/src/com/android/server/connectivity/Nat464Xlat.java index 2ac2ad3e45..90cdddabca 100644 --- a/service/src/com/android/server/connectivity/Nat464Xlat.java +++ b/service/src/com/android/server/connectivity/Nat464Xlat.java @@ -101,9 +101,9 @@ public class Nat464Xlat { private String mIface; private Inet6Address mIPv6Address; private State mState = State.IDLE; - private ClatCoordinator mClatCoordinator; + private final ClatCoordinator mClatCoordinator; // non-null iff T+ - private boolean mEnableClatOnCellular; + private final boolean mEnableClatOnCellular; private boolean mPrefixDiscoveryRunning; public Nat464Xlat(NetworkAgentInfo nai, INetd netd, IDnsResolver dnsResolver, @@ -112,7 +112,11 @@ public class Nat464Xlat { mNetd = netd; mNetwork = nai; mEnableClatOnCellular = deps.getCellular464XlatEnabled(); - mClatCoordinator = deps.getClatCoordinator(mNetd); + if (SdkLevel.isAtLeastT()) { + mClatCoordinator = deps.getClatCoordinator(mNetd); + } else { + mClatCoordinator = null; + } } /**