/* * Pass a packet to the higher levels. */ static inline void be_read(struct be_softc *sc, int idx, int len) { struct ifnet *ifp = &sc->sc_ethercom.ec_if; struct mbuf *m; if (len <= sizeof(struct ether_header) || len > ETHER_MAX_LEN + ETHER_VLAN_ENCAP_LEN) { #ifdef BEDEBUG if (sc->sc_debug) printf("%s: invalid packet size %d; dropping\n", ifp->if_xname, len); #endif ifp->if_ierrors++; return; } /* * Pull packet off interface. */ m = be_get(sc, idx, len); if (m == NULL) { ifp->if_ierrors++; return; } ifp->if_ipackets++; /* * Check if there's a BPF listener on this interface. * If so, hand off the raw packet to BPF. */ bpf_mtap(ifp, m); /* Pass the packet up. */ (*ifp->if_input)(ifp, m); }
/* * Pass a packet to the higher levels. */ static __inline__ void be_read(struct be_softc *sc, int idx, int len) { struct ifnet *ifp = &sc->sc_arpcom.ac_if; struct mbuf *m; if (len <= sizeof(struct ether_header) || len > ETHERMTU + sizeof(struct ether_header)) { printf("%s: invalid packet size %d; dropping\n", ifp->if_xname, len); ifp->if_ierrors++; return; } /* * Pull packet off interface. */ m = be_get(sc, idx, len); if (m == NULL) { ifp->if_ierrors++; return; } ifp->if_ipackets++; #if NBPFILTER > 0 /* * Check if there's a BPF listener on this interface. * If so, hand off the raw packet to BPF. */ if (ifp->if_bpf) bpf_mtap(ifp->if_bpf, m, BPF_DIRECTION_IN); #endif /* Pass the packet up. */ ether_input_mbuf(ifp, m); }