Lines Matching +full:1 +full:p
20 /* since time values in bpdu are in jiffies and then scaled (1/256)
23 #define MESSAGE_AGE_INCR ((HZ / 256) + 1)
33 void br_set_state(struct net_bridge_port *p, unsigned int state) in br_set_state() argument
36 .orig_dev = p->dev, in br_set_state()
43 p->state = state; in br_set_state()
44 err = switchdev_port_attr_set(p->dev, &attr); in br_set_state()
46 br_warn(p->br, "error setting offload STP state on port %u(%s)\n", in br_set_state()
47 (unsigned int) p->port_no, p->dev->name); in br_set_state()
49 br_info(p->br, "port %u(%s) entered %s state\n", in br_set_state()
50 (unsigned int) p->port_no, p->dev->name, in br_set_state()
51 br_port_state_names[p->state]); in br_set_state()
57 struct net_bridge_port *p; in br_get_port() local
59 list_for_each_entry_rcu(p, &br->port_list, list) { in br_get_port()
60 if (p->port_no == port_no) in br_get_port()
61 return p; in br_get_port()
68 static int br_should_become_root_port(const struct net_bridge_port *p, in br_should_become_root_port() argument
75 br = p->br; in br_should_become_root_port()
76 if (p->state == BR_STATE_DISABLED || in br_should_become_root_port()
77 br_is_designated_port(p)) in br_should_become_root_port()
80 if (memcmp(&br->bridge_id, &p->designated_root, 8) <= 0) in br_should_become_root_port()
84 return 1; in br_should_become_root_port()
88 t = memcmp(&p->designated_root, &rp->designated_root, 8); in br_should_become_root_port()
90 return 1; in br_should_become_root_port()
94 if (p->designated_cost + p->path_cost < in br_should_become_root_port()
96 return 1; in br_should_become_root_port()
97 else if (p->designated_cost + p->path_cost > in br_should_become_root_port()
101 t = memcmp(&p->designated_bridge, &rp->designated_bridge, 8); in br_should_become_root_port()
103 return 1; in br_should_become_root_port()
107 if (p->designated_port < rp->designated_port) in br_should_become_root_port()
108 return 1; in br_should_become_root_port()
109 else if (p->designated_port > rp->designated_port) in br_should_become_root_port()
112 if (p->port_id < rp->port_id) in br_should_become_root_port()
113 return 1; in br_should_become_root_port()
119 struct net_bridge_port *p) in br_root_port_block() argument
123 (unsigned int) p->port_no, p->dev->name); in br_root_port_block()
125 br_set_state(p, BR_STATE_LISTENING); in br_root_port_block()
126 br_ifinfo_notify(RTM_NEWLINK, NULL, p); in br_root_port_block()
129 mod_timer(&p->forward_delay_timer, jiffies + br->forward_delay); in br_root_port_block()
135 struct net_bridge_port *p; in br_root_selection() local
138 list_for_each_entry(p, &br->port_list, list) { in br_root_selection()
139 if (!br_should_become_root_port(p, root_port)) in br_root_selection()
142 if (p->flags & BR_ROOT_BLOCK) in br_root_selection()
143 br_root_port_block(br, p); in br_root_selection()
145 root_port = p->port_no; in br_root_selection()
154 p = br_get_port(br, root_port); in br_root_selection()
155 br->designated_root = p->designated_root; in br_root_selection()
156 br->root_path_cost = p->designated_cost + p->path_cost; in br_root_selection()
176 void br_transmit_config(struct net_bridge_port *p) in br_transmit_config() argument
181 if (timer_pending(&p->hold_timer)) { in br_transmit_config()
182 p->config_pending = 1; in br_transmit_config()
186 br = p->br; in br_transmit_config()
189 bpdu.topology_change_ack = p->topology_change_ack; in br_transmit_config()
193 bpdu.port_id = p->port_id; in br_transmit_config()
207 br_send_config_bpdu(p, &bpdu); in br_transmit_config()
208 p->topology_change_ack = 0; in br_transmit_config()
209 p->config_pending = 0; in br_transmit_config()
210 if (p->br->stp_enabled == BR_KERNEL_STP) in br_transmit_config()
211 mod_timer(&p->hold_timer, in br_transmit_config()
217 static void br_record_config_information(struct net_bridge_port *p, in br_record_config_information() argument
220 p->designated_root = bpdu->root; in br_record_config_information()
221 p->designated_cost = bpdu->root_path_cost; in br_record_config_information()
222 p->designated_bridge = bpdu->bridge_id; in br_record_config_information()
223 p->designated_port = bpdu->port_id; in br_record_config_information()
224 p->designated_age = jiffies - bpdu->message_age; in br_record_config_information()
226 mod_timer(&p->message_age_timer, jiffies in br_record_config_information()
243 struct net_bridge_port *p; in br_transmit_tcn() local
245 p = br_get_port(br, br->root_port); in br_transmit_tcn()
246 if (p) in br_transmit_tcn()
247 br_send_tcn_bpdu(p); in br_transmit_tcn()
254 static int br_should_become_designated_port(const struct net_bridge_port *p) in br_should_become_designated_port() argument
259 br = p->br; in br_should_become_designated_port()
260 if (br_is_designated_port(p)) in br_should_become_designated_port()
261 return 1; in br_should_become_designated_port()
263 if (memcmp(&p->designated_root, &br->designated_root, 8)) in br_should_become_designated_port()
264 return 1; in br_should_become_designated_port()
266 if (br->root_path_cost < p->designated_cost) in br_should_become_designated_port()
267 return 1; in br_should_become_designated_port()
268 else if (br->root_path_cost > p->designated_cost) in br_should_become_designated_port()
271 t = memcmp(&br->bridge_id, &p->designated_bridge, 8); in br_should_become_designated_port()
273 return 1; in br_should_become_designated_port()
277 if (p->port_id < p->designated_port) in br_should_become_designated_port()
278 return 1; in br_should_become_designated_port()
286 struct net_bridge_port *p; in br_designated_port_selection() local
288 list_for_each_entry(p, &br->port_list, list) { in br_designated_port_selection()
289 if (p->state != BR_STATE_DISABLED && in br_designated_port_selection()
290 br_should_become_designated_port(p)) in br_designated_port_selection()
291 br_become_designated_port(p); in br_designated_port_selection()
297 static int br_supersedes_port_info(const struct net_bridge_port *p, in br_supersedes_port_info() argument
302 t = memcmp(&bpdu->root, &p->designated_root, 8); in br_supersedes_port_info()
304 return 1; in br_supersedes_port_info()
308 if (bpdu->root_path_cost < p->designated_cost) in br_supersedes_port_info()
309 return 1; in br_supersedes_port_info()
310 else if (bpdu->root_path_cost > p->designated_cost) in br_supersedes_port_info()
313 t = memcmp(&bpdu->bridge_id, &p->designated_bridge, 8); in br_supersedes_port_info()
315 return 1; in br_supersedes_port_info()
319 if (memcmp(&bpdu->bridge_id, &p->br->bridge_id, 8)) in br_supersedes_port_info()
320 return 1; in br_supersedes_port_info()
322 if (bpdu->port_id <= p->designated_port) in br_supersedes_port_info()
323 return 1; in br_supersedes_port_info()
347 __br_set_topology_change(br, 1); in br_topology_change_detection()
355 br->topology_change_detected = 1; in br_topology_change_detection()
361 struct net_bridge_port *p; in br_config_bpdu_generation() local
363 list_for_each_entry(p, &br->port_list, list) { in br_config_bpdu_generation()
364 if (p->state != BR_STATE_DISABLED && in br_config_bpdu_generation()
365 br_is_designated_port(p)) in br_config_bpdu_generation()
366 br_transmit_config(p); in br_config_bpdu_generation()
371 static void br_reply(struct net_bridge_port *p) in br_reply() argument
373 br_transmit_config(p); in br_reply()
384 void br_become_designated_port(struct net_bridge_port *p) in br_become_designated_port() argument
388 br = p->br; in br_become_designated_port()
389 p->designated_root = br->designated_root; in br_become_designated_port()
390 p->designated_cost = br->root_path_cost; in br_become_designated_port()
391 p->designated_bridge = br->bridge_id; in br_become_designated_port()
392 p->designated_port = p->port_id; in br_become_designated_port()
397 static void br_make_blocking(struct net_bridge_port *p) in br_make_blocking() argument
399 if (p->state != BR_STATE_DISABLED && in br_make_blocking()
400 p->state != BR_STATE_BLOCKING) { in br_make_blocking()
401 if (p->state == BR_STATE_FORWARDING || in br_make_blocking()
402 p->state == BR_STATE_LEARNING) in br_make_blocking()
403 br_topology_change_detection(p->br); in br_make_blocking()
405 br_set_state(p, BR_STATE_BLOCKING); in br_make_blocking()
406 br_ifinfo_notify(RTM_NEWLINK, NULL, p); in br_make_blocking()
408 del_timer(&p->forward_delay_timer); in br_make_blocking()
413 static void br_make_forwarding(struct net_bridge_port *p) in br_make_forwarding() argument
415 struct net_bridge *br = p->br; in br_make_forwarding()
417 if (p->state != BR_STATE_BLOCKING) in br_make_forwarding()
421 br_set_state(p, BR_STATE_FORWARDING); in br_make_forwarding()
423 del_timer(&p->forward_delay_timer); in br_make_forwarding()
425 br_set_state(p, BR_STATE_LISTENING); in br_make_forwarding()
427 br_set_state(p, BR_STATE_LEARNING); in br_make_forwarding()
429 br_ifinfo_notify(RTM_NEWLINK, NULL, p); in br_make_forwarding()
432 mod_timer(&p->forward_delay_timer, jiffies + br->forward_delay); in br_make_forwarding()
438 struct net_bridge_port *p; in br_port_state_selection() local
441 list_for_each_entry(p, &br->port_list, list) { in br_port_state_selection()
442 if (p->state == BR_STATE_DISABLED) in br_port_state_selection()
447 if (p->port_no == br->root_port) { in br_port_state_selection()
448 p->config_pending = 0; in br_port_state_selection()
449 p->topology_change_ack = 0; in br_port_state_selection()
450 br_make_forwarding(p); in br_port_state_selection()
451 } else if (br_is_designated_port(p)) { in br_port_state_selection()
452 del_timer(&p->message_age_timer); in br_port_state_selection()
453 br_make_forwarding(p); in br_port_state_selection()
455 p->config_pending = 0; in br_port_state_selection()
456 p->topology_change_ack = 0; in br_port_state_selection()
457 br_make_blocking(p); in br_port_state_selection()
461 if (p->state != BR_STATE_BLOCKING) in br_port_state_selection()
462 br_multicast_enable_port(p); in br_port_state_selection()
467 if (p->state == BR_STATE_FORWARDING) in br_port_state_selection()
478 static void br_topology_change_acknowledge(struct net_bridge_port *p) in br_topology_change_acknowledge() argument
480 p->topology_change_ack = 1; in br_topology_change_acknowledge()
481 br_transmit_config(p); in br_topology_change_acknowledge()
485 void br_received_config_bpdu(struct net_bridge_port *p, in br_received_config_bpdu() argument
491 br = p->br; in br_received_config_bpdu()
494 if (br_supersedes_port_info(p, bpdu)) { in br_received_config_bpdu()
495 br_record_config_information(p, bpdu); in br_received_config_bpdu()
510 if (p->port_no == br->root_port) { in br_received_config_bpdu()
516 } else if (br_is_designated_port(p)) { in br_received_config_bpdu()
517 br_reply(p); in br_received_config_bpdu()
522 void br_received_tcn_bpdu(struct net_bridge_port *p) in br_received_tcn_bpdu() argument
524 if (br_is_designated_port(p)) { in br_received_tcn_bpdu()
525 br_info(p->br, "port %u(%s) received tcn bpdu\n", in br_received_tcn_bpdu()
526 (unsigned int) p->port_no, p->dev->name); in br_received_tcn_bpdu()
528 br_topology_change_detection(p->br); in br_received_tcn_bpdu()
529 br_topology_change_acknowledge(p); in br_received_tcn_bpdu()
587 * 1 - entry disappears (no persistance)