summaryrefslogtreecommitdiff
path: root/static/openbsd/man9/bpf_mtap.9
diff options
context:
space:
mode:
Diffstat (limited to 'static/openbsd/man9/bpf_mtap.9')
-rw-r--r--static/openbsd/man9/bpf_mtap.9306
1 files changed, 306 insertions, 0 deletions
diff --git a/static/openbsd/man9/bpf_mtap.9 b/static/openbsd/man9/bpf_mtap.9
new file mode 100644
index 00000000..1e40f51b
--- /dev/null
+++ b/static/openbsd/man9/bpf_mtap.9
@@ -0,0 +1,306 @@
+.\" $OpenBSD: bpf_mtap.9,v 1.19 2025/03/04 01:33:42 dlg Exp $
+.\"
+.\" Copyright (c) 2016 David Gwynne <dlg@openbsd.org>
+.\"
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.Dd $Mdocdate: March 4 2025 $
+.Dt BPF_MTAP 9
+.Os
+.Sh NAME
+.Nm bpfattach ,
+.Nm bpfxattach ,
+.Nm bpfdetach ,
+.Nm bpfsattach ,
+.Nm bpfsdetach ,
+.Nm bpf_filter ,
+.Nm bpf_mfilter ,
+.Nm bpf_validate ,
+.Nm bpf_mtap ,
+.Nm bpf_mtap_hdr ,
+.Nm bpf_mtap_af ,
+.Nm bpf_mtap_ether ,
+.Nm bpf_tap_hdr
+.Nd BPF kernel API
+.Sh SYNOPSIS
+.In net/bpf.h
+.Ft void
+.Fo bpfattach
+.Fa "caddr_t *bpfp"
+.Fa "struct ifnet *ifp"
+.Fa "u_int dlt"
+.Fa "u_int hdrlen"
+.Fc
+.Ft void *
+.Fo bpfxattach
+.Fa "caddr_t *bpfp"
+.Fa "const char *name"
+.Fa "struct ifnet *ifp"
+.Fa "u_int dlt"
+.Fa "u_int hdrlen"
+.Fc
+.Ft void
+.Fn bpfdetach "struct ifnet *ifp"
+.Ft void *
+.Fn bpfsattach "caddr_t *bpfp" "const char *name" "u_int dlt" "u_int hdrlen"
+.Ft void
+.Fn bpfsdetach "void *bpfif"
+.Ft u_int
+.Fo bpf_filter
+.Fa "const struct bpf_insn *pc"
+.Fa "const u_char *pkt"
+.Fa "u_int wirelen"
+.Fa "u_int pktlen"
+.Fc
+.Ft u_int
+.Fo bpf_mfilter
+.Fa "const struct bpf_insn *pc"
+.Fa "const struct mbuf *m"
+.Fa "u_int wirelen"
+.Fc
+.Ft int
+.Fn bpf_validate "struct bpf_insn *pc" "int len"
+.Ft int
+.Fn bpf_mtap "caddr_t bpf" "const struct mbuf *m" "u_int direction"
+.Ft int
+.Fo bpf_mtap_hdr
+.Fa "caddr_t bpf"
+.Fa "const void *hdr"
+.Fa "u_int hdrlen"
+.Fa "const struct mbuf *m"
+.Fa "u_int direction"
+.Fc
+.Ft int
+.Fo bpf_mtap_af
+.Fa "caddr_t bpf"
+.Fa "u_int32_t af"
+.Fa "const struct mbuf *m"
+.Fa "u_int direction"
+.Fc
+.Ft int
+.Fn bpf_mtap_ether "caddr_t bpf" "const struct mbuf *m" "u_int direction"
+.Ft int
+.Fo bpf_tap_hdr
+.Fa "caddr_t bpf"
+.Fa "const void *hdr"
+.Fa "u_int hdrlen"
+.Fa "const void *buf"
+.Fa "u_int buflen"
+.Fa "u_int direction"
+.Fc
+.Sh DESCRIPTION
+The BPF kernel API provides functions for evaluating BPF instructions
+against packets, and incoming linkage from device drivers.
+A packet is parsed by the filters associated with each interface
+and, if accepted, stashed into the corresponding buffer.
+.Pp
+.Fn bpfattach
+allocates and configures a BPF interface for use with the network interface
+.Fa ifp .
+.Fa bpfp
+is the location of BPF interface pointer that the network interface passes to
+the filter functions.
+The BPF interface pointer will be clear until a filter is registered and
+packets can be filtered on it.
+The
+.Fa dlt
+argument identifies the data link-layer type that the network
+interface provides for this BPF interface.
+.Fn bpfattach
+may be called multiple times against the same network interface to
+provide different data link-layer types for filtering.
+.Fa hdrlen
+indicates the length of the link header for the data link-layer type.
+.Pp
+.Fn bpfxattach
+allocates and configures a BPF interface for use with the network interface
+.Fa ifp ,
+but with a BPF interface name provided by the
+.Fa name
+argument instead of the name of the network interface.
+The
+.Fa bpfp ,
+.Fa dlt ,
+.Fa hdrlen
+arguments work like those in
+.Fn bpfattach .
+.Pp
+.Fn bpfdetach
+removes and frees all the BPF interfaces that were configured for
+the network interface
+.Fa ifp .
+.Pp
+.Fn bpfsattach
+allocates and configures a BPF interface for use by the subsystem
+identified by
+.Fa name .
+The
+.Fa bpfp ,
+.Fa dlt ,
+.Fa hdrlen
+arguments work like those in
+.Fn bpfattach .
+.Pp
+.Fn bpfsdetach
+removes and frees the BPF interface referenced by
+.Fa bpfif .
+.Pp
+.Fn bpf_filter
+executes the BPF program referenced by
+.Fa pc
+against the packet buffer starting at
+.Fa pkt
+of
+.Fa pktlen
+bytes in length.
+.Fa wirelen
+is the length of the original packet on the wire.
+.Pp
+.Fn bpf_mfilter
+executes the BPF program referenced by
+.Fa pc
+against the packet in the mbuf
+.Fa m .
+.Fa wirelen
+is the length of the original packet on the wire.
+.Pp
+.Fn bpf_validate
+tests if the BPF program referenced by
+.Fa pc
+is valid.
+.Fa len
+specifies the number of instructions in
+.Fa pc .
+.Pp
+.Fn bpf_tap
+runs the filters on the BPF interface referenced by
+.Fa bpf
+in the direction
+.Fa direction
+against the packet in the
+.Fa pkt
+buffer.
+.Pp
+.Fn bpf_mtap
+runs the filters on the BPF interface referenced by
+.Fa bpf
+in the direction
+.Fa direction
+against the packet in mbuf chain
+.Fa m .
+.Pp
+.Fn bpf_mtap_hdr
+runs the filters on the BPF interface referenced by
+.Fa bpf
+in the direction
+.Fa direction
+against the packet in mbuf chain
+.Fa m .
+The header referenced by
+.Fa hdr
+will be prefixed to the packet during filter evaluation.
+.Pp
+.Fn bpf_mtap_af
+runs the filters on the BPF interface referenced by
+.Fa bpf
+in the direction
+.Fa direction
+against the packet in mbuf chain
+.Fa m .
+The address family specified by
+.Fa af
+will be prepended to the packet before matching occurs.
+.Pp
+.Fn bpf_mtap_ether
+runs the filters on the BPF interface referenced by
+.Fa bpf
+in the direction
+.Fa direction
+against an Ethernet packet in the mbuf
+.Fa m .
+If the mbuf is flagged with
+.Dv M_VLANTAG ,
+an Ethernet VLAN header is constructed using
+m->m_pkthdr.ether_vtag
+and
+m->m_pkthdr.pf.prio
+before matching occurs.
+.Pp
+.Fn bpf_tap_hdr
+runs the filters on the BPF interface referenced by
+.Fa bpf
+in the direction
+.Fa direction
+against the buffer
+.Fa buf
+of length
+.Fa buflen .
+The header
+.Fa hdr
+of length
+.Fa hdrlen
+will be prefixed to the buffer for filter evaluation.
+.Sh CONTEXT
+.Fn bpfattach ,
+.Fn bpfxattach ,
+.Fn bpfdetach ,
+.Fn bpfsattach ,
+and
+.Fn bpfsdetach
+can be called from process context.
+.Pp
+.Fn bpf_filter ,
+.Fn bpf_mfilter ,
+and
+.Fn bpf_validate
+can be called from process context, or from an interrupt context.
+.Pp
+.Fn bpf_mtap ,
+.Fn bpf_mtap_hdr ,
+.Fn bpf_mtap_af ,
+.Fn bpf_mtap_ether ,
+and
+.Fn bpf_tap_hdr
+can be called from process context, or from an interrupt context at or below
+.Dv IPL_NET .
+.Sh RETURN VALUES
+.Fn bpfsattach
+and
+.Fn bpfxattach
+return a reference to the BPF interface they allocate.
+.Pp
+.Fn bpf_filter
+and
+.Fn bpf_mfilter
+return -1 (cast to an unsigned integer) if the filter program is
+.Dv NULL ,
+or the result of the filter program.
+Filter programs should return the maximum number of bytes of the
+packet to capture, or 0 if the packet does not match the filter
+program.
+.Pp
+.Fn bpf_validate
+returns a non-zero value if the BPF program is valid,
+otherwise 0.
+.Pp
+.Fn bpf_mtap ,
+.Fn bpf_mtap_hdr ,
+.Fn bpf_mtap_af ,
+.Fn bpf_mtap_ether ,
+and
+.Fn bpf_tap_hdr
+return 1 if the packet or buffer matched a filter that indicates it
+should be dropped, otherwise 0.
+.Sh SEE ALSO
+.Xr mbuf 9 ,
+.Xr spl 9