linux/net/bridge
stephen hemminger 0c03150e7e bridge: send proper message_age in config BPDU
A bridge topology with three systems:

      +------+  +------+
      | A(2) |--| B(1) |
      +------+  +------+
           \    /
          +------+
          | C(3) |
          +------+

What is supposed to happen:
 * bridge with the lowest ID is elected root (for example: B)
 * C detects that A->C is higher cost path and puts in blocking state

What happens. Bridge with lowest id (B) is elected correctly as
root and things start out fine initially. But then config BPDU
doesn't get transmitted from A -> C. Because of that
the link from A-C is transistioned to the forwarding state.

The root cause of this is that the configuration messages
is generated with bogus message age, and dropped before
sending.

In the standardmessage_age is supposed to be:
  the time since the generation of the Configuration BPDU by
  the Root that instigated the generation of this Configuration BPDU.

Reimplement this by recording the timestamp (age + jiffies) when
recording config information. The old code incorrectly used the time
elapsed on the ageing timer which was incorrect.

See also:
  https://bugzilla.vyatta.com/show_bug.cgi?id=7164

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2011-07-22 17:01:12 -07:00
..
netfilter netfilter: Fix several warnings in compat_mtw_from_user(). 2011-05-26 19:09:07 +02:00
br.c bridge: allow creating bridge devices with netlink 2011-04-04 17:22:28 -07:00
br_device.c bridge: Always flood broadcast packets 2011-07-05 18:39:39 -07:00
br_fdb.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2011-04-11 13:44:25 -07:00
br_forward.c net: bridge: check the length of skb after nf_bridge_maybe_copy_header() 2011-01-06 11:33:05 -08:00
br_if.c net: remove synchronize_net() from netdev_set_master() 2011-05-22 21:01:20 -04:00
br_input.c bridge: Always flood broadcast packets 2011-07-05 18:39:39 -07:00
br_ioctl.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2011-04-11 13:44:25 -07:00
br_multicast.c bridge: Only flood unregistered groups to routers 2011-06-24 17:52:51 -07:00
br_netfilter.c net: Add ->neigh_lookup() operation to dst_ops 2011-07-18 00:40:17 -07:00
br_netlink.c rtnetlink: Compute and store minimum ifinfo dump size 2011-06-09 20:38:07 -07:00
br_notify.c bridge: convert br_features_recompute() to ndo_fix_features 2011-04-28 13:33:08 -07:00
br_private.h bridge: send proper message_age in config BPDU 2011-07-22 17:01:12 -07:00
br_private_stp.h bridge: range check STP parameters 2011-04-04 17:22:29 -07:00
br_stp.c bridge: send proper message_age in config BPDU 2011-07-22 17:01:12 -07:00
br_stp_bpdu.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2011-01-04 11:57:25 -08:00
br_stp_if.c bridge: range check STP parameters 2011-04-04 17:22:29 -07:00
br_stp_timer.c bridge: control carrier based on ports online 2011-03-14 14:29:02 -07:00
br_sysfs_br.c bridge: range check STP parameters 2011-04-04 17:22:29 -07:00
br_sysfs_if.c bridge: range check STP parameters 2011-04-04 17:22:29 -07:00
Kconfig net: bridge builtin vs. ipv6 modular 2011-03-10 13:45:57 -08:00
Makefile bridge: Add core IGMP snooping support 2010-02-28 00:48:45 -08:00