Apply by doing: cd /usr/src patch -p0 < 003_bridge.patch And then rebuild your kernel. Index: sys/net/if_bridge.c =================================================================== RCS file: /cvs/src/sys/net/if_bridge.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- sys/net/if_bridge.c 2000/04/10 13:34:54 1.29 +++ sys/net/if_bridge.c 2000/05/25 00:30:27 1.30 @@ -1,4 +1,4 @@ -/* $OpenBSD: if_bridge.c,v 1.29 2000/04/10 13:34:54 jason Exp $ */ +/* $OpenBSD: if_bridge.c,v 1.30 2000/05/25 00:30:27 jason Exp $ */ /* * Copyright (c) 1999, 2000 Jason L. Wright (jason@thought.net) @@ -1093,24 +1093,21 @@ /* * Unicast, make sure it's not for us. */ - ifl = LIST_FIRST(&sc->sc_iflist); - while (ifl != NULL) { - if (ifl->ifp->if_type == IFT_ETHER) { - ac = (struct arpcom *)ifl->ifp; - if (bcmp(ac->ac_enaddr, eh->ether_dhost, - ETHER_ADDR_LEN) == 0) { + for (ifl = LIST_FIRST(&sc->sc_iflist);ifl; ifl = LIST_NEXT(ifl,next)) { + if (ifl->ifp->if_type != IFT_ETHER) + continue; + ac = (struct arpcom *)ifl->ifp; + if (bcmp(ac->ac_enaddr, eh->ether_dhost, ETHER_ADDR_LEN) == 0) { + if (ifl->bif_flags & IFBIF_LEARNING) bridge_rtupdate(sc, - (struct ether_addr *)&eh->ether_dhost[0], + (struct ether_addr *)&eh->ether_dhost, ifp, 0, IFBAF_DYNAMIC); - return (m); - } - if (bcmp(ac->ac_enaddr, eh->ether_shost, - ETHER_ADDR_LEN) == 0) { - m_freem(m); - return (NULL); - } + return (m); } - ifl = LIST_NEXT(ifl, next); + if (bcmp(ac->ac_enaddr, eh->ether_shost, ETHER_ADDR_LEN) == 0) { + m_freem(m); + return (NULL); + } } M_PREPEND(m, sizeof(struct ether_header), M_DONTWAIT); if (m == NULL) @@ -1166,9 +1163,8 @@ if (SIMPLEQ_FIRST(&p->bif_brlout) && bridge_filterrule(SIMPLEQ_FIRST(&p->bif_brlout), eh) == - BRL_ACTION_BLOCK) { + BRL_ACTION_BLOCK) continue; - } /* If last one, reuse the passed-in mbuf */ if (LIST_NEXT(p, next) == NULL) {