add support for bpf on "subsystems", not just network interfaces
authordlg <dlg@openbsd.org>
Wed, 24 Jan 2018 00:25:17 +0000 (00:25 +0000)
committerdlg <dlg@openbsd.org>
Wed, 24 Jan 2018 00:25:17 +0000 (00:25 +0000)
commita60ac7a2fecea630cbc892141464020956782816
tree99f610f90f49ca3a035c74ae1ee64b85e5c39407
parent06140d1890bb8a5b9047145b1d5806660b39ad63
add support for bpf on "subsystems", not just network interfaces

bpf assumed that it was being unconditionally attached to network
interfaces, and maintained a pointer to a struct ifnet *. this was
mostly used to get at the name of the interface, which is how
userland asks to be attached to a particular interface. this diff
adds a pointer to the name and uses it instead of the interface
pointer for these lookups. this in turn allows bpf to be attached
to arbitrary subsystems in the kernel which just have to supply a
name rather than an interface pointer. for example, bpf could be
attached to pf_test so you can see what packets are about to be
filtered. mpi@ is using this to look at usb transfers.

bpf still uses the interface pointer for bpfwrite, and for enabling
and disabling promisc. however, these are nopped out for subsystems.

ok mpi@
sys/net/bpf.c
sys/net/bpf.h
sys/net/bpfdesc.h