Philip Craig
2007-Jul-09 14:13 UTC
[Bridge] delay in bridge learning when forward delay is 0
Hi, If you set the bridge forward delay to 0 with: brctl setfd br0 0 then the bridge does not learn addresses for the first 20 seconds, and so it floods everything during this time. The reason for this is that hold_time() returns 0 after a topology change, br_fdb_update() is a no-op if hold_time() is 0 (so that 'brctl setmaxage br0 0' can be used to disable learning), and the topology change flag isn't cleared for max_age seconds, so nothing is learnt during that time. It seems that the intent of hold_time() is to expire entries that are older than forward_delay seconds at the time of the topology change, which it does, but then it keeps on checking this expiry again for max_age seconds, and bases these checks on the current time rather than the time of the change. A quick fix for the forward delay 0 case would be to skip the topology change check if stp is disabled, but if I understand things correctly then the expiry isn't right for non-zero cases either.