diff --git a/service-t/jni/com_android_server_net_NetworkStatsService.cpp b/service-t/jni/com_android_server_net_NetworkStatsService.cpp index 028642fe2c..48ac9938a1 100644 --- a/service-t/jni/com_android_server_net_NetworkStatsService.cpp +++ b/service-t/jni/com_android_server_net_NetworkStatsService.cpp @@ -34,11 +34,15 @@ using android::bpf::bpfGetUidStats; using android::bpf::bpfGetIfaceStats; +using android::bpf::bpfRegisterIface; using android::bpf::NetworkTraceHandler; namespace android { static void nativeRegisterIface(JNIEnv* env, jclass clazz, jstring iface) { + ScopedUtfChars iface8(env, iface); + if (iface8.c_str() == nullptr) return; + bpfRegisterIface(iface8.c_str()); } static jobject statsValueToEntry(JNIEnv* env, StatsValue* stats) { diff --git a/service-t/native/libs/libnetworkstats/BpfNetworkStats.cpp b/service-t/native/libs/libnetworkstats/BpfNetworkStats.cpp index ac5b90eace..8a58e56760 100644 --- a/service-t/native/libs/libnetworkstats/BpfNetworkStats.cpp +++ b/service-t/native/libs/libnetworkstats/BpfNetworkStats.cpp @@ -40,8 +40,8 @@ namespace bpf { using base::Result; -const BpfMapRO& getIfaceIndexNameMap() { - static BpfMapRO ifaceIndexNameMap(IFACE_INDEX_NAME_MAP_PATH); +BpfMap& getIfaceIndexNameMap() { + static BpfMap ifaceIndexNameMap(IFACE_INDEX_NAME_MAP_PATH); return ifaceIndexNameMap; } @@ -50,6 +50,16 @@ const BpfMapRO& getIfaceStatsMap() { return ifaceStatsMap; } +void bpfRegisterIface(const char* iface) { + if (!iface) return; + if (strlen(iface) >= sizeof(IfaceValue)) return; + uint32_t ifindex = if_nametoindex(iface); + if (!ifindex) return; + IfaceValue ifname = {}; + strlcpy(ifname.name, iface, sizeof(ifname.name)); + getIfaceIndexNameMap().writeValue(ifindex, ifname, BPF_ANY); +} + int bpfGetUidStatsInternal(uid_t uid, StatsValue* stats, const BpfMapRO& appUidStatsMap) { auto statsEntry = appUidStatsMap.readValue(uid); diff --git a/service-t/native/libs/libnetworkstats/include/netdbpf/BpfNetworkStats.h b/service-t/native/libs/libnetworkstats/include/netdbpf/BpfNetworkStats.h index d2efff5eb1..0f28c1da45 100644 --- a/service-t/native/libs/libnetworkstats/include/netdbpf/BpfNetworkStats.h +++ b/service-t/native/libs/libnetworkstats/include/netdbpf/BpfNetworkStats.h @@ -114,6 +114,7 @@ int parseBpfNetworkStatsDevInternal(std::vector& lines, const BpfMapRO& statsMap, const BpfMapRO& ifaceMap); +void bpfRegisterIface(const char* iface); int bpfGetUidStats(uid_t uid, StatsValue* stats); int bpfGetIfaceStats(const char* iface, StatsValue* stats); int bpfGetIfIndexStats(int ifindex, StatsValue* stats);