I've noticed that using either the inbound or outbound keyword in my
capture expression results in a filter that cannot be installed in the
kernel and gets processed in user mode instead. I believe the problem
is that these filters generate BPF code that
pcap-linux.c:fix_program() is unable to rewrite. In particular,
pcap-linux.c:fix_offset() bails out on a "ldh [0]" instruction.

fix_offset() already knows how to map sll_header.sll_protocol (offset
14) to Linux's SKF_AD_PROTOCOL. Would a patch to remap sll_pkttype (0)
=> SKF_AD_PKTTYPE as well be welcome or am I missing something?
Something like:

==== libpcap/pcap-linux.c ====
4735a4736,4741
>       } else if (p->k == 0) {
>               /*
>                * It's the packet type field; map it to the special magic
>                * kernel offset for that field.
>                */
>               p->k = SKF_AD_OFF + SKF_AD_PKTTYPE;

fixes the problem for me.

Thanks for reading!
JC
-
This is the tcpdump-workers list.
Visit https://cod.sandelman.ca/ to unsubscribe.

Reply via email to