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 (
[email protected])
@@ -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) {