diff --git a/service/native/TrafficController.cpp b/service/native/TrafficController.cpp index 4dc056d89a..66bf40a411 100644 --- a/service/native/TrafficController.cpp +++ b/service/native/TrafficController.cpp @@ -173,13 +173,8 @@ Status TrafficController::initMaps() { RETURN_IF_NOT_OK(mIfaceStatsMap.init(IFACE_STATS_MAP_PATH)); RETURN_IF_NOT_OK(mConfigurationMap.init(CONFIGURATION_MAP_PATH)); - RETURN_IF_NOT_OK( - mConfigurationMap.writeValue(UID_RULES_CONFIGURATION_KEY, DEFAULT_CONFIG, BPF_ANY)); - RETURN_IF_NOT_OK(mConfigurationMap.writeValue(CURRENT_STATS_MAP_CONFIGURATION_KEY, SELECT_MAP_A, - BPF_ANY)); RETURN_IF_NOT_OK(mUidOwnerMap.init(UID_OWNER_MAP_PATH)); - RETURN_IF_NOT_OK(mUidOwnerMap.clear()); RETURN_IF_NOT_OK(mUidPermissionMap.init(UID_PERMISSION_MAP_PATH)); ALOGI("%s successfully", __func__); diff --git a/service/src/com/android/server/BpfNetMaps.java b/service/src/com/android/server/BpfNetMaps.java index 0270fc2b10..bedd0e82d1 100644 --- a/service/src/com/android/server/BpfNetMaps.java +++ b/service/src/com/android/server/BpfNetMaps.java @@ -87,6 +87,11 @@ public class BpfNetMaps { private static final String UID_OWNER_MAP_PATH = "/sys/fs/bpf/netd_shared/map_netd_uid_owner_map"; 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 long UID_RULES_DEFAULT_CONFIGURATION = 0; + private static final long STATS_SELECT_MAP_A = 0; + private static final long STATS_SELECT_MAP_B = 1; + private static BpfMap sConfigurationMap = null; // BpfMap for UID_OWNER_MAP_PATH. This map is not accessed by others. private static BpfMap sUidOwnerMap = null; @@ -149,13 +154,31 @@ public class BpfNetMaps { } } - private static void setBpfMaps() { + private static void initBpfMaps() { if (sConfigurationMap == null) { sConfigurationMap = getConfigurationMap(); } + try { + sConfigurationMap.updateEntry(UID_RULES_CONFIGURATION_KEY, + new U32(UID_RULES_DEFAULT_CONFIGURATION)); + } catch (ErrnoException e) { + throw new IllegalStateException("Failed to initialize uid rules configuration", e); + } + try { + sConfigurationMap.updateEntry(CURRENT_STATS_MAP_CONFIGURATION_KEY, + new U32(STATS_SELECT_MAP_A)); + } catch (ErrnoException e) { + throw new IllegalStateException("Failed to initialize current stats configuration", e); + } + if (sUidOwnerMap == null) { sUidOwnerMap = getUidOwnerMap(); } + try { + sUidOwnerMap.clear(); + } catch (ErrnoException e) { + throw new IllegalStateException("Failed to initialize uid owner map", e); + } } /** @@ -171,7 +194,7 @@ public class BpfNetMaps { } Log.d(TAG, "BpfNetMaps is initialized with sEnableJavaBpfMap=" + sEnableJavaBpfMap); - setBpfMaps(); + initBpfMaps(); native_init(); sInitialized = true; }