*** if_xl.c.orig Fri Feb 12 11:06:29 1999 --- if_xl.c Sat Jun 26 19:43:47 1999 *************** *** 145,150 **** --- 145,156 ---- #include + #include "opt_bdg.h" + + #ifdef BRIDGE + #include + #endif + #if !defined(lint) static const char rcsid[] = "$Id: if_xl.c,v 1.22.2.2 1999/02/12 16:06:29 wpaul Exp $"; *************** *** 1853,1858 **** --- 1859,1865 ---- if (ifp->if_bpf) { m->m_pkthdr.len = m->m_len = total_len; bpf_mtap(ifp, m); + #ifndef BRIDGE if (ifp->if_flags & IFF_PROMISC && (bcmp(eh->ether_dhost, sc->arpcom.ac_enaddr, ETHER_ADDR_LEN) && *************** *** 1860,1867 **** --- 1867,1904 ---- m_freem(m); continue; } + #endif /* !BRIDGE */ } #endif + #ifdef BRIDGE + if (do_bridge) { + struct ifnet *bdg_ifp; + m->m_pkthdr.len = m->m_len = total_len; + bdg_ifp = bridge_in (m); + if (bdg_ifp == BDG_DROP) { + m_freem(m); + continue; + } + if (bdg_ifp != BDG_LOCAL) + bdg_forward (&m, bdg_ifp); + if (bdg_ifp != BDG_LOCAL && bdg_ifp != BDG_BCAST && + bdg_ifp != BDG_MCAST) { + continue; + } + } + #if NBPFILTER > 0 + else { + if (ifp->if_bpf && (ifp->if_flags & IFF_PROMISC) && + (bcmp(eh->ether_dhost, sc->arpcom.ac_enaddr, + ETHER_ADDR_LEN) && + (eh->ether_dhost[0] & 1) == 0)) { + m_freem(m); + continue; + } + } + #endif + #endif /* BRIDGE */ + /* Remove header from mbuf and pass it on. */ m->m_pkthdr.len = m->m_len = total_len - sizeof(struct ether_header);