Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: bridge: add helper to set topology change

Add a __br_set_topology_change helper to set the topology change value.

This can be later extended to add actions when the topology change flag
is set or cleared.

Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Vivien Didelot and committed by
David S. Miller
8384b5f5 82dd4332

+11 -4
+1
net/bridge/br_private_stp.h
··· 61 61 void br_transmit_config(struct net_bridge_port *p); 62 62 void br_transmit_tcn(struct net_bridge *br); 63 63 void br_topology_change_detection(struct net_bridge *br); 64 + void __br_set_topology_change(struct net_bridge *br, unsigned char val); 64 65 65 66 /* br_stp_bpdu.c */ 66 67 void br_send_config_bpdu(struct net_bridge_port *, struct br_config_bpdu *);
+8 -2
net/bridge/br_stp.c
··· 234 234 br->max_age = bpdu->max_age; 235 235 br->hello_time = bpdu->hello_time; 236 236 br->forward_delay = bpdu->forward_delay; 237 - br->topology_change = bpdu->topology_change; 237 + __br_set_topology_change(br, bpdu->topology_change); 238 238 } 239 239 240 240 /* called under bridge lock */ ··· 344 344 isroot ? "propagating" : "sending tcn bpdu"); 345 345 346 346 if (isroot) { 347 - br->topology_change = 1; 347 + __br_set_topology_change(br, 1); 348 348 mod_timer(&br->topology_change_timer, jiffies 349 349 + br->bridge_forward_delay + br->bridge_max_age); 350 350 } else if (!br->topology_change_detected) { ··· 601 601 mod_timer(&br->gc_timer, jiffies); 602 602 603 603 return 0; 604 + } 605 + 606 + /* called under bridge lock */ 607 + void __br_set_topology_change(struct net_bridge *br, unsigned char val) 608 + { 609 + br->topology_change = val; 604 610 } 605 611 606 612 void __br_set_forward_delay(struct net_bridge *br, unsigned long t)
+1 -1
net/bridge/br_stp_if.c
··· 81 81 82 82 } 83 83 84 - br->topology_change = 0; 84 + __br_set_topology_change(br, 0); 85 85 br->topology_change_detected = 0; 86 86 spin_unlock_bh(&br->lock); 87 87
+1 -1
net/bridge/br_stp_timer.c
··· 125 125 br_debug(br, "topo change timer expired\n"); 126 126 spin_lock(&br->lock); 127 127 br->topology_change_detected = 0; 128 - br->topology_change = 0; 128 + __br_set_topology_change(br, 0); 129 129 spin_unlock(&br->lock); 130 130 } 131 131