Merge tag 'trace-v5.10-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[linux-2.6-microblaze.git] / net / bridge / br_vlan.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 #include <linux/kernel.h>
3 #include <linux/netdevice.h>
4 #include <linux/rtnetlink.h>
5 #include <linux/slab.h>
6 #include <net/switchdev.h>
7
8 #include "br_private.h"
9 #include "br_private_tunnel.h"
10
11 static void nbp_vlan_set_vlan_dev_state(struct net_bridge_port *p, u16 vid);
12
13 static inline int br_vlan_cmp(struct rhashtable_compare_arg *arg,
14                               const void *ptr)
15 {
16         const struct net_bridge_vlan *vle = ptr;
17         u16 vid = *(u16 *)arg->key;
18
19         return vle->vid != vid;
20 }
21
22 static const struct rhashtable_params br_vlan_rht_params = {
23         .head_offset = offsetof(struct net_bridge_vlan, vnode),
24         .key_offset = offsetof(struct net_bridge_vlan, vid),
25         .key_len = sizeof(u16),
26         .nelem_hint = 3,
27         .max_size = VLAN_N_VID,
28         .obj_cmpfn = br_vlan_cmp,
29         .automatic_shrinking = true,
30 };
31
32 static struct net_bridge_vlan *br_vlan_lookup(struct rhashtable *tbl, u16 vid)
33 {
34         return rhashtable_lookup_fast(tbl, &vid, br_vlan_rht_params);
35 }
36
37 static 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
50 static 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 */
62 static 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
86 static 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
102 static 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
124 static void __vlan_del_list(struct net_bridge_vlan *v)
125 {
126         list_del_rcu(&v->vlist);
127 }
128
129 static 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
144  * a reference is taken to the master vlan before returning.
145  */
146 static struct net_bridge_vlan *
147 br_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
172 static 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
183 static 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
199 static 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  */
223 static 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);
311 out:
312         return err;
313
314 out_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
320 out_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
338 static 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);
380 out:
381         return err;
382 }
383
384 static 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
392 static 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
419 struct 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         }
467 out:
468         return skb;
469 }
470
471 /* Called under RCU */
472 static 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
570 drop:
571         kfree_skb(skb);
572         return false;
573 }
574
575 bool 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. */
591 bool 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 */
611 bool 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
644 static 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
681 err_fdb_insert:
682 err_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  */
691 int 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  */
736 int 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
756 void 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
769 struct 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. */
778 static 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. */
796 void 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
806 int __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
831 int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
832 {
833         return __br_vlan_filter_toggle(br, val);
834 }
835
836 bool 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 }
842 EXPORT_SYMBOL_GPL(br_vlan_enabled);
843
844 int 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 }
852 EXPORT_SYMBOL_GPL(br_vlan_get_proto);
853
854 int __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
890 err_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
903 int 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
911 int 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
925 int 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
949 static 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
964 static 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
986 int __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
1053 out:
1054         bitmap_free(changed);
1055         return err;
1056
1057 err_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
1088 int 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);
1106 out:
1107         return err;
1108 }
1109
1110 int 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
1129 out:
1130         return ret;
1131
1132 err_tunnel_init:
1133         rhashtable_destroy(&vg->vlan_hash);
1134 err_rhtbl:
1135         kfree(vg);
1136
1137         goto out;
1138 }
1139
1140 int 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         }
1178 out:
1179         return ret;
1180
1181 err_vlan_add:
1182         RCU_INIT_POINTER(p->vlgrp, NULL);
1183         synchronize_rcu();
1184         vlan_tunnel_deinit(vg);
1185 err_tunnel_init:
1186         rhashtable_destroy(&vg->vlan_hash);
1187 err_rhtbl:
1188 err_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  */
1198 int 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  */
1236 int 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
1251 void 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
1264 void 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
1291 int 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 }
1308 EXPORT_SYMBOL_GPL(br_vlan_get_pvid);
1309
1310 int 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 }
1326 EXPORT_SYMBOL_GPL(br_vlan_get_pvid_rcu);
1327
1328 int 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 }
1354 EXPORT_SYMBOL_GPL(br_vlan_get_info);
1355
1356 static 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
1362 static 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
1368 static 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
1380 struct br_vlan_bind_walk_data {
1381         u16 vid;
1382         struct net_device *result;
1383 };
1384
1385 static 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
1400 static struct net_device *
1401 br_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
1418 static bool br_vlan_is_dev_up(const struct net_device *dev)
1419 {
1420         return  !!(dev->flags & IFF_UP) && netif_oper_up(dev);
1421 }
1422
1423 static 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
1450 static 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
1470 static 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
1488 struct br_vlan_link_state_walk_data {
1489         struct net_bridge *br;
1490 };
1491
1492 static 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
1503 static 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. */
1520 static 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. */
1533 int 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. */
1571 void 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
1585 static 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
1610 out_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 */
1616 static 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
1655 out_err:
1656         nla_nest_cancel(skb, nest);
1657         return false;
1658 }
1659
1660 static 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
1669 void 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
1734 out_err:
1735         rtnl_set_sk_err(net, RTNLGRP_BRVLAN, err);
1736 out_kfree:
1737         kfree_skb(skb);
1738 }
1739
1740 /* check if v_curr can enter a range ending in range_end */
1741 bool 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
1749 static 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
1844 static const struct nla_policy br_vlan_db_dump_pol[BRIDGE_VLANDB_DUMP_MAX + 1] = {
1845         [BRIDGE_VLANDB_DUMP_FLAGS] = { .type = NLA_U32 },
1846 };
1847
1848 static 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;
1884 skip:
1885                         idx++;
1886                 }
1887         }
1888         cb->args[0] = idx;
1889         rcu_read_unlock();
1890
1891         return skb->len;
1892
1893 out_err:
1894         rcu_read_unlock();
1895
1896         return err;
1897 }
1898
1899 static const struct nla_policy br_vlan_db_policy[BRIDGE_VLANDB_ENTRY_MAX + 1] = {
1900         [BRIDGE_VLANDB_ENTRY_INFO]      =
1901                 NLA_POLICY_EXACT_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
1907 static 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
2012 static 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
2056 void 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
2066 void 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 }