From nsayer@medusa.kfu.com Wed Mar 10 15:45:20 1999
Return-Path: <nsayer@medusa.kfu.com>
Received: from quack.kfu.com (quack.kfu.com [170.1.70.2])
	by hub.freebsd.org (Postfix) with ESMTP id B9A3C14C80
	for <FreeBSD-gnats-submit@freebsd.org>; Wed, 10 Mar 1999 15:44:18 -0800 (PST)
	(envelope-from nsayer@medusa.kfu.com)
Received: from medusa.kfu.com (medusa.kfu.com [170.1.70.5])
	by quack.kfu.com (8.8.7/8.8.5) with ESMTP id PAA01798
	for <FreeBSD-gnats-submit@freebsd.org>; Wed, 10 Mar 1999 15:44:00 -0800 (PST)
Received: (from nsayer@localhost)
	by medusa.kfu.com (8.8.8/8.8.8) id PAA02956;
	Wed, 10 Mar 1999 15:43:59 -0800 (PST)
	(envelope-from nsayer)
Message-Id: <199903102343.PAA02956@medusa.kfu.com>
Date: Wed, 10 Mar 1999 15:43:59 -0800 (PST)
From: Nick Sayer <nsayer@quack.kfu.com>
Sender: nsayer@medusa.kfu.com
Reply-To: nsayer@quack.kfu.com
To: FreeBSD-gnats-submit@freebsd.org
Subject: if_tx.c bridge patch
X-Send-Pr-Version: 3.2

>Number:         10534
>Category:       kern
>Synopsis:       if_tx.c bridge patch
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Mar 10 15:50:01 PST 1999
>Closed-Date:    Wed Mar 31 05:54:36 PST 1999
>Last-Modified:  Wed Mar 31 05:54:53 PST 1999
>Originator:     Nick Sayer
>Release:        FreeBSD 3.1-RELEASE i386
>Organization:
Just me
>Environment:

tx0 interface, #define BRIDGE kernel

>Description:

Add support for bridging to the TX interface.

>How-To-Repeat:

>Fix:
	

--- if_tx.c.orig	Sun Dec 13 22:32:56 1998
+++ if_tx.c	Wed Mar 10 15:40:00 1999
@@ -135,6 +135,11 @@
 
 #include <pci/pcivar.h>
 #include <pci/if_txvar.h>
+
+#ifdef BRIDGE
+#include <net/bridge.h>
+#endif
+
 #endif
 
 #if defined(__FreeBSD__)
@@ -908,7 +913,28 @@
 			bpf_mtap( sc->sc_if.if_bpf, m );
 #endif /* __FreeBSD__ */
 
+#endif /* NBPFILTER */
+
+#ifdef BRIDGE
+		if (do_bridge) {
+			struct ifnet *bdg_ifp ;
+			bdg_ifp = bridge_in(m);
+			if (bdg_ifp == BDG_DROP) {
+				m_free(m);
+				continue; /* and drop */
+			}
+			if (bdg_ifp != BDG_LOCAL)
+				bdg_forward(&m, bdg_ifp);
+			if (bdg_ifp != BDG_LOCAL && bdg_ifp != BDG_BCAST &&
+				bdg_ifp != BDG_MCAST) {
+				/* m_free(m); bdg_forward consumed it */
+				continue; /* and drop */
+			}
+			/* all others accepted locally */
+		}
+#endif
 		/* Accept only our packets, broadcasts and multicasts */
+#if NBPFILTER > 0 && !defined(BRIDGE)
 		if( (eh->ether_dhost[0] & 1) == 0 &&
 		    bcmp(eh->ether_dhost,sc->sc_macaddr,ETHER_ADDR_LEN)){
 			m_freem(m);

>Release-Note:
>Audit-Trail:

From: Nick Sayer <nsayer@quack.kfu.com>
To: freebsd-gnats-submit@freebsd.org
Cc:  
Subject: Re: kern/10534: if_tx.c bridge patch
Date: Fri, 26 Mar 1999 15:02:59 -0800 (PST)

 In retrospect, change this line in the patch
 
 +#if NBPFILTER > 0 && !defined(BRIDGE)
 
 to
 
 #if NBPFILTER > 0
 
 You want this because you still want to run the check indicated
 regardless of the state of do_bridge. But it doesn't have to be
 there if bpfilter is off (because do_bridge will then turn
 promiscuous mode on or off as appropriate). It does need to be
 there if bpfilter is on because do_bridge could be off and
 promiscuous mode could still be on (because of bpfilter).
 
 
State-Changed-From-To: open->closed 
State-Changed-By: nsayer 
State-Changed-When: Wed Mar 31 05:54:36 PST 1999 
State-Changed-Why:  
Committed code to current and RELENG_3 
>Unformatted:
