diff options
Diffstat (limited to 'server/TetherController.cpp')
| -rw-r--r-- | server/TetherController.cpp | 42 |
1 files changed, 13 insertions, 29 deletions
diff --git a/server/TetherController.cpp b/server/TetherController.cpp index 50ae9661..04af0aee 100644 --- a/server/TetherController.cpp +++ b/server/TetherController.cpp @@ -81,10 +81,6 @@ const char IPV6_FORWARDING_PROC_FILE[] = "/proc/sys/net/ipv6/conf/all/forwarding const char SEPARATOR[] = "|"; constexpr const char kTcpBeLiberal[] = "/proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal"; -// Dummy interface name, the name needs to be longer than 16 characters so it can never conflict -// with a real interface name. See also IFNAMSIZ. -constexpr const char kBpfOffloadInterface[] = "BPFOffloadInterface"; - // Chosen to match AID_DNS_TETHER, as made "friendly" by fs_config_generator.py. constexpr const char kDnsmasqUsername[] = "dns_tether"; @@ -205,11 +201,6 @@ bool TetherController::disableForwarding(const char* requester) { void TetherController::maybeInitMaps() { if (!bpf::isBpfSupported()) return; - // Used for parsing tether stats from BPF maps. If open the map failed, skip to open - // tether BPF offload maps. - mIfaceIndexNameMap.init(IFACE_INDEX_NAME_MAP_PATH); - if (!mIfaceIndexNameMap.isValid()) return; - // Open BPF maps, ignoring errors because the device might not support BPF offload. int fd = getTetherIngressMapFd(); if (fd >= 0) { @@ -1027,32 +1018,25 @@ StatusOr<TetherController::TetherStatsList> TetherController::getTetherStats() { } } - if (!mBpfStatsMap.isValid()) { - return statsList; - } + return statsList; +} - const auto processTetherStats = [this, &statsList](const uint32_t& key, - const TetherStatsValue& value, - const BpfMap<uint32_t, TetherStatsValue>&) { - auto ifname = mIfaceIndexNameMap.readValue(key); - if (!ifname.ok()) { - // Keep on going regardless to parse as much as possible. - return Result<void>(); - } - // Because the same interface name can have different interface IDs over time, there might - // already be a TetherStats in the list with this interface name. This is fine because - // addStats will increment an existing TetherStats if there is one in the list already, - // and add a new TetherStats to the list if there isn't. - addStats(statsList, - {kBpfOffloadInterface, ifname.value().name, static_cast<int64_t>(value.rxBytes), - static_cast<int64_t>(value.rxPackets), static_cast<int64_t>(value.txBytes), - static_cast<int64_t>(value.txPackets)}); +StatusOr<TetherController::TetherOffloadStatsList> TetherController::getTetherOffloadStats() { + TetherOffloadStatsList statsList; + + const auto processTetherStats = [&statsList](const uint32_t& key, const TetherStatsValue& value, + const BpfMap<uint32_t, TetherStatsValue>&) { + statsList.push_back({.ifIndex = static_cast<int>(key), + .rxBytes = static_cast<int64_t>(value.rxBytes), + .rxPackets = static_cast<int64_t>(value.rxPackets), + .txBytes = static_cast<int64_t>(value.txBytes), + .txPackets = static_cast<int64_t>(value.txPackets)}); return Result<void>(); }; auto ret = mBpfStatsMap.iterateWithValue(processTetherStats); if (!ret.ok()) { - // Ignore error to return the non-BPF tether stats result. + // Ignore error to return the remaining tether stats result. ALOGE("Error processing tether stats from BPF maps: %s", ret.error().message().c_str()); } |
