Lines Matching refs:br
29 static struct net_bridge_port *br_mrp_get_port(struct net_bridge *br, in br_mrp_get_port() argument
35 list_for_each_entry(port, &br->port_list, list) { in br_mrp_get_port()
45 static struct br_mrp *br_mrp_find_id(struct net_bridge *br, u32 ring_id) in br_mrp_find_id() argument
50 list_for_each_entry_rcu(mrp, &br->mrp_list, list, in br_mrp_find_id()
61 static struct br_mrp *br_mrp_find_in_id(struct net_bridge *br, u32 in_id) in br_mrp_find_in_id() argument
66 list_for_each_entry_rcu(mrp, &br->mrp_list, list, in br_mrp_find_in_id()
77 static bool br_mrp_unique_ifindex(struct net_bridge *br, u32 ifindex) in br_mrp_unique_ifindex() argument
81 list_for_each_entry_rcu(mrp, &br->mrp_list, list, in br_mrp_unique_ifindex()
101 static struct br_mrp *br_mrp_find_port(struct net_bridge *br, in br_mrp_find_port() argument
107 list_for_each_entry_rcu(mrp, &br->mrp_list, list, in br_mrp_find_port()
193 ether_addr_copy(hdr->sa, p->br->dev->dev_addr); in br_mrp_alloc_test_skb()
223 ether_addr_copy(hdr->sa, p->br->dev->dev_addr); in br_mrp_alloc_in_test_skb()
394 static void br_mrp_del_impl(struct net_bridge *br, struct br_mrp *mrp) in br_mrp_del_impl() argument
401 br_mrp_switchdev_send_ring_test(br, mrp, 0, 0, 0, 0); in br_mrp_del_impl()
405 br_mrp_switchdev_send_in_test(br, mrp, 0, 0, 0); in br_mrp_del_impl()
407 br_mrp_switchdev_del(br, mrp); in br_mrp_del_impl()
412 spin_lock_bh(&br->lock); in br_mrp_del_impl()
413 state = netif_running(br->dev) ? in br_mrp_del_impl()
417 spin_unlock_bh(&br->lock); in br_mrp_del_impl()
424 spin_lock_bh(&br->lock); in br_mrp_del_impl()
425 state = netif_running(br->dev) ? in br_mrp_del_impl()
429 spin_unlock_bh(&br->lock); in br_mrp_del_impl()
436 spin_lock_bh(&br->lock); in br_mrp_del_impl()
437 state = netif_running(br->dev) ? in br_mrp_del_impl()
441 spin_unlock_bh(&br->lock); in br_mrp_del_impl()
453 int br_mrp_add(struct net_bridge *br, struct br_mrp_instance *instance) in br_mrp_add() argument
462 mrp = br_mrp_find_id(br, instance->ring_id); in br_mrp_add()
466 if (!br_mrp_get_port(br, instance->p_ifindex) || in br_mrp_add()
467 !br_mrp_get_port(br, instance->s_ifindex)) in br_mrp_add()
471 if (!br_mrp_unique_ifindex(br, instance->p_ifindex) || in br_mrp_add()
472 !br_mrp_unique_ifindex(br, instance->s_ifindex)) in br_mrp_add()
482 p = br_mrp_get_port(br, instance->p_ifindex); in br_mrp_add()
483 spin_lock_bh(&br->lock); in br_mrp_add()
486 spin_unlock_bh(&br->lock); in br_mrp_add()
489 p = br_mrp_get_port(br, instance->s_ifindex); in br_mrp_add()
490 spin_lock_bh(&br->lock); in br_mrp_add()
493 spin_unlock_bh(&br->lock); in br_mrp_add()
498 list_add_tail_rcu(&mrp->list, &br->mrp_list); in br_mrp_add()
500 err = br_mrp_switchdev_add(br, mrp); in br_mrp_add()
507 br_mrp_del_impl(br, mrp); in br_mrp_add()
515 void br_mrp_port_del(struct net_bridge *br, struct net_bridge_port *p) in br_mrp_port_del() argument
517 struct br_mrp *mrp = br_mrp_find_port(br, p); in br_mrp_port_del()
523 br_mrp_del_impl(br, mrp); in br_mrp_port_del()
529 int br_mrp_del(struct net_bridge *br, struct br_mrp_instance *instance) in br_mrp_del() argument
531 struct br_mrp *mrp = br_mrp_find_id(br, instance->ring_id); in br_mrp_del()
536 br_mrp_del_impl(br, mrp); in br_mrp_del()
552 spin_lock_bh(&p->br->lock); in br_mrp_set_port_state()
560 spin_unlock_bh(&p->br->lock); in br_mrp_set_port_state()
578 mrp = br_mrp_find_port(p->br, p); in br_mrp_set_port_role()
602 int br_mrp_set_ring_state(struct net_bridge *br, in br_mrp_set_ring_state() argument
605 struct br_mrp *mrp = br_mrp_find_id(br, state->ring_id); in br_mrp_set_ring_state()
615 br_mrp_switchdev_set_ring_state(br, mrp, state->ring_state); in br_mrp_set_ring_state()
624 int br_mrp_set_ring_role(struct net_bridge *br, in br_mrp_set_ring_role() argument
627 struct br_mrp *mrp = br_mrp_find_id(br, role->ring_id); in br_mrp_set_ring_role()
636 err = br_mrp_switchdev_set_ring_role(br, mrp, role->ring_role); in br_mrp_set_ring_role()
655 int br_mrp_start_test(struct net_bridge *br, in br_mrp_start_test() argument
658 struct br_mrp *mrp = br_mrp_find_id(br, test->ring_id); in br_mrp_start_test()
666 if (!br_mrp_switchdev_send_ring_test(br, mrp, test->interval, in br_mrp_start_test()
685 int br_mrp_set_in_state(struct net_bridge *br, struct br_mrp_in_state *state) in br_mrp_set_in_state() argument
687 struct br_mrp *mrp = br_mrp_find_in_id(br, state->in_id); in br_mrp_set_in_state()
697 br_mrp_switchdev_set_in_state(br, mrp, state->in_state); in br_mrp_set_in_state()
706 int br_mrp_set_in_role(struct net_bridge *br, struct br_mrp_in_role *role) in br_mrp_set_in_role() argument
708 struct br_mrp *mrp = br_mrp_find_id(br, role->ring_id); in br_mrp_set_in_role()
715 if (!br_mrp_get_port(br, role->i_ifindex)) in br_mrp_set_in_role()
728 br_mrp_switchdev_send_in_test(br, mrp, 0, 0, 0); in br_mrp_set_in_role()
731 spin_lock_bh(&br->lock); in br_mrp_set_in_role()
732 state = netif_running(br->dev) ? in br_mrp_set_in_role()
736 spin_unlock_bh(&br->lock); in br_mrp_set_in_role()
747 if (!br_mrp_unique_ifindex(br, role->i_ifindex)) in br_mrp_set_in_role()
757 p = br_mrp_get_port(br, role->i_ifindex); in br_mrp_set_in_role()
758 spin_lock_bh(&br->lock); in br_mrp_set_in_role()
761 spin_unlock_bh(&br->lock); in br_mrp_set_in_role()
768 err = br_mrp_switchdev_set_in_role(br, mrp, role->in_id, in br_mrp_set_in_role()
788 int br_mrp_start_in_test(struct net_bridge *br, in br_mrp_start_in_test() argument
791 struct br_mrp *mrp = br_mrp_find_in_id(br, in_test->in_id); in br_mrp_start_in_test()
802 if (!br_mrp_switchdev_send_in_test(br, mrp, in_test->interval, in br_mrp_start_in_test()
886 struct net_bridge *br, in br_mrp_test_better_than_own() argument
893 ether_addr_to_u64(hdr->sa) < ether_addr_to_u64(br->dev->dev_addr))) in br_mrp_test_better_than_own()
903 static void br_mrp_mra_process(struct br_mrp *mrp, struct net_bridge *br, in br_mrp_mra_process() argument
931 if (br_mrp_test_better_than_own(mrp, br, test_hdr)) in br_mrp_mra_process()
1020 struct net_bridge *br; in br_mrp_rcv() local
1027 br = p->br; in br_mrp_rcv()
1028 mrp = br_mrp_find_port(br, p); in br_mrp_rcv()
1061 br_mrp_mra_process(mrp, br, p, skb); in br_mrp_rcv()
1189 bool br_mrp_enabled(struct net_bridge *br) in br_mrp_enabled() argument
1191 return !list_empty(&br->mrp_list); in br_mrp_enabled()