Use bpf get first key to iterate the maps

With the newest kernel support from upstream. We can directly get the
first key of each map with a null pointer instead of using a nonexistent
key for each map. This patch replaced all related iteration process with
this new function and cleaned up all unecessary code.

Bug: 30950746
Test: ./libbpfTest ./netd_unit_test

Change-Id: Ie1fd617964d37d2a1c12b2f34457c1cc1d912571
diff --git a/libbpf/BpfNetworkStatsTest.cpp b/libbpf/BpfNetworkStatsTest.cpp
index d1f8157..1e9ec8c 100644
--- a/libbpf/BpfNetworkStatsTest.cpp
+++ b/libbpf/BpfNetworkStatsTest.cpp
@@ -181,6 +181,29 @@
     EXPECT_EQ(headOfMap, nextCookie);
 }
 
+TEST_F(BpfNetworkStatsHelperTest, TestBpfIterateMap) {
+    SKIP_IF_BPF_NOT_SUPPORTED;
+
+    for (int i = 0; i < 5; i++) {
+        uint64_t cookie = i + 1;
+        struct UidTag tag = {.uid = TEST_UID1, .tag = TEST_TAG};
+        EXPECT_EQ(0, writeToMapEntry(mFakeCookieTagMap, &cookie, &tag, BPF_ANY));
+    }
+    int totalCount = 0;
+    int totalSum = 0;
+    uint64_t dummyCookie;
+    auto iterateMapWithoutDeletion = [&totalCount, &totalSum](void* key, const base::unique_fd&) {
+        uint64_t cookie = *(uint64_t*)key;
+        EXPECT_GE((uint64_t)5, cookie);
+        totalCount++;
+        totalSum += cookie;
+        return BPF_CONTINUE;
+    };
+    EXPECT_EQ(0, bpfIterateMap(dummyCookie, mFakeCookieTagMap, iterateMapWithoutDeletion));
+    EXPECT_EQ(5, totalCount);
+    EXPECT_EQ(1 + 2 + 3 + 4 + 5, totalSum);
+}
+
 TEST_F(BpfNetworkStatsHelperTest, TestGetUidStatsTotal) {
     SKIP_IF_BPF_NOT_SUPPORTED;
 
@@ -335,25 +358,6 @@
     ASSERT_EQ((unsigned long)2, lines.size());
 }
 
-TEST_F(BpfNetworkStatsHelperTest, TestGetStatsWithNoExistKey) {
-    SKIP_IF_BPF_NOT_SUPPORTED;
-
-    updateIfaceMap(IFACE_NAME1, IFACE_INDEX1);
-    StatsValue value1 = {
-        .rxBytes = TEST_BYTES0,
-        .rxPackets = TEST_PACKET0,
-        .txBytes = TEST_BYTES1,
-        .txPackets = TEST_PACKET1,
-    };
-    populateFakeStats(DEFAULT_OVERFLOWUID, 0, 0, 0, &value1, mFakeUidStatsMap);
-    populateFakeStats(TEST_UID1, 0, IFACE_INDEX1, TEST_COUNTERSET0, &value1, mFakeUidStatsMap);
-    std::vector<stats_line> lines;
-    std::vector<std::string> ifaces;
-    ASSERT_EQ(-EUCLEAN,
-              parseBpfNetworkStatsDetailInternal(&lines, ifaces, TAG_ALL, UID_ALL, mFakeUidStatsMap,
-                                                 mFakeIfaceIndexNameMap));
-}
-
 TEST_F(BpfNetworkStatsHelperTest, TestUnkownIfaceError) {
     SKIP_IF_BPF_NOT_SUPPORTED;