Lines Matching full:br

68 		vg = br_vlan_group(v->br);  in __vlan_flags_update()
103 static int __vlan_vid_add(struct net_device *dev, struct net_bridge *br, in __vlan_vid_add() argument
114 return vlan_vid_add(dev, br->vlan_proto, v->vid); in __vlan_vid_add()
126 vg = br_vlan_group(v->br); in __vlan_add_list()
144 static int __vlan_vid_del(struct net_device *dev, struct net_bridge *br, in __vlan_vid_del() argument
154 vlan_vid_del(dev, br->vlan_proto, v->vid); in __vlan_vid_del()
162 br_vlan_get_master(struct net_bridge *br, u16 vid, in br_vlan_get_master() argument
168 vg = br_vlan_group(br); in br_vlan_get_master()
174 if (br_vlan_add(br, vid, 0, &changed, extack)) in br_vlan_get_master()
205 vg = br_vlan_group(masterv->br); in br_vlan_put_master()
231 struct net_bridge *br; in br_vlan_init_state() local
234 br = v->br; in br_vlan_init_state()
236 br = v->port->br; in br_vlan_init_state()
238 if (br_opt_get(br, BROPT_MST_ENABLED)) { in br_vlan_init_state()
265 struct net_bridge *br; in __vlan_add() local
269 br = v->br; in __vlan_add()
270 dev = br->dev; in __vlan_add()
271 vg = br_vlan_group(br); in __vlan_add()
274 br = p->br; in __vlan_add()
284 err = __vlan_vid_add(dev, br, v, flags, extack); in __vlan_add()
292 err = br_vlan_add(br, v->vid, in __vlan_add()
299 br_vlan_notify(br, NULL, v->vid, 0, in __vlan_add()
303 masterv = br_vlan_get_master(br, v->vid, extack); in __vlan_add()
309 if (br_opt_get(br, BROPT_VLAN_STATS_PER_PORT)) { in __vlan_add()
328 br_multicast_ctx_init(br, v, &v->br_mcast_ctx); in __vlan_add()
334 if (!br_opt_get(br, BROPT_FDB_LOCAL_VLAN_0)) { in __vlan_add()
335 err = br_fdb_add_local(br, p, dev->dev_addr, v->vid); in __vlan_add()
337 br_err(br, "failed insert local address into bridge forwarding table\n"); in __vlan_add()
363 br_fdb_find_delete_local(br, p, dev->dev_addr, v->vid); in __vlan_add()
369 __vlan_vid_del(dev, br, v); in __vlan_add()
393 vg = br_vlan_group(v->br); in __vlan_del()
402 err = __vlan_vid_del(p->dev, p->br, v); in __vlan_del()
406 err = br_switchdev_port_vlan_del(v->br->dev, v->vid); in __vlan_del()
441 static void __vlan_flush(const struct net_bridge *br, in __vlan_flush() argument
456 br_vlan_notify(br, p, v_start, v_end, RTM_DELVLAN); in __vlan_flush()
463 br_err(br, in __vlan_flush()
472 br_vlan_notify(br, p, v_start, v_end, RTM_DELVLAN); in __vlan_flush()
475 struct sk_buff *br_handle_vlan(struct net_bridge *br, in br_handle_vlan() argument
500 if ((br->dev->flags & IFF_PROMISC) && skb->dev == br->dev) { in br_handle_vlan()
507 if (br_opt_get(br, BROPT_VLAN_STATS_ENABLED)) { in br_handle_vlan()
536 static bool __allowed_ingress(const struct net_bridge *br, in __allowed_ingress() argument
552 skb->protocol == br->vlan_proto)) { in __allowed_ingress()
560 if (skb->vlan_proto != br->vlan_proto) { in __allowed_ingress()
596 __vlan_hwaccel_put_tag(skb, br->vlan_proto, pvid); in __allowed_ingress()
606 if (!br_opt_get(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED) && in __allowed_ingress()
607 !br_opt_get(br, BROPT_VLAN_STATS_ENABLED)) { in __allowed_ingress()
626 if (br_opt_get(br, BROPT_VLAN_STATS_ENABLED)) { in __allowed_ingress()
643 bool br_allowed_ingress(const struct net_bridge *br, in br_allowed_ingress() argument
652 if (!br_opt_get(br, BROPT_VLAN_ENABLED)) { in br_allowed_ingress()
657 return __allowed_ingress(br, vg, skb, vid, state, vlan); in br_allowed_ingress()
684 struct net_bridge *br = p->br; in br_should_learn() local
688 if (!br_opt_get(br, BROPT_VLAN_ENABLED)) in br_should_learn()
695 if (!br_vlan_get_tag(skb, vid) && skb->vlan_proto != br->vlan_proto) in br_should_learn()
714 static int br_vlan_add_existing(struct net_bridge *br, in br_vlan_add_existing() argument
738 err = br_switchdev_port_vlan_add(br->dev, vlan->vid, flags, in br_vlan_add_existing()
746 err = br_fdb_add_local(br, NULL, br->dev->dev_addr, vlan->vid); in br_vlan_add_existing()
748 br_err(br, "failed to insert local address into bridge forwarding table\n"); in br_vlan_add_existing()
766 br_switchdev_port_vlan_del(br->dev, vlan->vid); in br_vlan_add_existing()
774 int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags, bool *changed, in br_vlan_add() argument
784 vg = br_vlan_group(br); in br_vlan_add()
787 return br_vlan_add_existing(br, vg, vlan, flags, changed, in br_vlan_add()
802 vlan->br = br; in br_vlan_add()
819 int br_vlan_delete(struct net_bridge *br, u16 vid) in br_vlan_delete() argument
826 vg = br_vlan_group(br); in br_vlan_delete()
831 br_fdb_find_delete_local(br, NULL, br->dev->dev_addr, vid); in br_vlan_delete()
832 br_fdb_delete_by_port(br, NULL, vid, 0); in br_vlan_delete()
839 void br_vlan_flush(struct net_bridge *br) in br_vlan_flush() argument
845 vg = br_vlan_group(br); in br_vlan_flush()
846 __vlan_flush(br, NULL, vg); in br_vlan_flush()
847 RCU_INIT_POINTER(br->vlgrp, NULL); in br_vlan_flush()
861 static void recalculate_group_addr(struct net_bridge *br) in recalculate_group_addr() argument
863 if (br_opt_get(br, BROPT_GROUP_ADDR_SET)) in recalculate_group_addr()
866 spin_lock_bh(&br->lock); in recalculate_group_addr()
867 if (!br_opt_get(br, BROPT_VLAN_ENABLED) || in recalculate_group_addr()
868 br->vlan_proto == htons(ETH_P_8021Q)) { in recalculate_group_addr()
870 br->group_addr[5] = 0x00; in recalculate_group_addr()
873 br->group_addr[5] = 0x08; in recalculate_group_addr()
875 spin_unlock_bh(&br->lock); in recalculate_group_addr()
879 void br_recalculate_fwd_mask(struct net_bridge *br) in br_recalculate_fwd_mask() argument
881 if (!br_opt_get(br, BROPT_VLAN_ENABLED) || in br_recalculate_fwd_mask()
882 br->vlan_proto == htons(ETH_P_8021Q)) in br_recalculate_fwd_mask()
883 br->group_fwd_mask_required = BR_GROUPFWD_DEFAULT; in br_recalculate_fwd_mask()
885 br->group_fwd_mask_required = BR_GROUPFWD_8021AD & in br_recalculate_fwd_mask()
886 ~(1u << br->group_addr[5]); in br_recalculate_fwd_mask()
889 int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val, in br_vlan_filter_toggle() argument
893 .orig_dev = br->dev, in br_vlan_filter_toggle()
900 if (br_opt_get(br, BROPT_VLAN_ENABLED) == !!val) in br_vlan_filter_toggle()
903 br_opt_toggle(br, BROPT_VLAN_ENABLED, !!val); in br_vlan_filter_toggle()
905 err = switchdev_port_attr_set(br->dev, &attr, extack); in br_vlan_filter_toggle()
907 br_opt_toggle(br, BROPT_VLAN_ENABLED, !val); in br_vlan_filter_toggle()
911 br_manage_promisc(br); in br_vlan_filter_toggle()
912 recalculate_group_addr(br); in br_vlan_filter_toggle()
913 br_recalculate_fwd_mask(br); in br_vlan_filter_toggle()
914 if (!val && br_opt_get(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED)) { in br_vlan_filter_toggle()
915 br_info(br, "vlan filtering disabled, automatically disabling multicast vlan snooping\n"); in br_vlan_filter_toggle()
916 br_multicast_toggle_vlan_snooping(br, false, NULL); in br_vlan_filter_toggle()
924 struct net_bridge *br = netdev_priv(dev); in br_vlan_enabled() local
926 return br_opt_get(br, BROPT_VLAN_ENABLED); in br_vlan_enabled()
932 struct net_bridge *br = netdev_priv(dev); in br_vlan_get_proto() local
934 *p_proto = ntohs(br->vlan_proto); in br_vlan_get_proto()
940 int __br_vlan_set_proto(struct net_bridge *br, __be16 proto, in __br_vlan_set_proto() argument
944 .orig_dev = br->dev, in __br_vlan_set_proto()
953 __be16 oldproto = br->vlan_proto; in __br_vlan_set_proto()
955 if (br->vlan_proto == proto) in __br_vlan_set_proto()
958 err = switchdev_port_attr_set(br->dev, &attr, extack); in __br_vlan_set_proto()
963 list_for_each_entry(p, &br->port_list, list) { in __br_vlan_set_proto()
974 br->vlan_proto = proto; in __br_vlan_set_proto()
976 recalculate_group_addr(br); in __br_vlan_set_proto()
977 br_recalculate_fwd_mask(br); in __br_vlan_set_proto()
980 list_for_each_entry(p, &br->port_list, list) { in __br_vlan_set_proto()
993 switchdev_port_attr_set(br->dev, &attr, NULL); in __br_vlan_set_proto()
1001 list_for_each_entry_continue_reverse(p, &br->port_list, list) { in __br_vlan_set_proto()
1013 int br_vlan_set_proto(struct net_bridge *br, unsigned long val, in br_vlan_set_proto() argument
1019 return __br_vlan_set_proto(br, htons(val), extack); in br_vlan_set_proto()
1022 int br_vlan_set_stats(struct net_bridge *br, unsigned long val) in br_vlan_set_stats() argument
1027 br_opt_toggle(br, BROPT_VLAN_STATS_ENABLED, !!val); in br_vlan_set_stats()
1036 int br_vlan_set_stats_per_port(struct net_bridge *br, unsigned long val) in br_vlan_set_stats_per_port() argument
1041 list_for_each_entry(p, &br->port_list, list) { in br_vlan_set_stats_per_port()
1051 br_opt_toggle(br, BROPT_VLAN_STATS_PER_PORT, !!val); in br_vlan_set_stats_per_port()
1075 static void br_vlan_disable_default_pvid(struct net_bridge *br) in br_vlan_disable_default_pvid() argument
1078 u16 pvid = br->default_pvid; in br_vlan_disable_default_pvid()
1083 if (vlan_default_pvid(br_vlan_group(br), pvid)) { in br_vlan_disable_default_pvid()
1084 if (!br_vlan_delete(br, pvid)) in br_vlan_disable_default_pvid()
1085 br_vlan_notify(br, NULL, pvid, 0, RTM_DELVLAN); in br_vlan_disable_default_pvid()
1088 list_for_each_entry(p, &br->port_list, list) { in br_vlan_disable_default_pvid()
1091 br_vlan_notify(br, p, pvid, 0, RTM_DELVLAN); in br_vlan_disable_default_pvid()
1094 br->default_pvid = 0; in br_vlan_disable_default_pvid()
1097 int __br_vlan_set_default_pvid(struct net_bridge *br, u16 pvid, in __br_vlan_set_default_pvid() argument
1109 br_vlan_disable_default_pvid(br); in __br_vlan_set_default_pvid()
1117 old_pvid = br->default_pvid; in __br_vlan_set_default_pvid()
1122 vg = br_vlan_group(br); in __br_vlan_set_default_pvid()
1126 err = br_vlan_add(br, pvid, in __br_vlan_set_default_pvid()
1134 if (br_vlan_delete(br, old_pvid)) in __br_vlan_set_default_pvid()
1135 br_vlan_notify(br, NULL, old_pvid, 0, RTM_DELVLAN); in __br_vlan_set_default_pvid()
1136 br_vlan_notify(br, NULL, pvid, 0, RTM_NEWVLAN); in __br_vlan_set_default_pvid()
1140 list_for_each_entry(p, &br->port_list, list) { in __br_vlan_set_default_pvid()
1157 br_vlan_notify(br, p, old_pvid, 0, RTM_DELVLAN); in __br_vlan_set_default_pvid()
1158 br_vlan_notify(p->br, p, pvid, 0, RTM_NEWVLAN); in __br_vlan_set_default_pvid()
1162 br->default_pvid = pvid; in __br_vlan_set_default_pvid()
1169 list_for_each_entry_continue_reverse(p, &br->port_list, list) { in __br_vlan_set_default_pvid()
1178 br_vlan_notify(p->br, p, old_pvid, 0, RTM_NEWVLAN); in __br_vlan_set_default_pvid()
1181 br_vlan_notify(br, p, pvid, 0, RTM_DELVLAN); in __br_vlan_set_default_pvid()
1186 br_vlan_add(br, old_pvid, in __br_vlan_set_default_pvid()
1191 br_vlan_notify(br, NULL, old_pvid, 0, RTM_NEWVLAN); in __br_vlan_set_default_pvid()
1193 br_vlan_delete(br, pvid); in __br_vlan_set_default_pvid()
1194 br_vlan_notify(br, NULL, pvid, 0, RTM_DELVLAN); in __br_vlan_set_default_pvid()
1199 int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val, in br_vlan_set_default_pvid() argument
1208 if (pvid == br->default_pvid) in br_vlan_set_default_pvid()
1212 if (br_opt_get(br, BROPT_VLAN_ENABLED)) { in br_vlan_set_default_pvid()
1217 err = __br_vlan_set_default_pvid(br, pvid, extack); in br_vlan_set_default_pvid()
1222 int br_vlan_init(struct net_bridge *br) in br_vlan_init() argument
1237 br->vlan_proto = htons(ETH_P_8021Q); in br_vlan_init()
1238 br->default_pvid = 1; in br_vlan_init()
1239 rcu_assign_pointer(br->vlgrp, vg); in br_vlan_init()
1255 .orig_dev = p->br->dev, in nbp_vlan_init()
1258 .u.vlan_filtering = br_opt_get(p->br, BROPT_VLAN_ENABLED), in nbp_vlan_init()
1279 if (p->br->default_pvid) { in nbp_vlan_init()
1282 ret = nbp_vlan_add(p, p->br->default_pvid, in nbp_vlan_init()
1288 br_vlan_notify(p->br, p, p->br->default_pvid, 0, RTM_NEWVLAN); in nbp_vlan_init()
1364 br_fdb_find_delete_local(port->br, port, port->dev->dev_addr, vid); in nbp_vlan_delete()
1365 br_fdb_delete_by_port(port->br, port, vid, 0); in nbp_vlan_delete()
1377 __vlan_flush(port->br, port, vg); in nbp_vlan_flush()
1447 void br_vlan_fill_forward_path_pvid(struct net_bridge *br, in br_vlan_fill_forward_path_pvid() argument
1457 if (!br_opt_get(br, BROPT_VLAN_ENABLED)) in br_vlan_fill_forward_path_pvid()
1460 vg = br_vlan_group_rcu(br); in br_vlan_fill_forward_path_pvid()
1463 ctx->vlan[idx].proto == br->vlan_proto) { in br_vlan_fill_forward_path_pvid()
1471 path->bridge.vlan_proto = br->vlan_proto; in br_vlan_fill_forward_path_pvid()
1474 int br_vlan_fill_forward_path_mode(struct net_bridge *br, in br_vlan_fill_forward_path_mode() argument
1481 if (!br_opt_get(br, BROPT_VLAN_ENABLED)) in br_vlan_fill_forward_path_mode()
1624 static void br_vlan_set_vlan_dev_state(const struct net_bridge *br, in br_vlan_set_vlan_dev_state() argument
1632 if (!netif_carrier_ok(br->dev)) { in br_vlan_set_vlan_dev_state()
1637 list_for_each_entry(p, &br->port_list, list) { in br_vlan_set_vlan_dev_state()
1658 vlan_dev = br_vlan_get_upper_bind_vlan_dev(p->br->dev, in br_vlan_set_all_vlan_dev_state()
1662 if (netif_carrier_ok(p->br->dev)) in br_vlan_set_all_vlan_dev_state()
1665 br_vlan_set_vlan_dev_state(p->br, vlan_dev); in br_vlan_set_all_vlan_dev_state()
1674 struct net_bridge *br = netdev_priv(br_dev); in br_vlan_toggle_bridge_binding() local
1677 br_opt_toggle(br, BROPT_VLAN_BRIDGE_BINDING, true); in br_vlan_toggle_bridge_binding()
1679 br_opt_toggle(br, BROPT_VLAN_BRIDGE_BINDING, in br_vlan_toggle_bridge_binding()
1687 struct net_bridge *br = netdev_priv(dev); in br_vlan_upper_change() local
1694 br_vlan_set_vlan_dev_state(br, upper_dev); in br_vlan_upper_change()
1698 struct net_bridge *br; member
1707 br_vlan_set_vlan_dev_state(data->br, vlan_dev); in br_vlan_link_state_change_fn()
1713 struct net_bridge *br) in br_vlan_link_state_change() argument
1716 .br = br in br_vlan_link_state_change()
1733 if (!br_opt_get(p->br, BROPT_VLAN_BRIDGE_BINDING)) in nbp_vlan_set_vlan_dev_state()
1736 vlan_dev = br_vlan_get_upper_bind_vlan_dev(p->br->dev, vid); in nbp_vlan_set_vlan_dev_state()
1738 br_vlan_set_vlan_dev_state(p->br, vlan_dev); in nbp_vlan_set_vlan_dev_state()
1745 struct net_bridge *br = netdev_priv(dev); in br_vlan_bridge_event() local
1751 ret = br_vlan_add(br, br->default_pvid, in br_vlan_bridge_event()
1758 changed = !br_vlan_delete(br, br->default_pvid); in br_vlan_bridge_event()
1768 if (!br_opt_get(br, BROPT_VLAN_BRIDGE_BINDING)) in br_vlan_bridge_event()
1770 br_vlan_link_state_change(dev, br); in br_vlan_bridge_event()
1774 br_vlan_notify(br, NULL, br->default_pvid, 0, vlcmd); in br_vlan_bridge_event()
1784 struct net_bridge *br = netdev_priv(br_dev); in br_vlan_vlan_upper_event() local
1798 br_vlan_set_vlan_dev_state(br, vlan_dev); in br_vlan_vlan_upper_event()
1806 if (!br_opt_get(p->br, BROPT_VLAN_BRIDGE_BINDING)) in br_vlan_port_event()
1907 void br_vlan_notify(const struct net_bridge *br, in br_vlan_notify() argument
1930 ifindex = br->dev->ifindex; in br_vlan_notify()
1931 vg = br_vlan_group(br); in br_vlan_notify()
1932 net = dev_net(br->dev); in br_vlan_notify()
2000 struct net_bridge *br; in br_vlan_dump_dev() local
2008 br = netdev_priv(dev); in br_vlan_dump_dev()
2009 vg = br_vlan_group_rcu(br); in br_vlan_dump_dev()
2020 br = p->br; in br_vlan_dump_dev()
2186 struct net_bridge *br; in br_vlan_rtm_process_one() local
2189 br = netdev_priv(dev); in br_vlan_rtm_process_one()
2190 vg = br_vlan_group(br); in br_vlan_rtm_process_one()
2195 br = p->br; in br_vlan_rtm_process_one()
2251 err = br_process_vlan_info(br, p, cmdmap, vinfo, &tmp_last, in br_vlan_rtm_process_one()
2256 br_ifinfo_notify(cmdmap, br, p); in br_vlan_rtm_process_one()
2274 err = br_vlan_process_options(br, p, range_start, range_end, in br_vlan_rtm_process_one()