static_assert(sizeof(v6Addr.sin6_addr.s6_addr) == sizeof(v6Key), "POSIX mandates s6_addr to be an array of 16 uint8_t");
memset(&v6Key, 0, sizeof(v6Key));
+
+ CIDR4 cidr4[2];
+ memset(cidr4, 0, sizeof(cidr4));
+ CIDR6 cidr6[2];
+ memset(cidr6, 0, sizeof(cidr6));
+
+
auto maps = d_maps.lock();
{
}
}
+ {
+ auto& map =maps->d_cidr4;
+ int res=bpf_get_next_key(map.d_fd.getHandle(), &cidr4[0], &cidr4[1]);
+ while (res == 0) {
+ if (bpf_lookup_elem(map.d_fd.getHandle(), &cidr4[0], &value) == 0) {
+ v4Addr.sin_addr.s_addr = cidr4[0].addr.s_addr;
+ result.emplace_back(ComboAddress(&v4Addr), value.counter);
+ }
+
+ res = bpf_get_next_key(map.d_fd.getHandle(), &cidr4[0], &cidr4[1]);
+ }
+ }
+
+ {
+ auto& map =maps->d_cidr6;
+ int res=bpf_get_next_key(map.d_fd.getHandle(), &cidr6[0], &cidr6[1]);
+ while (res == 0) {
+ if (bpf_lookup_elem(map.d_fd.getHandle(), &cidr6[0], &value) == 0) {
+ v6Addr.sin6_addr=cidr6[0].addr;
+ result.emplace_back(ComboAddress(&v6Addr), value.counter);
+ }
+
+ res = bpf_get_next_key(map.d_fd.getHandle(), &cidr6[0], &cidr6[1]);
+ }
+ }
+
return result;
}