netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* eBPF: how to check the flow table
@ 2016-09-18 12:02 Eric Leblond
  2016-09-19  6:56 ` Eric Leblond
  0 siblings, 1 reply; 3+ messages in thread
From: Eric Leblond @ 2016-09-18 12:02 UTC (permalink / raw)
  To: netdev; +Cc: Alexei Starovoitov, daniel

Hello,

I'm currently testing a code implementing AF_PACKET bypass for
Suricata. The idea is that Suricata is updating a hash table containing
a list of flows it does not want to see anymore.

I want to check flow timeout from the userspace, so my current
algorithm is doing:

    while (bpf_get_next_key(mapfd, &key, &next_key) == 0) {
        bpf_lookup_elem(mapfd, &next_key, &value);
        FlowCallback(mapfd, &next_key, &value, data);
        key = next_key;
    }

In the FlowCallback, I check the timing in the flow entry and I remove
the key if the flow is timeout.

This is currently working well when there is only a few flows but on a
real system with log of insertion in the table, the loop is never
returning because we dequeue slower than we enqueue.

Is there a better algorithm or an other way to do it ? 

BR,
-- 
Eric Leblond <eric@regit.org>
Blog: https://home.regit.org/

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-09-19 17:53 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-18 12:02 eBPF: how to check the flow table Eric Leblond
2016-09-19  6:56 ` Eric Leblond
2016-09-19 17:53   ` Alexei Starovoitov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).