Linux Audio

Check our new training course

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