Author: kevans
Date: Fri Mar 15 17:13:05 2019
New Revision: 345192
URL: https://svnweb.freebsd.org/changeset/base/345192

Log:
  if_bridge(4): Drop pointless rtflush
  
  At this point, all routes should've already been dropped by removing all
  members from the bridge. This condition is in-fact KASSERT'd in the line
  immediately above where this nop flush was added.

Modified:
  head/sys/net/if_bridge.c

Modified: head/sys/net/if_bridge.c
==============================================================================
--- head/sys/net/if_bridge.c    Fri Mar 15 17:04:33 2019        (r345191)
+++ head/sys/net/if_bridge.c    Fri Mar 15 17:13:05 2019        (r345192)
@@ -2449,6 +2449,22 @@ bridge_input(struct ifnet *ifp, struct mbuf *m)
                }                                                       \
                m->m_pkthdr.rcvif = iface;                              \
                BRIDGE_UNLOCK(sc);                                      \
+               /*                                                      \
+                * These mbufs will not have another chance to get sent \
+                * to bpf elsewhere in the stack as being received      \
+                * by this interface, because they are coming in over   \
+                * the bridge.  They likely have been accounted for     \
+                * when received by the interface that they came from,  \
+                * but this is not enough for other consumers,          \
+                * e.g. dhclient, to be satisfied.                      \
+                *                                                      \
+                * rcvif needs to be set on the mbuf here, lest we risk \
+                * losing the mbuf as a "duplicate" because it's        \
+                * considered outgoing by bpf.                          \
+                */                                                     \
+               if ((iface)->if_type != IFT_BRIDGE &&                   \
+                   (iface)->if_bpf != NULL && (iface) != (ifp))         \
+                       ETHER_BPF_MTAP(iface, m);                       \
                return (m);                                             \
        }                                                               \
                                                                        \
@@ -2890,7 +2906,6 @@ bridge_rtable_fini(struct bridge_softc *sc)
 
        KASSERT(sc->sc_brtcnt == 0,
            ("%s: %d bridge routes referenced", __func__, sc->sc_brtcnt));
-       bridge_rtflush(sc, 1);
        free(sc->sc_rthash, M_DEVBUF);
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to