Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 18 additions & 4 deletions DnsResolver/DnsBpfHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,19 @@ base::Result<void> DnsBpfHelper::init() {
return base::Error(EOPNOTSUPP);
}

RETURN_IF_RESULT_NOT_OK(mConfigurationMap.init(CONFIGURATION_MAP_PATH));
RETURN_IF_RESULT_NOT_OK(mUidOwnerMap.init(UID_OWNER_MAP_PATH));
RETURN_IF_RESULT_NOT_OK(mDataSaverEnabledMap.init(DATA_SAVER_ENABLED_MAP_PATH));
auto ret1 = mConfigurationMap.init(CONFIGURATION_MAP_PATH);
if (!ret1.ok()) {
LOG(ERROR) << __func__ << ": Failed mConfigurationMap.init";
}
auto ret2 = mUidOwnerMap.init(UID_OWNER_MAP_PATH);
if (!ret2.ok()) {
LOG(ERROR) << __func__ << ": Failed mConfigurationMap.init";
}
auto ret3 = mDataSaverEnabledMap.init(DATA_SAVER_ENABLED_MAP_PATH);
if (!ret3.ok()) {
LOG(ERROR) << __func__ << ": Failed mConfigurationMap.init";
}

return {};
}

Expand All @@ -49,12 +59,16 @@ base::Result<bool> DnsBpfHelper::isUidNetworkingBlocked(uid_t uid, bool metered)
if (!mConfigurationMap.isValid() || !mUidOwnerMap.isValid()) {
LOG(ERROR) << __func__
<< ": BPF maps are not ready. Forgot to call ADnsHelper_init?";
return base::Error(EUNATCH);
return false;
}

auto enabledRules = mConfigurationMap.readValue(UID_RULES_CONFIGURATION_KEY);
RETURN_IF_RESULT_NOT_OK(enabledRules);

if (!enabledRules.ok()) {
return false;
}

auto value = mUidOwnerMap.readValue(uid);
uint32_t uidRules = value.ok() ? value.value().rule : 0;

Expand Down
2 changes: 1 addition & 1 deletion netbpfload/netbpfload.rc
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,6 @@ service bpfloader /system/bin/netbpfload
# 'cannot prove return value is 0 or 1' or 'unsupported / unknown operation / helper',
# 'invalid bpf_context access', etc.
#
reboot_on_failure reboot,bpfloader-failed
# reboot_on_failure reboot,bpfloader-failed
# we're not really updatable, but want to be able to load bpf programs shipped in apexes
updatable
41 changes: 41 additions & 0 deletions service-t/native/libs/libnetworkstats/BpfNetworkStats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ int bpfGetUidStatsInternal(uid_t uid, StatsValue* stats,

int bpfGetUidStats(uid_t uid, StatsValue* stats) {
static BpfMapRO<uint32_t, StatsValue> appUidStatsMap(APP_UID_STATS_MAP_PATH);
if (!appUidStatsMap.isValid() || !appUidStatsMap.isOk()) {
ALOGE("get map fd failed: %s", strerror(errno));
return -errno;
}
return bpfGetUidStatsInternal(uid, stats, appUidStatsMap);
}

Expand Down Expand Up @@ -85,7 +89,15 @@ int bpfGetIfaceStatsInternal(const char* iface, StatsValue* stats,

int bpfGetIfaceStats(const char* iface, StatsValue* stats) {
static BpfMapRO<uint32_t, StatsValue> ifaceStatsMap(IFACE_STATS_MAP_PATH);
if (!ifaceStatsMap.isValid() || !ifaceStatsMap.isOk()) {
ALOGE("get map fd failed: %s", strerror(errno));
return -errno;
}
static BpfMapRO<uint32_t, IfaceValue> ifaceIndexNameMap(IFACE_INDEX_NAME_MAP_PATH);
if (!ifaceIndexNameMap.isValid() || !ifaceIndexNameMap.isOk()) {
ALOGE("get map fd failed: %s", strerror(errno));
return -errno;
}
return bpfGetIfaceStatsInternal(iface, stats, ifaceStatsMap, ifaceIndexNameMap);
}

Expand All @@ -102,6 +114,10 @@ int bpfGetIfIndexStatsInternal(uint32_t ifindex, StatsValue* stats,

int bpfGetIfIndexStats(int ifindex, StatsValue* stats) {
static BpfMapRO<uint32_t, StatsValue> ifaceStatsMap(IFACE_STATS_MAP_PATH);
if (!ifaceStatsMap.isValid() || !ifaceStatsMap.isOk()) {
ALOGE("get map fd failed: %s", strerror(errno));
return -errno;
}
return bpfGetIfIndexStatsInternal(ifindex, stats, ifaceStatsMap);
}

Expand Down Expand Up @@ -167,9 +183,25 @@ int parseBpfNetworkStatsDetailInternal(std::vector<stats_line>& lines,

int parseBpfNetworkStatsDetail(std::vector<stats_line>* lines) {
static BpfMapRO<uint32_t, IfaceValue> ifaceIndexNameMap(IFACE_INDEX_NAME_MAP_PATH);
if (!ifaceIndexNameMap.isValid() || !ifaceIndexNameMap.isOk()) {
ALOGE("get map fd failed: %s", strerror(errno));
return -errno;
}
static BpfMapRO<uint32_t, uint32_t> configurationMap(CONFIGURATION_MAP_PATH);
if (!configurationMap.isValid() || !configurationMap.isOk()) {
ALOGE("get map fd failed: %s", strerror(errno));
return -errno;
}
static BpfMap<StatsKey, StatsValue> statsMapA(STATS_MAP_A_PATH);
if (!statsMapA.isValid() || !statsMapA.isOk()) {
ALOGE("get map fd failed: %s", strerror(errno));
return -errno;
}
static BpfMap<StatsKey, StatsValue> statsMapB(STATS_MAP_B_PATH);
if (!statsMapB.isValid() || !statsMapB.isOk()) {
ALOGE("get map fd failed: %s", strerror(errno));
return -errno;
}
if (!configurationMap.isOk()) return -1;
auto configuration = configurationMap.readValue(CURRENT_STATS_MAP_CONFIGURATION_KEY);
if (!configuration.ok()) {
Expand Down Expand Up @@ -244,7 +276,16 @@ int parseBpfNetworkStatsDevInternal(std::vector<stats_line>& lines,

int parseBpfNetworkStatsDev(std::vector<stats_line>* lines) {
static BpfMapRO<uint32_t, IfaceValue> ifaceIndexNameMap(IFACE_INDEX_NAME_MAP_PATH);
if (!ifaceIndexNameMap.isValid() || !ifaceIndexNameMap.isOk()) {
ALOGE("get map fd failed: %s", strerror(errno));
return -errno;
}
static BpfMapRO<uint32_t, StatsValue> ifaceStatsMap(IFACE_STATS_MAP_PATH);
if (!ifaceStatsMap.isValid() || !ifaceStatsMap.isOk()) {
ALOGE("get map fd failed: %s", strerror(errno));
return -errno;
}

return parseBpfNetworkStatsDevInternal(*lines, ifaceStatsMap, ifaceIndexNameMap);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ static void verifyClatPerms() {
return;
}

if (fatal) abort();
// if (fatal) abort();
}

#undef V
Expand Down
Loading