VLAN/Bridge No response from trunk Interface

Maxim Konovalov maxim at macomnet.ru
Fri Jun 20 12:41:16 PDT 2003


Hello,

On Fri, 20 Jun 2003, 11:39-0300, Han Hwei Woo wrote:

> Here's the network I'm trying to setup
>
>             192.168.0.3                            192.168.0.1    192.168.0.2
> OpenBSD | vlan0----><--- vlan0 | FreeBSD | em0 ---><--- em0 | Windows 2000
>
> with net.link.ether.bridge_cfg: vlan0,em0
>
> If I try to ping the FreeBSD machine from OpenBSD, arp requests are
> sent out, and they are seen on both of the FreeBSD machine's
> interfaces. However, no arp response is generated.
>
> So, I enter in the arp entries myself.
>
> Once I do that, when I again try to ping the FreeBSD host from
> OpenBSD, the ping requests are seen on both the FreeBSD interfaces.
> However, no response is generated.
>
> If I instead try to ping the OpenBSD machine from FreeBSD, the ping
> requests get to the OpenBSD machine, and the OpenBSD replies, and
> both the FreeBSD interfaces receive the reply, according to tcpdump.
> However, the ping program does not receive them.
>
>
> I also tried this setup:
>
>             192.168.0.3                            192.168.0.1    192.168.0.2
> OpenBSD | vlan0----><--- vlan0 | FreeBSD | vlan1 ---><--- vlan0 | Windows 2000
>
> with net.link.ether.bridge_cfg: vlan0,vlan1
>
> And the same problem occurs. I have also tried with different
> network cards as the parent interface of vlan0 on FreeBSD
> (fxp0,dc0).

1) Please try a hack below;
2) Don't use bridge.ko, it is semi-broken, compile the bridging code
in kernel instead (options BRIDGE);
3) sysctl net.inet.ip.check_interface=0 is mandatory in some
topologies.

Index: if_ethersubr.c
===================================================================
RCS file: /home/ncvs/src/sys/net/if_ethersubr.c,v
retrieving revision 1.147
diff -u -r1.147 if_ethersubr.c
--- if_ethersubr.c	5 May 2003 09:15:50 -0000	1.147
+++ if_ethersubr.c	20 May 2003 15:06:50 -0000
@@ -625,6 +625,7 @@
 	if (rule)	/* packet was already bridged */
 		goto post_stats;

+#if 0
 	if (!(BDG_ACTIVE(ifp))) {
 		/*
 		 * Discard packet if upper layers shouldn't see it because it
@@ -641,6 +642,7 @@
 			    return;
 		}
 	}
+#endif

 	/* Discard packet if interface is not up */
 	if ((ifp->if_flags & IFF_UP) == 0) {
%%%

-- 
Maxim Konovalov, maxim at macomnet.ru, maxim at FreeBSD.org


More information about the freebsd-net mailing list