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