Lines Matching refs:br

36 static struct net_bridge_port *br_mrp_get_port(struct net_bridge *br,  in br_mrp_get_port()  argument
42 list_for_each_entry(port, &br->port_list, list) { in br_mrp_get_port()
52 static struct br_mrp *br_mrp_find_id(struct net_bridge *br, u32 ring_id) in br_mrp_find_id() argument
57 hlist_for_each_entry_rcu(mrp, &br->mrp_list, list, in br_mrp_find_id()
68 static struct br_mrp *br_mrp_find_in_id(struct net_bridge *br, u32 in_id) in br_mrp_find_in_id() argument
73 hlist_for_each_entry_rcu(mrp, &br->mrp_list, list, in br_mrp_find_in_id()
84 static bool br_mrp_unique_ifindex(struct net_bridge *br, u32 ifindex) in br_mrp_unique_ifindex() argument
88 hlist_for_each_entry_rcu(mrp, &br->mrp_list, list, in br_mrp_unique_ifindex()
108 static struct br_mrp *br_mrp_find_port(struct net_bridge *br, in br_mrp_find_port() argument
114 hlist_for_each_entry_rcu(mrp, &br->mrp_list, list, in br_mrp_find_port()
200 ether_addr_copy(hdr->sa, p->br->dev->dev_addr); in br_mrp_alloc_test_skb()
257 ether_addr_copy(hdr->sa, p->br->dev->dev_addr); in br_mrp_alloc_in_test_skb()
428 static void br_mrp_del_impl(struct net_bridge *br, struct br_mrp *mrp) in br_mrp_del_impl() argument
435 br_mrp_switchdev_send_ring_test(br, mrp, 0, 0, 0, 0); in br_mrp_del_impl()
439 br_mrp_switchdev_send_in_test(br, mrp, 0, 0, 0); in br_mrp_del_impl()
442 br_mrp_switchdev_set_ring_role(br, mrp, BR_MRP_RING_ROLE_DISABLED); in br_mrp_del_impl()
445 br_mrp_switchdev_set_in_role(br, mrp, mrp->in_id, mrp->ring_id, in br_mrp_del_impl()
448 br_mrp_switchdev_del(br, mrp); in br_mrp_del_impl()
453 spin_lock_bh(&br->lock); in br_mrp_del_impl()
454 state = netif_running(br->dev) ? in br_mrp_del_impl()
458 spin_unlock_bh(&br->lock); in br_mrp_del_impl()
465 spin_lock_bh(&br->lock); in br_mrp_del_impl()
466 state = netif_running(br->dev) ? in br_mrp_del_impl()
470 spin_unlock_bh(&br->lock); in br_mrp_del_impl()
477 spin_lock_bh(&br->lock); in br_mrp_del_impl()
478 state = netif_running(br->dev) ? in br_mrp_del_impl()
482 spin_unlock_bh(&br->lock); in br_mrp_del_impl()
490 if (hlist_empty(&br->mrp_list)) in br_mrp_del_impl()
491 br_del_frame(br, &mrp_frame_type); in br_mrp_del_impl()
497 int br_mrp_add(struct net_bridge *br, struct br_mrp_instance *instance) in br_mrp_add() argument
506 mrp = br_mrp_find_id(br, instance->ring_id); in br_mrp_add()
510 if (!br_mrp_get_port(br, instance->p_ifindex) || in br_mrp_add()
511 !br_mrp_get_port(br, instance->s_ifindex)) in br_mrp_add()
515 if (!br_mrp_unique_ifindex(br, instance->p_ifindex) || in br_mrp_add()
516 !br_mrp_unique_ifindex(br, instance->s_ifindex)) in br_mrp_add()
526 p = br_mrp_get_port(br, instance->p_ifindex); in br_mrp_add()
527 spin_lock_bh(&br->lock); in br_mrp_add()
530 spin_unlock_bh(&br->lock); in br_mrp_add()
533 p = br_mrp_get_port(br, instance->s_ifindex); in br_mrp_add()
534 spin_lock_bh(&br->lock); in br_mrp_add()
537 spin_unlock_bh(&br->lock); in br_mrp_add()
540 if (hlist_empty(&br->mrp_list)) in br_mrp_add()
541 br_add_frame(br, &mrp_frame_type); in br_mrp_add()
545 hlist_add_tail_rcu(&mrp->list, &br->mrp_list); in br_mrp_add()
547 err = br_mrp_switchdev_add(br, mrp); in br_mrp_add()
554 br_mrp_del_impl(br, mrp); in br_mrp_add()
562 void br_mrp_port_del(struct net_bridge *br, struct net_bridge_port *p) in br_mrp_port_del() argument
564 struct br_mrp *mrp = br_mrp_find_port(br, p); in br_mrp_port_del()
570 br_mrp_del_impl(br, mrp); in br_mrp_port_del()
576 int br_mrp_del(struct net_bridge *br, struct br_mrp_instance *instance) in br_mrp_del() argument
578 struct br_mrp *mrp = br_mrp_find_id(br, instance->ring_id); in br_mrp_del()
583 br_mrp_del_impl(br, mrp); in br_mrp_del()
599 spin_lock_bh(&p->br->lock); in br_mrp_set_port_state()
607 spin_unlock_bh(&p->br->lock); in br_mrp_set_port_state()
625 mrp = br_mrp_find_port(p->br, p); in br_mrp_set_port_role()
649 int br_mrp_set_ring_state(struct net_bridge *br, in br_mrp_set_ring_state() argument
652 struct br_mrp *mrp = br_mrp_find_id(br, state->ring_id); in br_mrp_set_ring_state()
662 br_mrp_switchdev_set_ring_state(br, mrp, state->ring_state); in br_mrp_set_ring_state()
671 int br_mrp_set_ring_role(struct net_bridge *br, in br_mrp_set_ring_role() argument
674 struct br_mrp *mrp = br_mrp_find_id(br, role->ring_id); in br_mrp_set_ring_role()
683 support = br_mrp_switchdev_set_ring_role(br, mrp, role->ring_role); in br_mrp_set_ring_role()
702 int br_mrp_start_test(struct net_bridge *br, in br_mrp_start_test() argument
705 struct br_mrp *mrp = br_mrp_find_id(br, test->ring_id); in br_mrp_start_test()
714 support = br_mrp_switchdev_send_ring_test(br, mrp, test->interval, in br_mrp_start_test()
737 int br_mrp_set_in_state(struct net_bridge *br, struct br_mrp_in_state *state) in br_mrp_set_in_state() argument
739 struct br_mrp *mrp = br_mrp_find_in_id(br, state->in_id); in br_mrp_set_in_state()
749 br_mrp_switchdev_set_in_state(br, mrp, state->in_state); in br_mrp_set_in_state()
758 int br_mrp_set_in_role(struct net_bridge *br, struct br_mrp_in_role *role) in br_mrp_set_in_role() argument
760 struct br_mrp *mrp = br_mrp_find_id(br, role->ring_id); in br_mrp_set_in_role()
767 if (!br_mrp_get_port(br, role->i_ifindex)) in br_mrp_set_in_role()
780 br_mrp_switchdev_send_in_test(br, mrp, 0, 0, 0); in br_mrp_set_in_role()
783 spin_lock_bh(&br->lock); in br_mrp_set_in_role()
784 state = netif_running(br->dev) ? in br_mrp_set_in_role()
788 spin_unlock_bh(&br->lock); in br_mrp_set_in_role()
799 if (!br_mrp_unique_ifindex(br, role->i_ifindex)) in br_mrp_set_in_role()
809 p = br_mrp_get_port(br, role->i_ifindex); in br_mrp_set_in_role()
810 spin_lock_bh(&br->lock); in br_mrp_set_in_role()
813 spin_unlock_bh(&br->lock); in br_mrp_set_in_role()
820 support = br_mrp_switchdev_set_in_role(br, mrp, role->in_id, in br_mrp_set_in_role()
840 int br_mrp_start_in_test(struct net_bridge *br, in br_mrp_start_in_test() argument
843 struct br_mrp *mrp = br_mrp_find_in_id(br, in_test->in_id); in br_mrp_start_in_test()
855 support = br_mrp_switchdev_send_in_test(br, mrp, in_test->interval, in br_mrp_start_in_test()
945 struct net_bridge *br, in br_mrp_test_better_than_own() argument
952 ether_addr_to_u64(hdr->sa) < ether_addr_to_u64(br->dev->dev_addr))) in br_mrp_test_better_than_own()
962 static void br_mrp_mra_process(struct br_mrp *mrp, struct net_bridge *br, in br_mrp_mra_process() argument
990 if (br_mrp_test_better_than_own(mrp, br, test_hdr)) in br_mrp_mra_process()
1079 struct net_bridge *br; in br_mrp_rcv() local
1086 br = p->br; in br_mrp_rcv()
1087 mrp = br_mrp_find_port(br, p); in br_mrp_rcv()
1120 br_mrp_mra_process(mrp, br, p, skb); in br_mrp_rcv()
1257 bool br_mrp_enabled(struct net_bridge *br) in br_mrp_enabled() argument
1259 return !hlist_empty(&br->mrp_list); in br_mrp_enabled()