netsniff-ng: tpacketv3: 'fix' packet accounting output
authorDaniel Borkmann <dborkman@redhat.com>
Tue, 25 Jun 2013 10:30:58 +0000 (12:30 +0200)
committerDaniel Borkmann <dborkman@redhat.com>
Tue, 25 Jun 2013 10:30:58 +0000 (12:30 +0200)
commit278f62a9da99dcca7a7b95f34635b0fcd1a88185
tree071023d829cf078c7446fe23049a7cab299de628
parentea14716362e78d109490df9f345488d1c9a4a6c9
netsniff-ng: tpacketv3: 'fix' packet accounting output

In netsniff-ng, we use tpacketv3 for capturing-only mode. The issue
observed lately is that when using f.e. -n10 or capturing a pcap and
then quitting, the pcap or actually seen number of packets are less
than what the statistics tell us from getsockopt(2).

This is due to the fact that tpacketv3 divides its ring buffer into
blocks of frames. Meaning, while we are traversing block n, the kernel
already fills up block n+1 and following if new packets arrive. While
doing so, it increments packet counters. Thus, when we ^C, we haven't
seen those blocks, so the stats tell us mostly a slightly higher
result. Fix this by adjusting socket stats printing to this fact.

Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
netsniff-ng.c
ring_rx.c
ring_rx.h