xref: /linux/net/bridge/br_vlan.c (revision 07fdad3a93756b872da7b53647715c48d0f4a2d0)
1 // SPDX-License-Identifier: GPL-2.0-only
2 #include <linux/kernel.h>
3 #include <linux/netdevice.h>
4 #include <linux/rtnetlink.h>
5 #include <linux/slab.h>
6 #include <net/switchdev.h>
7 
8 #include "br_private.h"
9 #include "br_private_tunnel.h"
10 
11 static void nbp_vlan_set_vlan_dev_state(struct net_bridge_port *p, u16 vid);
12 
13 static inline int br_vlan_cmp(struct rhashtable_compare_arg *arg,
14 			      const void *ptr)
15 {
16 	const struct net_bridge_vlan *vle = ptr;
17 	u16 vid = *(u16 *)arg->key;
18 
19 	return vle->vid != vid;
20 }
21 
22 static const struct rhashtable_params br_vlan_rht_params = {
23 	.head_offset = offsetof(struct net_bridge_vlan, vnode),
24 	.key_offset = offsetof(struct net_bridge_vlan, vid),
25 	.key_len = sizeof(u16),
26 	.nelem_hint = 3,
27 	.max_size = VLAN_N_VID,
28 	.obj_cmpfn = br_vlan_cmp,
29 	.automatic_shrinking = true,
30 };
31 
32 static struct net_bridge_vlan *br_vlan_lookup(struct rhashtable *tbl, u16 vid)
33 {
34 	return rhashtable_lookup_fast(tbl, &vid, br_vlan_rht_params);
35 }
36 
37 static void __vlan_add_pvid(struct net_bridge_vlan_group *vg,
38 			    const struct net_bridge_vlan *v)
39 {
40 	if (vg->pvid == v->vid)
41 		return;
42 
43 	smp_wmb();
44 	br_vlan_set_pvid_state(vg, v->state);
45 	vg->pvid = v->vid;
46 }
47 
48 static void __vlan_delete_pvid(struct net_bridge_vlan_group *vg, u16 vid)
49 {
50 	if (vg->pvid != vid)
51 		return;
52 
53 	smp_wmb();
54 	vg->pvid = 0;
55 }
56 
57 /* Update the BRIDGE_VLAN_INFO_PVID and BRIDGE_VLAN_INFO_UNTAGGED flags of @v.
58  * If @commit is false, return just whether the BRIDGE_VLAN_INFO_PVID and
59  * BRIDGE_VLAN_INFO_UNTAGGED bits of @flags would produce any change onto @v.
60  */
61 static bool __vlan_flags_update(struct net_bridge_vlan *v, u16 flags,
62 				bool commit)
63 {
64 	struct net_bridge_vlan_group *vg;
65 	bool change;
66 
67 	if (br_vlan_is_master(v))
68 		vg = br_vlan_group(v->br);
69 	else
70 		vg = nbp_vlan_group(v->port);
71 
72 	/* check if anything would be changed on commit */
73 	change = !!(flags & BRIDGE_VLAN_INFO_PVID) == !!(vg->pvid != v->vid) ||
74 		 ((flags ^ v->flags) & BRIDGE_VLAN_INFO_UNTAGGED);
75 
76 	if (!commit)
77 		goto out;
78 
79 	if (flags & BRIDGE_VLAN_INFO_PVID)
80 		__vlan_add_pvid(vg, v);
81 	else
82 		__vlan_delete_pvid(vg, v->vid);
83 
84 	if (flags & BRIDGE_VLAN_INFO_UNTAGGED)
85 		v->flags |= BRIDGE_VLAN_INFO_UNTAGGED;
86 	else
87 		v->flags &= ~BRIDGE_VLAN_INFO_UNTAGGED;
88 
89 out:
90 	return change;
91 }
92 
93 static bool __vlan_flags_would_change(struct net_bridge_vlan *v, u16 flags)
94 {
95 	return __vlan_flags_update(v, flags, false);
96 }
97 
98 static void __vlan_flags_commit(struct net_bridge_vlan *v, u16 flags)
99 {
100 	__vlan_flags_update(v, flags, true);
101 }
102 
103 static int __vlan_vid_add(struct net_device *dev, struct net_bridge *br,
104 			  struct net_bridge_vlan *v, u16 flags,
105 			  struct netlink_ext_ack *extack)
106 {
107 	int err;
108 
109 	/* Try switchdev op first. In case it is not supported, fallback to
110 	 * 8021q add.
111 	 */
112 	err = br_switchdev_port_vlan_add(dev, v->vid, flags, false, extack);
113 	if (err == -EOPNOTSUPP)
114 		return vlan_vid_add(dev, br->vlan_proto, v->vid);
115 	v->priv_flags |= BR_VLFLAG_ADDED_BY_SWITCHDEV;
116 	return err;
117 }
118 
119 static void __vlan_add_list(struct net_bridge_vlan *v)
120 {
121 	struct net_bridge_vlan_group *vg;
122 	struct list_head *headp, *hpos;
123 	struct net_bridge_vlan *vent;
124 
125 	if (br_vlan_is_master(v))
126 		vg = br_vlan_group(v->br);
127 	else
128 		vg = nbp_vlan_group(v->port);
129 
130 	headp = &vg->vlan_list;
131 	list_for_each_prev(hpos, headp) {
132 		vent = list_entry(hpos, struct net_bridge_vlan, vlist);
133 		if (v->vid >= vent->vid)
134 			break;
135 	}
136 	list_add_rcu(&v->vlist, hpos);
137 }
138 
139 static void __vlan_del_list(struct net_bridge_vlan *v)
140 {
141 	list_del_rcu(&v->vlist);
142 }
143 
144 static int __vlan_vid_del(struct net_device *dev, struct net_bridge *br,
145 			  const struct net_bridge_vlan *v)
146 {
147 	int err;
148 
149 	/* Try switchdev op first. In case it is not supported, fallback to
150 	 * 8021q del.
151 	 */
152 	err = br_switchdev_port_vlan_del(dev, v->vid);
153 	if (!(v->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV))
154 		vlan_vid_del(dev, br->vlan_proto, v->vid);
155 	return err == -EOPNOTSUPP ? 0 : err;
156 }
157 
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.
160  */
161 static struct net_bridge_vlan *
162 br_vlan_get_master(struct net_bridge *br, u16 vid,
163 		   struct netlink_ext_ack *extack)
164 {
165 	struct net_bridge_vlan_group *vg;
166 	struct net_bridge_vlan *masterv;
167 
168 	vg = br_vlan_group(br);
169 	masterv = br_vlan_find(vg, vid);
170 	if (!masterv) {
171 		bool changed;
172 
173 		/* missing global ctx, create it now */
174 		if (br_vlan_add(br, vid, 0, &changed, extack))
175 			return NULL;
176 		masterv = br_vlan_find(vg, vid);
177 		if (WARN_ON(!masterv))
178 			return NULL;
179 		refcount_set(&masterv->refcnt, 1);
180 		return masterv;
181 	}
182 	refcount_inc(&masterv->refcnt);
183 
184 	return masterv;
185 }
186 
187 static void br_master_vlan_rcu_free(struct rcu_head *rcu)
188 {
189 	struct net_bridge_vlan *v;
190 
191 	v = container_of(rcu, struct net_bridge_vlan, rcu);
192 	WARN_ON(!br_vlan_is_master(v));
193 	free_percpu(v->stats);
194 	v->stats = NULL;
195 	kfree(v);
196 }
197 
198 static void br_vlan_put_master(struct net_bridge_vlan *masterv)
199 {
200 	struct net_bridge_vlan_group *vg;
201 
202 	if (!br_vlan_is_master(masterv))
203 		return;
204 
205 	vg = br_vlan_group(masterv->br);
206 	if (refcount_dec_and_test(&masterv->refcnt)) {
207 		rhashtable_remove_fast(&vg->vlan_hash,
208 				       &masterv->vnode, br_vlan_rht_params);
209 		__vlan_del_list(masterv);
210 		br_multicast_toggle_one_vlan(masterv, false);
211 		br_multicast_ctx_deinit(&masterv->br_mcast_ctx);
212 		call_rcu(&masterv->rcu, br_master_vlan_rcu_free);
213 	}
214 }
215 
216 static void nbp_vlan_rcu_free(struct rcu_head *rcu)
217 {
218 	struct net_bridge_vlan *v;
219 
220 	v = container_of(rcu, struct net_bridge_vlan, rcu);
221 	WARN_ON(br_vlan_is_master(v));
222 	/* if we had per-port stats configured then free them here */
223 	if (v->priv_flags & BR_VLFLAG_PER_PORT_STATS)
224 		free_percpu(v->stats);
225 	v->stats = NULL;
226 	kfree(v);
227 }
228 
229 static void br_vlan_init_state(struct net_bridge_vlan *v)
230 {
231 	struct net_bridge *br;
232 
233 	if (br_vlan_is_master(v))
234 		br = v->br;
235 	else
236 		br = v->port->br;
237 
238 	if (br_opt_get(br, BROPT_MST_ENABLED)) {
239 		br_mst_vlan_init_state(v);
240 		return;
241 	}
242 
243 	v->state = BR_STATE_FORWARDING;
244 	v->msti = 0;
245 }
246 
247 /* This is the shared VLAN add function which works for both ports and bridge
248  * devices. There are four possible calls to this function in terms of the
249  * vlan entry type:
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)
252  * 3. vlan is being added on a port, but a global entry didn't exist which
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
256  *    will be used for filtering in both the port and the bridge
257  */
258 static int __vlan_add(struct net_bridge_vlan *v, u16 flags,
259 		      struct netlink_ext_ack *extack)
260 {
261 	struct net_bridge_vlan *masterv = NULL;
262 	struct net_bridge_port *p = NULL;
263 	struct net_bridge_vlan_group *vg;
264 	struct net_device *dev;
265 	struct net_bridge *br;
266 	int err;
267 
268 	if (br_vlan_is_master(v)) {
269 		br = v->br;
270 		dev = br->dev;
271 		vg = br_vlan_group(br);
272 	} else {
273 		p = v->port;
274 		br = p->br;
275 		dev = p->dev;
276 		vg = nbp_vlan_group(p);
277 	}
278 
279 	if (p) {
280 		/* Add VLAN to the device filter if it is supported.
281 		 * This ensures tagged traffic enters the bridge when
282 		 * promiscuous mode is disabled by br_manage_promisc().
283 		 */
284 		err = __vlan_vid_add(dev, br, v, flags, extack);
285 		if (err)
286 			goto out;
287 
288 		/* need to work on the master vlan too */
289 		if (flags & BRIDGE_VLAN_INFO_MASTER) {
290 			bool changed;
291 
292 			err = br_vlan_add(br, v->vid,
293 					  flags | BRIDGE_VLAN_INFO_BRENTRY,
294 					  &changed, extack);
295 			if (err)
296 				goto out_filt;
297 
298 			if (changed)
299 				br_vlan_notify(br, NULL, v->vid, 0,
300 					       RTM_NEWVLAN);
301 		}
302 
303 		masterv = br_vlan_get_master(br, v->vid, extack);
304 		if (!masterv) {
305 			err = -ENOMEM;
306 			goto out_filt;
307 		}
308 		v->brvlan = masterv;
309 		if (br_opt_get(br, BROPT_VLAN_STATS_PER_PORT)) {
310 			v->stats =
311 			     netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
312 			if (!v->stats) {
313 				err = -ENOMEM;
314 				goto out_filt;
315 			}
316 			v->priv_flags |= BR_VLFLAG_PER_PORT_STATS;
317 		} else {
318 			v->stats = masterv->stats;
319 		}
320 		br_multicast_port_ctx_init(p, v, &v->port_mcast_ctx);
321 	} else {
322 		if (br_vlan_should_use(v)) {
323 			err = br_switchdev_port_vlan_add(dev, v->vid, flags,
324 							 false, extack);
325 			if (err && err != -EOPNOTSUPP)
326 				goto out;
327 		}
328 		br_multicast_ctx_init(br, v, &v->br_mcast_ctx);
329 		v->priv_flags |= BR_VLFLAG_GLOBAL_MCAST_ENABLED;
330 	}
331 
332 	/* Add the dev mac and count the vlan only if it's usable */
333 	if (br_vlan_should_use(v)) {
334 		if (!br_opt_get(br, BROPT_FDB_LOCAL_VLAN_0)) {
335 			err = br_fdb_add_local(br, p, dev->dev_addr, v->vid);
336 			if (err) {
337 				br_err(br, "failed insert local address into bridge forwarding table\n");
338 				goto out_filt;
339 			}
340 		}
341 		vg->num_vlans++;
342 	}
343 
344 	/* set the state before publishing */
345 	br_vlan_init_state(v);
346 
347 	err = rhashtable_lookup_insert_fast(&vg->vlan_hash, &v->vnode,
348 					    br_vlan_rht_params);
349 	if (err)
350 		goto out_fdb_insert;
351 
352 	__vlan_add_list(v);
353 	__vlan_flags_commit(v, flags);
354 	br_multicast_toggle_one_vlan(v, true);
355 
356 	if (p)
357 		nbp_vlan_set_vlan_dev_state(p, v->vid);
358 out:
359 	return err;
360 
361 out_fdb_insert:
362 	if (br_vlan_should_use(v)) {
363 		br_fdb_find_delete_local(br, p, dev->dev_addr, v->vid);
364 		vg->num_vlans--;
365 	}
366 
367 out_filt:
368 	if (p) {
369 		__vlan_vid_del(dev, br, v);
370 		if (masterv) {
371 			if (v->stats && masterv->stats != v->stats)
372 				free_percpu(v->stats);
373 			v->stats = NULL;
374 
375 			br_vlan_put_master(masterv);
376 			v->brvlan = NULL;
377 		}
378 	} else {
379 		br_switchdev_port_vlan_del(dev, v->vid);
380 	}
381 
382 	goto out;
383 }
384 
385 static int __vlan_del(struct net_bridge_vlan *v)
386 {
387 	struct net_bridge_vlan *masterv = v;
388 	struct net_bridge_vlan_group *vg;
389 	struct net_bridge_port *p = NULL;
390 	int err = 0;
391 
392 	if (br_vlan_is_master(v)) {
393 		vg = br_vlan_group(v->br);
394 	} else {
395 		p = v->port;
396 		vg = nbp_vlan_group(v->port);
397 		masterv = v->brvlan;
398 	}
399 
400 	__vlan_delete_pvid(vg, v->vid);
401 	if (p) {
402 		err = __vlan_vid_del(p->dev, p->br, v);
403 		if (err)
404 			goto out;
405 	} else {
406 		err = br_switchdev_port_vlan_del(v->br->dev, v->vid);
407 		if (err && err != -EOPNOTSUPP)
408 			goto out;
409 		err = 0;
410 	}
411 
412 	if (br_vlan_should_use(v)) {
413 		v->flags &= ~BRIDGE_VLAN_INFO_BRENTRY;
414 		vg->num_vlans--;
415 	}
416 
417 	if (masterv != v) {
418 		vlan_tunnel_info_del(vg, v);
419 		rhashtable_remove_fast(&vg->vlan_hash, &v->vnode,
420 				       br_vlan_rht_params);
421 		__vlan_del_list(v);
422 		nbp_vlan_set_vlan_dev_state(p, v->vid);
423 		br_multicast_toggle_one_vlan(v, false);
424 		br_multicast_port_ctx_deinit(&v->port_mcast_ctx);
425 		call_rcu(&v->rcu, nbp_vlan_rcu_free);
426 	}
427 
428 	br_vlan_put_master(masterv);
429 out:
430 	return err;
431 }
432 
433 static void __vlan_group_free(struct net_bridge_vlan_group *vg)
434 {
435 	WARN_ON(!list_empty(&vg->vlan_list));
436 	rhashtable_destroy(&vg->vlan_hash);
437 	vlan_tunnel_deinit(vg);
438 	kfree(vg);
439 }
440 
441 static void __vlan_flush(const struct net_bridge *br,
442 			 const struct net_bridge_port *p,
443 			 struct net_bridge_vlan_group *vg)
444 {
445 	struct net_bridge_vlan *vlan, *tmp;
446 	u16 v_start = 0, v_end = 0;
447 	int err;
448 
449 	__vlan_delete_pvid(vg, vg->pvid);
450 	list_for_each_entry_safe(vlan, tmp, &vg->vlan_list, vlist) {
451 		/* take care of disjoint ranges */
452 		if (!v_start) {
453 			v_start = vlan->vid;
454 		} else if (vlan->vid - v_end != 1) {
455 			/* found range end, notify and start next one */
456 			br_vlan_notify(br, p, v_start, v_end, RTM_DELVLAN);
457 			v_start = vlan->vid;
458 		}
459 		v_end = vlan->vid;
460 
461 		err = __vlan_del(vlan);
462 		if (err) {
463 			br_err(br,
464 			       "port %u(%s) failed to delete vlan %d: %pe\n",
465 			       (unsigned int) p->port_no, p->dev->name,
466 			       vlan->vid, ERR_PTR(err));
467 		}
468 	}
469 
470 	/* notify about the last/whole vlan range */
471 	if (v_start)
472 		br_vlan_notify(br, p, v_start, v_end, RTM_DELVLAN);
473 }
474 
475 struct sk_buff *br_handle_vlan(struct net_bridge *br,
476 			       const struct net_bridge_port *p,
477 			       struct net_bridge_vlan_group *vg,
478 			       struct sk_buff *skb)
479 {
480 	struct pcpu_sw_netstats *stats;
481 	struct net_bridge_vlan *v;
482 	u16 vid;
483 
484 	/* If this packet was not filtered at input, let it pass */
485 	if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
486 		goto out;
487 
488 	/* At this point, we know that the frame was filtered and contains
489 	 * a valid vlan id.  If the vlan id has untagged flag set,
490 	 * send untagged; otherwise, send tagged.
491 	 */
492 	br_vlan_get_tag(skb, &vid);
493 	v = br_vlan_find(vg, vid);
494 	/* Vlan entry must be configured at this point.  The
495 	 * only exception is the bridge is set in promisc mode and the
496 	 * packet is destined for the bridge device.  In this case
497 	 * pass the packet as is.
498 	 */
499 	if (!v || !br_vlan_should_use(v)) {
500 		if ((br->dev->flags & IFF_PROMISC) && skb->dev == br->dev) {
501 			goto out;
502 		} else {
503 			kfree_skb(skb);
504 			return NULL;
505 		}
506 	}
507 	if (br_opt_get(br, BROPT_VLAN_STATS_ENABLED)) {
508 		stats = this_cpu_ptr(v->stats);
509 		u64_stats_update_begin(&stats->syncp);
510 		u64_stats_add(&stats->tx_bytes, skb->len);
511 		u64_stats_inc(&stats->tx_packets);
512 		u64_stats_update_end(&stats->syncp);
513 	}
514 
515 	/* If the skb will be sent using forwarding offload, the assumption is
516 	 * that the switchdev will inject the packet into hardware together
517 	 * with the bridge VLAN, so that it can be forwarded according to that
518 	 * VLAN. The switchdev should deal with popping the VLAN header in
519 	 * hardware on each egress port as appropriate. So only strip the VLAN
520 	 * header if forwarding offload is not being used.
521 	 */
522 	if (v->flags & BRIDGE_VLAN_INFO_UNTAGGED &&
523 	    !br_switchdev_frame_uses_tx_fwd_offload(skb))
524 		__vlan_hwaccel_clear_tag(skb);
525 
526 	if (p && (p->flags & BR_VLAN_TUNNEL) &&
527 	    br_handle_egress_vlan_tunnel(skb, v)) {
528 		kfree_skb(skb);
529 		return NULL;
530 	}
531 out:
532 	return skb;
533 }
534 
535 /* Called under RCU */
536 static bool __allowed_ingress(const struct net_bridge *br,
537 			      struct net_bridge_vlan_group *vg,
538 			      struct sk_buff *skb, u16 *vid,
539 			      u8 *state,
540 			      struct net_bridge_vlan **vlan)
541 {
542 	struct pcpu_sw_netstats *stats;
543 	struct net_bridge_vlan *v;
544 	bool tagged;
545 
546 	BR_INPUT_SKB_CB(skb)->vlan_filtered = true;
547 	/* If vlan tx offload is disabled on bridge device and frame was
548 	 * sent from vlan device on the bridge device, it does not have
549 	 * HW accelerated vlan tag.
550 	 */
551 	if (unlikely(!skb_vlan_tag_present(skb) &&
552 		     skb->protocol == br->vlan_proto)) {
553 		skb = skb_vlan_untag(skb);
554 		if (unlikely(!skb))
555 			return false;
556 	}
557 
558 	if (!br_vlan_get_tag(skb, vid)) {
559 		/* Tagged frame */
560 		if (skb->vlan_proto != br->vlan_proto) {
561 			/* Protocol-mismatch, empty out vlan_tci for new tag */
562 			skb_push(skb, ETH_HLEN);
563 			skb = vlan_insert_tag_set_proto(skb, skb->vlan_proto,
564 							skb_vlan_tag_get(skb));
565 			if (unlikely(!skb))
566 				return false;
567 
568 			skb_pull(skb, ETH_HLEN);
569 			skb_reset_mac_len(skb);
570 			*vid = 0;
571 			tagged = false;
572 		} else {
573 			tagged = true;
574 		}
575 	} else {
576 		/* Untagged frame */
577 		tagged = false;
578 	}
579 
580 	if (!*vid) {
581 		u16 pvid = br_get_pvid(vg);
582 
583 		/* Frame had a tag with VID 0 or did not have a tag.
584 		 * See if pvid is set on this port.  That tells us which
585 		 * vlan untagged or priority-tagged traffic belongs to.
586 		 */
587 		if (!pvid)
588 			goto drop;
589 
590 		/* PVID is set on this port.  Any untagged or priority-tagged
591 		 * ingress frame is considered to belong to this vlan.
592 		 */
593 		*vid = pvid;
594 		if (likely(!tagged))
595 			/* Untagged Frame. */
596 			__vlan_hwaccel_put_tag(skb, br->vlan_proto, pvid);
597 		else
598 			/* Priority-tagged Frame.
599 			 * At this point, we know that skb->vlan_tci VID
600 			 * field was 0.
601 			 * We update only VID field and preserve PCP field.
602 			 */
603 			skb->vlan_tci |= pvid;
604 
605 		/* if snooping and stats are disabled we can avoid the lookup */
606 		if (!br_opt_get(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED) &&
607 		    !br_opt_get(br, BROPT_VLAN_STATS_ENABLED)) {
608 			if (*state == BR_STATE_FORWARDING) {
609 				*state = br_vlan_get_pvid_state(vg);
610 				if (!br_vlan_state_allowed(*state, true))
611 					goto drop;
612 			}
613 			return true;
614 		}
615 	}
616 	v = br_vlan_find(vg, *vid);
617 	if (!v || !br_vlan_should_use(v))
618 		goto drop;
619 
620 	if (*state == BR_STATE_FORWARDING) {
621 		*state = br_vlan_get_state(v);
622 		if (!br_vlan_state_allowed(*state, true))
623 			goto drop;
624 	}
625 
626 	if (br_opt_get(br, BROPT_VLAN_STATS_ENABLED)) {
627 		stats = this_cpu_ptr(v->stats);
628 		u64_stats_update_begin(&stats->syncp);
629 		u64_stats_add(&stats->rx_bytes, skb->len);
630 		u64_stats_inc(&stats->rx_packets);
631 		u64_stats_update_end(&stats->syncp);
632 	}
633 
634 	*vlan = v;
635 
636 	return true;
637 
638 drop:
639 	kfree_skb(skb);
640 	return false;
641 }
642 
643 bool br_allowed_ingress(const struct net_bridge *br,
644 			struct net_bridge_vlan_group *vg, struct sk_buff *skb,
645 			u16 *vid, u8 *state,
646 			struct net_bridge_vlan **vlan)
647 {
648 	/* If VLAN filtering is disabled on the bridge, all packets are
649 	 * permitted.
650 	 */
651 	*vlan = NULL;
652 	if (!br_opt_get(br, BROPT_VLAN_ENABLED)) {
653 		BR_INPUT_SKB_CB(skb)->vlan_filtered = false;
654 		return true;
655 	}
656 
657 	return __allowed_ingress(br, vg, skb, vid, state, vlan);
658 }
659 
660 /* Called under RCU. */
661 bool br_allowed_egress(struct net_bridge_vlan_group *vg,
662 		       const struct sk_buff *skb)
663 {
664 	const struct net_bridge_vlan *v;
665 	u16 vid;
666 
667 	/* If this packet was not filtered at input, let it pass */
668 	if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
669 		return true;
670 
671 	br_vlan_get_tag(skb, &vid);
672 	v = br_vlan_find(vg, vid);
673 	if (v && br_vlan_should_use(v) &&
674 	    br_vlan_state_allowed(br_vlan_get_state(v), false))
675 		return true;
676 
677 	return false;
678 }
679 
680 /* Called under RCU */
681 bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid)
682 {
683 	struct net_bridge_vlan_group *vg;
684 	struct net_bridge *br = p->br;
685 	struct net_bridge_vlan *v;
686 
687 	/* If filtering was disabled at input, let it pass. */
688 	if (!br_opt_get(br, BROPT_VLAN_ENABLED))
689 		return true;
690 
691 	vg = nbp_vlan_group_rcu(p);
692 	if (!vg || !vg->num_vlans)
693 		return false;
694 
695 	if (!br_vlan_get_tag(skb, vid) && skb->vlan_proto != br->vlan_proto)
696 		*vid = 0;
697 
698 	if (!*vid) {
699 		*vid = br_get_pvid(vg);
700 		if (!*vid ||
701 		    !br_vlan_state_allowed(br_vlan_get_pvid_state(vg), true))
702 			return false;
703 
704 		return true;
705 	}
706 
707 	v = br_vlan_find(vg, *vid);
708 	if (v && br_vlan_state_allowed(br_vlan_get_state(v), true))
709 		return true;
710 
711 	return false;
712 }
713 
714 static int br_vlan_add_existing(struct net_bridge *br,
715 				struct net_bridge_vlan_group *vg,
716 				struct net_bridge_vlan *vlan,
717 				u16 flags, bool *changed,
718 				struct netlink_ext_ack *extack)
719 {
720 	bool becomes_brentry = false;
721 	bool would_change = false;
722 	int err;
723 
724 	if (!br_vlan_is_brentry(vlan)) {
725 		/* Trying to change flags of non-existent bridge vlan */
726 		if (!(flags & BRIDGE_VLAN_INFO_BRENTRY))
727 			return -EINVAL;
728 
729 		becomes_brentry = true;
730 	} else {
731 		would_change = __vlan_flags_would_change(vlan, flags);
732 	}
733 
734 	/* Master VLANs that aren't brentries weren't notified before,
735 	 * time to notify them now.
736 	 */
737 	if (becomes_brentry || would_change) {
738 		err = br_switchdev_port_vlan_add(br->dev, vlan->vid, flags,
739 						 would_change, extack);
740 		if (err && err != -EOPNOTSUPP)
741 			return err;
742 	}
743 
744 	if (becomes_brentry) {
745 		/* It was only kept for port vlans, now make it real */
746 		err = br_fdb_add_local(br, NULL, br->dev->dev_addr, vlan->vid);
747 		if (err) {
748 			br_err(br, "failed to insert local address into bridge forwarding table\n");
749 			goto err_fdb_insert;
750 		}
751 
752 		refcount_inc(&vlan->refcnt);
753 		vlan->flags |= BRIDGE_VLAN_INFO_BRENTRY;
754 		vg->num_vlans++;
755 		*changed = true;
756 		br_multicast_toggle_one_vlan(vlan, true);
757 	}
758 
759 	__vlan_flags_commit(vlan, flags);
760 	if (would_change)
761 		*changed = true;
762 
763 	return 0;
764 
765 err_fdb_insert:
766 	br_switchdev_port_vlan_del(br->dev, vlan->vid);
767 	return err;
768 }
769 
770 /* Must be protected by RTNL.
771  * Must be called with vid in range from 1 to 4094 inclusive.
772  * changed must be true only if the vlan was created or updated
773  */
774 int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags, bool *changed,
775 		struct netlink_ext_ack *extack)
776 {
777 	struct net_bridge_vlan_group *vg;
778 	struct net_bridge_vlan *vlan;
779 	int ret;
780 
781 	ASSERT_RTNL();
782 
783 	*changed = false;
784 	vg = br_vlan_group(br);
785 	vlan = br_vlan_find(vg, vid);
786 	if (vlan)
787 		return br_vlan_add_existing(br, vg, vlan, flags, changed,
788 					    extack);
789 
790 	vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
791 	if (!vlan)
792 		return -ENOMEM;
793 
794 	vlan->stats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
795 	if (!vlan->stats) {
796 		kfree(vlan);
797 		return -ENOMEM;
798 	}
799 	vlan->vid = vid;
800 	vlan->flags = flags | BRIDGE_VLAN_INFO_MASTER;
801 	vlan->flags &= ~BRIDGE_VLAN_INFO_PVID;
802 	vlan->br = br;
803 	if (flags & BRIDGE_VLAN_INFO_BRENTRY)
804 		refcount_set(&vlan->refcnt, 1);
805 	ret = __vlan_add(vlan, flags, extack);
806 	if (ret) {
807 		free_percpu(vlan->stats);
808 		kfree(vlan);
809 	} else {
810 		*changed = true;
811 	}
812 
813 	return ret;
814 }
815 
816 /* Must be protected by RTNL.
817  * Must be called with vid in range from 1 to 4094 inclusive.
818  */
819 int br_vlan_delete(struct net_bridge *br, u16 vid)
820 {
821 	struct net_bridge_vlan_group *vg;
822 	struct net_bridge_vlan *v;
823 
824 	ASSERT_RTNL();
825 
826 	vg = br_vlan_group(br);
827 	v = br_vlan_find(vg, vid);
828 	if (!v || !br_vlan_is_brentry(v))
829 		return -ENOENT;
830 
831 	br_fdb_find_delete_local(br, NULL, br->dev->dev_addr, vid);
832 	br_fdb_delete_by_port(br, NULL, vid, 0);
833 
834 	vlan_tunnel_info_del(vg, v);
835 
836 	return __vlan_del(v);
837 }
838 
839 void br_vlan_flush(struct net_bridge *br)
840 {
841 	struct net_bridge_vlan_group *vg;
842 
843 	ASSERT_RTNL();
844 
845 	vg = br_vlan_group(br);
846 	__vlan_flush(br, NULL, vg);
847 	RCU_INIT_POINTER(br->vlgrp, NULL);
848 	synchronize_net();
849 	__vlan_group_free(vg);
850 }
851 
852 struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg, u16 vid)
853 {
854 	if (!vg)
855 		return NULL;
856 
857 	return br_vlan_lookup(&vg->vlan_hash, vid);
858 }
859 
860 /* Must be protected by RTNL. */
861 static void recalculate_group_addr(struct net_bridge *br)
862 {
863 	if (br_opt_get(br, BROPT_GROUP_ADDR_SET))
864 		return;
865 
866 	spin_lock_bh(&br->lock);
867 	if (!br_opt_get(br, BROPT_VLAN_ENABLED) ||
868 	    br->vlan_proto == htons(ETH_P_8021Q)) {
869 		/* Bridge Group Address */
870 		br->group_addr[5] = 0x00;
871 	} else { /* vlan_enabled && ETH_P_8021AD */
872 		/* Provider Bridge Group Address */
873 		br->group_addr[5] = 0x08;
874 	}
875 	spin_unlock_bh(&br->lock);
876 }
877 
878 /* Must be protected by RTNL. */
879 void br_recalculate_fwd_mask(struct net_bridge *br)
880 {
881 	if (!br_opt_get(br, BROPT_VLAN_ENABLED) ||
882 	    br->vlan_proto == htons(ETH_P_8021Q))
883 		br->group_fwd_mask_required = BR_GROUPFWD_DEFAULT;
884 	else /* vlan_enabled && ETH_P_8021AD */
885 		br->group_fwd_mask_required = BR_GROUPFWD_8021AD &
886 					      ~(1u << br->group_addr[5]);
887 }
888 
889 int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val,
890 			  struct netlink_ext_ack *extack)
891 {
892 	struct switchdev_attr attr = {
893 		.orig_dev = br->dev,
894 		.id = SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING,
895 		.flags = SWITCHDEV_F_SKIP_EOPNOTSUPP,
896 		.u.vlan_filtering = val,
897 	};
898 	int err;
899 
900 	if (br_opt_get(br, BROPT_VLAN_ENABLED) == !!val)
901 		return 0;
902 
903 	br_opt_toggle(br, BROPT_VLAN_ENABLED, !!val);
904 
905 	err = switchdev_port_attr_set(br->dev, &attr, extack);
906 	if (err && err != -EOPNOTSUPP) {
907 		br_opt_toggle(br, BROPT_VLAN_ENABLED, !val);
908 		return err;
909 	}
910 
911 	br_manage_promisc(br);
912 	recalculate_group_addr(br);
913 	br_recalculate_fwd_mask(br);
914 	if (!val && br_opt_get(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED)) {
915 		br_info(br, "vlan filtering disabled, automatically disabling multicast vlan snooping\n");
916 		br_multicast_toggle_vlan_snooping(br, false, NULL);
917 	}
918 
919 	return 0;
920 }
921 
922 bool br_vlan_enabled(const struct net_device *dev)
923 {
924 	struct net_bridge *br = netdev_priv(dev);
925 
926 	return br_opt_get(br, BROPT_VLAN_ENABLED);
927 }
928 EXPORT_SYMBOL_GPL(br_vlan_enabled);
929 
930 int br_vlan_get_proto(const struct net_device *dev, u16 *p_proto)
931 {
932 	struct net_bridge *br = netdev_priv(dev);
933 
934 	*p_proto = ntohs(br->vlan_proto);
935 
936 	return 0;
937 }
938 EXPORT_SYMBOL_GPL(br_vlan_get_proto);
939 
940 int __br_vlan_set_proto(struct net_bridge *br, __be16 proto,
941 			struct netlink_ext_ack *extack)
942 {
943 	struct switchdev_attr attr = {
944 		.orig_dev = br->dev,
945 		.id = SWITCHDEV_ATTR_ID_BRIDGE_VLAN_PROTOCOL,
946 		.flags = SWITCHDEV_F_SKIP_EOPNOTSUPP,
947 		.u.vlan_protocol = ntohs(proto),
948 	};
949 	int err = 0;
950 	struct net_bridge_port *p;
951 	struct net_bridge_vlan *vlan;
952 	struct net_bridge_vlan_group *vg;
953 	__be16 oldproto = br->vlan_proto;
954 
955 	if (br->vlan_proto == proto)
956 		return 0;
957 
958 	err = switchdev_port_attr_set(br->dev, &attr, extack);
959 	if (err && err != -EOPNOTSUPP)
960 		return err;
961 
962 	/* Add VLANs for the new proto to the device filter. */
963 	list_for_each_entry(p, &br->port_list, list) {
964 		vg = nbp_vlan_group(p);
965 		list_for_each_entry(vlan, &vg->vlan_list, vlist) {
966 			if (vlan->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV)
967 				continue;
968 			err = vlan_vid_add(p->dev, proto, vlan->vid);
969 			if (err)
970 				goto err_filt;
971 		}
972 	}
973 
974 	br->vlan_proto = proto;
975 
976 	recalculate_group_addr(br);
977 	br_recalculate_fwd_mask(br);
978 
979 	/* Delete VLANs for the old proto from the device filter. */
980 	list_for_each_entry(p, &br->port_list, list) {
981 		vg = nbp_vlan_group(p);
982 		list_for_each_entry(vlan, &vg->vlan_list, vlist) {
983 			if (vlan->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV)
984 				continue;
985 			vlan_vid_del(p->dev, oldproto, vlan->vid);
986 		}
987 	}
988 
989 	return 0;
990 
991 err_filt:
992 	attr.u.vlan_protocol = ntohs(oldproto);
993 	switchdev_port_attr_set(br->dev, &attr, NULL);
994 
995 	list_for_each_entry_continue_reverse(vlan, &vg->vlan_list, vlist) {
996 		if (vlan->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV)
997 			continue;
998 		vlan_vid_del(p->dev, proto, vlan->vid);
999 	}
1000 
1001 	list_for_each_entry_continue_reverse(p, &br->port_list, list) {
1002 		vg = nbp_vlan_group(p);
1003 		list_for_each_entry(vlan, &vg->vlan_list, vlist) {
1004 			if (vlan->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV)
1005 				continue;
1006 			vlan_vid_del(p->dev, proto, vlan->vid);
1007 		}
1008 	}
1009 
1010 	return err;
1011 }
1012 
1013 int br_vlan_set_proto(struct net_bridge *br, unsigned long val,
1014 		      struct netlink_ext_ack *extack)
1015 {
1016 	if (!eth_type_vlan(htons(val)))
1017 		return -EPROTONOSUPPORT;
1018 
1019 	return __br_vlan_set_proto(br, htons(val), extack);
1020 }
1021 
1022 int br_vlan_set_stats(struct net_bridge *br, unsigned long val)
1023 {
1024 	switch (val) {
1025 	case 0:
1026 	case 1:
1027 		br_opt_toggle(br, BROPT_VLAN_STATS_ENABLED, !!val);
1028 		break;
1029 	default:
1030 		return -EINVAL;
1031 	}
1032 
1033 	return 0;
1034 }
1035 
1036 int br_vlan_set_stats_per_port(struct net_bridge *br, unsigned long val)
1037 {
1038 	struct net_bridge_port *p;
1039 
1040 	/* allow to change the option if there are no port vlans configured */
1041 	list_for_each_entry(p, &br->port_list, list) {
1042 		struct net_bridge_vlan_group *vg = nbp_vlan_group(p);
1043 
1044 		if (vg->num_vlans)
1045 			return -EBUSY;
1046 	}
1047 
1048 	switch (val) {
1049 	case 0:
1050 	case 1:
1051 		br_opt_toggle(br, BROPT_VLAN_STATS_PER_PORT, !!val);
1052 		break;
1053 	default:
1054 		return -EINVAL;
1055 	}
1056 
1057 	return 0;
1058 }
1059 
1060 static bool vlan_default_pvid(struct net_bridge_vlan_group *vg, u16 vid)
1061 {
1062 	struct net_bridge_vlan *v;
1063 
1064 	if (vid != vg->pvid)
1065 		return false;
1066 
1067 	v = br_vlan_lookup(&vg->vlan_hash, vid);
1068 	if (v && br_vlan_should_use(v) &&
1069 	    (v->flags & BRIDGE_VLAN_INFO_UNTAGGED))
1070 		return true;
1071 
1072 	return false;
1073 }
1074 
1075 static void br_vlan_disable_default_pvid(struct net_bridge *br)
1076 {
1077 	struct net_bridge_port *p;
1078 	u16 pvid = br->default_pvid;
1079 
1080 	/* Disable default_pvid on all ports where it is still
1081 	 * configured.
1082 	 */
1083 	if (vlan_default_pvid(br_vlan_group(br), pvid)) {
1084 		if (!br_vlan_delete(br, pvid))
1085 			br_vlan_notify(br, NULL, pvid, 0, RTM_DELVLAN);
1086 	}
1087 
1088 	list_for_each_entry(p, &br->port_list, list) {
1089 		if (vlan_default_pvid(nbp_vlan_group(p), pvid) &&
1090 		    !nbp_vlan_delete(p, pvid))
1091 			br_vlan_notify(br, p, pvid, 0, RTM_DELVLAN);
1092 	}
1093 
1094 	br->default_pvid = 0;
1095 }
1096 
1097 int __br_vlan_set_default_pvid(struct net_bridge *br, u16 pvid,
1098 			       struct netlink_ext_ack *extack)
1099 {
1100 	const struct net_bridge_vlan *pvent;
1101 	struct net_bridge_vlan_group *vg;
1102 	struct net_bridge_port *p;
1103 	unsigned long *changed;
1104 	bool vlchange;
1105 	u16 old_pvid;
1106 	int err = 0;
1107 
1108 	if (!pvid) {
1109 		br_vlan_disable_default_pvid(br);
1110 		return 0;
1111 	}
1112 
1113 	changed = bitmap_zalloc(BR_MAX_PORTS, GFP_KERNEL);
1114 	if (!changed)
1115 		return -ENOMEM;
1116 
1117 	old_pvid = br->default_pvid;
1118 
1119 	/* Update default_pvid config only if we do not conflict with
1120 	 * user configuration.
1121 	 */
1122 	vg = br_vlan_group(br);
1123 	pvent = br_vlan_find(vg, pvid);
1124 	if ((!old_pvid || vlan_default_pvid(vg, old_pvid)) &&
1125 	    (!pvent || !br_vlan_should_use(pvent))) {
1126 		err = br_vlan_add(br, pvid,
1127 				  BRIDGE_VLAN_INFO_PVID |
1128 				  BRIDGE_VLAN_INFO_UNTAGGED |
1129 				  BRIDGE_VLAN_INFO_BRENTRY,
1130 				  &vlchange, extack);
1131 		if (err)
1132 			goto out;
1133 
1134 		if (br_vlan_delete(br, old_pvid))
1135 			br_vlan_notify(br, NULL, old_pvid, 0, RTM_DELVLAN);
1136 		br_vlan_notify(br, NULL, pvid, 0, RTM_NEWVLAN);
1137 		__set_bit(0, changed);
1138 	}
1139 
1140 	list_for_each_entry(p, &br->port_list, list) {
1141 		/* Update default_pvid config only if we do not conflict with
1142 		 * user configuration.
1143 		 */
1144 		vg = nbp_vlan_group(p);
1145 		if ((old_pvid &&
1146 		     !vlan_default_pvid(vg, old_pvid)) ||
1147 		    br_vlan_find(vg, pvid))
1148 			continue;
1149 
1150 		err = nbp_vlan_add(p, pvid,
1151 				   BRIDGE_VLAN_INFO_PVID |
1152 				   BRIDGE_VLAN_INFO_UNTAGGED,
1153 				   &vlchange, extack);
1154 		if (err)
1155 			goto err_port;
1156 		if (nbp_vlan_delete(p, old_pvid))
1157 			br_vlan_notify(br, p, old_pvid, 0, RTM_DELVLAN);
1158 		br_vlan_notify(p->br, p, pvid, 0, RTM_NEWVLAN);
1159 		__set_bit(p->port_no, changed);
1160 	}
1161 
1162 	br->default_pvid = pvid;
1163 
1164 out:
1165 	bitmap_free(changed);
1166 	return err;
1167 
1168 err_port:
1169 	list_for_each_entry_continue_reverse(p, &br->port_list, list) {
1170 		if (!test_bit(p->port_no, changed))
1171 			continue;
1172 
1173 		if (old_pvid) {
1174 			nbp_vlan_add(p, old_pvid,
1175 				     BRIDGE_VLAN_INFO_PVID |
1176 				     BRIDGE_VLAN_INFO_UNTAGGED,
1177 				     &vlchange, NULL);
1178 			br_vlan_notify(p->br, p, old_pvid, 0, RTM_NEWVLAN);
1179 		}
1180 		nbp_vlan_delete(p, pvid);
1181 		br_vlan_notify(br, p, pvid, 0, RTM_DELVLAN);
1182 	}
1183 
1184 	if (test_bit(0, changed)) {
1185 		if (old_pvid) {
1186 			br_vlan_add(br, old_pvid,
1187 				    BRIDGE_VLAN_INFO_PVID |
1188 				    BRIDGE_VLAN_INFO_UNTAGGED |
1189 				    BRIDGE_VLAN_INFO_BRENTRY,
1190 				    &vlchange, NULL);
1191 			br_vlan_notify(br, NULL, old_pvid, 0, RTM_NEWVLAN);
1192 		}
1193 		br_vlan_delete(br, pvid);
1194 		br_vlan_notify(br, NULL, pvid, 0, RTM_DELVLAN);
1195 	}
1196 	goto out;
1197 }
1198 
1199 int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val,
1200 			     struct netlink_ext_ack *extack)
1201 {
1202 	u16 pvid = val;
1203 	int err = 0;
1204 
1205 	if (val >= VLAN_VID_MASK)
1206 		return -EINVAL;
1207 
1208 	if (pvid == br->default_pvid)
1209 		goto out;
1210 
1211 	/* Only allow default pvid change when filtering is disabled */
1212 	if (br_opt_get(br, BROPT_VLAN_ENABLED)) {
1213 		pr_info_once("Please disable vlan filtering to change default_pvid\n");
1214 		err = -EPERM;
1215 		goto out;
1216 	}
1217 	err = __br_vlan_set_default_pvid(br, pvid, extack);
1218 out:
1219 	return err;
1220 }
1221 
1222 int br_vlan_init(struct net_bridge *br)
1223 {
1224 	struct net_bridge_vlan_group *vg;
1225 	int ret = -ENOMEM;
1226 
1227 	vg = kzalloc(sizeof(*vg), GFP_KERNEL);
1228 	if (!vg)
1229 		goto out;
1230 	ret = rhashtable_init(&vg->vlan_hash, &br_vlan_rht_params);
1231 	if (ret)
1232 		goto err_rhtbl;
1233 	ret = vlan_tunnel_init(vg);
1234 	if (ret)
1235 		goto err_tunnel_init;
1236 	INIT_LIST_HEAD(&vg->vlan_list);
1237 	br->vlan_proto = htons(ETH_P_8021Q);
1238 	br->default_pvid = 1;
1239 	rcu_assign_pointer(br->vlgrp, vg);
1240 
1241 out:
1242 	return ret;
1243 
1244 err_tunnel_init:
1245 	rhashtable_destroy(&vg->vlan_hash);
1246 err_rhtbl:
1247 	kfree(vg);
1248 
1249 	goto out;
1250 }
1251 
1252 int nbp_vlan_init(struct net_bridge_port *p, struct netlink_ext_ack *extack)
1253 {
1254 	struct switchdev_attr attr = {
1255 		.orig_dev = p->br->dev,
1256 		.id = SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING,
1257 		.flags = SWITCHDEV_F_SKIP_EOPNOTSUPP,
1258 		.u.vlan_filtering = br_opt_get(p->br, BROPT_VLAN_ENABLED),
1259 	};
1260 	struct net_bridge_vlan_group *vg;
1261 	int ret = -ENOMEM;
1262 
1263 	vg = kzalloc(sizeof(struct net_bridge_vlan_group), GFP_KERNEL);
1264 	if (!vg)
1265 		goto out;
1266 
1267 	ret = switchdev_port_attr_set(p->dev, &attr, extack);
1268 	if (ret && ret != -EOPNOTSUPP)
1269 		goto err_vlan_enabled;
1270 
1271 	ret = rhashtable_init(&vg->vlan_hash, &br_vlan_rht_params);
1272 	if (ret)
1273 		goto err_rhtbl;
1274 	ret = vlan_tunnel_init(vg);
1275 	if (ret)
1276 		goto err_tunnel_init;
1277 	INIT_LIST_HEAD(&vg->vlan_list);
1278 	rcu_assign_pointer(p->vlgrp, vg);
1279 	if (p->br->default_pvid) {
1280 		bool changed;
1281 
1282 		ret = nbp_vlan_add(p, p->br->default_pvid,
1283 				   BRIDGE_VLAN_INFO_PVID |
1284 				   BRIDGE_VLAN_INFO_UNTAGGED,
1285 				   &changed, extack);
1286 		if (ret)
1287 			goto err_vlan_add;
1288 		br_vlan_notify(p->br, p, p->br->default_pvid, 0, RTM_NEWVLAN);
1289 	}
1290 out:
1291 	return ret;
1292 
1293 err_vlan_add:
1294 	RCU_INIT_POINTER(p->vlgrp, NULL);
1295 	synchronize_rcu();
1296 	vlan_tunnel_deinit(vg);
1297 err_tunnel_init:
1298 	rhashtable_destroy(&vg->vlan_hash);
1299 err_rhtbl:
1300 err_vlan_enabled:
1301 	kfree(vg);
1302 
1303 	goto out;
1304 }
1305 
1306 /* Must be protected by RTNL.
1307  * Must be called with vid in range from 1 to 4094 inclusive.
1308  * changed must be true only if the vlan was created or updated
1309  */
1310 int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags,
1311 		 bool *changed, struct netlink_ext_ack *extack)
1312 {
1313 	struct net_bridge_vlan *vlan;
1314 	int ret;
1315 
1316 	ASSERT_RTNL();
1317 
1318 	*changed = false;
1319 	vlan = br_vlan_find(nbp_vlan_group(port), vid);
1320 	if (vlan) {
1321 		bool would_change = __vlan_flags_would_change(vlan, flags);
1322 
1323 		if (would_change) {
1324 			/* Pass the flags to the hardware bridge */
1325 			ret = br_switchdev_port_vlan_add(port->dev, vid, flags,
1326 							 true, extack);
1327 			if (ret && ret != -EOPNOTSUPP)
1328 				return ret;
1329 		}
1330 
1331 		__vlan_flags_commit(vlan, flags);
1332 		*changed = would_change;
1333 
1334 		return 0;
1335 	}
1336 
1337 	vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
1338 	if (!vlan)
1339 		return -ENOMEM;
1340 
1341 	vlan->vid = vid;
1342 	vlan->port = port;
1343 	ret = __vlan_add(vlan, flags, extack);
1344 	if (ret)
1345 		kfree(vlan);
1346 	else
1347 		*changed = true;
1348 
1349 	return ret;
1350 }
1351 
1352 /* Must be protected by RTNL.
1353  * Must be called with vid in range from 1 to 4094 inclusive.
1354  */
1355 int nbp_vlan_delete(struct net_bridge_port *port, u16 vid)
1356 {
1357 	struct net_bridge_vlan *v;
1358 
1359 	ASSERT_RTNL();
1360 
1361 	v = br_vlan_find(nbp_vlan_group(port), vid);
1362 	if (!v)
1363 		return -ENOENT;
1364 	br_fdb_find_delete_local(port->br, port, port->dev->dev_addr, vid);
1365 	br_fdb_delete_by_port(port->br, port, vid, 0);
1366 
1367 	return __vlan_del(v);
1368 }
1369 
1370 void nbp_vlan_flush(struct net_bridge_port *port)
1371 {
1372 	struct net_bridge_vlan_group *vg;
1373 
1374 	ASSERT_RTNL();
1375 
1376 	vg = nbp_vlan_group(port);
1377 	__vlan_flush(port->br, port, vg);
1378 	RCU_INIT_POINTER(port->vlgrp, NULL);
1379 	synchronize_net();
1380 	__vlan_group_free(vg);
1381 }
1382 
1383 void br_vlan_get_stats(const struct net_bridge_vlan *v,
1384 		       struct pcpu_sw_netstats *stats)
1385 {
1386 	int i;
1387 
1388 	memset(stats, 0, sizeof(*stats));
1389 	for_each_possible_cpu(i) {
1390 		u64 rxpackets, rxbytes, txpackets, txbytes;
1391 		struct pcpu_sw_netstats *cpu_stats;
1392 		unsigned int start;
1393 
1394 		cpu_stats = per_cpu_ptr(v->stats, i);
1395 		do {
1396 			start = u64_stats_fetch_begin(&cpu_stats->syncp);
1397 			rxpackets = u64_stats_read(&cpu_stats->rx_packets);
1398 			rxbytes = u64_stats_read(&cpu_stats->rx_bytes);
1399 			txbytes = u64_stats_read(&cpu_stats->tx_bytes);
1400 			txpackets = u64_stats_read(&cpu_stats->tx_packets);
1401 		} while (u64_stats_fetch_retry(&cpu_stats->syncp, start));
1402 
1403 		u64_stats_add(&stats->rx_packets, rxpackets);
1404 		u64_stats_add(&stats->rx_bytes, rxbytes);
1405 		u64_stats_add(&stats->tx_bytes, txbytes);
1406 		u64_stats_add(&stats->tx_packets, txpackets);
1407 	}
1408 }
1409 
1410 int br_vlan_get_pvid(const struct net_device *dev, u16 *p_pvid)
1411 {
1412 	struct net_bridge_vlan_group *vg;
1413 	struct net_bridge_port *p;
1414 
1415 	ASSERT_RTNL();
1416 	p = br_port_get_check_rtnl(dev);
1417 	if (p)
1418 		vg = nbp_vlan_group(p);
1419 	else if (netif_is_bridge_master(dev))
1420 		vg = br_vlan_group(netdev_priv(dev));
1421 	else
1422 		return -EINVAL;
1423 
1424 	*p_pvid = br_get_pvid(vg);
1425 	return 0;
1426 }
1427 EXPORT_SYMBOL_GPL(br_vlan_get_pvid);
1428 
1429 int br_vlan_get_pvid_rcu(const struct net_device *dev, u16 *p_pvid)
1430 {
1431 	struct net_bridge_vlan_group *vg;
1432 	struct net_bridge_port *p;
1433 
1434 	p = br_port_get_check_rcu(dev);
1435 	if (p)
1436 		vg = nbp_vlan_group_rcu(p);
1437 	else if (netif_is_bridge_master(dev))
1438 		vg = br_vlan_group_rcu(netdev_priv(dev));
1439 	else
1440 		return -EINVAL;
1441 
1442 	*p_pvid = br_get_pvid(vg);
1443 	return 0;
1444 }
1445 EXPORT_SYMBOL_GPL(br_vlan_get_pvid_rcu);
1446 
1447 void br_vlan_fill_forward_path_pvid(struct net_bridge *br,
1448 				    struct net_device_path_ctx *ctx,
1449 				    struct net_device_path *path)
1450 {
1451 	struct net_bridge_vlan_group *vg;
1452 	int idx = ctx->num_vlans - 1;
1453 	u16 vid;
1454 
1455 	path->bridge.vlan_mode = DEV_PATH_BR_VLAN_KEEP;
1456 
1457 	if (!br_opt_get(br, BROPT_VLAN_ENABLED))
1458 		return;
1459 
1460 	vg = br_vlan_group(br);
1461 
1462 	if (idx >= 0 &&
1463 	    ctx->vlan[idx].proto == br->vlan_proto) {
1464 		vid = ctx->vlan[idx].id;
1465 	} else {
1466 		path->bridge.vlan_mode = DEV_PATH_BR_VLAN_TAG;
1467 		vid = br_get_pvid(vg);
1468 	}
1469 
1470 	path->bridge.vlan_id = vid;
1471 	path->bridge.vlan_proto = br->vlan_proto;
1472 }
1473 
1474 int br_vlan_fill_forward_path_mode(struct net_bridge *br,
1475 				   struct net_bridge_port *dst,
1476 				   struct net_device_path *path)
1477 {
1478 	struct net_bridge_vlan_group *vg;
1479 	struct net_bridge_vlan *v;
1480 
1481 	if (!br_opt_get(br, BROPT_VLAN_ENABLED))
1482 		return 0;
1483 
1484 	vg = nbp_vlan_group_rcu(dst);
1485 	v = br_vlan_find(vg, path->bridge.vlan_id);
1486 	if (!v || !br_vlan_should_use(v))
1487 		return -EINVAL;
1488 
1489 	if (!(v->flags & BRIDGE_VLAN_INFO_UNTAGGED))
1490 		return 0;
1491 
1492 	if (path->bridge.vlan_mode == DEV_PATH_BR_VLAN_TAG)
1493 		path->bridge.vlan_mode = DEV_PATH_BR_VLAN_KEEP;
1494 	else if (v->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV)
1495 		path->bridge.vlan_mode = DEV_PATH_BR_VLAN_UNTAG_HW;
1496 	else
1497 		path->bridge.vlan_mode = DEV_PATH_BR_VLAN_UNTAG;
1498 
1499 	return 0;
1500 }
1501 
1502 int br_vlan_get_info(const struct net_device *dev, u16 vid,
1503 		     struct bridge_vlan_info *p_vinfo)
1504 {
1505 	struct net_bridge_vlan_group *vg;
1506 	struct net_bridge_vlan *v;
1507 	struct net_bridge_port *p;
1508 
1509 	ASSERT_RTNL();
1510 	p = br_port_get_check_rtnl(dev);
1511 	if (p)
1512 		vg = nbp_vlan_group(p);
1513 	else if (netif_is_bridge_master(dev))
1514 		vg = br_vlan_group(netdev_priv(dev));
1515 	else
1516 		return -EINVAL;
1517 
1518 	v = br_vlan_find(vg, vid);
1519 	if (!v)
1520 		return -ENOENT;
1521 
1522 	p_vinfo->vid = vid;
1523 	p_vinfo->flags = v->flags;
1524 	if (vid == br_get_pvid(vg))
1525 		p_vinfo->flags |= BRIDGE_VLAN_INFO_PVID;
1526 	return 0;
1527 }
1528 EXPORT_SYMBOL_GPL(br_vlan_get_info);
1529 
1530 int br_vlan_get_info_rcu(const struct net_device *dev, u16 vid,
1531 			 struct bridge_vlan_info *p_vinfo)
1532 {
1533 	struct net_bridge_vlan_group *vg;
1534 	struct net_bridge_vlan *v;
1535 	struct net_bridge_port *p;
1536 
1537 	p = br_port_get_check_rcu(dev);
1538 	if (p)
1539 		vg = nbp_vlan_group_rcu(p);
1540 	else if (netif_is_bridge_master(dev))
1541 		vg = br_vlan_group_rcu(netdev_priv(dev));
1542 	else
1543 		return -EINVAL;
1544 
1545 	v = br_vlan_find(vg, vid);
1546 	if (!v)
1547 		return -ENOENT;
1548 
1549 	p_vinfo->vid = vid;
1550 	p_vinfo->flags = v->flags;
1551 	if (vid == br_get_pvid(vg))
1552 		p_vinfo->flags |= BRIDGE_VLAN_INFO_PVID;
1553 	return 0;
1554 }
1555 EXPORT_SYMBOL_GPL(br_vlan_get_info_rcu);
1556 
1557 static int br_vlan_is_bind_vlan_dev(const struct net_device *dev)
1558 {
1559 	return is_vlan_dev(dev) &&
1560 		!!(vlan_dev_priv(dev)->flags & VLAN_FLAG_BRIDGE_BINDING);
1561 }
1562 
1563 static int br_vlan_is_bind_vlan_dev_fn(struct net_device *dev,
1564 			       __always_unused struct netdev_nested_priv *priv)
1565 {
1566 	return br_vlan_is_bind_vlan_dev(dev);
1567 }
1568 
1569 static bool br_vlan_has_upper_bind_vlan_dev(struct net_device *dev)
1570 {
1571 	int found;
1572 
1573 	rcu_read_lock();
1574 	found = netdev_walk_all_upper_dev_rcu(dev, br_vlan_is_bind_vlan_dev_fn,
1575 					      NULL);
1576 	rcu_read_unlock();
1577 
1578 	return !!found;
1579 }
1580 
1581 struct br_vlan_bind_walk_data {
1582 	u16 vid;
1583 	struct net_device *result;
1584 };
1585 
1586 static int br_vlan_match_bind_vlan_dev_fn(struct net_device *dev,
1587 					  struct netdev_nested_priv *priv)
1588 {
1589 	struct br_vlan_bind_walk_data *data = priv->data;
1590 	int found = 0;
1591 
1592 	if (br_vlan_is_bind_vlan_dev(dev) &&
1593 	    vlan_dev_priv(dev)->vlan_id == data->vid) {
1594 		data->result = dev;
1595 		found = 1;
1596 	}
1597 
1598 	return found;
1599 }
1600 
1601 static struct net_device *
1602 br_vlan_get_upper_bind_vlan_dev(struct net_device *dev, u16 vid)
1603 {
1604 	struct br_vlan_bind_walk_data data = {
1605 		.vid = vid,
1606 	};
1607 	struct netdev_nested_priv priv = {
1608 		.data = (void *)&data,
1609 	};
1610 
1611 	rcu_read_lock();
1612 	netdev_walk_all_upper_dev_rcu(dev, br_vlan_match_bind_vlan_dev_fn,
1613 				      &priv);
1614 	rcu_read_unlock();
1615 
1616 	return data.result;
1617 }
1618 
1619 static bool br_vlan_is_dev_up(const struct net_device *dev)
1620 {
1621 	return  !!(dev->flags & IFF_UP) && netif_oper_up(dev);
1622 }
1623 
1624 static void br_vlan_set_vlan_dev_state(const struct net_bridge *br,
1625 				       struct net_device *vlan_dev)
1626 {
1627 	u16 vid = vlan_dev_priv(vlan_dev)->vlan_id;
1628 	struct net_bridge_vlan_group *vg;
1629 	struct net_bridge_port *p;
1630 	bool has_carrier = false;
1631 
1632 	if (!netif_carrier_ok(br->dev)) {
1633 		netif_carrier_off(vlan_dev);
1634 		return;
1635 	}
1636 
1637 	list_for_each_entry(p, &br->port_list, list) {
1638 		vg = nbp_vlan_group(p);
1639 		if (br_vlan_find(vg, vid) && br_vlan_is_dev_up(p->dev)) {
1640 			has_carrier = true;
1641 			break;
1642 		}
1643 	}
1644 
1645 	if (has_carrier)
1646 		netif_carrier_on(vlan_dev);
1647 	else
1648 		netif_carrier_off(vlan_dev);
1649 }
1650 
1651 static void br_vlan_set_all_vlan_dev_state(struct net_bridge_port *p)
1652 {
1653 	struct net_bridge_vlan_group *vg = nbp_vlan_group(p);
1654 	struct net_bridge_vlan *vlan;
1655 	struct net_device *vlan_dev;
1656 
1657 	list_for_each_entry(vlan, &vg->vlan_list, vlist) {
1658 		vlan_dev = br_vlan_get_upper_bind_vlan_dev(p->br->dev,
1659 							   vlan->vid);
1660 		if (vlan_dev) {
1661 			if (br_vlan_is_dev_up(p->dev)) {
1662 				if (netif_carrier_ok(p->br->dev))
1663 					netif_carrier_on(vlan_dev);
1664 			} else {
1665 				br_vlan_set_vlan_dev_state(p->br, vlan_dev);
1666 			}
1667 		}
1668 	}
1669 }
1670 
1671 static void br_vlan_toggle_bridge_binding(struct net_device *br_dev,
1672 					  bool enable)
1673 {
1674 	struct net_bridge *br = netdev_priv(br_dev);
1675 
1676 	if (enable)
1677 		br_opt_toggle(br, BROPT_VLAN_BRIDGE_BINDING, true);
1678 	else
1679 		br_opt_toggle(br, BROPT_VLAN_BRIDGE_BINDING,
1680 			      br_vlan_has_upper_bind_vlan_dev(br_dev));
1681 }
1682 
1683 static void br_vlan_upper_change(struct net_device *dev,
1684 				 struct net_device *upper_dev,
1685 				 bool linking)
1686 {
1687 	struct net_bridge *br = netdev_priv(dev);
1688 
1689 	if (!br_vlan_is_bind_vlan_dev(upper_dev))
1690 		return;
1691 
1692 	br_vlan_toggle_bridge_binding(dev, linking);
1693 	if (linking)
1694 		br_vlan_set_vlan_dev_state(br, upper_dev);
1695 }
1696 
1697 struct br_vlan_link_state_walk_data {
1698 	struct net_bridge *br;
1699 };
1700 
1701 static int br_vlan_link_state_change_fn(struct net_device *vlan_dev,
1702 					struct netdev_nested_priv *priv)
1703 {
1704 	struct br_vlan_link_state_walk_data *data = priv->data;
1705 
1706 	if (br_vlan_is_bind_vlan_dev(vlan_dev))
1707 		br_vlan_set_vlan_dev_state(data->br, vlan_dev);
1708 
1709 	return 0;
1710 }
1711 
1712 static void br_vlan_link_state_change(struct net_device *dev,
1713 				      struct net_bridge *br)
1714 {
1715 	struct br_vlan_link_state_walk_data data = {
1716 		.br = br
1717 	};
1718 	struct netdev_nested_priv priv = {
1719 		.data = (void *)&data,
1720 	};
1721 
1722 	rcu_read_lock();
1723 	netdev_walk_all_upper_dev_rcu(dev, br_vlan_link_state_change_fn,
1724 				      &priv);
1725 	rcu_read_unlock();
1726 }
1727 
1728 /* Must be protected by RTNL. */
1729 static void nbp_vlan_set_vlan_dev_state(struct net_bridge_port *p, u16 vid)
1730 {
1731 	struct net_device *vlan_dev;
1732 
1733 	if (!br_opt_get(p->br, BROPT_VLAN_BRIDGE_BINDING))
1734 		return;
1735 
1736 	vlan_dev = br_vlan_get_upper_bind_vlan_dev(p->br->dev, vid);
1737 	if (vlan_dev)
1738 		br_vlan_set_vlan_dev_state(p->br, vlan_dev);
1739 }
1740 
1741 /* Must be protected by RTNL. */
1742 int br_vlan_bridge_event(struct net_device *dev, unsigned long event, void *ptr)
1743 {
1744 	struct netdev_notifier_changeupper_info *info;
1745 	struct net_bridge *br = netdev_priv(dev);
1746 	int vlcmd = 0, ret = 0;
1747 	bool changed = false;
1748 
1749 	switch (event) {
1750 	case NETDEV_REGISTER:
1751 		ret = br_vlan_add(br, br->default_pvid,
1752 				  BRIDGE_VLAN_INFO_PVID |
1753 				  BRIDGE_VLAN_INFO_UNTAGGED |
1754 				  BRIDGE_VLAN_INFO_BRENTRY, &changed, NULL);
1755 		vlcmd = RTM_NEWVLAN;
1756 		break;
1757 	case NETDEV_UNREGISTER:
1758 		changed = !br_vlan_delete(br, br->default_pvid);
1759 		vlcmd = RTM_DELVLAN;
1760 		break;
1761 	case NETDEV_CHANGEUPPER:
1762 		info = ptr;
1763 		br_vlan_upper_change(dev, info->upper_dev, info->linking);
1764 		break;
1765 
1766 	case NETDEV_CHANGE:
1767 	case NETDEV_UP:
1768 		if (!br_opt_get(br, BROPT_VLAN_BRIDGE_BINDING))
1769 			break;
1770 		br_vlan_link_state_change(dev, br);
1771 		break;
1772 	}
1773 	if (changed)
1774 		br_vlan_notify(br, NULL, br->default_pvid, 0, vlcmd);
1775 
1776 	return ret;
1777 }
1778 
1779 void br_vlan_vlan_upper_event(struct net_device *br_dev,
1780 			      struct net_device *vlan_dev,
1781 			      unsigned long event)
1782 {
1783 	struct vlan_dev_priv *vlan = vlan_dev_priv(vlan_dev);
1784 	struct net_bridge *br = netdev_priv(br_dev);
1785 	bool bridge_binding;
1786 
1787 	switch (event) {
1788 	case NETDEV_CHANGE:
1789 	case NETDEV_UP:
1790 		break;
1791 	default:
1792 		return;
1793 	}
1794 
1795 	bridge_binding = vlan->flags & VLAN_FLAG_BRIDGE_BINDING;
1796 	br_vlan_toggle_bridge_binding(br_dev, bridge_binding);
1797 	if (bridge_binding)
1798 		br_vlan_set_vlan_dev_state(br, vlan_dev);
1799 	else if (!bridge_binding && netif_carrier_ok(br_dev))
1800 		netif_carrier_on(vlan_dev);
1801 }
1802 
1803 /* Must be protected by RTNL. */
1804 void br_vlan_port_event(struct net_bridge_port *p, unsigned long event)
1805 {
1806 	if (!br_opt_get(p->br, BROPT_VLAN_BRIDGE_BINDING))
1807 		return;
1808 
1809 	switch (event) {
1810 	case NETDEV_CHANGE:
1811 	case NETDEV_DOWN:
1812 	case NETDEV_UP:
1813 		br_vlan_set_all_vlan_dev_state(p);
1814 		break;
1815 	}
1816 }
1817 
1818 static bool br_vlan_stats_fill(struct sk_buff *skb,
1819 			       const struct net_bridge_vlan *v)
1820 {
1821 	struct pcpu_sw_netstats stats;
1822 	struct nlattr *nest;
1823 
1824 	nest = nla_nest_start(skb, BRIDGE_VLANDB_ENTRY_STATS);
1825 	if (!nest)
1826 		return false;
1827 
1828 	br_vlan_get_stats(v, &stats);
1829 	if (nla_put_u64_64bit(skb, BRIDGE_VLANDB_STATS_RX_BYTES,
1830 			      u64_stats_read(&stats.rx_bytes),
1831 			      BRIDGE_VLANDB_STATS_PAD) ||
1832 	    nla_put_u64_64bit(skb, BRIDGE_VLANDB_STATS_RX_PACKETS,
1833 			      u64_stats_read(&stats.rx_packets),
1834 			      BRIDGE_VLANDB_STATS_PAD) ||
1835 	    nla_put_u64_64bit(skb, BRIDGE_VLANDB_STATS_TX_BYTES,
1836 			      u64_stats_read(&stats.tx_bytes),
1837 			      BRIDGE_VLANDB_STATS_PAD) ||
1838 	    nla_put_u64_64bit(skb, BRIDGE_VLANDB_STATS_TX_PACKETS,
1839 			      u64_stats_read(&stats.tx_packets),
1840 			      BRIDGE_VLANDB_STATS_PAD))
1841 		goto out_err;
1842 
1843 	nla_nest_end(skb, nest);
1844 
1845 	return true;
1846 
1847 out_err:
1848 	nla_nest_cancel(skb, nest);
1849 	return false;
1850 }
1851 
1852 /* v_opts is used to dump the options which must be equal in the whole range */
1853 static bool br_vlan_fill_vids(struct sk_buff *skb, u16 vid, u16 vid_range,
1854 			      const struct net_bridge_vlan *v_opts,
1855 			      const struct net_bridge_port *p,
1856 			      u16 flags,
1857 			      bool dump_stats)
1858 {
1859 	struct bridge_vlan_info info;
1860 	struct nlattr *nest;
1861 
1862 	nest = nla_nest_start(skb, BRIDGE_VLANDB_ENTRY);
1863 	if (!nest)
1864 		return false;
1865 
1866 	memset(&info, 0, sizeof(info));
1867 	info.vid = vid;
1868 	if (flags & BRIDGE_VLAN_INFO_UNTAGGED)
1869 		info.flags |= BRIDGE_VLAN_INFO_UNTAGGED;
1870 	if (flags & BRIDGE_VLAN_INFO_PVID)
1871 		info.flags |= BRIDGE_VLAN_INFO_PVID;
1872 
1873 	if (nla_put(skb, BRIDGE_VLANDB_ENTRY_INFO, sizeof(info), &info))
1874 		goto out_err;
1875 
1876 	if (vid_range && vid < vid_range &&
1877 	    !(flags & BRIDGE_VLAN_INFO_PVID) &&
1878 	    nla_put_u16(skb, BRIDGE_VLANDB_ENTRY_RANGE, vid_range))
1879 		goto out_err;
1880 
1881 	if (v_opts) {
1882 		if (!br_vlan_opts_fill(skb, v_opts, p))
1883 			goto out_err;
1884 
1885 		if (dump_stats && !br_vlan_stats_fill(skb, v_opts))
1886 			goto out_err;
1887 	}
1888 
1889 	nla_nest_end(skb, nest);
1890 
1891 	return true;
1892 
1893 out_err:
1894 	nla_nest_cancel(skb, nest);
1895 	return false;
1896 }
1897 
1898 static size_t rtnl_vlan_nlmsg_size(void)
1899 {
1900 	return NLMSG_ALIGN(sizeof(struct br_vlan_msg))
1901 		+ nla_total_size(0) /* BRIDGE_VLANDB_ENTRY */
1902 		+ nla_total_size(sizeof(u16)) /* BRIDGE_VLANDB_ENTRY_RANGE */
1903 		+ nla_total_size(sizeof(struct bridge_vlan_info)) /* BRIDGE_VLANDB_ENTRY_INFO */
1904 		+ br_vlan_opts_nl_size(); /* bridge vlan options */
1905 }
1906 
1907 void br_vlan_notify(const struct net_bridge *br,
1908 		    const struct net_bridge_port *p,
1909 		    u16 vid, u16 vid_range,
1910 		    int cmd)
1911 {
1912 	struct net_bridge_vlan_group *vg;
1913 	struct net_bridge_vlan *v = NULL;
1914 	struct br_vlan_msg *bvm;
1915 	struct nlmsghdr *nlh;
1916 	struct sk_buff *skb;
1917 	int err = -ENOBUFS;
1918 	struct net *net;
1919 	u16 flags = 0;
1920 	int ifindex;
1921 
1922 	/* right now notifications are done only with rtnl held */
1923 	ASSERT_RTNL();
1924 
1925 	if (p) {
1926 		ifindex = p->dev->ifindex;
1927 		vg = nbp_vlan_group(p);
1928 		net = dev_net(p->dev);
1929 	} else {
1930 		ifindex = br->dev->ifindex;
1931 		vg = br_vlan_group(br);
1932 		net = dev_net(br->dev);
1933 	}
1934 
1935 	skb = nlmsg_new(rtnl_vlan_nlmsg_size(), GFP_KERNEL);
1936 	if (!skb)
1937 		goto out_err;
1938 
1939 	err = -EMSGSIZE;
1940 	nlh = nlmsg_put(skb, 0, 0, cmd, sizeof(*bvm), 0);
1941 	if (!nlh)
1942 		goto out_err;
1943 	bvm = nlmsg_data(nlh);
1944 	memset(bvm, 0, sizeof(*bvm));
1945 	bvm->family = AF_BRIDGE;
1946 	bvm->ifindex = ifindex;
1947 
1948 	switch (cmd) {
1949 	case RTM_NEWVLAN:
1950 		/* need to find the vlan due to flags/options */
1951 		v = br_vlan_find(vg, vid);
1952 		if (!v || !br_vlan_should_use(v))
1953 			goto out_kfree;
1954 
1955 		flags = v->flags;
1956 		if (br_get_pvid(vg) == v->vid)
1957 			flags |= BRIDGE_VLAN_INFO_PVID;
1958 		break;
1959 	case RTM_DELVLAN:
1960 		break;
1961 	default:
1962 		goto out_kfree;
1963 	}
1964 
1965 	if (!br_vlan_fill_vids(skb, vid, vid_range, v, p, flags, false))
1966 		goto out_err;
1967 
1968 	nlmsg_end(skb, nlh);
1969 	rtnl_notify(skb, net, 0, RTNLGRP_BRVLAN, NULL, GFP_KERNEL);
1970 	return;
1971 
1972 out_err:
1973 	rtnl_set_sk_err(net, RTNLGRP_BRVLAN, err);
1974 out_kfree:
1975 	kfree_skb(skb);
1976 }
1977 
1978 /* check if v_curr can enter a range ending in range_end */
1979 bool br_vlan_can_enter_range(const struct net_bridge_vlan *v_curr,
1980 			     const struct net_bridge_vlan *range_end)
1981 {
1982 	return v_curr->vid - range_end->vid == 1 &&
1983 	       range_end->flags == v_curr->flags &&
1984 	       br_vlan_opts_eq_range(v_curr, range_end);
1985 }
1986 
1987 static int br_vlan_dump_dev(const struct net_device *dev,
1988 			    struct sk_buff *skb,
1989 			    struct netlink_callback *cb,
1990 			    u32 dump_flags)
1991 {
1992 	struct net_bridge_vlan *v, *range_start = NULL, *range_end = NULL;
1993 	bool dump_global = !!(dump_flags & BRIDGE_VLANDB_DUMPF_GLOBAL);
1994 	bool dump_stats = !!(dump_flags & BRIDGE_VLANDB_DUMPF_STATS);
1995 	struct net_bridge_vlan_group *vg;
1996 	int idx = 0, s_idx = cb->args[1];
1997 	struct nlmsghdr *nlh = NULL;
1998 	struct net_bridge_port *p;
1999 	struct br_vlan_msg *bvm;
2000 	struct net_bridge *br;
2001 	int err = 0;
2002 	u16 pvid;
2003 
2004 	if (!netif_is_bridge_master(dev) && !netif_is_bridge_port(dev))
2005 		return -EINVAL;
2006 
2007 	if (netif_is_bridge_master(dev)) {
2008 		br = netdev_priv(dev);
2009 		vg = br_vlan_group_rcu(br);
2010 		p = NULL;
2011 	} else {
2012 		/* global options are dumped only for bridge devices */
2013 		if (dump_global)
2014 			return 0;
2015 
2016 		p = br_port_get_rcu(dev);
2017 		if (WARN_ON(!p))
2018 			return -EINVAL;
2019 		vg = nbp_vlan_group_rcu(p);
2020 		br = p->br;
2021 	}
2022 
2023 	if (!vg)
2024 		return 0;
2025 
2026 	nlh = nlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq,
2027 			RTM_NEWVLAN, sizeof(*bvm), NLM_F_MULTI);
2028 	if (!nlh)
2029 		return -EMSGSIZE;
2030 	bvm = nlmsg_data(nlh);
2031 	memset(bvm, 0, sizeof(*bvm));
2032 	bvm->family = PF_BRIDGE;
2033 	bvm->ifindex = dev->ifindex;
2034 	pvid = br_get_pvid(vg);
2035 
2036 	/* idx must stay at range's beginning until it is filled in */
2037 	list_for_each_entry_rcu(v, &vg->vlan_list, vlist) {
2038 		if (!dump_global && !br_vlan_should_use(v))
2039 			continue;
2040 		if (idx < s_idx) {
2041 			idx++;
2042 			continue;
2043 		}
2044 
2045 		if (!range_start) {
2046 			range_start = v;
2047 			range_end = v;
2048 			continue;
2049 		}
2050 
2051 		if (dump_global) {
2052 			if (br_vlan_global_opts_can_enter_range(v, range_end))
2053 				goto update_end;
2054 			if (!br_vlan_global_opts_fill(skb, range_start->vid,
2055 						      range_end->vid,
2056 						      range_start)) {
2057 				err = -EMSGSIZE;
2058 				break;
2059 			}
2060 			/* advance number of filled vlans */
2061 			idx += range_end->vid - range_start->vid + 1;
2062 
2063 			range_start = v;
2064 		} else if (dump_stats || v->vid == pvid ||
2065 			   !br_vlan_can_enter_range(v, range_end)) {
2066 			u16 vlan_flags = br_vlan_flags(range_start, pvid);
2067 
2068 			if (!br_vlan_fill_vids(skb, range_start->vid,
2069 					       range_end->vid, range_start,
2070 					       p, vlan_flags, dump_stats)) {
2071 				err = -EMSGSIZE;
2072 				break;
2073 			}
2074 			/* advance number of filled vlans */
2075 			idx += range_end->vid - range_start->vid + 1;
2076 
2077 			range_start = v;
2078 		}
2079 update_end:
2080 		range_end = v;
2081 	}
2082 
2083 	/* err will be 0 and range_start will be set in 3 cases here:
2084 	 * - first vlan (range_start == range_end)
2085 	 * - last vlan (range_start == range_end, not in range)
2086 	 * - last vlan range (range_start != range_end, in range)
2087 	 */
2088 	if (!err && range_start) {
2089 		if (dump_global &&
2090 		    !br_vlan_global_opts_fill(skb, range_start->vid,
2091 					      range_end->vid, range_start))
2092 			err = -EMSGSIZE;
2093 		else if (!dump_global &&
2094 			 !br_vlan_fill_vids(skb, range_start->vid,
2095 					    range_end->vid, range_start,
2096 					    p, br_vlan_flags(range_start, pvid),
2097 					    dump_stats))
2098 			err = -EMSGSIZE;
2099 	}
2100 
2101 	cb->args[1] = err ? idx : 0;
2102 
2103 	nlmsg_end(skb, nlh);
2104 
2105 	return err;
2106 }
2107 
2108 static const struct nla_policy br_vlan_db_dump_pol[BRIDGE_VLANDB_DUMP_MAX + 1] = {
2109 	[BRIDGE_VLANDB_DUMP_FLAGS] = { .type = NLA_U32 },
2110 };
2111 
2112 static int br_vlan_rtm_dump(struct sk_buff *skb, struct netlink_callback *cb)
2113 {
2114 	struct nlattr *dtb[BRIDGE_VLANDB_DUMP_MAX + 1];
2115 	int idx = 0, err = 0, s_idx = cb->args[0];
2116 	struct net *net = sock_net(skb->sk);
2117 	struct br_vlan_msg *bvm;
2118 	struct net_device *dev;
2119 	u32 dump_flags = 0;
2120 
2121 	err = nlmsg_parse(cb->nlh, sizeof(*bvm), dtb, BRIDGE_VLANDB_DUMP_MAX,
2122 			  br_vlan_db_dump_pol, cb->extack);
2123 	if (err < 0)
2124 		return err;
2125 
2126 	bvm = nlmsg_data(cb->nlh);
2127 	if (dtb[BRIDGE_VLANDB_DUMP_FLAGS])
2128 		dump_flags = nla_get_u32(dtb[BRIDGE_VLANDB_DUMP_FLAGS]);
2129 
2130 	rcu_read_lock();
2131 	if (bvm->ifindex) {
2132 		dev = dev_get_by_index_rcu(net, bvm->ifindex);
2133 		if (!dev) {
2134 			err = -ENODEV;
2135 			goto out_err;
2136 		}
2137 		err = br_vlan_dump_dev(dev, skb, cb, dump_flags);
2138 		/* if the dump completed without an error we return 0 here */
2139 		if (err != -EMSGSIZE)
2140 			goto out_err;
2141 	} else {
2142 		for_each_netdev_rcu(net, dev) {
2143 			if (idx < s_idx)
2144 				goto skip;
2145 
2146 			err = br_vlan_dump_dev(dev, skb, cb, dump_flags);
2147 			if (err == -EMSGSIZE)
2148 				break;
2149 skip:
2150 			idx++;
2151 		}
2152 	}
2153 	cb->args[0] = idx;
2154 	rcu_read_unlock();
2155 
2156 	return skb->len;
2157 
2158 out_err:
2159 	rcu_read_unlock();
2160 
2161 	return err;
2162 }
2163 
2164 static const struct nla_policy br_vlan_db_policy[BRIDGE_VLANDB_ENTRY_MAX + 1] = {
2165 	[BRIDGE_VLANDB_ENTRY_INFO]	=
2166 		NLA_POLICY_EXACT_LEN(sizeof(struct bridge_vlan_info)),
2167 	[BRIDGE_VLANDB_ENTRY_RANGE]	= { .type = NLA_U16 },
2168 	[BRIDGE_VLANDB_ENTRY_STATE]	= { .type = NLA_U8 },
2169 	[BRIDGE_VLANDB_ENTRY_TUNNEL_INFO] = { .type = NLA_NESTED },
2170 	[BRIDGE_VLANDB_ENTRY_MCAST_ROUTER]	= { .type = NLA_U8 },
2171 	[BRIDGE_VLANDB_ENTRY_MCAST_N_GROUPS]	= { .type = NLA_REJECT },
2172 	[BRIDGE_VLANDB_ENTRY_MCAST_MAX_GROUPS]	= { .type = NLA_U32 },
2173 	[BRIDGE_VLANDB_ENTRY_NEIGH_SUPPRESS]	= NLA_POLICY_MAX(NLA_U8, 1),
2174 };
2175 
2176 static int br_vlan_rtm_process_one(struct net_device *dev,
2177 				   const struct nlattr *attr,
2178 				   int cmd, struct netlink_ext_ack *extack)
2179 {
2180 	struct bridge_vlan_info *vinfo, vrange_end, *vinfo_last = NULL;
2181 	struct nlattr *tb[BRIDGE_VLANDB_ENTRY_MAX + 1];
2182 	bool changed = false, skip_processing = false;
2183 	struct net_bridge_vlan_group *vg;
2184 	struct net_bridge_port *p = NULL;
2185 	int err = 0, cmdmap = 0;
2186 	struct net_bridge *br;
2187 
2188 	if (netif_is_bridge_master(dev)) {
2189 		br = netdev_priv(dev);
2190 		vg = br_vlan_group(br);
2191 	} else {
2192 		p = br_port_get_rtnl(dev);
2193 		if (WARN_ON(!p))
2194 			return -ENODEV;
2195 		br = p->br;
2196 		vg = nbp_vlan_group(p);
2197 	}
2198 
2199 	if (WARN_ON(!vg))
2200 		return -ENODEV;
2201 
2202 	err = nla_parse_nested(tb, BRIDGE_VLANDB_ENTRY_MAX, attr,
2203 			       br_vlan_db_policy, extack);
2204 	if (err)
2205 		return err;
2206 
2207 	if (!tb[BRIDGE_VLANDB_ENTRY_INFO]) {
2208 		NL_SET_ERR_MSG_MOD(extack, "Missing vlan entry info");
2209 		return -EINVAL;
2210 	}
2211 	memset(&vrange_end, 0, sizeof(vrange_end));
2212 
2213 	vinfo = nla_data(tb[BRIDGE_VLANDB_ENTRY_INFO]);
2214 	if (vinfo->flags & (BRIDGE_VLAN_INFO_RANGE_BEGIN |
2215 			    BRIDGE_VLAN_INFO_RANGE_END)) {
2216 		NL_SET_ERR_MSG_MOD(extack, "Old-style vlan ranges are not allowed when using RTM vlan calls");
2217 		return -EINVAL;
2218 	}
2219 	if (!br_vlan_valid_id(vinfo->vid, extack))
2220 		return -EINVAL;
2221 
2222 	if (tb[BRIDGE_VLANDB_ENTRY_RANGE]) {
2223 		vrange_end.vid = nla_get_u16(tb[BRIDGE_VLANDB_ENTRY_RANGE]);
2224 		/* validate user-provided flags without RANGE_BEGIN */
2225 		vrange_end.flags = BRIDGE_VLAN_INFO_RANGE_END | vinfo->flags;
2226 		vinfo->flags |= BRIDGE_VLAN_INFO_RANGE_BEGIN;
2227 
2228 		/* vinfo_last is the range start, vinfo the range end */
2229 		vinfo_last = vinfo;
2230 		vinfo = &vrange_end;
2231 
2232 		if (!br_vlan_valid_id(vinfo->vid, extack) ||
2233 		    !br_vlan_valid_range(vinfo, vinfo_last, extack))
2234 			return -EINVAL;
2235 	}
2236 
2237 	switch (cmd) {
2238 	case RTM_NEWVLAN:
2239 		cmdmap = RTM_SETLINK;
2240 		skip_processing = !!(vinfo->flags & BRIDGE_VLAN_INFO_ONLY_OPTS);
2241 		break;
2242 	case RTM_DELVLAN:
2243 		cmdmap = RTM_DELLINK;
2244 		break;
2245 	}
2246 
2247 	if (!skip_processing) {
2248 		struct bridge_vlan_info *tmp_last = vinfo_last;
2249 
2250 		/* br_process_vlan_info may overwrite vinfo_last */
2251 		err = br_process_vlan_info(br, p, cmdmap, vinfo, &tmp_last,
2252 					   &changed, extack);
2253 
2254 		/* notify first if anything changed */
2255 		if (changed)
2256 			br_ifinfo_notify(cmdmap, br, p);
2257 
2258 		if (err)
2259 			return err;
2260 	}
2261 
2262 	/* deal with options */
2263 	if (cmd == RTM_NEWVLAN) {
2264 		struct net_bridge_vlan *range_start, *range_end;
2265 
2266 		if (vinfo_last) {
2267 			range_start = br_vlan_find(vg, vinfo_last->vid);
2268 			range_end = br_vlan_find(vg, vinfo->vid);
2269 		} else {
2270 			range_start = br_vlan_find(vg, vinfo->vid);
2271 			range_end = range_start;
2272 		}
2273 
2274 		err = br_vlan_process_options(br, p, range_start, range_end,
2275 					      tb, extack);
2276 	}
2277 
2278 	return err;
2279 }
2280 
2281 static int br_vlan_rtm_process(struct sk_buff *skb, struct nlmsghdr *nlh,
2282 			       struct netlink_ext_ack *extack)
2283 {
2284 	struct net *net = sock_net(skb->sk);
2285 	struct br_vlan_msg *bvm;
2286 	struct net_device *dev;
2287 	struct nlattr *attr;
2288 	int err, vlans = 0;
2289 	int rem;
2290 
2291 	/* this should validate the header and check for remaining bytes */
2292 	err = nlmsg_parse(nlh, sizeof(*bvm), NULL, BRIDGE_VLANDB_MAX, NULL,
2293 			  extack);
2294 	if (err < 0)
2295 		return err;
2296 
2297 	bvm = nlmsg_data(nlh);
2298 	dev = __dev_get_by_index(net, bvm->ifindex);
2299 	if (!dev)
2300 		return -ENODEV;
2301 
2302 	if (!netif_is_bridge_master(dev) && !netif_is_bridge_port(dev)) {
2303 		NL_SET_ERR_MSG_MOD(extack, "The device is not a valid bridge or bridge port");
2304 		return -EINVAL;
2305 	}
2306 
2307 	nlmsg_for_each_attr(attr, nlh, sizeof(*bvm), rem) {
2308 		switch (nla_type(attr)) {
2309 		case BRIDGE_VLANDB_ENTRY:
2310 			err = br_vlan_rtm_process_one(dev, attr,
2311 						      nlh->nlmsg_type,
2312 						      extack);
2313 			break;
2314 		case BRIDGE_VLANDB_GLOBAL_OPTIONS:
2315 			err = br_vlan_rtm_process_global_options(dev, attr,
2316 								 nlh->nlmsg_type,
2317 								 extack);
2318 			break;
2319 		default:
2320 			continue;
2321 		}
2322 
2323 		vlans++;
2324 		if (err)
2325 			break;
2326 	}
2327 	if (!vlans) {
2328 		NL_SET_ERR_MSG_MOD(extack, "No vlans found to process");
2329 		err = -EINVAL;
2330 	}
2331 
2332 	return err;
2333 }
2334 
2335 static const struct rtnl_msg_handler br_vlan_rtnl_msg_handlers[] = {
2336 	{THIS_MODULE, PF_BRIDGE, RTM_NEWVLAN, br_vlan_rtm_process, NULL, 0},
2337 	{THIS_MODULE, PF_BRIDGE, RTM_DELVLAN, br_vlan_rtm_process, NULL, 0},
2338 	{THIS_MODULE, PF_BRIDGE, RTM_GETVLAN, NULL, br_vlan_rtm_dump, 0},
2339 };
2340 
2341 int br_vlan_rtnl_init(void)
2342 {
2343 	return rtnl_register_many(br_vlan_rtnl_msg_handlers);
2344 }
2345 
2346 void br_vlan_rtnl_uninit(void)
2347 {
2348 	rtnl_unregister_many(br_vlan_rtnl_msg_handlers);
2349 }
2350