share eBPF struct definitions between ebpf and C++ netd
This is the main commit in a set of 3 commits across 3 diff git repos.
The other two are:
https://android-review.googlesource.com/c/platform/system/bpf/+/1199649
"remove network specific struct definitions from BpfUtils.h"
and
https://android-review.googlesource.com/c/platform/frameworks/base/+/1200738
"minor change to keep it building"
We move the struct definitions to bpf_shared.h so they can be
shared between C++ netd and C ebpf code.
They also become typedefs and are renamed for more consistent naming.
(there's some weird issue with ebpf compiler on some devices with
non-typedef'ed structs)
Test: builds, atest
Bug: 146787904
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I324c0ab9db0186dcea0ec9ee33140909be285bc4
diff --git a/libnetdbpf/BpfNetworkStatsTest.cpp b/libnetdbpf/BpfNetworkStatsTest.cpp
index 057f2a9..469ba21 100644
--- a/libnetdbpf/BpfNetworkStatsTest.cpp
+++ b/libnetdbpf/BpfNetworkStatsTest.cpp
@@ -70,7 +70,7 @@
class BpfNetworkStatsHelperTest : public testing::Test {
protected:
BpfNetworkStatsHelperTest() {}
- BpfMap<uint64_t, UidTag> mFakeCookieTagMap;
+ BpfMap<uint64_t, UidTagValue> mFakeCookieTagMap;
BpfMap<uint32_t, StatsValue> mFakeAppUidStatsMap;
BpfMap<StatsKey, StatsValue> mFakeStatsMap;
BpfMap<uint32_t, IfaceValue> mFakeIfaceIndexNameMap;
@@ -80,17 +80,16 @@
SKIP_IF_BPF_NOT_SUPPORTED;
ASSERT_EQ(0, setrlimitForTest());
- mFakeCookieTagMap = BpfMap<uint64_t, UidTag>(createMap(
- BPF_MAP_TYPE_HASH, sizeof(uint64_t), sizeof(struct UidTag), TEST_MAP_SIZE, 0));
+ mFakeCookieTagMap = BpfMap<uint64_t, UidTagValue>(createMap(
+ BPF_MAP_TYPE_HASH, sizeof(uint64_t), sizeof(UidTagValue), TEST_MAP_SIZE, 0));
ASSERT_LE(0, mFakeCookieTagMap.getMap());
mFakeAppUidStatsMap = BpfMap<uint32_t, StatsValue>(createMap(
- BPF_MAP_TYPE_HASH, sizeof(uint32_t), sizeof(struct StatsValue), TEST_MAP_SIZE, 0));
+ BPF_MAP_TYPE_HASH, sizeof(uint32_t), sizeof(StatsValue), TEST_MAP_SIZE, 0));
ASSERT_LE(0, mFakeAppUidStatsMap.getMap());
- mFakeStatsMap = BpfMap<StatsKey, StatsValue>(
- createMap(BPF_MAP_TYPE_HASH, sizeof(struct StatsKey), sizeof(struct StatsValue),
- TEST_MAP_SIZE, 0));
+ mFakeStatsMap = BpfMap<StatsKey, StatsValue>(createMap(
+ BPF_MAP_TYPE_HASH, sizeof(StatsKey), sizeof(StatsValue), TEST_MAP_SIZE, 0));
ASSERT_LE(0, mFakeStatsMap.getMap());
mFakeIfaceIndexNameMap = BpfMap<uint32_t, IfaceValue>(
@@ -98,7 +97,7 @@
ASSERT_LE(0, mFakeIfaceIndexNameMap.getMap());
mFakeIfaceStatsMap = BpfMap<uint32_t, StatsValue>(createMap(
- BPF_MAP_TYPE_HASH, sizeof(uint32_t), sizeof(struct StatsValue), TEST_MAP_SIZE, 0));
+ BPF_MAP_TYPE_HASH, sizeof(uint32_t), sizeof(StatsValue), TEST_MAP_SIZE, 0));
ASSERT_LE(0, mFakeIfaceStatsMap.getMap());
}
@@ -149,7 +148,7 @@
for (int i = 0; i < 5; i++) {
uint64_t cookie = i + 1;
- struct UidTag tag = {.uid = TEST_UID1, .tag = TEST_TAG};
+ UidTagValue tag = {.uid = TEST_UID1, .tag = TEST_TAG};
EXPECT_TRUE(isOk(mFakeCookieTagMap.writeValue(cookie, tag, BPF_ANY)));
}
uint64_t curCookie = 0;
@@ -180,18 +179,18 @@
for (int i = 0; i < 5; i++) {
uint64_t cookie = i + 1;
- struct UidTag tag = {.uid = TEST_UID1, .tag = TEST_TAG};
+ UidTagValue tag = {.uid = TEST_UID1, .tag = TEST_TAG};
EXPECT_TRUE(isOk(mFakeCookieTagMap.writeValue(cookie, tag, BPF_ANY)));
}
int totalCount = 0;
int totalSum = 0;
- const auto iterateWithoutDeletion = [&totalCount, &totalSum](const uint64_t& key,
- const BpfMap<uint64_t, UidTag>&) {
- EXPECT_GE((uint64_t)5, key);
- totalCount++;
- totalSum += key;
- return netdutils::status::ok;
- };
+ const auto iterateWithoutDeletion =
+ [&totalCount, &totalSum](const uint64_t& key, const BpfMap<uint64_t, UidTagValue>&) {
+ EXPECT_GE((uint64_t)5, key);
+ totalCount++;
+ totalSum += key;
+ return netdutils::status::ok;
+ };
EXPECT_TRUE(isOk(mFakeCookieTagMap.iterate(iterateWithoutDeletion)));
EXPECT_EQ(5, totalCount);
EXPECT_EQ(1 + 2 + 3 + 4 + 5, totalSum);