Lines Matching refs:br
42 .u.ageing_time = jiffies_to_clock_t(p->br->ageing_time), in br_init_port()
58 void br_stp_enable_bridge(struct net_bridge *br) in br_stp_enable_bridge() argument
62 spin_lock_bh(&br->lock); in br_stp_enable_bridge()
63 if (br->stp_enabled == BR_KERNEL_STP) in br_stp_enable_bridge()
64 mod_timer(&br->hello_timer, jiffies + br->hello_time); in br_stp_enable_bridge()
65 mod_timer(&br->gc_timer, jiffies + HZ/10); in br_stp_enable_bridge()
67 br_config_bpdu_generation(br); in br_stp_enable_bridge()
69 list_for_each_entry(p, &br->port_list, list) { in br_stp_enable_bridge()
74 spin_unlock_bh(&br->lock); in br_stp_enable_bridge()
78 void br_stp_disable_bridge(struct net_bridge *br) in br_stp_disable_bridge() argument
82 spin_lock_bh(&br->lock); in br_stp_disable_bridge()
83 list_for_each_entry(p, &br->port_list, list) { in br_stp_disable_bridge()
89 br->topology_change = 0; in br_stp_disable_bridge()
90 br->topology_change_detected = 0; in br_stp_disable_bridge()
91 spin_unlock_bh(&br->lock); in br_stp_disable_bridge()
93 del_timer_sync(&br->hello_timer); in br_stp_disable_bridge()
94 del_timer_sync(&br->topology_change_timer); in br_stp_disable_bridge()
95 del_timer_sync(&br->tcn_timer); in br_stp_disable_bridge()
96 del_timer_sync(&br->gc_timer); in br_stp_disable_bridge()
103 br_port_state_selection(p->br); in br_stp_enable_port()
111 struct net_bridge *br = p->br; in br_stp_disable_port() local
114 wasroot = br_is_root_bridge(br); in br_stp_disable_port()
127 br_fdb_delete_by_port(br, p, 0, 0); in br_stp_disable_port()
130 br_configuration_update(br); in br_stp_disable_port()
132 br_port_state_selection(br); in br_stp_disable_port()
134 if (br_is_root_bridge(br) && !wasroot) in br_stp_disable_port()
135 br_become_root_bridge(br); in br_stp_disable_port()
138 static void br_stp_start(struct net_bridge *br) in br_stp_start() argument
141 char *argv[] = { BR_STP_PROG, br->dev->name, "start", NULL }; in br_stp_start()
145 if (net_eq(dev_net(br->dev), &init_net)) in br_stp_start()
150 spin_lock_bh(&br->lock); in br_stp_start()
152 if (br->bridge_forward_delay < BR_MIN_FORWARD_DELAY) in br_stp_start()
153 __br_set_forward_delay(br, BR_MIN_FORWARD_DELAY); in br_stp_start()
154 else if (br->bridge_forward_delay > BR_MAX_FORWARD_DELAY) in br_stp_start()
155 __br_set_forward_delay(br, BR_MAX_FORWARD_DELAY); in br_stp_start()
158 br->stp_enabled = BR_USER_STP; in br_stp_start()
159 br_debug(br, "userspace STP started\n"); in br_stp_start()
161 del_timer(&br->hello_timer); in br_stp_start()
162 list_for_each_entry(p, &br->port_list, list) in br_stp_start()
165 br->stp_enabled = BR_KERNEL_STP; in br_stp_start()
166 br_debug(br, "using kernel STP\n"); in br_stp_start()
169 br_port_state_selection(br); in br_stp_start()
172 spin_unlock_bh(&br->lock); in br_stp_start()
175 static void br_stp_stop(struct net_bridge *br) in br_stp_stop() argument
178 char *argv[] = { BR_STP_PROG, br->dev->name, "stop", NULL }; in br_stp_stop()
182 if (br->stp_enabled == BR_USER_STP) { in br_stp_stop()
184 br_info(br, "userspace STP stopped, return code %d\n", r); in br_stp_stop()
187 mod_timer(&br->hello_timer, jiffies + br->hello_time); in br_stp_stop()
188 list_for_each_entry(p, &br->port_list, list) in br_stp_stop()
191 spin_lock_bh(&br->lock); in br_stp_stop()
192 br_port_state_selection(br); in br_stp_stop()
193 spin_unlock_bh(&br->lock); in br_stp_stop()
196 br->stp_enabled = BR_NO_STP; in br_stp_stop()
199 void br_stp_set_enabled(struct net_bridge *br, unsigned long val) in br_stp_set_enabled() argument
204 if (br->stp_enabled == BR_NO_STP) in br_stp_set_enabled()
205 br_stp_start(br); in br_stp_set_enabled()
207 if (br->stp_enabled != BR_NO_STP) in br_stp_set_enabled()
208 br_stp_stop(br); in br_stp_set_enabled()
213 void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *addr) in br_stp_change_bridge_id() argument
221 wasroot = br_is_root_bridge(br); in br_stp_change_bridge_id()
223 br_fdb_change_mac_address(br, addr); in br_stp_change_bridge_id()
225 memcpy(oldaddr, br->bridge_id.addr, ETH_ALEN); in br_stp_change_bridge_id()
226 memcpy(br->bridge_id.addr, addr, ETH_ALEN); in br_stp_change_bridge_id()
227 memcpy(br->dev->dev_addr, addr, ETH_ALEN); in br_stp_change_bridge_id()
229 list_for_each_entry(p, &br->port_list, list) { in br_stp_change_bridge_id()
237 br_configuration_update(br); in br_stp_change_bridge_id()
238 br_port_state_selection(br); in br_stp_change_bridge_id()
239 if (br_is_root_bridge(br) && !wasroot) in br_stp_change_bridge_id()
240 br_become_root_bridge(br); in br_stp_change_bridge_id()
247 bool br_stp_recalculate_bridge_id(struct net_bridge *br) in br_stp_recalculate_bridge_id() argument
255 if (br->dev->addr_assign_type == NET_ADDR_SET) in br_stp_recalculate_bridge_id()
258 list_for_each_entry(p, &br->port_list, list) { in br_stp_recalculate_bridge_id()
265 if (ether_addr_equal(br->bridge_id.addr, addr)) in br_stp_recalculate_bridge_id()
268 br_stp_change_bridge_id(br, addr); in br_stp_recalculate_bridge_id()
273 void br_stp_set_bridge_priority(struct net_bridge *br, u16 newprio) in br_stp_set_bridge_priority() argument
278 spin_lock_bh(&br->lock); in br_stp_set_bridge_priority()
279 wasroot = br_is_root_bridge(br); in br_stp_set_bridge_priority()
281 list_for_each_entry(p, &br->port_list, list) { in br_stp_set_bridge_priority()
290 br->bridge_id.prio[0] = (newprio >> 8) & 0xFF; in br_stp_set_bridge_priority()
291 br->bridge_id.prio[1] = newprio & 0xFF; in br_stp_set_bridge_priority()
292 br_configuration_update(br); in br_stp_set_bridge_priority()
293 br_port_state_selection(br); in br_stp_set_bridge_priority()
294 if (br_is_root_bridge(br) && !wasroot) in br_stp_set_bridge_priority()
295 br_become_root_bridge(br); in br_stp_set_bridge_priority()
296 spin_unlock_bh(&br->lock); in br_stp_set_bridge_priority()
313 if (!memcmp(&p->br->bridge_id, &p->designated_bridge, 8) && in br_stp_set_port_priority()
316 br_port_state_selection(p->br); in br_stp_set_port_priority()
331 br_configuration_update(p->br); in br_stp_set_path_cost()
332 br_port_state_selection(p->br); in br_stp_set_path_cost()