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
_______________________________________________
Bridge mailing list
[email protected]
https://lists.osdl.org/mailman/listinfo/bridge

Reply via email to