The kernel now longer passes vlan tag information as-is to libpcap, instead BPF needs to access ancillary data.
That is the reason "vlan 114" works (because it does the right thing), and a manual filter doesn't, because libpcap never actually sees this.
Offsets are negative because this is the way to access this ancillary data (like vlan tags) in the Linux kernel: https://github.com/torvalds/linux/blob/6f0d349d922ba44e4348a17a78ea51b7135965b1/include/uapi/linux/filter.h#L60
The kernel now longer passes vlan tag information as-is to libpcap, instead BPF needs to access ancillary data.
That is the reason "vlan 114" works (because it does the right thing), and a manual filter doesn't, because libpcap never actually sees this.
Offsets are negative because this is the way to access this ancillary data (like vlan tags) in the Linux kernel: /github. com/torvalds/ linux/blob/ 6f0d349d922ba44 e4348a17a78ea51 b7135965b1/ include/ uapi/linux/ filter. h#L60
https:/