[Bridge] Bridging with STP seems to learn mac-address on wrong ports

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I have two multi-port bridges connected together with a lot of cables.
Current setup is as follows:

     --------eth0-------
    |                   |
[Bridge A] <-eth1-> [Bridge B]
    |                   |
     --------eth5-------

Bridge A is root-bridge, and eth0 is set to lowest path-cost.
Consequently on Bridge B interfaces eth1 and eth5 are in blocking state.

However, when looking at the mac-address table on bridge B I see that it has
learned the mac-address of bridge A on the eth1-port (which is in
blocking state) and tries to use that port to communicate with 
bridge A, and since the port is blocking this fails.

It seems that the STP-bpdu's are responsible for the bridge learning
the mac-address on the wrong port.
This is tested with kernel 2.6.11.12 and 2.6.13.2, and both exhibit
this problem.

The following fix solved it for me on 2.6.11.12:
In net/bridge/br_stp_bpdu.c, in function br_stp_handle_bpdu i changed
         br_fdb_insert(p->br, p, eth_hdr(skb)->h_source,0);
to
         if (!br->stp_enabled || p->state == BR_STATE_LEARNING
             || p->state == BR_STATE_FORWARDING)
             br_fdb_insert(p->br, p, eth_hdr(skb)->h_source, 0);

/B

[Index of Archives]     [Netdev]     [AoE Tools]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]     [Video 4 Linux]

  Powered by Linux