Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 24 Dec 2011 08:51:50 -0500
From:      Alexander Sack <pisymbol@gmail.com>
To:        freebsd-net@freebsd.org
Subject:   igb(4) bridging does not seem to work
Message-ID:  <CAPpy_fHKnmyAFnWUZoS776Gsfq6A=mY-WKm9XxJDkAVGoseRbA@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
FreeBSD-Net:

I have a 7.2-RELEASE-amd64 machine with two onboard igb(4) interfaces
and an external Intel card:

igb0@pci0:1:0:0:	class=0x020000 card=0x34de8086 chip=0x10a78086
rev=0x02 hdr=0x00
igb1@pci0:1:0:1:	class=0x020000 card=0x34de8086 chip=0x10a78086
rev=0x02 hdr=0x00
igb2@pci0:6:0:0:	class=0x020000 card=0x12a18086 chip=0x150e8086
rev=0x01 hdr=0x00
igb3@pci0:6:0:1:	class=0x020000 card=0x12a18086 chip=0x150e8086
rev=0x01 hdr=0x00
igb4@pci0:6:0:2:	class=0x020000 card=0x12a18086 chip=0x150e8086
rev=0x01 hdr=0x00
igb5@pci0:6:0:3:	class=0x020000 card=0x12a18086 chip=0x150e8086
rev=0x01 hdr=0x00

I am trying to create a simple bridge out of two of the interfaces on
the external igb(4) card like so:

/etc/rc.conf:
cloned_interfaces="bridge0"
ifconfig_bridge0="addm igb2 addm igb3 up"
ifconfig_igb2="up media auto"
ifconfig_igb3="up media auto"

I simply want igb2 and igb3 to pass Ethernet traffic back and forth.
The network topology is the following:

Cisco switch (no vlan trunking) -> igb2 -> bridge0 -> igb3 -> host
(tried on a host with same broadcast domain and on different broadcast
domains)

Here is ifconfig output of the pertinent interfaces:

igb2: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST>
metric 0 mtu 1500
	options=1bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4>
	ether 00:1b:21:93:49:4c
	media: Ethernet autoselect (1000baseTX <full-duplex>)
	status: active
igb3: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST>
metric 0 mtu 1500
	options=1bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4>
	ether 00:1b:21:93:49:4d
	media: Ethernet autoselect (1000baseTX <full-duplex>)
	status: active
bridge0: flags=28943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,PPROMISC>
metric 0 mtu 1500
	ether 86:5f:e1:e9:64:68
	id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
	maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
	root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
	member: igb3 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
	        ifmaxaddr 0 port 4 priority 128 path cost 2000000
	member: igb2 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
	        ifmaxaddr 0 port 3 priority 128 path cost 2000000

I notice that netstat/tcpdump shows that igb2(4) is receiving packets
(as does the green LED light) but igb3(4) is not passing them.

The only packets that seem to get through the bridge are multicast and
broadcast packets (as per the doc).  But any unicast packets just get
dropped by igb2(4).  If I reverse the cables (change direction of the
flow above), then packets hit igb3(4) but do not flow through the
bridge to igb2(4).

Why?

Before I go start debugging if_bridge(4) and igb(4) can some one
validate that my understanding is correct:

The bridge0 above *SHOULD* pass Ethernet frames back and forth between
igb2(4) and igb3(4).  It should act as a simple 2-port Ethernet
switch.

Btw this *SAME* configuration works with an external em(4) card on a
different machine (it has onboard bge(4) but same exact kernel.  The
network topology is slightly different as the machine with em(4) is
inline with two switches instead of a single host (however, the two
switches are on the same network).  Are their known bridging issues
with igb(4) driver?  (the chipset does support promisc mode as per
above output).

Any initial help debugging this issue would be most appreciated?

Thanks!

-aps



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAPpy_fHKnmyAFnWUZoS776Gsfq6A=mY-WKm9XxJDkAVGoseRbA>