Changeset View
Changeset View
Standalone View
Standalone View
sys/netpfil/ipfw/ip_fw_bpf.c
Show First 20 Lines • Show All 155 Lines • ▼ Show 20 Lines | if (V_pflog_if != NULL) { | ||||
return (EEXIST); | return (EEXIST); | ||||
} | } | ||||
V_pflog_if = ifp; | V_pflog_if = ifp; | ||||
LOGIF_WUNLOCK(); | LOGIF_WUNLOCK(); | ||||
return (0); | return (0); | ||||
} | } | ||||
void | void | ||||
ipfw_bpf_mtap2(void *data, u_int dlen, struct mbuf *m) | ipfw_bpf_tap(u_char *pkt, u_int pktlen) | ||||
{ | { | ||||
LOGIF_RLOCK_TRACKER; | LOGIF_RLOCK_TRACKER; | ||||
LOGIF_RLOCK(); | LOGIF_RLOCK(); | ||||
if (dlen == ETHER_HDR_LEN) { | if (V_log_if != NULL) | ||||
if (V_log_if == NULL) { | BPF_TAP(V_log_if, pkt, pktlen); | ||||
LOGIF_RUNLOCK(); | LOGIF_RUNLOCK(); | ||||
return; | |||||
} | } | ||||
BPF_MTAP2(V_log_if, data, dlen, m); | |||||
} else if (dlen == PFLOG_HDRLEN) { | void | ||||
if (V_pflog_if == NULL) { | ipfw_bpf_mtap(struct mbuf *m) | ||||
{ | |||||
LOGIF_RLOCK_TRACKER; | |||||
LOGIF_RLOCK(); | |||||
if (V_log_if != NULL) | |||||
BPF_MTAP(V_log_if, m); | |||||
LOGIF_RUNLOCK(); | LOGIF_RUNLOCK(); | ||||
return; | |||||
} | } | ||||
BPF_MTAP2(V_pflog_if, data, dlen, m); | |||||
void | |||||
ipfw_bpf_mtap2(void *data, u_int dlen, struct mbuf *m) | |||||
{ | |||||
struct ifnet *logif; | |||||
LOGIF_RLOCK_TRACKER; | |||||
LOGIF_RLOCK(); | |||||
switch (dlen) { | |||||
case (ETHER_HDR_LEN): | |||||
logif = V_log_if; | |||||
break; | |||||
case (PFLOG_HDRLEN): | |||||
logif = V_pflog_if; | |||||
break; | |||||
default: | |||||
#ifdef INVARIANTS | |||||
panic("%s: unsupported len %d", __func__, dlen); | |||||
#endif | |||||
logif = NULL; | |||||
} | } | ||||
if (logif != NULL) | |||||
BPF_MTAP2(logif, data, dlen, m); | |||||
LOGIF_RUNLOCK(); | LOGIF_RUNLOCK(); | ||||
} | } | ||||
void | void | ||||
ipfw_bpf_init(int first) | ipfw_bpf_init(int first) | ||||
{ | { | ||||
if (first) { | if (first) { | ||||
Show All 20 Lines |