Merge "Open CookieTagMap in BpfNetMaps"

This commit is contained in:
Motomu Utsumi
2022-09-08 05:38:27 +00:00
committed by Gerrit Code Review
2 changed files with 32 additions and 0 deletions

View File

@@ -50,6 +50,8 @@ import com.android.net.module.util.DeviceConfigUtils;
import com.android.net.module.util.IBpfMap; import com.android.net.module.util.IBpfMap;
import com.android.net.module.util.Struct.U32; import com.android.net.module.util.Struct.U32;
import com.android.net.module.util.Struct.U8; import com.android.net.module.util.Struct.U8;
import com.android.net.module.util.bpf.CookieTagMapKey;
import com.android.net.module.util.bpf.CookieTagMapValue;
import java.io.FileDescriptor; import java.io.FileDescriptor;
import java.io.IOException; import java.io.IOException;
@@ -94,6 +96,8 @@ public class BpfNetMaps {
"/sys/fs/bpf/netd_shared/map_netd_uid_owner_map"; "/sys/fs/bpf/netd_shared/map_netd_uid_owner_map";
private static final String UID_PERMISSION_MAP_PATH = private static final String UID_PERMISSION_MAP_PATH =
"/sys/fs/bpf/netd_shared/map_netd_uid_permission_map"; "/sys/fs/bpf/netd_shared/map_netd_uid_permission_map";
private static final String COOKIE_TAG_MAP_PATH =
"/sys/fs/bpf/netd_shared/map_netd_cookie_tag_map";
private static final U32 UID_RULES_CONFIGURATION_KEY = new U32(0); private static final U32 UID_RULES_CONFIGURATION_KEY = new U32(0);
private static final U32 CURRENT_STATS_MAP_CONFIGURATION_KEY = new U32(1); private static final U32 CURRENT_STATS_MAP_CONFIGURATION_KEY = new U32(1);
private static final long UID_RULES_DEFAULT_CONFIGURATION = 0; private static final long UID_RULES_DEFAULT_CONFIGURATION = 0;
@@ -104,6 +108,7 @@ public class BpfNetMaps {
// BpfMap for UID_OWNER_MAP_PATH. This map is not accessed by others. // BpfMap for UID_OWNER_MAP_PATH. This map is not accessed by others.
private static IBpfMap<U32, UidOwnerValue> sUidOwnerMap = null; private static IBpfMap<U32, UidOwnerValue> sUidOwnerMap = null;
private static IBpfMap<U32, U8> sUidPermissionMap = null; private static IBpfMap<U32, U8> sUidPermissionMap = null;
private static IBpfMap<CookieTagMapKey, CookieTagMapValue> sCookieTagMap = null;
// LINT.IfChange(match_type) // LINT.IfChange(match_type)
@VisibleForTesting public static final long NO_MATCH = 0; @VisibleForTesting public static final long NO_MATCH = 0;
@@ -153,6 +158,15 @@ public class BpfNetMaps {
sUidPermissionMap = uidPermissionMap; sUidPermissionMap = uidPermissionMap;
} }
/**
* Set cookieTagMap for test.
*/
@VisibleForTesting
public static void setCookieTagMapForTest(
IBpfMap<CookieTagMapKey, CookieTagMapValue> cookieTagMap) {
sCookieTagMap = cookieTagMap;
}
private static IBpfMap<U32, U32> getConfigurationMap() { private static IBpfMap<U32, U32> getConfigurationMap() {
try { try {
return new BpfMap<>( return new BpfMap<>(
@@ -180,6 +194,15 @@ public class BpfNetMaps {
} }
} }
private static IBpfMap<CookieTagMapKey, CookieTagMapValue> getCookieTagMap() {
try {
return new BpfMap<>(COOKIE_TAG_MAP_PATH, BpfMap.BPF_F_RDWR,
CookieTagMapKey.class, CookieTagMapValue.class);
} catch (ErrnoException e) {
throw new IllegalStateException("Cannot open cookie tag map", e);
}
}
private static void initBpfMaps() { private static void initBpfMaps() {
if (sConfigurationMap == null) { if (sConfigurationMap == null) {
sConfigurationMap = getConfigurationMap(); sConfigurationMap = getConfigurationMap();
@@ -209,6 +232,10 @@ public class BpfNetMaps {
if (sUidPermissionMap == null) { if (sUidPermissionMap == null) {
sUidPermissionMap = getUidPermissionMap(); sUidPermissionMap = getUidPermissionMap();
} }
if (sCookieTagMap == null) {
sCookieTagMap = getCookieTagMap();
}
} }
/** /**

View File

@@ -61,6 +61,8 @@ import com.android.modules.utils.build.SdkLevel;
import com.android.net.module.util.IBpfMap; import com.android.net.module.util.IBpfMap;
import com.android.net.module.util.Struct.U32; import com.android.net.module.util.Struct.U32;
import com.android.net.module.util.Struct.U8; import com.android.net.module.util.Struct.U8;
import com.android.net.module.util.bpf.CookieTagMapKey;
import com.android.net.module.util.bpf.CookieTagMapValue;
import com.android.testutils.DevSdkIgnoreRule; import com.android.testutils.DevSdkIgnoreRule;
import com.android.testutils.DevSdkIgnoreRule.IgnoreAfter; import com.android.testutils.DevSdkIgnoreRule.IgnoreAfter;
import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo; import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo;
@@ -117,6 +119,8 @@ public final class BpfNetMapsTest {
private final IBpfMap<U32, UidOwnerValue> mUidOwnerMap = private final IBpfMap<U32, UidOwnerValue> mUidOwnerMap =
new TestBpfMap<>(U32.class, UidOwnerValue.class); new TestBpfMap<>(U32.class, UidOwnerValue.class);
private final IBpfMap<U32, U8> mUidPermissionMap = new TestBpfMap<>(U32.class, U8.class); private final IBpfMap<U32, U8> mUidPermissionMap = new TestBpfMap<>(U32.class, U8.class);
private final IBpfMap<CookieTagMapKey, CookieTagMapValue> mCookieTagMap =
new TestBpfMap<>(CookieTagMapKey.class, CookieTagMapValue.class);
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
@@ -127,6 +131,7 @@ public final class BpfNetMapsTest {
BpfNetMaps.setConfigurationMapForTest(mConfigurationMap); BpfNetMaps.setConfigurationMapForTest(mConfigurationMap);
BpfNetMaps.setUidOwnerMapForTest(mUidOwnerMap); BpfNetMaps.setUidOwnerMapForTest(mUidOwnerMap);
BpfNetMaps.setUidPermissionMapForTest(mUidPermissionMap); BpfNetMaps.setUidPermissionMapForTest(mUidPermissionMap);
BpfNetMaps.setCookieTagMapForTest(mCookieTagMap);
mBpfNetMaps = new BpfNetMaps(mContext, mNetd, mDeps); mBpfNetMaps = new BpfNetMaps(mContext, mNetd, mDeps);
} }