util-ebpf: fix IPv6 deletion loop

pull/3952/head
Eric Leblond 6 years ago committed by Victor Julien
parent b481f290e2
commit 07d0bd3a0f

@ -645,10 +645,15 @@ static int EBPFForEachFlowV6Table(LiveDevice *dev, const char *name,
return 0;
}
uint64_t pkts_cnt = 0;
while (bpf_map_get_next_key(mapfd, &key, &next_key) == 0) {
uint64_t pkts_cnt = 0;
uint64_t bytes_cnt = 0;
hash_cnt++;
if (pkts_cnt > 0) {
SC_ATOMIC_ADD(dev->bypassed, pkts_cnt);
EBPFDeleteKey(mapfd, &key);
}
pkts_cnt = 0;
/* We use a per CPU structure so we will get a array of values. But if nr_cpus
* is 1 then we have a global hash. */
struct pair values_array[tcfg->cpus_count];
@ -693,12 +698,15 @@ static int EBPFForEachFlowV6Table(LiveDevice *dev, const char *name,
pkts_cnt = EBPFOpFlowForKey(flowstats, &flow_key, values_array[0].hash,
ctime, pkts_cnt, bytes_cnt);
if (pkts_cnt > 0) {
SC_ATOMIC_ADD(dev->bypassed, pkts_cnt);
EBPFDeleteKey(mapfd, &next_key);
found = 1;
}
key = next_key;
}
if (pkts_cnt > 0) {
SC_ATOMIC_ADD(dev->bypassed, pkts_cnt);
EBPFDeleteKey(mapfd, &key);
found = 1;
}
struct bpf_maps_info *bpfdata = LiveDevGetStorageById(dev, g_livedev_storage_id);
if (bpfdata) {

Loading…
Cancel
Save