Lines Matching +full:master +full:- +full:stats
1 // SPDX-License-Identifier: GPL-2.0-only
17 u16 vid = *(u16 *)arg->key; in br_vlan_cmp()
19 return vle->vid != vid; in br_vlan_cmp()
40 if (vg->pvid == v->vid) in __vlan_add_pvid()
44 br_vlan_set_pvid_state(vg, v->state); in __vlan_add_pvid()
45 vg->pvid = v->vid; in __vlan_add_pvid()
50 if (vg->pvid != vid) in __vlan_delete_pvid()
54 vg->pvid = 0; in __vlan_delete_pvid()
68 vg = br_vlan_group(v->br); in __vlan_flags_update()
70 vg = nbp_vlan_group(v->port); in __vlan_flags_update()
73 change = !!(flags & BRIDGE_VLAN_INFO_PVID) == !!(vg->pvid != v->vid) || in __vlan_flags_update()
74 ((flags ^ v->flags) & BRIDGE_VLAN_INFO_UNTAGGED); in __vlan_flags_update()
82 __vlan_delete_pvid(vg, v->vid); in __vlan_flags_update()
85 v->flags |= BRIDGE_VLAN_INFO_UNTAGGED; in __vlan_flags_update()
87 v->flags &= ~BRIDGE_VLAN_INFO_UNTAGGED; in __vlan_flags_update()
112 err = br_switchdev_port_vlan_add(dev, v->vid, flags, false, extack); in __vlan_vid_add()
113 if (err == -EOPNOTSUPP) in __vlan_vid_add()
114 return vlan_vid_add(dev, br->vlan_proto, v->vid); in __vlan_vid_add()
115 v->priv_flags |= BR_VLFLAG_ADDED_BY_SWITCHDEV; in __vlan_vid_add()
126 vg = br_vlan_group(v->br); in __vlan_add_list()
128 vg = nbp_vlan_group(v->port); in __vlan_add_list()
130 headp = &vg->vlan_list; in __vlan_add_list()
133 if (v->vid >= vent->vid) in __vlan_add_list()
136 list_add_rcu(&v->vlist, hpos); in __vlan_add_list()
141 list_del_rcu(&v->vlist); in __vlan_del_list()
152 err = br_switchdev_port_vlan_del(dev, v->vid); in __vlan_vid_del()
153 if (!(v->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV)) in __vlan_vid_del()
154 vlan_vid_del(dev, br->vlan_proto, v->vid); in __vlan_vid_del()
155 return err == -EOPNOTSUPP ? 0 : err; in __vlan_vid_del()
158 /* Returns a master vlan, if it didn't exist it gets created. In all cases
159 * a reference is taken to the master vlan before returning.
179 refcount_set(&masterv->refcnt, 1); in br_vlan_get_master()
182 refcount_inc(&masterv->refcnt); in br_vlan_get_master()
193 free_percpu(v->stats); in br_master_vlan_rcu_free()
194 v->stats = NULL; in br_master_vlan_rcu_free()
205 vg = br_vlan_group(masterv->br); in br_vlan_put_master()
206 if (refcount_dec_and_test(&masterv->refcnt)) { in br_vlan_put_master()
207 rhashtable_remove_fast(&vg->vlan_hash, in br_vlan_put_master()
208 &masterv->vnode, br_vlan_rht_params); in br_vlan_put_master()
211 br_multicast_ctx_deinit(&masterv->br_mcast_ctx); in br_vlan_put_master()
212 call_rcu(&masterv->rcu, br_master_vlan_rcu_free); in br_vlan_put_master()
222 /* if we had per-port stats configured then free them here */ in nbp_vlan_rcu_free()
223 if (v->priv_flags & BR_VLFLAG_PER_PORT_STATS) in nbp_vlan_rcu_free()
224 free_percpu(v->stats); in nbp_vlan_rcu_free()
225 v->stats = NULL; in nbp_vlan_rcu_free()
234 br = v->br; in br_vlan_init_state()
236 br = v->port->br; in br_vlan_init_state()
243 v->state = BR_STATE_FORWARDING; in br_vlan_init_state()
244 v->msti = 0; in br_vlan_init_state()
250 * 1. vlan is being added on a port (no master flags, global entry exists)
251 * 2. vlan is being added on a bridge (both master and brentry flags)
253 * is being created right now (master flag set, brentry flag unset), the
254 * global entry is used for global per-vlan features, but not for filtering
255 * 4. same as 3 but with both master and brentry flags set so the entry
269 br = v->br; in __vlan_add()
270 dev = br->dev; in __vlan_add()
273 p = v->port; in __vlan_add()
274 br = p->br; in __vlan_add()
275 dev = p->dev; in __vlan_add()
288 /* need to work on the master vlan too */ 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()
305 err = -ENOMEM; in __vlan_add()
308 v->brvlan = masterv; in __vlan_add()
310 v->stats = in __vlan_add()
312 if (!v->stats) { in __vlan_add()
313 err = -ENOMEM; in __vlan_add()
316 v->priv_flags |= BR_VLFLAG_PER_PORT_STATS; in __vlan_add()
318 v->stats = masterv->stats; in __vlan_add()
320 br_multicast_port_ctx_init(p, v, &v->port_mcast_ctx); in __vlan_add()
323 err = br_switchdev_port_vlan_add(dev, v->vid, flags, in __vlan_add()
325 if (err && err != -EOPNOTSUPP) in __vlan_add()
328 br_multicast_ctx_init(br, v, &v->br_mcast_ctx); in __vlan_add()
329 v->priv_flags |= BR_VLFLAG_GLOBAL_MCAST_ENABLED; in __vlan_add()
334 err = br_fdb_add_local(br, p, dev->dev_addr, v->vid); in __vlan_add()
339 vg->num_vlans++; in __vlan_add()
345 err = rhashtable_lookup_insert_fast(&vg->vlan_hash, &v->vnode, in __vlan_add()
355 nbp_vlan_set_vlan_dev_state(p, v->vid); in __vlan_add()
361 br_fdb_find_delete_local(br, p, dev->dev_addr, v->vid); in __vlan_add()
362 vg->num_vlans--; in __vlan_add()
369 if (v->stats && masterv->stats != v->stats) in __vlan_add()
370 free_percpu(v->stats); in __vlan_add()
371 v->stats = NULL; in __vlan_add()
374 v->brvlan = NULL; in __vlan_add()
377 br_switchdev_port_vlan_del(dev, v->vid); in __vlan_add()
391 vg = br_vlan_group(v->br); in __vlan_del()
393 p = v->port; in __vlan_del()
394 vg = nbp_vlan_group(v->port); in __vlan_del()
395 masterv = v->brvlan; in __vlan_del()
398 __vlan_delete_pvid(vg, v->vid); in __vlan_del()
400 err = __vlan_vid_del(p->dev, p->br, v); in __vlan_del()
404 err = br_switchdev_port_vlan_del(v->br->dev, v->vid); in __vlan_del()
405 if (err && err != -EOPNOTSUPP) in __vlan_del()
411 v->flags &= ~BRIDGE_VLAN_INFO_BRENTRY; in __vlan_del()
412 vg->num_vlans--; in __vlan_del()
417 rhashtable_remove_fast(&vg->vlan_hash, &v->vnode, in __vlan_del()
420 nbp_vlan_set_vlan_dev_state(p, v->vid); in __vlan_del()
422 br_multicast_port_ctx_deinit(&v->port_mcast_ctx); in __vlan_del()
423 call_rcu(&v->rcu, nbp_vlan_rcu_free); in __vlan_del()
433 WARN_ON(!list_empty(&vg->vlan_list)); in __vlan_group_free()
434 rhashtable_destroy(&vg->vlan_hash); in __vlan_group_free()
447 __vlan_delete_pvid(vg, vg->pvid); in __vlan_flush()
448 list_for_each_entry_safe(vlan, tmp, &vg->vlan_list, vlist) { in __vlan_flush()
451 v_start = vlan->vid; in __vlan_flush()
452 } else if (vlan->vid - v_end != 1) { in __vlan_flush()
455 v_start = vlan->vid; in __vlan_flush()
457 v_end = vlan->vid; in __vlan_flush()
463 (unsigned int) p->port_no, p->dev->name, in __vlan_flush()
464 vlan->vid, ERR_PTR(err)); in __vlan_flush()
478 struct pcpu_sw_netstats *stats; in br_handle_vlan() local
483 if (!BR_INPUT_SKB_CB(skb)->vlan_filtered) in br_handle_vlan()
498 if ((br->dev->flags & IFF_PROMISC) && skb->dev == br->dev) { in br_handle_vlan()
506 stats = this_cpu_ptr(v->stats); in br_handle_vlan()
507 u64_stats_update_begin(&stats->syncp); in br_handle_vlan()
508 u64_stats_add(&stats->tx_bytes, skb->len); in br_handle_vlan()
509 u64_stats_inc(&stats->tx_packets); in br_handle_vlan()
510 u64_stats_update_end(&stats->syncp); in br_handle_vlan()
520 if (v->flags & BRIDGE_VLAN_INFO_UNTAGGED && in br_handle_vlan()
524 if (p && (p->flags & BR_VLAN_TUNNEL) && in br_handle_vlan()
540 struct pcpu_sw_netstats *stats; in __allowed_ingress() local
544 BR_INPUT_SKB_CB(skb)->vlan_filtered = true; in __allowed_ingress()
550 skb->protocol == br->vlan_proto)) { in __allowed_ingress()
558 if (skb->vlan_proto != br->vlan_proto) { in __allowed_ingress()
559 /* Protocol-mismatch, empty out vlan_tci for new tag */ in __allowed_ingress()
561 skb = vlan_insert_tag_set_proto(skb, skb->vlan_proto, in __allowed_ingress()
583 * vlan untagged or priority-tagged traffic belongs to. in __allowed_ingress()
588 /* PVID is set on this port. Any untagged or priority-tagged in __allowed_ingress()
594 __vlan_hwaccel_put_tag(skb, br->vlan_proto, pvid); in __allowed_ingress()
596 /* Priority-tagged Frame. in __allowed_ingress()
597 * At this point, we know that skb->vlan_tci VID in __allowed_ingress()
601 skb->vlan_tci |= pvid; in __allowed_ingress()
603 /* if snooping and stats are disabled we can avoid the lookup */ in __allowed_ingress()
625 stats = this_cpu_ptr(v->stats); in __allowed_ingress()
626 u64_stats_update_begin(&stats->syncp); in __allowed_ingress()
627 u64_stats_add(&stats->rx_bytes, skb->len); in __allowed_ingress()
628 u64_stats_inc(&stats->rx_packets); in __allowed_ingress()
629 u64_stats_update_end(&stats->syncp); in __allowed_ingress()
651 BR_INPUT_SKB_CB(skb)->vlan_filtered = false; in br_allowed_ingress()
666 if (!BR_INPUT_SKB_CB(skb)->vlan_filtered) in br_allowed_egress()
682 struct net_bridge *br = p->br; in br_should_learn()
690 if (!vg || !vg->num_vlans) in br_should_learn()
693 if (!br_vlan_get_tag(skb, vid) && skb->vlan_proto != br->vlan_proto) in br_should_learn()
723 /* Trying to change flags of non-existent bridge vlan */ in br_vlan_add_existing()
725 return -EINVAL; in br_vlan_add_existing()
732 /* Master VLANs that aren't brentries weren't notified before, in br_vlan_add_existing()
736 err = br_switchdev_port_vlan_add(br->dev, vlan->vid, flags, in br_vlan_add_existing()
738 if (err && err != -EOPNOTSUPP) in br_vlan_add_existing()
744 err = br_fdb_add_local(br, NULL, br->dev->dev_addr, vlan->vid); in br_vlan_add_existing()
750 refcount_inc(&vlan->refcnt); in br_vlan_add_existing()
751 vlan->flags |= BRIDGE_VLAN_INFO_BRENTRY; in br_vlan_add_existing()
752 vg->num_vlans++; in br_vlan_add_existing()
764 br_switchdev_port_vlan_del(br->dev, vlan->vid); in br_vlan_add_existing()
790 return -ENOMEM; in br_vlan_add()
792 vlan->stats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats); in br_vlan_add()
793 if (!vlan->stats) { in br_vlan_add()
795 return -ENOMEM; in br_vlan_add()
797 vlan->vid = vid; in br_vlan_add()
798 vlan->flags = flags | BRIDGE_VLAN_INFO_MASTER; in br_vlan_add()
799 vlan->flags &= ~BRIDGE_VLAN_INFO_PVID; in br_vlan_add()
800 vlan->br = br; in br_vlan_add()
802 refcount_set(&vlan->refcnt, 1); in br_vlan_add()
805 free_percpu(vlan->stats); in br_vlan_add()
827 return -ENOENT; in br_vlan_delete()
829 br_fdb_find_delete_local(br, NULL, br->dev->dev_addr, vid); in br_vlan_delete()
845 RCU_INIT_POINTER(br->vlgrp, NULL); in br_vlan_flush()
855 return br_vlan_lookup(&vg->vlan_hash, vid); in br_vlan_find()
864 spin_lock_bh(&br->lock); in recalculate_group_addr()
866 br->vlan_proto == htons(ETH_P_8021Q)) { in recalculate_group_addr()
868 br->group_addr[5] = 0x00; in recalculate_group_addr()
871 br->group_addr[5] = 0x08; in recalculate_group_addr()
873 spin_unlock_bh(&br->lock); in recalculate_group_addr()
880 br->vlan_proto == htons(ETH_P_8021Q)) in br_recalculate_fwd_mask()
881 br->group_fwd_mask_required = BR_GROUPFWD_DEFAULT; in br_recalculate_fwd_mask()
883 br->group_fwd_mask_required = BR_GROUPFWD_8021AD & in br_recalculate_fwd_mask()
884 ~(1u << br->group_addr[5]); in br_recalculate_fwd_mask()
891 .orig_dev = br->dev, in br_vlan_filter_toggle()
903 err = switchdev_port_attr_set(br->dev, &attr, extack); in br_vlan_filter_toggle()
904 if (err && err != -EOPNOTSUPP) { in br_vlan_filter_toggle()
932 *p_proto = ntohs(br->vlan_proto); in br_vlan_get_proto()
942 .orig_dev = br->dev, in __br_vlan_set_proto()
951 __be16 oldproto = br->vlan_proto; in __br_vlan_set_proto()
953 if (br->vlan_proto == proto) in __br_vlan_set_proto()
956 err = switchdev_port_attr_set(br->dev, &attr, extack); in __br_vlan_set_proto()
957 if (err && err != -EOPNOTSUPP) in __br_vlan_set_proto()
961 list_for_each_entry(p, &br->port_list, list) { in __br_vlan_set_proto()
963 list_for_each_entry(vlan, &vg->vlan_list, vlist) { in __br_vlan_set_proto()
964 if (vlan->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV) in __br_vlan_set_proto()
966 err = vlan_vid_add(p->dev, proto, vlan->vid); in __br_vlan_set_proto()
972 br->vlan_proto = proto; in __br_vlan_set_proto()
978 list_for_each_entry(p, &br->port_list, list) { in __br_vlan_set_proto()
980 list_for_each_entry(vlan, &vg->vlan_list, vlist) { in __br_vlan_set_proto()
981 if (vlan->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV) in __br_vlan_set_proto()
983 vlan_vid_del(p->dev, oldproto, vlan->vid); in __br_vlan_set_proto()
991 switchdev_port_attr_set(br->dev, &attr, NULL); in __br_vlan_set_proto()
993 list_for_each_entry_continue_reverse(vlan, &vg->vlan_list, vlist) { in __br_vlan_set_proto()
994 if (vlan->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV) in __br_vlan_set_proto()
996 vlan_vid_del(p->dev, proto, vlan->vid); in __br_vlan_set_proto()
999 list_for_each_entry_continue_reverse(p, &br->port_list, list) { in __br_vlan_set_proto()
1001 list_for_each_entry(vlan, &vg->vlan_list, vlist) { in __br_vlan_set_proto()
1002 if (vlan->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV) in __br_vlan_set_proto()
1004 vlan_vid_del(p->dev, proto, vlan->vid); in __br_vlan_set_proto()
1015 return -EPROTONOSUPPORT; in br_vlan_set_proto()
1028 return -EINVAL; in br_vlan_set_stats()
1039 list_for_each_entry(p, &br->port_list, list) { in br_vlan_set_stats_per_port()
1042 if (vg->num_vlans) in br_vlan_set_stats_per_port()
1043 return -EBUSY; in br_vlan_set_stats_per_port()
1052 return -EINVAL; in br_vlan_set_stats_per_port()
1062 if (vid != vg->pvid) in vlan_default_pvid()
1065 v = br_vlan_lookup(&vg->vlan_hash, vid); in vlan_default_pvid()
1067 (v->flags & BRIDGE_VLAN_INFO_UNTAGGED)) in vlan_default_pvid()
1076 u16 pvid = br->default_pvid; in br_vlan_disable_default_pvid()
1086 list_for_each_entry(p, &br->port_list, list) { in br_vlan_disable_default_pvid()
1092 br->default_pvid = 0; in br_vlan_disable_default_pvid()
1113 return -ENOMEM; in __br_vlan_set_default_pvid()
1115 old_pvid = br->default_pvid; in __br_vlan_set_default_pvid()
1138 list_for_each_entry(p, &br->port_list, list) { in __br_vlan_set_default_pvid()
1156 br_vlan_notify(p->br, p, pvid, 0, RTM_NEWVLAN); in __br_vlan_set_default_pvid()
1157 __set_bit(p->port_no, changed); in __br_vlan_set_default_pvid()
1160 br->default_pvid = pvid; in __br_vlan_set_default_pvid()
1167 list_for_each_entry_continue_reverse(p, &br->port_list, list) { in __br_vlan_set_default_pvid()
1168 if (!test_bit(p->port_no, changed)) in __br_vlan_set_default_pvid()
1176 br_vlan_notify(p->br, p, old_pvid, 0, RTM_NEWVLAN); in __br_vlan_set_default_pvid()
1204 return -EINVAL; in br_vlan_set_default_pvid()
1206 if (pvid == br->default_pvid) in br_vlan_set_default_pvid()
1212 err = -EPERM; in br_vlan_set_default_pvid()
1223 int ret = -ENOMEM; in br_vlan_init()
1228 ret = rhashtable_init(&vg->vlan_hash, &br_vlan_rht_params); in br_vlan_init()
1234 INIT_LIST_HEAD(&vg->vlan_list); in br_vlan_init()
1235 br->vlan_proto = htons(ETH_P_8021Q); in br_vlan_init()
1236 br->default_pvid = 1; in br_vlan_init()
1237 rcu_assign_pointer(br->vlgrp, vg); in br_vlan_init()
1243 rhashtable_destroy(&vg->vlan_hash); in br_vlan_init()
1253 .orig_dev = p->br->dev, in nbp_vlan_init()
1256 .u.vlan_filtering = br_opt_get(p->br, BROPT_VLAN_ENABLED), in nbp_vlan_init()
1259 int ret = -ENOMEM; in nbp_vlan_init()
1265 ret = switchdev_port_attr_set(p->dev, &attr, extack); in nbp_vlan_init()
1266 if (ret && ret != -EOPNOTSUPP) in nbp_vlan_init()
1269 ret = rhashtable_init(&vg->vlan_hash, &br_vlan_rht_params); in nbp_vlan_init()
1275 INIT_LIST_HEAD(&vg->vlan_list); in nbp_vlan_init()
1276 rcu_assign_pointer(p->vlgrp, vg); in nbp_vlan_init()
1277 if (p->br->default_pvid) { in nbp_vlan_init()
1280 ret = nbp_vlan_add(p, p->br->default_pvid, in nbp_vlan_init()
1286 br_vlan_notify(p->br, p, p->br->default_pvid, 0, RTM_NEWVLAN); in nbp_vlan_init()
1292 RCU_INIT_POINTER(p->vlgrp, NULL); in nbp_vlan_init()
1296 rhashtable_destroy(&vg->vlan_hash); in nbp_vlan_init()
1323 ret = br_switchdev_port_vlan_add(port->dev, vid, flags, in nbp_vlan_add()
1325 if (ret && ret != -EOPNOTSUPP) in nbp_vlan_add()
1337 return -ENOMEM; in nbp_vlan_add()
1339 vlan->vid = vid; in nbp_vlan_add()
1340 vlan->port = port; in nbp_vlan_add()
1361 return -ENOENT; in nbp_vlan_delete()
1362 br_fdb_find_delete_local(port->br, port, port->dev->dev_addr, vid); in nbp_vlan_delete()
1363 br_fdb_delete_by_port(port->br, port, vid, 0); in nbp_vlan_delete()
1375 __vlan_flush(port->br, port, vg); in nbp_vlan_flush()
1376 RCU_INIT_POINTER(port->vlgrp, NULL); in nbp_vlan_flush()
1382 struct pcpu_sw_netstats *stats) in br_vlan_get_stats() argument
1386 memset(stats, 0, sizeof(*stats)); in br_vlan_get_stats()
1392 cpu_stats = per_cpu_ptr(v->stats, i); in br_vlan_get_stats()
1394 start = u64_stats_fetch_begin(&cpu_stats->syncp); in br_vlan_get_stats()
1395 rxpackets = u64_stats_read(&cpu_stats->rx_packets); in br_vlan_get_stats()
1396 rxbytes = u64_stats_read(&cpu_stats->rx_bytes); in br_vlan_get_stats()
1397 txbytes = u64_stats_read(&cpu_stats->tx_bytes); in br_vlan_get_stats()
1398 txpackets = u64_stats_read(&cpu_stats->tx_packets); in br_vlan_get_stats()
1399 } while (u64_stats_fetch_retry(&cpu_stats->syncp, start)); in br_vlan_get_stats()
1401 u64_stats_add(&stats->rx_packets, rxpackets); in br_vlan_get_stats()
1402 u64_stats_add(&stats->rx_bytes, rxbytes); in br_vlan_get_stats()
1403 u64_stats_add(&stats->tx_bytes, txbytes); in br_vlan_get_stats()
1404 u64_stats_add(&stats->tx_packets, txpackets); in br_vlan_get_stats()
1420 return -EINVAL; in br_vlan_get_pvid()
1438 return -EINVAL; in br_vlan_get_pvid_rcu()
1450 int idx = ctx->num_vlans - 1; in br_vlan_fill_forward_path_pvid()
1453 path->bridge.vlan_mode = DEV_PATH_BR_VLAN_KEEP; in br_vlan_fill_forward_path_pvid()
1461 ctx->vlan[idx].proto == br->vlan_proto) { in br_vlan_fill_forward_path_pvid()
1462 vid = ctx->vlan[idx].id; in br_vlan_fill_forward_path_pvid()
1464 path->bridge.vlan_mode = DEV_PATH_BR_VLAN_TAG; in br_vlan_fill_forward_path_pvid()
1468 path->bridge.vlan_id = vid; in br_vlan_fill_forward_path_pvid()
1469 path->bridge.vlan_proto = br->vlan_proto; in br_vlan_fill_forward_path_pvid()
1483 v = br_vlan_find(vg, path->bridge.vlan_id); in br_vlan_fill_forward_path_mode()
1485 return -EINVAL; in br_vlan_fill_forward_path_mode()
1487 if (!(v->flags & BRIDGE_VLAN_INFO_UNTAGGED)) in br_vlan_fill_forward_path_mode()
1490 if (path->bridge.vlan_mode == DEV_PATH_BR_VLAN_TAG) in br_vlan_fill_forward_path_mode()
1491 path->bridge.vlan_mode = DEV_PATH_BR_VLAN_KEEP; in br_vlan_fill_forward_path_mode()
1492 else if (v->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV) in br_vlan_fill_forward_path_mode()
1493 path->bridge.vlan_mode = DEV_PATH_BR_VLAN_UNTAG_HW; in br_vlan_fill_forward_path_mode()
1495 path->bridge.vlan_mode = DEV_PATH_BR_VLAN_UNTAG; in br_vlan_fill_forward_path_mode()
1514 return -EINVAL; in br_vlan_get_info()
1518 return -ENOENT; in br_vlan_get_info()
1520 p_vinfo->vid = vid; in br_vlan_get_info()
1521 p_vinfo->flags = v->flags; in br_vlan_get_info()
1523 p_vinfo->flags |= BRIDGE_VLAN_INFO_PVID; in br_vlan_get_info()
1541 return -EINVAL; in br_vlan_get_info_rcu()
1545 return -ENOENT; in br_vlan_get_info_rcu()
1547 p_vinfo->vid = vid; in br_vlan_get_info_rcu()
1548 p_vinfo->flags = v->flags; in br_vlan_get_info_rcu()
1550 p_vinfo->flags |= BRIDGE_VLAN_INFO_PVID; in br_vlan_get_info_rcu()
1558 !!(vlan_dev_priv(dev)->flags & VLAN_FLAG_BRIDGE_BINDING); in br_vlan_is_bind_vlan_dev()
1587 struct br_vlan_bind_walk_data *data = priv->data; in br_vlan_match_bind_vlan_dev_fn()
1591 vlan_dev_priv(dev)->vlan_id == data->vid) { in br_vlan_match_bind_vlan_dev_fn()
1592 data->result = dev; in br_vlan_match_bind_vlan_dev_fn()
1619 return !!(dev->flags & IFF_UP) && netif_oper_up(dev); in br_vlan_is_dev_up()
1625 u16 vid = vlan_dev_priv(vlan_dev)->vlan_id; in br_vlan_set_vlan_dev_state()
1630 if (!netif_carrier_ok(br->dev)) { in br_vlan_set_vlan_dev_state()
1635 list_for_each_entry(p, &br->port_list, list) { in br_vlan_set_vlan_dev_state()
1637 if (br_vlan_find(vg, vid) && br_vlan_is_dev_up(p->dev)) { in br_vlan_set_vlan_dev_state()
1655 list_for_each_entry(vlan, &vg->vlan_list, vlist) { in br_vlan_set_all_vlan_dev_state()
1656 vlan_dev = br_vlan_get_upper_bind_vlan_dev(p->br->dev, in br_vlan_set_all_vlan_dev_state()
1657 vlan->vid); in br_vlan_set_all_vlan_dev_state()
1659 if (br_vlan_is_dev_up(p->dev)) { in br_vlan_set_all_vlan_dev_state()
1660 if (netif_carrier_ok(p->br->dev)) in br_vlan_set_all_vlan_dev_state()
1663 br_vlan_set_vlan_dev_state(p->br, vlan_dev); in br_vlan_set_all_vlan_dev_state()
1702 struct br_vlan_link_state_walk_data *data = priv->data; in br_vlan_link_state_change_fn()
1705 br_vlan_set_vlan_dev_state(data->br, vlan_dev); in br_vlan_link_state_change_fn()
1731 if (!br_opt_get(p->br, BROPT_VLAN_BRIDGE_BINDING)) in nbp_vlan_set_vlan_dev_state()
1734 vlan_dev = br_vlan_get_upper_bind_vlan_dev(p->br->dev, vid); in nbp_vlan_set_vlan_dev_state()
1736 br_vlan_set_vlan_dev_state(p->br, vlan_dev); in nbp_vlan_set_vlan_dev_state()
1749 ret = br_vlan_add(br, br->default_pvid, in br_vlan_bridge_event()
1756 changed = !br_vlan_delete(br, br->default_pvid); in br_vlan_bridge_event()
1761 br_vlan_upper_change(dev, info->upper_dev, info->linking); in br_vlan_bridge_event()
1772 br_vlan_notify(br, NULL, br->default_pvid, 0, vlcmd); in br_vlan_bridge_event()
1793 bridge_binding = vlan->flags & VLAN_FLAG_BRIDGE_BINDING; in br_vlan_vlan_upper_event()
1804 if (!br_opt_get(p->br, BROPT_VLAN_BRIDGE_BINDING)) in br_vlan_port_event()
1819 struct pcpu_sw_netstats stats; in br_vlan_stats_fill() local
1826 br_vlan_get_stats(v, &stats); in br_vlan_stats_fill()
1828 u64_stats_read(&stats.rx_bytes), in br_vlan_stats_fill()
1831 u64_stats_read(&stats.rx_packets), in br_vlan_stats_fill()
1834 u64_stats_read(&stats.tx_bytes), in br_vlan_stats_fill()
1837 u64_stats_read(&stats.tx_packets), in br_vlan_stats_fill()
1915 int err = -ENOBUFS; in br_vlan_notify()
1924 ifindex = p->dev->ifindex; in br_vlan_notify()
1926 net = dev_net(p->dev); in br_vlan_notify()
1928 ifindex = br->dev->ifindex; in br_vlan_notify()
1930 net = dev_net(br->dev); in br_vlan_notify()
1937 err = -EMSGSIZE; in br_vlan_notify()
1943 bvm->family = AF_BRIDGE; in br_vlan_notify()
1944 bvm->ifindex = ifindex; in br_vlan_notify()
1953 flags = v->flags; in br_vlan_notify()
1954 if (br_get_pvid(vg) == v->vid) in br_vlan_notify()
1980 return v_curr->vid - range_end->vid == 1 && in br_vlan_can_enter_range()
1981 range_end->flags == v_curr->flags && in br_vlan_can_enter_range()
1994 int idx = 0, s_idx = cb->args[1]; in br_vlan_dump_dev()
2003 return -EINVAL; in br_vlan_dump_dev()
2016 return -EINVAL; in br_vlan_dump_dev()
2018 br = p->br; in br_vlan_dump_dev()
2024 nlh = nlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq, in br_vlan_dump_dev()
2027 return -EMSGSIZE; in br_vlan_dump_dev()
2030 bvm->family = PF_BRIDGE; in br_vlan_dump_dev()
2031 bvm->ifindex = dev->ifindex; in br_vlan_dump_dev()
2035 list_for_each_entry_rcu(v, &vg->vlan_list, vlist) { in br_vlan_dump_dev()
2052 if (!br_vlan_global_opts_fill(skb, range_start->vid, in br_vlan_dump_dev()
2053 range_end->vid, in br_vlan_dump_dev()
2055 err = -EMSGSIZE; in br_vlan_dump_dev()
2059 idx += range_end->vid - range_start->vid + 1; in br_vlan_dump_dev()
2062 } else if (dump_stats || v->vid == pvid || in br_vlan_dump_dev()
2066 if (!br_vlan_fill_vids(skb, range_start->vid, in br_vlan_dump_dev()
2067 range_end->vid, range_start, in br_vlan_dump_dev()
2069 err = -EMSGSIZE; in br_vlan_dump_dev()
2073 idx += range_end->vid - range_start->vid + 1; in br_vlan_dump_dev()
2082 * - first vlan (range_start == range_end) in br_vlan_dump_dev()
2083 * - last vlan (range_start == range_end, not in range) in br_vlan_dump_dev()
2084 * - last vlan range (range_start != range_end, in range) in br_vlan_dump_dev()
2088 !br_vlan_global_opts_fill(skb, range_start->vid, in br_vlan_dump_dev()
2089 range_end->vid, range_start)) in br_vlan_dump_dev()
2090 err = -EMSGSIZE; in br_vlan_dump_dev()
2092 !br_vlan_fill_vids(skb, range_start->vid, in br_vlan_dump_dev()
2093 range_end->vid, range_start, in br_vlan_dump_dev()
2096 err = -EMSGSIZE; in br_vlan_dump_dev()
2099 cb->args[1] = err ? idx : 0; in br_vlan_dump_dev()
2113 int idx = 0, err = 0, s_idx = cb->args[0]; in br_vlan_rtm_dump()
2114 struct net *net = sock_net(skb->sk); in br_vlan_rtm_dump()
2119 err = nlmsg_parse(cb->nlh, sizeof(*bvm), dtb, BRIDGE_VLANDB_DUMP_MAX, in br_vlan_rtm_dump()
2120 br_vlan_db_dump_pol, cb->extack); in br_vlan_rtm_dump()
2124 bvm = nlmsg_data(cb->nlh); in br_vlan_rtm_dump()
2129 if (bvm->ifindex) { in br_vlan_rtm_dump()
2130 dev = dev_get_by_index_rcu(net, bvm->ifindex); in br_vlan_rtm_dump()
2132 err = -ENODEV; in br_vlan_rtm_dump()
2137 if (err != -EMSGSIZE) in br_vlan_rtm_dump()
2145 if (err == -EMSGSIZE) in br_vlan_rtm_dump()
2151 cb->args[0] = idx; in br_vlan_rtm_dump()
2154 return skb->len; in br_vlan_rtm_dump()
2192 return -ENODEV; in br_vlan_rtm_process_one()
2193 br = p->br; in br_vlan_rtm_process_one()
2198 return -ENODEV; in br_vlan_rtm_process_one()
2207 return -EINVAL; in br_vlan_rtm_process_one()
2212 if (vinfo->flags & (BRIDGE_VLAN_INFO_RANGE_BEGIN | in br_vlan_rtm_process_one()
2214 NL_SET_ERR_MSG_MOD(extack, "Old-style vlan ranges are not allowed when using RTM vlan calls"); in br_vlan_rtm_process_one()
2215 return -EINVAL; in br_vlan_rtm_process_one()
2217 if (!br_vlan_valid_id(vinfo->vid, extack)) in br_vlan_rtm_process_one()
2218 return -EINVAL; in br_vlan_rtm_process_one()
2222 /* validate user-provided flags without RANGE_BEGIN */ in br_vlan_rtm_process_one()
2223 vrange_end.flags = BRIDGE_VLAN_INFO_RANGE_END | vinfo->flags; in br_vlan_rtm_process_one()
2224 vinfo->flags |= BRIDGE_VLAN_INFO_RANGE_BEGIN; in br_vlan_rtm_process_one()
2230 if (!br_vlan_valid_id(vinfo->vid, extack) || in br_vlan_rtm_process_one()
2232 return -EINVAL; in br_vlan_rtm_process_one()
2238 skip_processing = !!(vinfo->flags & BRIDGE_VLAN_INFO_ONLY_OPTS); in br_vlan_rtm_process_one()
2265 range_start = br_vlan_find(vg, vinfo_last->vid); in br_vlan_rtm_process_one()
2266 range_end = br_vlan_find(vg, vinfo->vid); in br_vlan_rtm_process_one()
2268 range_start = br_vlan_find(vg, vinfo->vid); in br_vlan_rtm_process_one()
2282 struct net *net = sock_net(skb->sk); in br_vlan_rtm_process()
2296 dev = __dev_get_by_index(net, bvm->ifindex); in br_vlan_rtm_process()
2298 return -ENODEV; in br_vlan_rtm_process()
2302 return -EINVAL; in br_vlan_rtm_process()
2309 nlh->nlmsg_type, in br_vlan_rtm_process()
2314 nlh->nlmsg_type, in br_vlan_rtm_process()
2327 err = -EINVAL; in br_vlan_rtm_process()