? bridgeMFC.diff Index: net/bridge.c =================================================================== RCS file: /home/ncvs/src/sys/net/bridge.c,v retrieving revision 1.16.2.6 diff -u -r1.16.2.6 bridge.c --- net/bridge.c 2000/09/25 17:30:01 1.16.2.6 +++ net/bridge.c 2000/11/25 06:08:58 @@ -767,6 +767,9 @@ m_freem(m); if (canfree == 0) /* m was a copy */ m_freem(*m0); +#ifdef DIAGNOSTIC + printf("bdg_forward: No rules match, so dropping packet!\n"); +#endif *m0 = NULL ; return 0 ; } Index: net/if_ethersubr.c =================================================================== RCS file: /home/ncvs/src/sys/net/if_ethersubr.c,v retrieving revision 1.70.2.9 diff -u -r1.70.2.9 if_ethersubr.c --- net/if_ethersubr.c 2000/10/20 18:26:30 1.70.2.9 +++ net/if_ethersubr.c 2000/11/25 06:08:58 @@ -446,8 +446,16 @@ m_freem(m); return; } - if (bif != BDG_LOCAL) + if (bif != BDG_LOCAL) { bdg_forward(&m, eh, bif); /* needs forwarding */ + /* + * Do not continue if bdg_forward() processed our + * packet (and cleared the mbuf pointer m) or if + * it dropped (m_free'd) the packet itself. + */ + if (m == NULL) + return; + } if (bif == BDG_LOCAL || bif == BDG_BCAST || bif == BDG_MCAST)