Hi,
I develop a Linux sniffer application , which uses libpcap 1.2.0 library.
The problem is that on some 2.6.16 and 2.4 kernel machines, which are
pretty much "usual", SOMETIMES SOME packets are captured partially, i.e.
tpacket_hdr structure tp_snaplen value is less then tp_len value. I see
this right after that libpcap code calls RING_GET_FRAME on pcap_t handle,
so my assumption is  that libpcap in not "guilt" here, but some kernel
infrastructure is.

After short investigation I found that in create_ring() function the max
frame size is set to MTU size + 18. It did not help, but  confused even
more - my partial packets are of size much larger then the NIC MTU, e.g MTU
size is 1500, while partial packets captured size is 3128, and 3400 on wire
.

Playing around with TSO enabling/disabling had no effect.
All the problematic machines are 64 bit.

I'm really sorry for the "SOMETIMES", but I've failed to isolate a problem,
it may happen on single connection for a number of packets, while the rest
are OK.

So before I drill down to kernel debugging, may some of your guys have an
idea why that weird stuff may happen?
-
This is the tcpdump-workers list.
Visit https://cod.sandelman.ca/ to unsubscribe.

Reply via email to