[prev in list] [next in list] [prev in thread] [next in thread] 

List:       git-commits-24
Subject:    [BRIDGE]: Bridge STP message age
From:       Linux Kernel Mailing List <linux-kernel () vger ! kernel ! org>
Date:       2004-06-29 23:14:54
Message-ID: 200407021802.i62I2kaY032173 () hera ! kernel ! org
[Download RAW message or body]

ChangeSet 1.1462.1.4, 2004/06/29 16:14:54-07:00, shemminger@osdl.org

	[BRIDGE]: Bridge STP message age
	
	This is the 2.4 version which incorporates the observations from Kishore
	about 2.6. The existing 2.4 code set the age properly, but did not increment
	correctly for HZ=1000 and could send a stale (expired) configuration.
	
	Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
	Signed-off-by: David S. Miller <davem@redhat.com>



 br_stp.c |   25 +++++++++++++++----------
 1 files changed, 15 insertions(+), 10 deletions(-)


diff -Nru a/net/bridge/br_stp.c b/net/bridge/br_stp.c
--- a/net/bridge/br_stp.c	2004-07-02 11:02:49 -07:00
+++ b/net/bridge/br_stp.c	2004-07-02 11:02:49 -07:00
@@ -20,7 +20,10 @@
 #include "br_private.h"
 #include "br_private_stp.h"
 
-
+/* since time values in bpdu are in jiffies and then scaled (1/256)
+ * before sending, make sure that is at least one.
+ */
+#define MESSAGE_AGE_INCR	((HZ < 256) ? 1 : (HZ/256))
 
 /* called under ioctl_lock or bridge lock */
 int br_is_root_bridge(struct net_bridge *br)
@@ -160,24 +163,26 @@
 	bpdu.root_path_cost = br->root_path_cost;
 	bpdu.bridge_id = br->bridge_id;
 	bpdu.port_id = p->port_id;
-	bpdu.message_age = 0;
-	if (!br_is_root_bridge(br)) {
+	if (br_is_root_bridge(br)) 
+		bpdu.message_age = 0;
+	else {
 		struct net_bridge_port *root;
-		unsigned long age;
 
 		root = br_get_port(br, br->root_port);
-		age = br_timer_get_residue(&root->message_age_timer) + 1;
-		bpdu.message_age = age;
+		bpdu.message_age =  br_timer_get_residue(&root->message_age_timer)
+			+ MESSAGE_AGE_INCR;
 	}
 	bpdu.max_age = br->max_age;
 	bpdu.hello_time = br->hello_time;
 	bpdu.forward_delay = br->forward_delay;
 
-	br_send_config_bpdu(p, &bpdu);
+	if (bpdu.message_age < br->max_age) {
+		br_send_config_bpdu(p, &bpdu);
 
-	p->topology_change_ack = 0;
-	p->config_pending = 0;
-	br_timer_set(&p->hold_timer, jiffies);
+		p->topology_change_ack = 0;
+		p->config_pending = 0;
+		br_timer_set(&p->hold_timer, jiffies);
+	}
 }
 
 /* called under bridge lock */
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-24" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic