If we change the "rcvif" pointer of a packet we need to run if_input()
again otherwise we might skip the handlers on the new interface.

Ultimately it would be nice to only assign "rcvif" in  if_input(), but
that's for another diff.

This fix one case I left out in my previous conversion, ok?

Index: net/if_bridge.c
===================================================================
RCS file: /cvs/src/sys/net/if_bridge.c,v
retrieving revision 1.238
diff -u -p -r1.238 if_bridge.c
--- net/if_bridge.c     15 May 2015 10:15:13 -0000      1.238
+++ net/if_bridge.c     15 May 2015 10:50:32 -0000
@@ -1478,12 +1478,9 @@ bridge_dispatch(struct bridge_iflist *if
 
                        m->m_pkthdr.rcvif = ifl->ifp;
                        m->m_pkthdr.ph_rtableid = ifl->ifp->if_rdomain;
-                       if (ifp->if_type == IFT_GIF) {
-                               m->m_flags |= M_PROTO1;
-                               ether_input_mbuf(ifl->ifp, m);
-                               m = NULL;
-                       }
-                       return (m);
+                       m->m_flags |= M_PROTO1;
+                       ether_input_mbuf(ifl->ifp, m);
+                       return (NULL);
                }
                if (bcmp(ac->ac_enaddr, eh->ether_shost, ETHER_ADDR_LEN) == 0
 #if NCARP > 0

Reply via email to