BpfMap - add R/W constructor alias
Test: TreeHugger Signed-off-by: Maciej Żenczykowski <maze@google.com> Change-Id: I7cef2b19f55e6e056b46bb1b28f85c7f7376f6f4
This commit is contained in:
parent
e64e4eacce
commit
06155c8040
9 changed files with 42 additions and 32 deletions
|
|
@ -379,7 +379,7 @@ public class BpfCoordinator {
|
|||
if (!isAtLeastS()) return null;
|
||||
try {
|
||||
return new BpfMap<>(TETHER_DOWNSTREAM4_MAP_PATH,
|
||||
BpfMap.BPF_F_RDWR, Tether4Key.class, Tether4Value.class);
|
||||
Tether4Key.class, Tether4Value.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.e(TAG, "Cannot create downstream4 map: " + e);
|
||||
return null;
|
||||
|
|
@ -391,7 +391,7 @@ public class BpfCoordinator {
|
|||
if (!isAtLeastS()) return null;
|
||||
try {
|
||||
return new BpfMap<>(TETHER_UPSTREAM4_MAP_PATH,
|
||||
BpfMap.BPF_F_RDWR, Tether4Key.class, Tether4Value.class);
|
||||
Tether4Key.class, Tether4Value.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.e(TAG, "Cannot create upstream4 map: " + e);
|
||||
return null;
|
||||
|
|
@ -403,7 +403,7 @@ public class BpfCoordinator {
|
|||
if (!isAtLeastS()) return null;
|
||||
try {
|
||||
return new BpfMap<>(TETHER_DOWNSTREAM6_FS_PATH,
|
||||
BpfMap.BPF_F_RDWR, TetherDownstream6Key.class, Tether6Value.class);
|
||||
TetherDownstream6Key.class, Tether6Value.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.e(TAG, "Cannot create downstream6 map: " + e);
|
||||
return null;
|
||||
|
|
@ -414,7 +414,7 @@ public class BpfCoordinator {
|
|||
@Nullable public IBpfMap<TetherUpstream6Key, Tether6Value> getBpfUpstream6Map() {
|
||||
if (!isAtLeastS()) return null;
|
||||
try {
|
||||
return new BpfMap<>(TETHER_UPSTREAM6_FS_PATH, BpfMap.BPF_F_RDWR,
|
||||
return new BpfMap<>(TETHER_UPSTREAM6_FS_PATH,
|
||||
TetherUpstream6Key.class, Tether6Value.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.e(TAG, "Cannot create upstream6 map: " + e);
|
||||
|
|
@ -427,7 +427,7 @@ public class BpfCoordinator {
|
|||
if (!isAtLeastS()) return null;
|
||||
try {
|
||||
return new BpfMap<>(TETHER_STATS_MAP_PATH,
|
||||
BpfMap.BPF_F_RDWR, TetherStatsKey.class, TetherStatsValue.class);
|
||||
TetherStatsKey.class, TetherStatsValue.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.e(TAG, "Cannot create stats map: " + e);
|
||||
return null;
|
||||
|
|
@ -439,7 +439,7 @@ public class BpfCoordinator {
|
|||
if (!isAtLeastS()) return null;
|
||||
try {
|
||||
return new BpfMap<>(TETHER_LIMIT_MAP_PATH,
|
||||
BpfMap.BPF_F_RDWR, TetherLimitKey.class, TetherLimitValue.class);
|
||||
TetherLimitKey.class, TetherLimitValue.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.e(TAG, "Cannot create limit map: " + e);
|
||||
return null;
|
||||
|
|
@ -451,7 +451,7 @@ public class BpfCoordinator {
|
|||
if (!isAtLeastS()) return null;
|
||||
try {
|
||||
return new BpfMap<>(TETHER_DEV_MAP_PATH,
|
||||
BpfMap.BPF_F_RDWR, TetherDevKey.class, TetherDevValue.class);
|
||||
TetherDevKey.class, TetherDevValue.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.e(TAG, "Cannot create dev map: " + e);
|
||||
return null;
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ public final class BpfMapTest {
|
|||
|
||||
private void initTestMap() throws Exception {
|
||||
mTestMap = new BpfMap<>(
|
||||
TETHER_DOWNSTREAM6_FS_PATH, BpfMap.BPF_F_RDWR,
|
||||
TETHER_DOWNSTREAM6_FS_PATH,
|
||||
TetherDownstream6Key.class, Tether6Value.class);
|
||||
|
||||
mTestMap.forEach((key, value) -> {
|
||||
|
|
@ -135,7 +135,7 @@ public final class BpfMapTest {
|
|||
assertEquals(OsConstants.EPERM, expected.errno);
|
||||
}
|
||||
}
|
||||
try (BpfMap readWriteMap = new BpfMap<>(TETHER_DOWNSTREAM6_FS_PATH, BpfMap.BPF_F_RDWR,
|
||||
try (BpfMap readWriteMap = new BpfMap<>(TETHER_DOWNSTREAM6_FS_PATH,
|
||||
TetherDownstream6Key.class, Tether6Value.class)) {
|
||||
assertNotNull(readWriteMap);
|
||||
}
|
||||
|
|
@ -389,7 +389,7 @@ public final class BpfMapTest {
|
|||
public void testOpenNonexistentMap() throws Exception {
|
||||
try {
|
||||
final BpfMap<TetherDownstream6Key, Tether6Value> nonexistentMap = new BpfMap<>(
|
||||
"/sys/fs/bpf/tethering/nonexistent", BpfMap.BPF_F_RDWR,
|
||||
"/sys/fs/bpf/tethering/nonexistent",
|
||||
TetherDownstream6Key.class, Tether6Value.class);
|
||||
} catch (ErrnoException expected) {
|
||||
assertEquals(OsConstants.ENOENT, expected.errno);
|
||||
|
|
@ -409,8 +409,8 @@ public final class BpfMapTest {
|
|||
final int before = getNumOpenFds();
|
||||
for (int i = 0; i < iterations; i++) {
|
||||
try (BpfMap<TetherDownstream6Key, Tether6Value> map = new BpfMap<>(
|
||||
TETHER_DOWNSTREAM6_FS_PATH, BpfMap.BPF_F_RDWR,
|
||||
TetherDownstream6Key.class, Tether6Value.class)) {
|
||||
TETHER_DOWNSTREAM6_FS_PATH,
|
||||
TetherDownstream6Key.class, Tether6Value.class)) {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ public class BpfInterfaceMapUpdater {
|
|||
/** Create BpfMap for updating interface and index mapping. */
|
||||
public IBpfMap<S32, InterfaceMapValue> getInterfaceMap() {
|
||||
try {
|
||||
return new BpfMap<>(IFACE_INDEX_NAME_MAP_PATH, BpfMap.BPF_F_RDWR,
|
||||
return new BpfMap<>(IFACE_INDEX_NAME_MAP_PATH,
|
||||
S32.class, InterfaceMapValue.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.e(TAG, "Cannot create interface map: " + e);
|
||||
|
|
|
|||
|
|
@ -808,7 +808,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||
/** Get counter sets map for each UID. */
|
||||
public IBpfMap<S32, U8> getUidCounterSetMap() {
|
||||
try {
|
||||
return new BpfMap<S32, U8>(UID_COUNTERSET_MAP_PATH, BpfMap.BPF_F_RDWR,
|
||||
return new BpfMap<S32, U8>(UID_COUNTERSET_MAP_PATH,
|
||||
S32.class, U8.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.wtf(TAG, "Cannot open uid counter set map: " + e);
|
||||
|
|
@ -820,7 +820,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||
public IBpfMap<CookieTagMapKey, CookieTagMapValue> getCookieTagMap() {
|
||||
try {
|
||||
return new BpfMap<CookieTagMapKey, CookieTagMapValue>(COOKIE_TAG_MAP_PATH,
|
||||
BpfMap.BPF_F_RDWR, CookieTagMapKey.class, CookieTagMapValue.class);
|
||||
CookieTagMapKey.class, CookieTagMapValue.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.wtf(TAG, "Cannot open cookie tag map: " + e);
|
||||
return null;
|
||||
|
|
@ -831,7 +831,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||
public IBpfMap<StatsMapKey, StatsMapValue> getStatsMapA() {
|
||||
try {
|
||||
return new BpfMap<StatsMapKey, StatsMapValue>(STATS_MAP_A_PATH,
|
||||
BpfMap.BPF_F_RDWR, StatsMapKey.class, StatsMapValue.class);
|
||||
StatsMapKey.class, StatsMapValue.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.wtf(TAG, "Cannot open stats map A: " + e);
|
||||
return null;
|
||||
|
|
@ -842,7 +842,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||
public IBpfMap<StatsMapKey, StatsMapValue> getStatsMapB() {
|
||||
try {
|
||||
return new BpfMap<StatsMapKey, StatsMapValue>(STATS_MAP_B_PATH,
|
||||
BpfMap.BPF_F_RDWR, StatsMapKey.class, StatsMapValue.class);
|
||||
StatsMapKey.class, StatsMapValue.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.wtf(TAG, "Cannot open stats map B: " + e);
|
||||
return null;
|
||||
|
|
@ -853,7 +853,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||
public IBpfMap<UidStatsMapKey, StatsMapValue> getAppUidStatsMap() {
|
||||
try {
|
||||
return new BpfMap<UidStatsMapKey, StatsMapValue>(APP_UID_STATS_MAP_PATH,
|
||||
BpfMap.BPF_F_RDWR, UidStatsMapKey.class, StatsMapValue.class);
|
||||
UidStatsMapKey.class, StatsMapValue.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.wtf(TAG, "Cannot open app uid stats map: " + e);
|
||||
return null;
|
||||
|
|
@ -864,7 +864,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||
public IBpfMap<S32, StatsMapValue> getIfaceStatsMap() {
|
||||
try {
|
||||
return new BpfMap<S32, StatsMapValue>(IFACE_STATS_MAP_PATH,
|
||||
BpfMap.BPF_F_RDWR, S32.class, StatsMapValue.class);
|
||||
S32.class, StatsMapValue.class);
|
||||
} catch (ErrnoException e) {
|
||||
throw new IllegalStateException("Failed to open interface stats map", e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ public class BpfNetMaps {
|
|||
private static IBpfMap<S32, U32> getConfigurationMap() {
|
||||
try {
|
||||
return new BpfMap<>(
|
||||
CONFIGURATION_MAP_PATH, BpfMap.BPF_F_RDWR, S32.class, U32.class);
|
||||
CONFIGURATION_MAP_PATH, S32.class, U32.class);
|
||||
} catch (ErrnoException e) {
|
||||
throw new IllegalStateException("Cannot open netd configuration map", e);
|
||||
}
|
||||
|
|
@ -196,7 +196,7 @@ public class BpfNetMaps {
|
|||
private static IBpfMap<S32, UidOwnerValue> getUidOwnerMap() {
|
||||
try {
|
||||
return new BpfMap<>(
|
||||
UID_OWNER_MAP_PATH, BpfMap.BPF_F_RDWR, S32.class, UidOwnerValue.class);
|
||||
UID_OWNER_MAP_PATH, S32.class, UidOwnerValue.class);
|
||||
} catch (ErrnoException e) {
|
||||
throw new IllegalStateException("Cannot open uid owner map", e);
|
||||
}
|
||||
|
|
@ -205,7 +205,7 @@ public class BpfNetMaps {
|
|||
private static IBpfMap<S32, U8> getUidPermissionMap() {
|
||||
try {
|
||||
return new BpfMap<>(
|
||||
UID_PERMISSION_MAP_PATH, BpfMap.BPF_F_RDWR, S32.class, U8.class);
|
||||
UID_PERMISSION_MAP_PATH, S32.class, U8.class);
|
||||
} catch (ErrnoException e) {
|
||||
throw new IllegalStateException("Cannot open uid permission map", e);
|
||||
}
|
||||
|
|
@ -213,7 +213,7 @@ public class BpfNetMaps {
|
|||
|
||||
private static IBpfMap<CookieTagMapKey, CookieTagMapValue> getCookieTagMap() {
|
||||
try {
|
||||
return new BpfMap<>(COOKIE_TAG_MAP_PATH, BpfMap.BPF_F_RDWR,
|
||||
return new BpfMap<>(COOKIE_TAG_MAP_PATH,
|
||||
CookieTagMapKey.class, CookieTagMapValue.class);
|
||||
} catch (ErrnoException e) {
|
||||
throw new IllegalStateException("Cannot open cookie tag map", e);
|
||||
|
|
@ -223,7 +223,7 @@ public class BpfNetMaps {
|
|||
private static IBpfMap<S32, U8> getDataSaverEnabledMap() {
|
||||
try {
|
||||
return new BpfMap<>(
|
||||
DATA_SAVER_ENABLED_MAP_PATH, BpfMap.BPF_F_RDWR, S32.class, U8.class);
|
||||
DATA_SAVER_ENABLED_MAP_PATH, S32.class, U8.class);
|
||||
} catch (ErrnoException e) {
|
||||
throw new IllegalStateException("Cannot open data saver enabled map", e);
|
||||
}
|
||||
|
|
@ -231,7 +231,7 @@ public class BpfNetMaps {
|
|||
|
||||
private static IBpfMap<IngressDiscardKey, IngressDiscardValue> getIngressDiscardMap() {
|
||||
try {
|
||||
return new BpfMap<>(INGRESS_DISCARD_MAP_PATH, BpfMap.BPF_F_RDWR,
|
||||
return new BpfMap<>(INGRESS_DISCARD_MAP_PATH,
|
||||
IngressDiscardKey.class, IngressDiscardValue.class);
|
||||
} catch (ErrnoException e) {
|
||||
throw new IllegalStateException("Cannot open ingress discard map", e);
|
||||
|
|
|
|||
|
|
@ -256,7 +256,7 @@ public class ClatCoordinator {
|
|||
public IBpfMap<ClatIngress6Key, ClatIngress6Value> getBpfIngress6Map() {
|
||||
try {
|
||||
return new BpfMap<>(CLAT_INGRESS6_MAP_PATH,
|
||||
BpfMap.BPF_F_RDWR, ClatIngress6Key.class, ClatIngress6Value.class);
|
||||
ClatIngress6Key.class, ClatIngress6Value.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.e(TAG, "Cannot create ingress6 map: " + e);
|
||||
return null;
|
||||
|
|
@ -268,7 +268,7 @@ public class ClatCoordinator {
|
|||
public IBpfMap<ClatEgress4Key, ClatEgress4Value> getBpfEgress4Map() {
|
||||
try {
|
||||
return new BpfMap<>(CLAT_EGRESS4_MAP_PATH,
|
||||
BpfMap.BPF_F_RDWR, ClatEgress4Key.class, ClatEgress4Value.class);
|
||||
ClatEgress4Key.class, ClatEgress4Value.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.e(TAG, "Cannot create egress4 map: " + e);
|
||||
return null;
|
||||
|
|
@ -280,7 +280,7 @@ public class ClatCoordinator {
|
|||
public IBpfMap<CookieTagMapKey, CookieTagMapValue> getBpfCookieTagMap() {
|
||||
try {
|
||||
return new BpfMap<>(COOKIE_TAG_MAP_PATH,
|
||||
BpfMap.BPF_F_RDWR, CookieTagMapKey.class, CookieTagMapValue.class);
|
||||
CookieTagMapKey.class, CookieTagMapValue.class);
|
||||
} catch (ErrnoException e) {
|
||||
Log.wtf(TAG, "Cannot open cookie tag map: " + e);
|
||||
return null;
|
||||
|
|
|
|||
|
|
@ -86,9 +86,9 @@ public class DscpPolicyTracker {
|
|||
mAttachedIfaces = new HashSet<String>();
|
||||
mIfaceIndexToPolicyIdBpfMapIndex = new HashMap<Integer, SparseIntArray>();
|
||||
mBpfDscpIpv4Policies = new BpfMap<Struct.S32, DscpPolicyValue>(IPV4_POLICY_MAP_PATH,
|
||||
BpfMap.BPF_F_RDWR, Struct.S32.class, DscpPolicyValue.class);
|
||||
Struct.S32.class, DscpPolicyValue.class);
|
||||
mBpfDscpIpv6Policies = new BpfMap<Struct.S32, DscpPolicyValue>(IPV6_POLICY_MAP_PATH,
|
||||
BpfMap.BPF_F_RDWR, Struct.S32.class, DscpPolicyValue.class);
|
||||
Struct.S32.class, DscpPolicyValue.class);
|
||||
}
|
||||
|
||||
private boolean isUnusedIndex(int index) {
|
||||
|
|
|
|||
|
|
@ -38,8 +38,7 @@ public class BpfBitmap {
|
|||
* @param path The path of the BPF map.
|
||||
*/
|
||||
public BpfBitmap(@NonNull String path) throws ErrnoException {
|
||||
mBpfMap = new BpfMap<Struct.S32, Struct.S64>(path, BpfMap.BPF_F_RDWR,
|
||||
Struct.S32.class, Struct.S64.class);
|
||||
mBpfMap = new BpfMap<>(path, Struct.S32.class, Struct.S64.class);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -108,6 +108,17 @@ public class BpfMap<K extends Struct, V extends Struct> implements IBpfMap<K, V>
|
|||
mMapFd = cachedBpfFdGet(path, flag, mKeySize, mValueSize);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a R/W BpfMap map wrapper with "path" of filesystem.
|
||||
*
|
||||
* @throws ErrnoException if the BPF map associated with {@code path} cannot be retrieved.
|
||||
* @throws NullPointerException if {@code path} is null.
|
||||
*/
|
||||
public BpfMap(@NonNull final String path, final Class<K> key,
|
||||
final Class<V> value) throws ErrnoException, NullPointerException {
|
||||
this(path, BPF_F_RDWR, key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update an existing or create a new key -> value entry in an eBbpf map.
|
||||
* (use insertOrReplaceEntry() if you need to know whether insert or replace happened)
|
||||
|
|
|
|||
Loading…
Reference in a new issue