svn commit: r345192 - head/sys/net

Kyle Evans kevans at FreeBSD.org
Fri Mar 15 17:13:06 UTC 2019


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);
 }
 


More information about the svn-src-head mailing list