Lines Matching defs:p

29 void br_set_state(struct net_bridge_port *p, unsigned int state)
32 .orig_dev = p->dev,
42 if (p->flags & BR_MRP_AWARE)
45 p->state = state;
46 if (br_opt_get(p->br, BROPT_MST_ENABLED)) {
47 err = br_mst_set_state(p, 0, state, NULL);
49 br_warn(p->br, "error setting MST state on port %u(%s)\n",
50 p->port_no, netdev_name(p->dev));
52 err = switchdev_port_attr_set(p->dev, &attr, NULL);
54 br_warn(p->br, "error setting offload STP state on port %u(%s)\n",
55 (unsigned int) p->port_no, p->dev->name);
57 br_info(p->br, "port %u(%s) entered %s state\n",
58 (unsigned int) p->port_no, p->dev->name,
59 br_port_state_names[p->state]);
61 if (p->br->stp_enabled == BR_KERNEL_STP) {
62 switch (p->state) {
64 p->stp_xstats.transition_blk++;
67 p->stp_xstats.transition_fwd++;
75 struct net_bridge_port *p;
79 p = br_port_get_rtnl(dev);
80 if (!p)
83 return p->state;
90 struct net_bridge_port *p;
92 list_for_each_entry_rcu(p, &br->port_list, list,
94 if (p->port_no == port_no)
95 return p;
102 static int br_should_become_root_port(const struct net_bridge_port *p,
109 br = p->br;
110 if (p->state == BR_STATE_DISABLED ||
111 br_is_designated_port(p))
114 if (memcmp(&br->bridge_id, &p->designated_root, 8) <= 0)
122 t = memcmp(&p->designated_root, &rp->designated_root, 8);
128 if (p->designated_cost + p->path_cost <
131 else if (p->designated_cost + p->path_cost >
135 t = memcmp(&p->designated_bridge, &rp->designated_bridge, 8);
141 if (p->designated_port < rp->designated_port)
143 else if (p->designated_port > rp->designated_port)
146 if (p->port_id < rp->port_id)
153 struct net_bridge_port *p)
157 (unsigned int) p->port_no, p->dev->name);
159 br_set_state(p, BR_STATE_LISTENING);
160 br_ifinfo_notify(RTM_NEWLINK, NULL, p);
163 mod_timer(&p->forward_delay_timer, jiffies + br->forward_delay);
169 struct net_bridge_port *p;
172 list_for_each_entry(p, &br->port_list, list) {
173 if (!br_should_become_root_port(p, root_port))
176 if (p->flags & BR_ROOT_BLOCK)
177 br_root_port_block(br, p);
179 root_port = p->port_no;
188 p = br_get_port(br, root_port);
189 br->designated_root = p->designated_root;
190 br->root_path_cost = p->designated_cost + p->path_cost;
210 void br_transmit_config(struct net_bridge_port *p)
215 if (timer_pending(&p->hold_timer)) {
216 p->config_pending = 1;
220 br = p->br;
223 bpdu.topology_change_ack = p->topology_change_ack;
227 bpdu.port_id = p->port_id;
241 br_send_config_bpdu(p, &bpdu);
242 p->topology_change_ack = 0;
243 p->config_pending = 0;
244 if (p->br->stp_enabled == BR_KERNEL_STP)
245 mod_timer(&p->hold_timer,
251 static void br_record_config_information(struct net_bridge_port *p,
254 p->designated_root = bpdu->root;
255 p->designated_cost = bpdu->root_path_cost;
256 p->designated_bridge = bpdu->bridge_id;
257 p->designated_port = bpdu->port_id;
258 p->designated_age = jiffies - bpdu->message_age;
260 mod_timer(&p->message_age_timer, jiffies
277 struct net_bridge_port *p;
279 p = br_get_port(br, br->root_port);
280 if (p)
281 br_send_tcn_bpdu(p);
288 static int br_should_become_designated_port(const struct net_bridge_port *p)
293 br = p->br;
294 if (br_is_designated_port(p))
297 if (memcmp(&p->designated_root, &br->designated_root, 8))
300 if (br->root_path_cost < p->designated_cost)
302 else if (br->root_path_cost > p->designated_cost)
305 t = memcmp(&br->bridge_id, &p->designated_bridge, 8);
311 if (p->port_id < p->designated_port)
320 struct net_bridge_port *p;
322 list_for_each_entry(p, &br->port_list, list) {
323 if (p->state != BR_STATE_DISABLED &&
324 br_should_become_designated_port(p))
325 br_become_designated_port(p);
331 static int br_supersedes_port_info(const struct net_bridge_port *p,
336 t = memcmp(&bpdu->root, &p->designated_root, 8);
342 if (bpdu->root_path_cost < p->designated_cost)
344 else if (bpdu->root_path_cost > p->designated_cost)
347 t = memcmp(&bpdu->bridge_id, &p->designated_bridge, 8);
353 if (memcmp(&bpdu->bridge_id, &p->br->bridge_id, 8))
356 if (bpdu->port_id <= p->designated_port)
395 struct net_bridge_port *p;
397 list_for_each_entry(p, &br->port_list, list) {
398 if (p->state != BR_STATE_DISABLED &&
399 br_is_designated_port(p))
400 br_transmit_config(p);
405 static void br_reply(struct net_bridge_port *p)
407 br_transmit_config(p);
418 void br_become_designated_port(struct net_bridge_port *p)
422 br = p->br;
423 p->designated_root = br->designated_root;
424 p->designated_cost = br->root_path_cost;
425 p->designated_bridge = br->bridge_id;
426 p->designated_port = p->port_id;
431 static void br_make_blocking(struct net_bridge_port *p)
433 if (p->state != BR_STATE_DISABLED &&
434 p->state != BR_STATE_BLOCKING) {
435 if (p->state == BR_STATE_FORWARDING ||
436 p->state == BR_STATE_LEARNING)
437 br_topology_change_detection(p->br);
439 br_set_state(p, BR_STATE_BLOCKING);
440 br_ifinfo_notify(RTM_NEWLINK, NULL, p);
442 timer_delete(&p->forward_delay_timer);
447 static void br_make_forwarding(struct net_bridge_port *p)
449 struct net_bridge *br = p->br;
451 if (p->state != BR_STATE_BLOCKING)
455 br_set_state(p, BR_STATE_FORWARDING);
457 timer_delete(&p->forward_delay_timer);
459 br_set_state(p, BR_STATE_LISTENING);
461 br_set_state(p, BR_STATE_LEARNING);
463 br_ifinfo_notify(RTM_NEWLINK, NULL, p);
466 mod_timer(&p->forward_delay_timer, jiffies + br->forward_delay);
472 struct net_bridge_port *p;
475 list_for_each_entry(p, &br->port_list, list) {
476 if (p->state == BR_STATE_DISABLED)
481 if (p->port_no == br->root_port) {
482 p->config_pending = 0;
483 p->topology_change_ack = 0;
484 br_make_forwarding(p);
485 } else if (br_is_designated_port(p)) {
486 timer_delete(&p->message_age_timer);
487 br_make_forwarding(p);
489 p->config_pending = 0;
490 p->topology_change_ack = 0;
491 br_make_blocking(p);
495 if (p->state != BR_STATE_BLOCKING)
496 br_multicast_enable_port(p);
501 if (p->state == BR_STATE_FORWARDING)
512 static void br_topology_change_acknowledge(struct net_bridge_port *p)
514 p->topology_change_ack = 1;
515 br_transmit_config(p);
519 void br_received_config_bpdu(struct net_bridge_port *p,
525 p->stp_xstats.rx_bpdu++;
527 br = p->br;
530 if (br_supersedes_port_info(p, bpdu)) {
531 br_record_config_information(p, bpdu);
546 if (p->port_no == br->root_port) {
552 } else if (br_is_designated_port(p)) {
553 br_reply(p);
558 void br_received_tcn_bpdu(struct net_bridge_port *p)
560 p->stp_xstats.rx_tcn++;
562 if (br_is_designated_port(p)) {
563 br_info(p->br, "port %u(%s) received tcn bpdu\n",
564 (unsigned int) p->port_no, p->dev->name);
566 br_topology_change_detection(p->br);
567 br_topology_change_acknowledge(p);