diff --git a/sys/netpfil/ipfw/ip_fw_bpf.c b/sys/netpfil/ipfw/ip_fw_bpf.c index d7e10596573..378c3d29788 100644 --- a/sys/netpfil/ipfw/ip_fw_bpf.c +++ b/sys/netpfil/ipfw/ip_fw_bpf.c @@ -163,22 +163,27 @@ ipfwlog_clone_create(struct if_clone *ifc, int unit, caddr_t params) void ipfw_bpf_mtap2(void *data, u_int dlen, struct mbuf *m) { + struct ifnet *logif; LOGIF_RLOCK_TRACKER; LOGIF_RLOCK(); - if (dlen == ETHER_HDR_LEN) { - if (V_log_if == NULL) { - LOGIF_RUNLOCK(); - return; - } - BPF_MTAP2(V_log_if, data, dlen, m); - } else if (dlen == PFLOG_HDRLEN) { - if (V_pflog_if == NULL) { - LOGIF_RUNLOCK(); - return; - } - BPF_MTAP2(V_pflog_if, data, dlen, m); + 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(); }