thermal: Remove stubs for thermal_zone_[un]bind_cooling_device
[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 a
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 static int __br_vlan_get_pvid(const struct net_device *dev,
1292                               struct net_bridge_port *p, u16 *p_pvid)
1293 {
1294         struct net_bridge_vlan_group *vg;
1295
1296         if (p)
1297                 vg = nbp_vlan_group(p);
1298         else if (netif_is_bridge_master(dev))
1299                 vg = br_vlan_group(netdev_priv(dev));
1300         else
1301                 return -EINVAL;
1302
1303         *p_pvid = br_get_pvid(vg);
1304         return 0;
1305 }
1306
1307 int br_vlan_get_pvid(const struct net_device *dev, u16 *p_pvid)
1308 {
1309         ASSERT_RTNL();
1310
1311         return __br_vlan_get_pvid(dev, br_port_get_check_rtnl(dev), p_pvid);
1312 }
1313 EXPORT_SYMBOL_GPL(br_vlan_get_pvid);
1314
1315 int br_vlan_get_pvid_rcu(const struct net_device *dev, u16 *p_pvid)
1316 {
1317         return __br_vlan_get_pvid(dev, br_port_get_check_rcu(dev), p_pvid);
1318 }
1319 EXPORT_SYMBOL_GPL(br_vlan_get_pvid_rcu);
1320
1321 int br_vlan_get_info(const struct net_device *dev, u16 vid,
1322                      struct bridge_vlan_info *p_vinfo)
1323 {
1324         struct net_bridge_vlan_group *vg;
1325         struct net_bridge_vlan *v;
1326         struct net_bridge_port *p;
1327
1328         ASSERT_RTNL();
1329         p = br_port_get_check_rtnl(dev);
1330         if (p)
1331                 vg = nbp_vlan_group(p);
1332         else if (netif_is_bridge_master(dev))
1333                 vg = br_vlan_group(netdev_priv(dev));
1334         else
1335                 return -EINVAL;
1336
1337         v = br_vlan_find(vg, vid);
1338         if (!v)
1339                 return -ENOENT;
1340
1341         p_vinfo->vid = vid;
1342         p_vinfo->flags = v->flags;
1343         if (vid == br_get_pvid(vg))
1344                 p_vinfo->flags |= BRIDGE_VLAN_INFO_PVID;
1345         return 0;
1346 }
1347 EXPORT_SYMBOL_GPL(br_vlan_get_info);
1348
1349 static int br_vlan_is_bind_vlan_dev(const struct net_device *dev)
1350 {
1351         return is_vlan_dev(dev) &&
1352                 !!(vlan_dev_priv(dev)->flags & VLAN_FLAG_BRIDGE_BINDING);
1353 }
1354
1355 static int br_vlan_is_bind_vlan_dev_fn(struct net_device *dev,
1356                                        __always_unused void *data)
1357 {
1358         return br_vlan_is_bind_vlan_dev(dev);
1359 }
1360
1361 static bool br_vlan_has_upper_bind_vlan_dev(struct net_device *dev)
1362 {
1363         int found;
1364
1365         rcu_read_lock();
1366         found = netdev_walk_all_upper_dev_rcu(dev, br_vlan_is_bind_vlan_dev_fn,
1367                                               NULL);
1368         rcu_read_unlock();
1369
1370         return !!found;
1371 }
1372
1373 struct br_vlan_bind_walk_data {
1374         u16 vid;
1375         struct net_device *result;
1376 };
1377
1378 static int br_vlan_match_bind_vlan_dev_fn(struct net_device *dev,
1379                                           void *data_in)
1380 {
1381         struct br_vlan_bind_walk_data *data = data_in;
1382         int found = 0;
1383
1384         if (br_vlan_is_bind_vlan_dev(dev) &&
1385             vlan_dev_priv(dev)->vlan_id == data->vid) {
1386                 data->result = dev;
1387                 found = 1;
1388         }
1389
1390         return found;
1391 }
1392
1393 static struct net_device *
1394 br_vlan_get_upper_bind_vlan_dev(struct net_device *dev, u16 vid)
1395 {
1396         struct br_vlan_bind_walk_data data = {
1397                 .vid = vid,
1398         };
1399
1400         rcu_read_lock();
1401         netdev_walk_all_upper_dev_rcu(dev, br_vlan_match_bind_vlan_dev_fn,
1402                                       &data);
1403         rcu_read_unlock();
1404
1405         return data.result;
1406 }
1407
1408 static bool br_vlan_is_dev_up(const struct net_device *dev)
1409 {
1410         return  !!(dev->flags & IFF_UP) && netif_oper_up(dev);
1411 }
1412
1413 static void br_vlan_set_vlan_dev_state(const struct net_bridge *br,
1414                                        struct net_device *vlan_dev)
1415 {
1416         u16 vid = vlan_dev_priv(vlan_dev)->vlan_id;
1417         struct net_bridge_vlan_group *vg;
1418         struct net_bridge_port *p;
1419         bool has_carrier = false;
1420
1421         if (!netif_carrier_ok(br->dev)) {
1422                 netif_carrier_off(vlan_dev);
1423                 return;
1424         }
1425
1426         list_for_each_entry(p, &br->port_list, list) {
1427                 vg = nbp_vlan_group(p);
1428                 if (br_vlan_find(vg, vid) && br_vlan_is_dev_up(p->dev)) {
1429                         has_carrier = true;
1430                         break;
1431                 }
1432         }
1433
1434         if (has_carrier)
1435                 netif_carrier_on(vlan_dev);
1436         else
1437                 netif_carrier_off(vlan_dev);
1438 }
1439
1440 static void br_vlan_set_all_vlan_dev_state(struct net_bridge_port *p)
1441 {
1442         struct net_bridge_vlan_group *vg = nbp_vlan_group(p);
1443         struct net_bridge_vlan *vlan;
1444         struct net_device *vlan_dev;
1445
1446         list_for_each_entry(vlan, &vg->vlan_list, vlist) {
1447                 vlan_dev = br_vlan_get_upper_bind_vlan_dev(p->br->dev,
1448                                                            vlan->vid);
1449                 if (vlan_dev) {
1450                         if (br_vlan_is_dev_up(p->dev)) {
1451                                 if (netif_carrier_ok(p->br->dev))
1452                                         netif_carrier_on(vlan_dev);
1453                         } else {
1454                                 br_vlan_set_vlan_dev_state(p->br, vlan_dev);
1455                         }
1456                 }
1457         }
1458 }
1459
1460 static void br_vlan_upper_change(struct net_device *dev,
1461                                  struct net_device *upper_dev,
1462                                  bool linking)
1463 {
1464         struct net_bridge *br = netdev_priv(dev);
1465
1466         if (!br_vlan_is_bind_vlan_dev(upper_dev))
1467                 return;
1468
1469         if (linking) {
1470                 br_vlan_set_vlan_dev_state(br, upper_dev);
1471                 br_opt_toggle(br, BROPT_VLAN_BRIDGE_BINDING, true);
1472         } else {
1473                 br_opt_toggle(br, BROPT_VLAN_BRIDGE_BINDING,
1474                               br_vlan_has_upper_bind_vlan_dev(dev));
1475         }
1476 }
1477
1478 struct br_vlan_link_state_walk_data {
1479         struct net_bridge *br;
1480 };
1481
1482 static int br_vlan_link_state_change_fn(struct net_device *vlan_dev,
1483                                         void *data_in)
1484 {
1485         struct br_vlan_link_state_walk_data *data = data_in;
1486
1487         if (br_vlan_is_bind_vlan_dev(vlan_dev))
1488                 br_vlan_set_vlan_dev_state(data->br, vlan_dev);
1489
1490         return 0;
1491 }
1492
1493 static void br_vlan_link_state_change(struct net_device *dev,
1494                                       struct net_bridge *br)
1495 {
1496         struct br_vlan_link_state_walk_data data = {
1497                 .br = br
1498         };
1499
1500         rcu_read_lock();
1501         netdev_walk_all_upper_dev_rcu(dev, br_vlan_link_state_change_fn,
1502                                       &data);
1503         rcu_read_unlock();
1504 }
1505
1506 /* Must be protected by RTNL. */
1507 static void nbp_vlan_set_vlan_dev_state(struct net_bridge_port *p, u16 vid)
1508 {
1509         struct net_device *vlan_dev;
1510
1511         if (!br_opt_get(p->br, BROPT_VLAN_BRIDGE_BINDING))
1512                 return;
1513
1514         vlan_dev = br_vlan_get_upper_bind_vlan_dev(p->br->dev, vid);
1515         if (vlan_dev)
1516                 br_vlan_set_vlan_dev_state(p->br, vlan_dev);
1517 }
1518
1519 /* Must be protected by RTNL. */
1520 int br_vlan_bridge_event(struct net_device *dev, unsigned long event, void *ptr)
1521 {
1522         struct netdev_notifier_changeupper_info *info;
1523         struct net_bridge *br = netdev_priv(dev);
1524         int vlcmd = 0, ret = 0;
1525         bool changed = false;
1526
1527         switch (event) {
1528         case NETDEV_REGISTER:
1529                 ret = br_vlan_add(br, br->default_pvid,
1530                                   BRIDGE_VLAN_INFO_PVID |
1531                                   BRIDGE_VLAN_INFO_UNTAGGED |
1532                                   BRIDGE_VLAN_INFO_BRENTRY, &changed, NULL);
1533                 vlcmd = RTM_NEWVLAN;
1534                 break;
1535         case NETDEV_UNREGISTER:
1536                 changed = !br_vlan_delete(br, br->default_pvid);
1537                 vlcmd = RTM_DELVLAN;
1538                 break;
1539         case NETDEV_CHANGEUPPER:
1540                 info = ptr;
1541                 br_vlan_upper_change(dev, info->upper_dev, info->linking);
1542                 break;
1543
1544         case NETDEV_CHANGE:
1545         case NETDEV_UP:
1546                 if (!br_opt_get(br, BROPT_VLAN_BRIDGE_BINDING))
1547                         break;
1548                 br_vlan_link_state_change(dev, br);
1549                 break;
1550         }
1551         if (changed)
1552                 br_vlan_notify(br, NULL, br->default_pvid, 0, vlcmd);
1553
1554         return ret;
1555 }
1556
1557 /* Must be protected by RTNL. */
1558 void br_vlan_port_event(struct net_bridge_port *p, unsigned long event)
1559 {
1560         if (!br_opt_get(p->br, BROPT_VLAN_BRIDGE_BINDING))
1561                 return;
1562
1563         switch (event) {
1564         case NETDEV_CHANGE:
1565         case NETDEV_DOWN:
1566         case NETDEV_UP:
1567                 br_vlan_set_all_vlan_dev_state(p);
1568                 break;
1569         }
1570 }
1571
1572 static bool br_vlan_stats_fill(struct sk_buff *skb,
1573                                const struct net_bridge_vlan *v)
1574 {
1575         struct br_vlan_stats stats;
1576         struct nlattr *nest;
1577
1578         nest = nla_nest_start(skb, BRIDGE_VLANDB_ENTRY_STATS);
1579         if (!nest)
1580                 return false;
1581
1582         br_vlan_get_stats(v, &stats);
1583         if (nla_put_u64_64bit(skb, BRIDGE_VLANDB_STATS_RX_BYTES, stats.rx_bytes,
1584                               BRIDGE_VLANDB_STATS_PAD) ||
1585             nla_put_u64_64bit(skb, BRIDGE_VLANDB_STATS_RX_PACKETS,
1586                               stats.rx_packets, BRIDGE_VLANDB_STATS_PAD) ||
1587             nla_put_u64_64bit(skb, BRIDGE_VLANDB_STATS_TX_BYTES, stats.tx_bytes,
1588                               BRIDGE_VLANDB_STATS_PAD) ||
1589             nla_put_u64_64bit(skb, BRIDGE_VLANDB_STATS_TX_PACKETS,
1590                               stats.tx_packets, BRIDGE_VLANDB_STATS_PAD))
1591                 goto out_err;
1592
1593         nla_nest_end(skb, nest);
1594
1595         return true;
1596
1597 out_err:
1598         nla_nest_cancel(skb, nest);
1599         return false;
1600 }
1601
1602 /* v_opts is used to dump the options which must be equal in the whole range */
1603 static bool br_vlan_fill_vids(struct sk_buff *skb, u16 vid, u16 vid_range,
1604                               const struct net_bridge_vlan *v_opts,
1605                               u16 flags,
1606                               bool dump_stats)
1607 {
1608         struct bridge_vlan_info info;
1609         struct nlattr *nest;
1610
1611         nest = nla_nest_start(skb, BRIDGE_VLANDB_ENTRY);
1612         if (!nest)
1613                 return false;
1614
1615         memset(&info, 0, sizeof(info));
1616         info.vid = vid;
1617         if (flags & BRIDGE_VLAN_INFO_UNTAGGED)
1618                 info.flags |= BRIDGE_VLAN_INFO_UNTAGGED;
1619         if (flags & BRIDGE_VLAN_INFO_PVID)
1620                 info.flags |= BRIDGE_VLAN_INFO_PVID;
1621
1622         if (nla_put(skb, BRIDGE_VLANDB_ENTRY_INFO, sizeof(info), &info))
1623                 goto out_err;
1624
1625         if (vid_range && vid < vid_range &&
1626             !(flags & BRIDGE_VLAN_INFO_PVID) &&
1627             nla_put_u16(skb, BRIDGE_VLANDB_ENTRY_RANGE, vid_range))
1628                 goto out_err;
1629
1630         if (v_opts) {
1631                 if (!br_vlan_opts_fill(skb, v_opts))
1632                         goto out_err;
1633
1634                 if (dump_stats && !br_vlan_stats_fill(skb, v_opts))
1635                         goto out_err;
1636         }
1637
1638         nla_nest_end(skb, nest);
1639
1640         return true;
1641
1642 out_err:
1643         nla_nest_cancel(skb, nest);
1644         return false;
1645 }
1646
1647 static size_t rtnl_vlan_nlmsg_size(void)
1648 {
1649         return NLMSG_ALIGN(sizeof(struct br_vlan_msg))
1650                 + nla_total_size(0) /* BRIDGE_VLANDB_ENTRY */
1651                 + nla_total_size(sizeof(u16)) /* BRIDGE_VLANDB_ENTRY_RANGE */
1652                 + nla_total_size(sizeof(struct bridge_vlan_info)) /* BRIDGE_VLANDB_ENTRY_INFO */
1653                 + br_vlan_opts_nl_size(); /* bridge vlan options */
1654 }
1655
1656 void br_vlan_notify(const struct net_bridge *br,
1657                     const struct net_bridge_port *p,
1658                     u16 vid, u16 vid_range,
1659                     int cmd)
1660 {
1661         struct net_bridge_vlan_group *vg;
1662         struct net_bridge_vlan *v = NULL;
1663         struct br_vlan_msg *bvm;
1664         struct nlmsghdr *nlh;
1665         struct sk_buff *skb;
1666         int err = -ENOBUFS;
1667         struct net *net;
1668         u16 flags = 0;
1669         int ifindex;
1670
1671         /* right now notifications are done only with rtnl held */
1672         ASSERT_RTNL();
1673
1674         if (p) {
1675                 ifindex = p->dev->ifindex;
1676                 vg = nbp_vlan_group(p);
1677                 net = dev_net(p->dev);
1678         } else {
1679                 ifindex = br->dev->ifindex;
1680                 vg = br_vlan_group(br);
1681                 net = dev_net(br->dev);
1682         }
1683
1684         skb = nlmsg_new(rtnl_vlan_nlmsg_size(), GFP_KERNEL);
1685         if (!skb)
1686                 goto out_err;
1687
1688         err = -EMSGSIZE;
1689         nlh = nlmsg_put(skb, 0, 0, cmd, sizeof(*bvm), 0);
1690         if (!nlh)
1691                 goto out_err;
1692         bvm = nlmsg_data(nlh);
1693         memset(bvm, 0, sizeof(*bvm));
1694         bvm->family = AF_BRIDGE;
1695         bvm->ifindex = ifindex;
1696
1697         switch (cmd) {
1698         case RTM_NEWVLAN:
1699                 /* need to find the vlan due to flags/options */
1700                 v = br_vlan_find(vg, vid);
1701                 if (!v || !br_vlan_should_use(v))
1702                         goto out_kfree;
1703
1704                 flags = v->flags;
1705                 if (br_get_pvid(vg) == v->vid)
1706                         flags |= BRIDGE_VLAN_INFO_PVID;
1707                 break;
1708         case RTM_DELVLAN:
1709                 break;
1710         default:
1711                 goto out_kfree;
1712         }
1713
1714         if (!br_vlan_fill_vids(skb, vid, vid_range, v, flags, false))
1715                 goto out_err;
1716
1717         nlmsg_end(skb, nlh);
1718         rtnl_notify(skb, net, 0, RTNLGRP_BRVLAN, NULL, GFP_KERNEL);
1719         return;
1720
1721 out_err:
1722         rtnl_set_sk_err(net, RTNLGRP_BRVLAN, err);
1723 out_kfree:
1724         kfree_skb(skb);
1725 }
1726
1727 /* check if v_curr can enter a range ending in range_end */
1728 bool br_vlan_can_enter_range(const struct net_bridge_vlan *v_curr,
1729                              const struct net_bridge_vlan *range_end)
1730 {
1731         return v_curr->vid - range_end->vid == 1 &&
1732                range_end->flags == v_curr->flags &&
1733                br_vlan_opts_eq_range(v_curr, range_end);
1734 }
1735
1736 static int br_vlan_dump_dev(const struct net_device *dev,
1737                             struct sk_buff *skb,
1738                             struct netlink_callback *cb,
1739                             u32 dump_flags)
1740 {
1741         struct net_bridge_vlan *v, *range_start = NULL, *range_end = NULL;
1742         bool dump_stats = !!(dump_flags & BRIDGE_VLANDB_DUMPF_STATS);
1743         struct net_bridge_vlan_group *vg;
1744         int idx = 0, s_idx = cb->args[1];
1745         struct nlmsghdr *nlh = NULL;
1746         struct net_bridge_port *p;
1747         struct br_vlan_msg *bvm;
1748         struct net_bridge *br;
1749         int err = 0;
1750         u16 pvid;
1751
1752         if (!netif_is_bridge_master(dev) && !netif_is_bridge_port(dev))
1753                 return -EINVAL;
1754
1755         if (netif_is_bridge_master(dev)) {
1756                 br = netdev_priv(dev);
1757                 vg = br_vlan_group_rcu(br);
1758                 p = NULL;
1759         } else {
1760                 p = br_port_get_rcu(dev);
1761                 if (WARN_ON(!p))
1762                         return -EINVAL;
1763                 vg = nbp_vlan_group_rcu(p);
1764                 br = p->br;
1765         }
1766
1767         if (!vg)
1768                 return 0;
1769
1770         nlh = nlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq,
1771                         RTM_NEWVLAN, sizeof(*bvm), NLM_F_MULTI);
1772         if (!nlh)
1773                 return -EMSGSIZE;
1774         bvm = nlmsg_data(nlh);
1775         memset(bvm, 0, sizeof(*bvm));
1776         bvm->family = PF_BRIDGE;
1777         bvm->ifindex = dev->ifindex;
1778         pvid = br_get_pvid(vg);
1779
1780         /* idx must stay at range's beginning until it is filled in */
1781         list_for_each_entry_rcu(v, &vg->vlan_list, vlist) {
1782                 if (!br_vlan_should_use(v))
1783                         continue;
1784                 if (idx < s_idx) {
1785                         idx++;
1786                         continue;
1787                 }
1788
1789                 if (!range_start) {
1790                         range_start = v;
1791                         range_end = v;
1792                         continue;
1793                 }
1794
1795                 if (dump_stats || v->vid == pvid ||
1796                     !br_vlan_can_enter_range(v, range_end)) {
1797                         u16 vlan_flags = br_vlan_flags(range_start, pvid);
1798
1799                         if (!br_vlan_fill_vids(skb, range_start->vid,
1800                                                range_end->vid, range_start,
1801                                                vlan_flags, dump_stats)) {
1802                                 err = -EMSGSIZE;
1803                                 break;
1804                         }
1805                         /* advance number of filled vlans */
1806                         idx += range_end->vid - range_start->vid + 1;
1807
1808                         range_start = v;
1809                 }
1810                 range_end = v;
1811         }
1812
1813         /* err will be 0 and range_start will be set in 3 cases here:
1814          * - first vlan (range_start == range_end)
1815          * - last vlan (range_start == range_end, not in range)
1816          * - last vlan range (range_start != range_end, in range)
1817          */
1818         if (!err && range_start &&
1819             !br_vlan_fill_vids(skb, range_start->vid, range_end->vid,
1820                                range_start, br_vlan_flags(range_start, pvid),
1821                                dump_stats))
1822                 err = -EMSGSIZE;
1823
1824         cb->args[1] = err ? idx : 0;
1825
1826         nlmsg_end(skb, nlh);
1827
1828         return err;
1829 }
1830
1831 static const struct nla_policy br_vlan_db_dump_pol[BRIDGE_VLANDB_DUMP_MAX + 1] = {
1832         [BRIDGE_VLANDB_DUMP_FLAGS] = { .type = NLA_U32 },
1833 };
1834
1835 static int br_vlan_rtm_dump(struct sk_buff *skb, struct netlink_callback *cb)
1836 {
1837         struct nlattr *dtb[BRIDGE_VLANDB_DUMP_MAX + 1];
1838         int idx = 0, err = 0, s_idx = cb->args[0];
1839         struct net *net = sock_net(skb->sk);
1840         struct br_vlan_msg *bvm;
1841         struct net_device *dev;
1842         u32 dump_flags = 0;
1843
1844         err = nlmsg_parse(cb->nlh, sizeof(*bvm), dtb, BRIDGE_VLANDB_DUMP_MAX,
1845                           br_vlan_db_dump_pol, cb->extack);
1846         if (err < 0)
1847                 return err;
1848
1849         bvm = nlmsg_data(cb->nlh);
1850         if (dtb[BRIDGE_VLANDB_DUMP_FLAGS])
1851                 dump_flags = nla_get_u32(dtb[BRIDGE_VLANDB_DUMP_FLAGS]);
1852
1853         rcu_read_lock();
1854         if (bvm->ifindex) {
1855                 dev = dev_get_by_index_rcu(net, bvm->ifindex);
1856                 if (!dev) {
1857                         err = -ENODEV;
1858                         goto out_err;
1859                 }
1860                 err = br_vlan_dump_dev(dev, skb, cb, dump_flags);
1861                 if (err && err != -EMSGSIZE)
1862                         goto out_err;
1863         } else {
1864                 for_each_netdev_rcu(net, dev) {
1865                         if (idx < s_idx)
1866                                 goto skip;
1867
1868                         err = br_vlan_dump_dev(dev, skb, cb, dump_flags);
1869                         if (err == -EMSGSIZE)
1870                                 break;
1871 skip:
1872                         idx++;
1873                 }
1874         }
1875         cb->args[0] = idx;
1876         rcu_read_unlock();
1877
1878         return skb->len;
1879
1880 out_err:
1881         rcu_read_unlock();
1882
1883         return err;
1884 }
1885
1886 static const struct nla_policy br_vlan_db_policy[BRIDGE_VLANDB_ENTRY_MAX + 1] = {
1887         [BRIDGE_VLANDB_ENTRY_INFO]      = { .type = NLA_EXACT_LEN,
1888                                             .len = sizeof(struct bridge_vlan_info) },
1889         [BRIDGE_VLANDB_ENTRY_RANGE]     = { .type = NLA_U16 },
1890         [BRIDGE_VLANDB_ENTRY_STATE]     = { .type = NLA_U8 },
1891         [BRIDGE_VLANDB_ENTRY_TUNNEL_INFO] = { .type = NLA_NESTED },
1892 };
1893
1894 static int br_vlan_rtm_process_one(struct net_device *dev,
1895                                    const struct nlattr *attr,
1896                                    int cmd, struct netlink_ext_ack *extack)
1897 {
1898         struct bridge_vlan_info *vinfo, vrange_end, *vinfo_last = NULL;
1899         struct nlattr *tb[BRIDGE_VLANDB_ENTRY_MAX + 1];
1900         bool changed = false, skip_processing = false;
1901         struct net_bridge_vlan_group *vg;
1902         struct net_bridge_port *p = NULL;
1903         int err = 0, cmdmap = 0;
1904         struct net_bridge *br;
1905
1906         if (netif_is_bridge_master(dev)) {
1907                 br = netdev_priv(dev);
1908                 vg = br_vlan_group(br);
1909         } else {
1910                 p = br_port_get_rtnl(dev);
1911                 if (WARN_ON(!p))
1912                         return -ENODEV;
1913                 br = p->br;
1914                 vg = nbp_vlan_group(p);
1915         }
1916
1917         if (WARN_ON(!vg))
1918                 return -ENODEV;
1919
1920         err = nla_parse_nested(tb, BRIDGE_VLANDB_ENTRY_MAX, attr,
1921                                br_vlan_db_policy, extack);
1922         if (err)
1923                 return err;
1924
1925         if (!tb[BRIDGE_VLANDB_ENTRY_INFO]) {
1926                 NL_SET_ERR_MSG_MOD(extack, "Missing vlan entry info");
1927                 return -EINVAL;
1928         }
1929         memset(&vrange_end, 0, sizeof(vrange_end));
1930
1931         vinfo = nla_data(tb[BRIDGE_VLANDB_ENTRY_INFO]);
1932         if (vinfo->flags & (BRIDGE_VLAN_INFO_RANGE_BEGIN |
1933                             BRIDGE_VLAN_INFO_RANGE_END)) {
1934                 NL_SET_ERR_MSG_MOD(extack, "Old-style vlan ranges are not allowed when using RTM vlan calls");
1935                 return -EINVAL;
1936         }
1937         if (!br_vlan_valid_id(vinfo->vid, extack))
1938                 return -EINVAL;
1939
1940         if (tb[BRIDGE_VLANDB_ENTRY_RANGE]) {
1941                 vrange_end.vid = nla_get_u16(tb[BRIDGE_VLANDB_ENTRY_RANGE]);
1942                 /* validate user-provided flags without RANGE_BEGIN */
1943                 vrange_end.flags = BRIDGE_VLAN_INFO_RANGE_END | vinfo->flags;
1944                 vinfo->flags |= BRIDGE_VLAN_INFO_RANGE_BEGIN;
1945
1946                 /* vinfo_last is the range start, vinfo the range end */
1947                 vinfo_last = vinfo;
1948                 vinfo = &vrange_end;
1949
1950                 if (!br_vlan_valid_id(vinfo->vid, extack) ||
1951                     !br_vlan_valid_range(vinfo, vinfo_last, extack))
1952                         return -EINVAL;
1953         }
1954
1955         switch (cmd) {
1956         case RTM_NEWVLAN:
1957                 cmdmap = RTM_SETLINK;
1958                 skip_processing = !!(vinfo->flags & BRIDGE_VLAN_INFO_ONLY_OPTS);
1959                 break;
1960         case RTM_DELVLAN:
1961                 cmdmap = RTM_DELLINK;
1962                 break;
1963         }
1964
1965         if (!skip_processing) {
1966                 struct bridge_vlan_info *tmp_last = vinfo_last;
1967
1968                 /* br_process_vlan_info may overwrite vinfo_last */
1969                 err = br_process_vlan_info(br, p, cmdmap, vinfo, &tmp_last,
1970                                            &changed, extack);
1971
1972                 /* notify first if anything changed */
1973                 if (changed)
1974                         br_ifinfo_notify(cmdmap, br, p);
1975
1976                 if (err)
1977                         return err;
1978         }
1979
1980         /* deal with options */
1981         if (cmd == RTM_NEWVLAN) {
1982                 struct net_bridge_vlan *range_start, *range_end;
1983
1984                 if (vinfo_last) {
1985                         range_start = br_vlan_find(vg, vinfo_last->vid);
1986                         range_end = br_vlan_find(vg, vinfo->vid);
1987                 } else {
1988                         range_start = br_vlan_find(vg, vinfo->vid);
1989                         range_end = range_start;
1990                 }
1991
1992                 err = br_vlan_process_options(br, p, range_start, range_end,
1993                                               tb, extack);
1994         }
1995
1996         return err;
1997 }
1998
1999 static int br_vlan_rtm_process(struct sk_buff *skb, struct nlmsghdr *nlh,
2000                                struct netlink_ext_ack *extack)
2001 {
2002         struct net *net = sock_net(skb->sk);
2003         struct br_vlan_msg *bvm;
2004         struct net_device *dev;
2005         struct nlattr *attr;
2006         int err, vlans = 0;
2007         int rem;
2008
2009         /* this should validate the header and check for remaining bytes */
2010         err = nlmsg_parse(nlh, sizeof(*bvm), NULL, BRIDGE_VLANDB_MAX, NULL,
2011                           extack);
2012         if (err < 0)
2013                 return err;
2014
2015         bvm = nlmsg_data(nlh);
2016         dev = __dev_get_by_index(net, bvm->ifindex);
2017         if (!dev)
2018                 return -ENODEV;
2019
2020         if (!netif_is_bridge_master(dev) && !netif_is_bridge_port(dev)) {
2021                 NL_SET_ERR_MSG_MOD(extack, "The device is not a valid bridge or bridge port");
2022                 return -EINVAL;
2023         }
2024
2025         nlmsg_for_each_attr(attr, nlh, sizeof(*bvm), rem) {
2026                 if (nla_type(attr) != BRIDGE_VLANDB_ENTRY)
2027                         continue;
2028
2029                 vlans++;
2030                 err = br_vlan_rtm_process_one(dev, attr, nlh->nlmsg_type,
2031                                               extack);
2032                 if (err)
2033                         break;
2034         }
2035         if (!vlans) {
2036                 NL_SET_ERR_MSG_MOD(extack, "No vlans found to process");
2037                 err = -EINVAL;
2038         }
2039
2040         return err;
2041 }
2042
2043 void br_vlan_rtnl_init(void)
2044 {
2045         rtnl_register_module(THIS_MODULE, PF_BRIDGE, RTM_GETVLAN, NULL,
2046                              br_vlan_rtm_dump, 0);
2047         rtnl_register_module(THIS_MODULE, PF_BRIDGE, RTM_NEWVLAN,
2048                              br_vlan_rtm_process, NULL, 0);
2049         rtnl_register_module(THIS_MODULE, PF_BRIDGE, RTM_DELVLAN,
2050                              br_vlan_rtm_process, NULL, 0);
2051 }
2052
2053 void br_vlan_rtnl_uninit(void)
2054 {
2055         rtnl_unregister(PF_BRIDGE, RTM_GETVLAN);
2056         rtnl_unregister(PF_BRIDGE, RTM_NEWVLAN);
2057         rtnl_unregister(PF_BRIDGE, RTM_DELVLAN);
2058 }