Lines Matching refs:br
46 void br_stp_enable_bridge(struct net_bridge *br) in br_stp_enable_bridge() argument
50 spin_lock_bh(&br->lock); in br_stp_enable_bridge()
51 mod_timer(&br->hello_timer, jiffies + br->hello_time); in br_stp_enable_bridge()
52 mod_timer(&br->gc_timer, jiffies + HZ/10); in br_stp_enable_bridge()
54 br_config_bpdu_generation(br); in br_stp_enable_bridge()
56 list_for_each_entry(p, &br->port_list, list) { in br_stp_enable_bridge()
61 spin_unlock_bh(&br->lock); in br_stp_enable_bridge()
65 void br_stp_disable_bridge(struct net_bridge *br) in br_stp_disable_bridge() argument
69 spin_lock_bh(&br->lock); in br_stp_disable_bridge()
70 list_for_each_entry(p, &br->port_list, list) { in br_stp_disable_bridge()
76 br->topology_change = 0; in br_stp_disable_bridge()
77 br->topology_change_detected = 0; in br_stp_disable_bridge()
78 spin_unlock_bh(&br->lock); in br_stp_disable_bridge()
80 del_timer_sync(&br->hello_timer); in br_stp_disable_bridge()
81 del_timer_sync(&br->topology_change_timer); in br_stp_disable_bridge()
82 del_timer_sync(&br->tcn_timer); in br_stp_disable_bridge()
83 del_timer_sync(&br->gc_timer); in br_stp_disable_bridge()
90 br_port_state_selection(p->br); in br_stp_enable_port()
98 struct net_bridge *br = p->br; in br_stp_disable_port() local
101 wasroot = br_is_root_bridge(br); in br_stp_disable_port()
114 br_fdb_delete_by_port(br, p, 0); in br_stp_disable_port()
117 br_configuration_update(br); in br_stp_disable_port()
119 br_port_state_selection(br); in br_stp_disable_port()
121 if (br_is_root_bridge(br) && !wasroot) in br_stp_disable_port()
122 br_become_root_bridge(br); in br_stp_disable_port()
125 static void br_stp_start(struct net_bridge *br) in br_stp_start() argument
128 char *argv[] = { BR_STP_PROG, br->dev->name, "start", NULL }; in br_stp_start()
131 if (net_eq(dev_net(br->dev), &init_net)) in br_stp_start()
136 spin_lock_bh(&br->lock); in br_stp_start()
138 if (br->bridge_forward_delay < BR_MIN_FORWARD_DELAY) in br_stp_start()
139 __br_set_forward_delay(br, BR_MIN_FORWARD_DELAY); in br_stp_start()
140 else if (br->bridge_forward_delay > BR_MAX_FORWARD_DELAY) in br_stp_start()
141 __br_set_forward_delay(br, BR_MAX_FORWARD_DELAY); in br_stp_start()
144 br->stp_enabled = BR_USER_STP; in br_stp_start()
145 br_debug(br, "userspace STP started\n"); in br_stp_start()
147 br->stp_enabled = BR_KERNEL_STP; in br_stp_start()
148 br_debug(br, "using kernel STP\n"); in br_stp_start()
151 br_port_state_selection(br); in br_stp_start()
154 spin_unlock_bh(&br->lock); in br_stp_start()
157 static void br_stp_stop(struct net_bridge *br) in br_stp_stop() argument
160 char *argv[] = { BR_STP_PROG, br->dev->name, "stop", NULL }; in br_stp_stop()
163 if (br->stp_enabled == BR_USER_STP) { in br_stp_stop()
165 br_info(br, "userspace STP stopped, return code %d\n", r); in br_stp_stop()
168 spin_lock_bh(&br->lock); in br_stp_stop()
169 br_port_state_selection(br); in br_stp_stop()
170 spin_unlock_bh(&br->lock); in br_stp_stop()
173 br->stp_enabled = BR_NO_STP; in br_stp_stop()
176 void br_stp_set_enabled(struct net_bridge *br, unsigned long val) in br_stp_set_enabled() argument
181 if (br->stp_enabled == BR_NO_STP) in br_stp_set_enabled()
182 br_stp_start(br); in br_stp_set_enabled()
184 if (br->stp_enabled != BR_NO_STP) in br_stp_set_enabled()
185 br_stp_stop(br); in br_stp_set_enabled()
190 void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *addr) in br_stp_change_bridge_id() argument
198 wasroot = br_is_root_bridge(br); in br_stp_change_bridge_id()
200 br_fdb_change_mac_address(br, addr); in br_stp_change_bridge_id()
202 memcpy(oldaddr, br->bridge_id.addr, ETH_ALEN); in br_stp_change_bridge_id()
203 memcpy(br->bridge_id.addr, addr, ETH_ALEN); in br_stp_change_bridge_id()
204 memcpy(br->dev->dev_addr, addr, ETH_ALEN); in br_stp_change_bridge_id()
206 list_for_each_entry(p, &br->port_list, list) { in br_stp_change_bridge_id()
214 br_configuration_update(br); in br_stp_change_bridge_id()
215 br_port_state_selection(br); in br_stp_change_bridge_id()
216 if (br_is_root_bridge(br) && !wasroot) in br_stp_change_bridge_id()
217 br_become_root_bridge(br); in br_stp_change_bridge_id()
224 bool br_stp_recalculate_bridge_id(struct net_bridge *br) in br_stp_recalculate_bridge_id() argument
232 if (br->dev->addr_assign_type == NET_ADDR_SET) in br_stp_recalculate_bridge_id()
235 list_for_each_entry(p, &br->port_list, list) { in br_stp_recalculate_bridge_id()
242 if (ether_addr_equal(br->bridge_id.addr, addr)) in br_stp_recalculate_bridge_id()
245 br_stp_change_bridge_id(br, addr); in br_stp_recalculate_bridge_id()
250 void br_stp_set_bridge_priority(struct net_bridge *br, u16 newprio) in br_stp_set_bridge_priority() argument
255 spin_lock_bh(&br->lock); in br_stp_set_bridge_priority()
256 wasroot = br_is_root_bridge(br); in br_stp_set_bridge_priority()
258 list_for_each_entry(p, &br->port_list, list) { in br_stp_set_bridge_priority()
267 br->bridge_id.prio[0] = (newprio >> 8) & 0xFF; in br_stp_set_bridge_priority()
268 br->bridge_id.prio[1] = newprio & 0xFF; in br_stp_set_bridge_priority()
269 br_configuration_update(br); in br_stp_set_bridge_priority()
270 br_port_state_selection(br); in br_stp_set_bridge_priority()
271 if (br_is_root_bridge(br) && !wasroot) in br_stp_set_bridge_priority()
272 br_become_root_bridge(br); in br_stp_set_bridge_priority()
273 spin_unlock_bh(&br->lock); in br_stp_set_bridge_priority()
290 if (!memcmp(&p->br->bridge_id, &p->designated_bridge, 8) && in br_stp_set_port_priority()
293 br_port_state_selection(p->br); in br_stp_set_port_priority()
308 br_configuration_update(p->br); in br_stp_set_path_cost()
309 br_port_state_selection(p->br); in br_stp_set_path_cost()