[Bridge] delay in bridge learning when forward delay is 0

Philip Craig philipc at snapgear.com
Mon Jul 9 00:50:55 PDT 2007


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.


More information about the Bridge mailing list