Changeset View
Changeset View
Standalone View
Standalone View
sys/net/bpf.c
Show First 20 Lines • Show All 2,343 Lines • ▼ Show 20 Lines | #endif | ||||
catchpacket(d, pkt, pktlen, slen, | catchpacket(d, pkt, pktlen, slen, | ||||
bpf_append_bytes, &bt); | bpf_append_bytes, &bt); | ||||
BPFD_UNLOCK(d); | BPFD_UNLOCK(d); | ||||
} | } | ||||
} | } | ||||
NET_EPOCH_EXIT(et); | NET_EPOCH_EXIT(et); | ||||
} | } | ||||
void | |||||
bpf_tap_if(if_t ifp, u_char *pkt, u_int pktlen) | |||||
{ | |||||
if (bpf_peers_present(ifp->if_bpf)) | |||||
bpf_tap(ifp->if_bpf, pkt, pktlen); | |||||
} | |||||
#define BPF_CHECK_DIRECTION(d, r, i) \ | #define BPF_CHECK_DIRECTION(d, r, i) \ | ||||
(((d)->bd_direction == BPF_D_IN && (r) != (i)) || \ | (((d)->bd_direction == BPF_D_IN && (r) != (i)) || \ | ||||
((d)->bd_direction == BPF_D_OUT && (r) == (i))) | ((d)->bd_direction == BPF_D_OUT && (r) == (i))) | ||||
/* | /* | ||||
* Incoming linkage from device drivers, when packet is in an mbuf chain. | * Incoming linkage from device drivers, when packet is in an mbuf chain. | ||||
* Locking model is explained in bpf_tap(). | * Locking model is explained in bpf_tap(). | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | #endif | ||||
catchpacket(d, (u_char *)m, pktlen, slen, | catchpacket(d, (u_char *)m, pktlen, slen, | ||||
bpf_append_mbuf, &bt); | bpf_append_mbuf, &bt); | ||||
BPFD_UNLOCK(d); | BPFD_UNLOCK(d); | ||||
} | } | ||||
} | } | ||||
NET_EPOCH_EXIT(et); | NET_EPOCH_EXIT(et); | ||||
} | } | ||||
void | |||||
bpf_mtap_if(if_t ifp, struct mbuf *m) | |||||
{ | |||||
if (bpf_peers_present(ifp->if_bpf)) { | |||||
M_ASSERTVALID(m); | |||||
bpf_mtap(ifp->if_bpf, m); | |||||
} | |||||
} | |||||
/* | /* | ||||
* Incoming linkage from device drivers, when packet is in | * Incoming linkage from device drivers, when packet is in | ||||
* an mbuf chain and to be prepended by a contiguous header. | * an mbuf chain and to be prepended by a contiguous header. | ||||
*/ | */ | ||||
void | void | ||||
bpf_mtap2(struct bpf_if *bp, void *data, u_int dlen, struct mbuf *m) | bpf_mtap2(struct bpf_if *bp, void *data, u_int dlen, struct mbuf *m) | ||||
{ | { | ||||
struct epoch_tracker et; | struct epoch_tracker et; | ||||
Show All 39 Lines | #ifdef MAC | ||||
if (mac_bpfdesc_check_receive(d, bp->bif_ifp) == 0) | if (mac_bpfdesc_check_receive(d, bp->bif_ifp) == 0) | ||||
#endif | #endif | ||||
catchpacket(d, (u_char *)&mb, pktlen, slen, | catchpacket(d, (u_char *)&mb, pktlen, slen, | ||||
bpf_append_mbuf, &bt); | bpf_append_mbuf, &bt); | ||||
BPFD_UNLOCK(d); | BPFD_UNLOCK(d); | ||||
} | } | ||||
} | } | ||||
NET_EPOCH_EXIT(et); | NET_EPOCH_EXIT(et); | ||||
} | |||||
void | |||||
bpf_mtap2_if(if_t ifp, void *data, u_int dlen, struct mbuf *m) | |||||
{ | |||||
if (bpf_peers_present(ifp->if_bpf)) { | |||||
M_ASSERTVALID(m); | |||||
bpf_mtap2(ifp->if_bpf, data, dlen, m); | |||||
} | |||||
} | } | ||||
#undef BPF_CHECK_DIRECTION | #undef BPF_CHECK_DIRECTION | ||||
#undef BPF_TSTAMP_NONE | #undef BPF_TSTAMP_NONE | ||||
#undef BPF_TSTAMP_FAST | #undef BPF_TSTAMP_FAST | ||||
#undef BPF_TSTAMP_NORMAL | #undef BPF_TSTAMP_NORMAL | ||||
#undef BPF_TSTAMP_EXTERN | #undef BPF_TSTAMP_EXTERN | ||||
▲ Show 20 Lines • Show All 697 Lines • Show Last 20 Lines |