GNU Linux-libre 4.14.266-gnu1
[releases.git] / net / bridge / br_vlan.c
1 #include <linux/kernel.h>
2 #include <linux/netdevice.h>
3 #include <linux/rtnetlink.h>
4 #include <linux/slab.h>
5 #include <net/switchdev.h>
6
7 #include "br_private.h"
8 #include "br_private_tunnel.h"
9
10 static inline int br_vlan_cmp(struct rhashtable_compare_arg *arg,
11                               const void *ptr)
12 {
13         const struct net_bridge_vlan *vle = ptr;
14         u16 vid = *(u16 *)arg->key;
15
16         return vle->vid != vid;
17 }
18
19 static const struct rhashtable_params br_vlan_rht_params = {
20         .head_offset = offsetof(struct net_bridge_vlan, vnode),
21         .key_offset = offsetof(struct net_bridge_vlan, vid),
22         .key_len = sizeof(u16),
23         .nelem_hint = 3,
24         .locks_mul = 1,
25         .max_size = VLAN_N_VID,
26         .obj_cmpfn = br_vlan_cmp,
27         .automatic_shrinking = true,
28 };
29
30 static struct net_bridge_vlan *br_vlan_lookup(struct rhashtable *tbl, u16 vid)
31 {
32         return rhashtable_lookup_fast(tbl, &vid, br_vlan_rht_params);
33 }
34
35 static void __vlan_add_pvid(struct net_bridge_vlan_group *vg, u16 vid)
36 {
37         if (vg->pvid == vid)
38                 return;
39
40         smp_wmb();
41         vg->pvid = vid;
42 }
43
44 static void __vlan_delete_pvid(struct net_bridge_vlan_group *vg, u16 vid)
45 {
46         if (vg->pvid != vid)
47                 return;
48
49         smp_wmb();
50         vg->pvid = 0;
51 }
52
53 static void __vlan_add_flags(struct net_bridge_vlan *v, u16 flags)
54 {
55         struct net_bridge_vlan_group *vg;
56
57         if (br_vlan_is_master(v))
58                 vg = br_vlan_group(v->br);
59         else
60                 vg = nbp_vlan_group(v->port);
61
62         if (flags & BRIDGE_VLAN_INFO_PVID)
63                 __vlan_add_pvid(vg, v->vid);
64         else
65                 __vlan_delete_pvid(vg, v->vid);
66
67         if (flags & BRIDGE_VLAN_INFO_UNTAGGED)
68                 v->flags |= BRIDGE_VLAN_INFO_UNTAGGED;
69         else
70                 v->flags &= ~BRIDGE_VLAN_INFO_UNTAGGED;
71 }
72
73 static int __vlan_vid_add(struct net_device *dev, struct net_bridge *br,
74                           u16 vid, u16 flags)
75 {
76         struct switchdev_obj_port_vlan v = {
77                 .obj.orig_dev = dev,
78                 .obj.id = SWITCHDEV_OBJ_ID_PORT_VLAN,
79                 .flags = flags,
80                 .vid_begin = vid,
81                 .vid_end = vid,
82         };
83         int err;
84
85         /* Try switchdev op first. In case it is not supported, fallback to
86          * 8021q add.
87          */
88         err = switchdev_port_obj_add(dev, &v.obj);
89         if (err == -EOPNOTSUPP)
90                 return vlan_vid_add(dev, br->vlan_proto, vid);
91         return err;
92 }
93
94 static void __vlan_add_list(struct net_bridge_vlan *v)
95 {
96         struct net_bridge_vlan_group *vg;
97         struct list_head *headp, *hpos;
98         struct net_bridge_vlan *vent;
99
100         if (br_vlan_is_master(v))
101                 vg = br_vlan_group(v->br);
102         else
103                 vg = nbp_vlan_group(v->port);
104
105         headp = &vg->vlan_list;
106         list_for_each_prev(hpos, headp) {
107                 vent = list_entry(hpos, struct net_bridge_vlan, vlist);
108                 if (v->vid < vent->vid)
109                         continue;
110                 else
111                         break;
112         }
113         list_add_rcu(&v->vlist, hpos);
114 }
115
116 static void __vlan_del_list(struct net_bridge_vlan *v)
117 {
118         list_del_rcu(&v->vlist);
119 }
120
121 static int __vlan_vid_del(struct net_device *dev, struct net_bridge *br,
122                           u16 vid)
123 {
124         struct switchdev_obj_port_vlan v = {
125                 .obj.orig_dev = dev,
126                 .obj.id = SWITCHDEV_OBJ_ID_PORT_VLAN,
127                 .vid_begin = vid,
128                 .vid_end = vid,
129         };
130         int err;
131
132         /* Try switchdev op first. In case it is not supported, fallback to
133          * 8021q del.
134          */
135         err = switchdev_port_obj_del(dev, &v.obj);
136         if (err == -EOPNOTSUPP) {
137                 vlan_vid_del(dev, br->vlan_proto, vid);
138                 return 0;
139         }
140         return 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 *br_vlan_get_master(struct net_bridge *br, u16 vid)
147 {
148         struct net_bridge_vlan_group *vg;
149         struct net_bridge_vlan *masterv;
150
151         vg = br_vlan_group(br);
152         masterv = br_vlan_find(vg, vid);
153         if (!masterv) {
154                 /* missing global ctx, create it now */
155                 if (br_vlan_add(br, vid, 0))
156                         return NULL;
157                 masterv = br_vlan_find(vg, vid);
158                 if (WARN_ON(!masterv))
159                         return NULL;
160                 refcount_set(&masterv->refcnt, 1);
161                 return masterv;
162         }
163         refcount_inc(&masterv->refcnt);
164
165         return masterv;
166 }
167
168 static void br_master_vlan_rcu_free(struct rcu_head *rcu)
169 {
170         struct net_bridge_vlan *v;
171
172         v = container_of(rcu, struct net_bridge_vlan, rcu);
173         WARN_ON(!br_vlan_is_master(v));
174         free_percpu(v->stats);
175         v->stats = NULL;
176         kfree(v);
177 }
178
179 static void br_vlan_put_master(struct net_bridge_vlan *masterv)
180 {
181         struct net_bridge_vlan_group *vg;
182
183         if (!br_vlan_is_master(masterv))
184                 return;
185
186         vg = br_vlan_group(masterv->br);
187         if (refcount_dec_and_test(&masterv->refcnt)) {
188                 rhashtable_remove_fast(&vg->vlan_hash,
189                                        &masterv->vnode, br_vlan_rht_params);
190                 __vlan_del_list(masterv);
191                 call_rcu(&masterv->rcu, br_master_vlan_rcu_free);
192         }
193 }
194
195 /* This is the shared VLAN add function which works for both ports and bridge
196  * devices. There are four possible calls to this function in terms of the
197  * vlan entry type:
198  * 1. vlan is being added on a port (no master flags, global entry exists)
199  * 2. vlan is being added on a bridge (both master and brentry flags)
200  * 3. vlan is being added on a port, but a global entry didn't exist which
201  *    is being created right now (master flag set, brentry flag unset), the
202  *    global entry is used for global per-vlan features, but not for filtering
203  * 4. same as 3 but with both master and brentry flags set so the entry
204  *    will be used for filtering in both the port and the bridge
205  */
206 static int __vlan_add(struct net_bridge_vlan *v, u16 flags)
207 {
208         struct net_bridge_vlan *masterv = NULL;
209         struct net_bridge_port *p = NULL;
210         struct net_bridge_vlan_group *vg;
211         struct net_device *dev;
212         struct net_bridge *br;
213         int err;
214
215         if (br_vlan_is_master(v)) {
216                 br = v->br;
217                 dev = br->dev;
218                 vg = br_vlan_group(br);
219         } else {
220                 p = v->port;
221                 br = p->br;
222                 dev = p->dev;
223                 vg = nbp_vlan_group(p);
224         }
225
226         if (p) {
227                 /* Add VLAN to the device filter if it is supported.
228                  * This ensures tagged traffic enters the bridge when
229                  * promiscuous mode is disabled by br_manage_promisc().
230                  */
231                 err = __vlan_vid_add(dev, br, v->vid, flags);
232                 if (err)
233                         goto out;
234
235                 /* need to work on the master vlan too */
236                 if (flags & BRIDGE_VLAN_INFO_MASTER) {
237                         err = br_vlan_add(br, v->vid, flags |
238                                                       BRIDGE_VLAN_INFO_BRENTRY);
239                         if (err)
240                                 goto out_filt;
241                 }
242
243                 masterv = br_vlan_get_master(br, v->vid);
244                 if (!masterv) {
245                         err = -ENOMEM;
246                         goto out_filt;
247                 }
248                 v->brvlan = masterv;
249                 v->stats = masterv->stats;
250         }
251
252         /* Add the dev mac and count the vlan only if it's usable */
253         if (br_vlan_should_use(v)) {
254                 err = br_fdb_insert(br, p, dev->dev_addr, v->vid);
255                 if (err) {
256                         br_err(br, "failed insert local address into bridge forwarding table\n");
257                         goto out_filt;
258                 }
259                 vg->num_vlans++;
260         }
261
262         err = rhashtable_lookup_insert_fast(&vg->vlan_hash, &v->vnode,
263                                             br_vlan_rht_params);
264         if (err)
265                 goto out_fdb_insert;
266
267         __vlan_add_list(v);
268         __vlan_add_flags(v, flags);
269 out:
270         return err;
271
272 out_fdb_insert:
273         if (br_vlan_should_use(v)) {
274                 br_fdb_find_delete_local(br, p, dev->dev_addr, v->vid);
275                 vg->num_vlans--;
276         }
277
278 out_filt:
279         if (p) {
280                 __vlan_vid_del(dev, br, v->vid);
281                 if (masterv) {
282                         br_vlan_put_master(masterv);
283                         v->brvlan = NULL;
284                 }
285         }
286
287         goto out;
288 }
289
290 static int __vlan_del(struct net_bridge_vlan *v)
291 {
292         struct net_bridge_vlan *masterv = v;
293         struct net_bridge_vlan_group *vg;
294         struct net_bridge_port *p = NULL;
295         int err = 0;
296
297         if (br_vlan_is_master(v)) {
298                 vg = br_vlan_group(v->br);
299         } else {
300                 p = v->port;
301                 vg = nbp_vlan_group(v->port);
302                 masterv = v->brvlan;
303         }
304
305         __vlan_delete_pvid(vg, v->vid);
306         if (p) {
307                 err = __vlan_vid_del(p->dev, p->br, v->vid);
308                 if (err)
309                         goto out;
310         }
311
312         if (br_vlan_should_use(v)) {
313                 v->flags &= ~BRIDGE_VLAN_INFO_BRENTRY;
314                 vg->num_vlans--;
315         }
316
317         if (masterv != v) {
318                 vlan_tunnel_info_del(vg, v);
319                 rhashtable_remove_fast(&vg->vlan_hash, &v->vnode,
320                                        br_vlan_rht_params);
321                 __vlan_del_list(v);
322                 kfree_rcu(v, rcu);
323         }
324
325         br_vlan_put_master(masterv);
326 out:
327         return err;
328 }
329
330 static void __vlan_group_free(struct net_bridge_vlan_group *vg)
331 {
332         WARN_ON(!list_empty(&vg->vlan_list));
333         rhashtable_destroy(&vg->vlan_hash);
334         vlan_tunnel_deinit(vg);
335         kfree(vg);
336 }
337
338 static void __vlan_flush(struct net_bridge_vlan_group *vg)
339 {
340         struct net_bridge_vlan *vlan, *tmp;
341
342         __vlan_delete_pvid(vg, vg->pvid);
343         list_for_each_entry_safe(vlan, tmp, &vg->vlan_list, vlist)
344                 __vlan_del(vlan);
345 }
346
347 struct sk_buff *br_handle_vlan(struct net_bridge *br,
348                                const struct net_bridge_port *p,
349                                struct net_bridge_vlan_group *vg,
350                                struct sk_buff *skb)
351 {
352         struct br_vlan_stats *stats;
353         struct net_bridge_vlan *v;
354         u16 vid;
355
356         /* If this packet was not filtered at input, let it pass */
357         if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
358                 goto out;
359
360         /* At this point, we know that the frame was filtered and contains
361          * a valid vlan id.  If the vlan id has untagged flag set,
362          * send untagged; otherwise, send tagged.
363          */
364         br_vlan_get_tag(skb, &vid);
365         v = br_vlan_find(vg, vid);
366         /* Vlan entry must be configured at this point.  The
367          * only exception is the bridge is set in promisc mode and the
368          * packet is destined for the bridge device.  In this case
369          * pass the packet as is.
370          */
371         if (!v || !br_vlan_should_use(v)) {
372                 if ((br->dev->flags & IFF_PROMISC) && skb->dev == br->dev) {
373                         goto out;
374                 } else {
375                         kfree_skb(skb);
376                         return NULL;
377                 }
378         }
379         if (br->vlan_stats_enabled) {
380                 stats = this_cpu_ptr(v->stats);
381                 u64_stats_update_begin(&stats->syncp);
382                 stats->tx_bytes += skb->len;
383                 stats->tx_packets++;
384                 u64_stats_update_end(&stats->syncp);
385         }
386
387         if (v->flags & BRIDGE_VLAN_INFO_UNTAGGED)
388                 skb->vlan_tci = 0;
389
390         if (p && (p->flags & BR_VLAN_TUNNEL) &&
391             br_handle_egress_vlan_tunnel(skb, v)) {
392                 kfree_skb(skb);
393                 return NULL;
394         }
395 out:
396         return skb;
397 }
398
399 /* Called under RCU */
400 static bool __allowed_ingress(const struct net_bridge *br,
401                               struct net_bridge_vlan_group *vg,
402                               struct sk_buff *skb, u16 *vid)
403 {
404         struct br_vlan_stats *stats;
405         struct net_bridge_vlan *v;
406         bool tagged;
407
408         BR_INPUT_SKB_CB(skb)->vlan_filtered = true;
409         /* If vlan tx offload is disabled on bridge device and frame was
410          * sent from vlan device on the bridge device, it does not have
411          * HW accelerated vlan tag.
412          */
413         if (unlikely(!skb_vlan_tag_present(skb) &&
414                      skb->protocol == br->vlan_proto)) {
415                 skb = skb_vlan_untag(skb);
416                 if (unlikely(!skb))
417                         return false;
418         }
419
420         if (!br_vlan_get_tag(skb, vid)) {
421                 /* Tagged frame */
422                 if (skb->vlan_proto != br->vlan_proto) {
423                         /* Protocol-mismatch, empty out vlan_tci for new tag */
424                         skb_push(skb, ETH_HLEN);
425                         skb = vlan_insert_tag_set_proto(skb, skb->vlan_proto,
426                                                         skb_vlan_tag_get(skb));
427                         if (unlikely(!skb))
428                                 return false;
429
430                         skb_pull(skb, ETH_HLEN);
431                         skb_reset_mac_len(skb);
432                         *vid = 0;
433                         tagged = false;
434                 } else {
435                         tagged = true;
436                 }
437         } else {
438                 /* Untagged frame */
439                 tagged = false;
440         }
441
442         if (!*vid) {
443                 u16 pvid = br_get_pvid(vg);
444
445                 /* Frame had a tag with VID 0 or did not have a tag.
446                  * See if pvid is set on this port.  That tells us which
447                  * vlan untagged or priority-tagged traffic belongs to.
448                  */
449                 if (!pvid)
450                         goto drop;
451
452                 /* PVID is set on this port.  Any untagged or priority-tagged
453                  * ingress frame is considered to belong to this vlan.
454                  */
455                 *vid = pvid;
456                 if (likely(!tagged))
457                         /* Untagged Frame. */
458                         __vlan_hwaccel_put_tag(skb, br->vlan_proto, pvid);
459                 else
460                         /* Priority-tagged Frame.
461                          * At this point, We know that skb->vlan_tci had
462                          * VLAN_TAG_PRESENT bit and its VID field was 0x000.
463                          * We update only VID field and preserve PCP field.
464                          */
465                         skb->vlan_tci |= pvid;
466
467                 /* if stats are disabled we can avoid the lookup */
468                 if (!br->vlan_stats_enabled)
469                         return true;
470         }
471         v = br_vlan_find(vg, *vid);
472         if (!v || !br_vlan_should_use(v))
473                 goto drop;
474
475         if (br->vlan_stats_enabled) {
476                 stats = this_cpu_ptr(v->stats);
477                 u64_stats_update_begin(&stats->syncp);
478                 stats->rx_bytes += skb->len;
479                 stats->rx_packets++;
480                 u64_stats_update_end(&stats->syncp);
481         }
482
483         return true;
484
485 drop:
486         kfree_skb(skb);
487         return false;
488 }
489
490 bool br_allowed_ingress(const struct net_bridge *br,
491                         struct net_bridge_vlan_group *vg, struct sk_buff *skb,
492                         u16 *vid)
493 {
494         /* If VLAN filtering is disabled on the bridge, all packets are
495          * permitted.
496          */
497         if (!br->vlan_enabled) {
498                 BR_INPUT_SKB_CB(skb)->vlan_filtered = false;
499                 return true;
500         }
501
502         return __allowed_ingress(br, vg, skb, vid);
503 }
504
505 /* Called under RCU. */
506 bool br_allowed_egress(struct net_bridge_vlan_group *vg,
507                        const struct sk_buff *skb)
508 {
509         const struct net_bridge_vlan *v;
510         u16 vid;
511
512         /* If this packet was not filtered at input, let it pass */
513         if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
514                 return true;
515
516         br_vlan_get_tag(skb, &vid);
517         v = br_vlan_find(vg, vid);
518         if (v && br_vlan_should_use(v))
519                 return true;
520
521         return false;
522 }
523
524 /* Called under RCU */
525 bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid)
526 {
527         struct net_bridge_vlan_group *vg;
528         struct net_bridge *br = p->br;
529
530         /* If filtering was disabled at input, let it pass. */
531         if (!br->vlan_enabled)
532                 return true;
533
534         vg = nbp_vlan_group_rcu(p);
535         if (!vg || !vg->num_vlans)
536                 return false;
537
538         if (!br_vlan_get_tag(skb, vid) && skb->vlan_proto != br->vlan_proto)
539                 *vid = 0;
540
541         if (!*vid) {
542                 *vid = br_get_pvid(vg);
543                 if (!*vid)
544                         return false;
545
546                 return true;
547         }
548
549         if (br_vlan_find(vg, *vid))
550                 return true;
551
552         return false;
553 }
554
555 /* Must be protected by RTNL.
556  * Must be called with vid in range from 1 to 4094 inclusive.
557  */
558 int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags)
559 {
560         struct net_bridge_vlan_group *vg;
561         struct net_bridge_vlan *vlan;
562         int ret;
563
564         ASSERT_RTNL();
565
566         vg = br_vlan_group(br);
567         vlan = br_vlan_find(vg, vid);
568         if (vlan) {
569                 if (!br_vlan_is_brentry(vlan)) {
570                         /* Trying to change flags of non-existent bridge vlan */
571                         if (!(flags & BRIDGE_VLAN_INFO_BRENTRY))
572                                 return -EINVAL;
573                         /* It was only kept for port vlans, now make it real */
574                         ret = br_fdb_insert(br, NULL, br->dev->dev_addr,
575                                             vlan->vid);
576                         if (ret) {
577                                 br_err(br, "failed insert local address into bridge forwarding table\n");
578                                 return ret;
579                         }
580                         refcount_inc(&vlan->refcnt);
581                         vlan->flags |= BRIDGE_VLAN_INFO_BRENTRY;
582                         vg->num_vlans++;
583                 }
584                 __vlan_add_flags(vlan, flags);
585                 return 0;
586         }
587
588         vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
589         if (!vlan)
590                 return -ENOMEM;
591
592         vlan->stats = netdev_alloc_pcpu_stats(struct br_vlan_stats);
593         if (!vlan->stats) {
594                 kfree(vlan);
595                 return -ENOMEM;
596         }
597         vlan->vid = vid;
598         vlan->flags = flags | BRIDGE_VLAN_INFO_MASTER;
599         vlan->flags &= ~BRIDGE_VLAN_INFO_PVID;
600         vlan->br = br;
601         if (flags & BRIDGE_VLAN_INFO_BRENTRY)
602                 refcount_set(&vlan->refcnt, 1);
603         ret = __vlan_add(vlan, flags);
604         if (ret) {
605                 free_percpu(vlan->stats);
606                 kfree(vlan);
607         }
608
609         return ret;
610 }
611
612 /* Must be protected by RTNL.
613  * Must be called with vid in range from 1 to 4094 inclusive.
614  */
615 int br_vlan_delete(struct net_bridge *br, u16 vid)
616 {
617         struct net_bridge_vlan_group *vg;
618         struct net_bridge_vlan *v;
619
620         ASSERT_RTNL();
621
622         vg = br_vlan_group(br);
623         v = br_vlan_find(vg, vid);
624         if (!v || !br_vlan_is_brentry(v))
625                 return -ENOENT;
626
627         br_fdb_find_delete_local(br, NULL, br->dev->dev_addr, vid);
628         br_fdb_delete_by_port(br, NULL, vid, 0);
629
630         vlan_tunnel_info_del(vg, v);
631
632         return __vlan_del(v);
633 }
634
635 void br_vlan_flush(struct net_bridge *br)
636 {
637         struct net_bridge_vlan_group *vg;
638
639         ASSERT_RTNL();
640
641         /* delete auto-added default pvid local fdb before flushing vlans
642          * otherwise it will be leaked on bridge device init failure
643          */
644         br_fdb_delete_by_port(br, NULL, 0, 1);
645
646         vg = br_vlan_group(br);
647         __vlan_flush(vg);
648         RCU_INIT_POINTER(br->vlgrp, NULL);
649         synchronize_rcu();
650         __vlan_group_free(vg);
651 }
652
653 struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg, u16 vid)
654 {
655         if (!vg)
656                 return NULL;
657
658         return br_vlan_lookup(&vg->vlan_hash, vid);
659 }
660
661 /* Must be protected by RTNL. */
662 static void recalculate_group_addr(struct net_bridge *br)
663 {
664         if (br->group_addr_set)
665                 return;
666
667         spin_lock_bh(&br->lock);
668         if (!br->vlan_enabled || br->vlan_proto == htons(ETH_P_8021Q)) {
669                 /* Bridge Group Address */
670                 br->group_addr[5] = 0x00;
671         } else { /* vlan_enabled && ETH_P_8021AD */
672                 /* Provider Bridge Group Address */
673                 br->group_addr[5] = 0x08;
674         }
675         spin_unlock_bh(&br->lock);
676 }
677
678 /* Must be protected by RTNL. */
679 void br_recalculate_fwd_mask(struct net_bridge *br)
680 {
681         if (!br->vlan_enabled || br->vlan_proto == htons(ETH_P_8021Q))
682                 br->group_fwd_mask_required = BR_GROUPFWD_DEFAULT;
683         else /* vlan_enabled && ETH_P_8021AD */
684                 br->group_fwd_mask_required = BR_GROUPFWD_8021AD &
685                                               ~(1u << br->group_addr[5]);
686 }
687
688 int __br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
689 {
690         struct switchdev_attr attr = {
691                 .orig_dev = br->dev,
692                 .id = SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING,
693                 .flags = SWITCHDEV_F_SKIP_EOPNOTSUPP,
694                 .u.vlan_filtering = val,
695         };
696         int err;
697
698         if (br->vlan_enabled == val)
699                 return 0;
700
701         err = switchdev_port_attr_set(br->dev, &attr);
702         if (err && err != -EOPNOTSUPP)
703                 return err;
704
705         br->vlan_enabled = val;
706         br_manage_promisc(br);
707         recalculate_group_addr(br);
708         br_recalculate_fwd_mask(br);
709
710         return 0;
711 }
712
713 int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
714 {
715         return __br_vlan_filter_toggle(br, val);
716 }
717
718 bool br_vlan_enabled(const struct net_device *dev)
719 {
720         struct net_bridge *br = netdev_priv(dev);
721
722         return !!br->vlan_enabled;
723 }
724 EXPORT_SYMBOL_GPL(br_vlan_enabled);
725
726 int __br_vlan_set_proto(struct net_bridge *br, __be16 proto)
727 {
728         int err = 0;
729         struct net_bridge_port *p;
730         struct net_bridge_vlan *vlan;
731         struct net_bridge_vlan_group *vg;
732         __be16 oldproto;
733
734         if (br->vlan_proto == proto)
735                 return 0;
736
737         /* Add VLANs for the new proto to the device filter. */
738         list_for_each_entry(p, &br->port_list, list) {
739                 vg = nbp_vlan_group(p);
740                 list_for_each_entry(vlan, &vg->vlan_list, vlist) {
741                         err = vlan_vid_add(p->dev, proto, vlan->vid);
742                         if (err)
743                                 goto err_filt;
744                 }
745         }
746
747         oldproto = br->vlan_proto;
748         br->vlan_proto = proto;
749
750         recalculate_group_addr(br);
751         br_recalculate_fwd_mask(br);
752
753         /* Delete VLANs for the old proto from the device filter. */
754         list_for_each_entry(p, &br->port_list, list) {
755                 vg = nbp_vlan_group(p);
756                 list_for_each_entry(vlan, &vg->vlan_list, vlist)
757                         vlan_vid_del(p->dev, oldproto, vlan->vid);
758         }
759
760         return 0;
761
762 err_filt:
763         list_for_each_entry_continue_reverse(vlan, &vg->vlan_list, vlist)
764                 vlan_vid_del(p->dev, proto, vlan->vid);
765
766         list_for_each_entry_continue_reverse(p, &br->port_list, list) {
767                 vg = nbp_vlan_group(p);
768                 list_for_each_entry(vlan, &vg->vlan_list, vlist)
769                         vlan_vid_del(p->dev, proto, vlan->vid);
770         }
771
772         return err;
773 }
774
775 int br_vlan_set_proto(struct net_bridge *br, unsigned long val)
776 {
777         if (val != ETH_P_8021Q && val != ETH_P_8021AD)
778                 return -EPROTONOSUPPORT;
779
780         return __br_vlan_set_proto(br, htons(val));
781 }
782
783 int br_vlan_set_stats(struct net_bridge *br, unsigned long val)
784 {
785         switch (val) {
786         case 0:
787         case 1:
788                 br->vlan_stats_enabled = val;
789                 break;
790         default:
791                 return -EINVAL;
792         }
793
794         return 0;
795 }
796
797 static bool vlan_default_pvid(struct net_bridge_vlan_group *vg, u16 vid)
798 {
799         struct net_bridge_vlan *v;
800
801         if (vid != vg->pvid)
802                 return false;
803
804         v = br_vlan_lookup(&vg->vlan_hash, vid);
805         if (v && br_vlan_should_use(v) &&
806             (v->flags & BRIDGE_VLAN_INFO_UNTAGGED))
807                 return true;
808
809         return false;
810 }
811
812 static void br_vlan_disable_default_pvid(struct net_bridge *br)
813 {
814         struct net_bridge_port *p;
815         u16 pvid = br->default_pvid;
816
817         /* Disable default_pvid on all ports where it is still
818          * configured.
819          */
820         if (vlan_default_pvid(br_vlan_group(br), pvid))
821                 br_vlan_delete(br, pvid);
822
823         list_for_each_entry(p, &br->port_list, list) {
824                 if (vlan_default_pvid(nbp_vlan_group(p), pvid))
825                         nbp_vlan_delete(p, pvid);
826         }
827
828         br->default_pvid = 0;
829 }
830
831 int __br_vlan_set_default_pvid(struct net_bridge *br, u16 pvid)
832 {
833         const struct net_bridge_vlan *pvent;
834         struct net_bridge_vlan_group *vg;
835         struct net_bridge_port *p;
836         u16 old_pvid;
837         int err = 0;
838         unsigned long *changed;
839
840         if (!pvid) {
841                 br_vlan_disable_default_pvid(br);
842                 return 0;
843         }
844
845         changed = kcalloc(BITS_TO_LONGS(BR_MAX_PORTS), sizeof(unsigned long),
846                           GFP_KERNEL);
847         if (!changed)
848                 return -ENOMEM;
849
850         old_pvid = br->default_pvid;
851
852         /* Update default_pvid config only if we do not conflict with
853          * user configuration.
854          */
855         vg = br_vlan_group(br);
856         pvent = br_vlan_find(vg, pvid);
857         if ((!old_pvid || vlan_default_pvid(vg, old_pvid)) &&
858             (!pvent || !br_vlan_should_use(pvent))) {
859                 err = br_vlan_add(br, pvid,
860                                   BRIDGE_VLAN_INFO_PVID |
861                                   BRIDGE_VLAN_INFO_UNTAGGED |
862                                   BRIDGE_VLAN_INFO_BRENTRY);
863                 if (err)
864                         goto out;
865                 br_vlan_delete(br, old_pvid);
866                 set_bit(0, changed);
867         }
868
869         list_for_each_entry(p, &br->port_list, list) {
870                 /* Update default_pvid config only if we do not conflict with
871                  * user configuration.
872                  */
873                 vg = nbp_vlan_group(p);
874                 if ((old_pvid &&
875                      !vlan_default_pvid(vg, old_pvid)) ||
876                     br_vlan_find(vg, pvid))
877                         continue;
878
879                 err = nbp_vlan_add(p, pvid,
880                                    BRIDGE_VLAN_INFO_PVID |
881                                    BRIDGE_VLAN_INFO_UNTAGGED);
882                 if (err)
883                         goto err_port;
884                 nbp_vlan_delete(p, old_pvid);
885                 set_bit(p->port_no, changed);
886         }
887
888         br->default_pvid = pvid;
889
890 out:
891         kfree(changed);
892         return err;
893
894 err_port:
895         list_for_each_entry_continue_reverse(p, &br->port_list, list) {
896                 if (!test_bit(p->port_no, changed))
897                         continue;
898
899                 if (old_pvid)
900                         nbp_vlan_add(p, old_pvid,
901                                      BRIDGE_VLAN_INFO_PVID |
902                                      BRIDGE_VLAN_INFO_UNTAGGED);
903                 nbp_vlan_delete(p, pvid);
904         }
905
906         if (test_bit(0, changed)) {
907                 if (old_pvid)
908                         br_vlan_add(br, old_pvid,
909                                     BRIDGE_VLAN_INFO_PVID |
910                                     BRIDGE_VLAN_INFO_UNTAGGED |
911                                     BRIDGE_VLAN_INFO_BRENTRY);
912                 br_vlan_delete(br, pvid);
913         }
914         goto out;
915 }
916
917 int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val)
918 {
919         u16 pvid = val;
920         int err = 0;
921
922         if (val >= VLAN_VID_MASK)
923                 return -EINVAL;
924
925         if (pvid == br->default_pvid)
926                 goto out;
927
928         /* Only allow default pvid change when filtering is disabled */
929         if (br->vlan_enabled) {
930                 pr_info_once("Please disable vlan filtering to change default_pvid\n");
931                 err = -EPERM;
932                 goto out;
933         }
934         err = __br_vlan_set_default_pvid(br, pvid);
935 out:
936         return err;
937 }
938
939 int br_vlan_init(struct net_bridge *br)
940 {
941         struct net_bridge_vlan_group *vg;
942         int ret = -ENOMEM;
943
944         vg = kzalloc(sizeof(*vg), GFP_KERNEL);
945         if (!vg)
946                 goto out;
947         ret = rhashtable_init(&vg->vlan_hash, &br_vlan_rht_params);
948         if (ret)
949                 goto err_rhtbl;
950         ret = vlan_tunnel_init(vg);
951         if (ret)
952                 goto err_tunnel_init;
953         INIT_LIST_HEAD(&vg->vlan_list);
954         br->vlan_proto = htons(ETH_P_8021Q);
955         br->default_pvid = 1;
956         rcu_assign_pointer(br->vlgrp, vg);
957         ret = br_vlan_add(br, 1,
958                           BRIDGE_VLAN_INFO_PVID | BRIDGE_VLAN_INFO_UNTAGGED |
959                           BRIDGE_VLAN_INFO_BRENTRY);
960         if (ret)
961                 goto err_vlan_add;
962
963 out:
964         return ret;
965
966 err_vlan_add:
967         vlan_tunnel_deinit(vg);
968 err_tunnel_init:
969         rhashtable_destroy(&vg->vlan_hash);
970 err_rhtbl:
971         kfree(vg);
972
973         goto out;
974 }
975
976 int nbp_vlan_init(struct net_bridge_port *p)
977 {
978         struct switchdev_attr attr = {
979                 .orig_dev = p->br->dev,
980                 .id = SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING,
981                 .flags = SWITCHDEV_F_SKIP_EOPNOTSUPP,
982                 .u.vlan_filtering = p->br->vlan_enabled,
983         };
984         struct net_bridge_vlan_group *vg;
985         int ret = -ENOMEM;
986
987         vg = kzalloc(sizeof(struct net_bridge_vlan_group), GFP_KERNEL);
988         if (!vg)
989                 goto out;
990
991         ret = switchdev_port_attr_set(p->dev, &attr);
992         if (ret && ret != -EOPNOTSUPP)
993                 goto err_vlan_enabled;
994
995         ret = rhashtable_init(&vg->vlan_hash, &br_vlan_rht_params);
996         if (ret)
997                 goto err_rhtbl;
998         ret = vlan_tunnel_init(vg);
999         if (ret)
1000                 goto err_tunnel_init;
1001         INIT_LIST_HEAD(&vg->vlan_list);
1002         rcu_assign_pointer(p->vlgrp, vg);
1003         if (p->br->default_pvid) {
1004                 ret = nbp_vlan_add(p, p->br->default_pvid,
1005                                    BRIDGE_VLAN_INFO_PVID |
1006                                    BRIDGE_VLAN_INFO_UNTAGGED);
1007                 if (ret)
1008                         goto err_vlan_add;
1009         }
1010 out:
1011         return ret;
1012
1013 err_vlan_add:
1014         RCU_INIT_POINTER(p->vlgrp, NULL);
1015         synchronize_rcu();
1016         vlan_tunnel_deinit(vg);
1017 err_tunnel_init:
1018         rhashtable_destroy(&vg->vlan_hash);
1019 err_rhtbl:
1020 err_vlan_enabled:
1021         kfree(vg);
1022
1023         goto out;
1024 }
1025
1026 /* Must be protected by RTNL.
1027  * Must be called with vid in range from 1 to 4094 inclusive.
1028  */
1029 int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags)
1030 {
1031         struct switchdev_obj_port_vlan v = {
1032                 .obj.orig_dev = port->dev,
1033                 .obj.id = SWITCHDEV_OBJ_ID_PORT_VLAN,
1034                 .flags = flags,
1035                 .vid_begin = vid,
1036                 .vid_end = vid,
1037         };
1038         struct net_bridge_vlan *vlan;
1039         int ret;
1040
1041         ASSERT_RTNL();
1042
1043         vlan = br_vlan_find(nbp_vlan_group(port), vid);
1044         if (vlan) {
1045                 /* Pass the flags to the hardware bridge */
1046                 ret = switchdev_port_obj_add(port->dev, &v.obj);
1047                 if (ret && ret != -EOPNOTSUPP)
1048                         return ret;
1049                 __vlan_add_flags(vlan, flags);
1050                 return 0;
1051         }
1052
1053         vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
1054         if (!vlan)
1055                 return -ENOMEM;
1056
1057         vlan->vid = vid;
1058         vlan->port = port;
1059         ret = __vlan_add(vlan, flags);
1060         if (ret)
1061                 kfree(vlan);
1062
1063         return ret;
1064 }
1065
1066 /* Must be protected by RTNL.
1067  * Must be called with vid in range from 1 to 4094 inclusive.
1068  */
1069 int nbp_vlan_delete(struct net_bridge_port *port, u16 vid)
1070 {
1071         struct net_bridge_vlan *v;
1072
1073         ASSERT_RTNL();
1074
1075         v = br_vlan_find(nbp_vlan_group(port), vid);
1076         if (!v)
1077                 return -ENOENT;
1078         br_fdb_find_delete_local(port->br, port, port->dev->dev_addr, vid);
1079         br_fdb_delete_by_port(port->br, port, vid, 0);
1080
1081         return __vlan_del(v);
1082 }
1083
1084 void nbp_vlan_flush(struct net_bridge_port *port)
1085 {
1086         struct net_bridge_vlan_group *vg;
1087
1088         ASSERT_RTNL();
1089
1090         vg = nbp_vlan_group(port);
1091         __vlan_flush(vg);
1092         RCU_INIT_POINTER(port->vlgrp, NULL);
1093         synchronize_rcu();
1094         __vlan_group_free(vg);
1095 }
1096
1097 void br_vlan_get_stats(const struct net_bridge_vlan *v,
1098                        struct br_vlan_stats *stats)
1099 {
1100         int i;
1101
1102         memset(stats, 0, sizeof(*stats));
1103         for_each_possible_cpu(i) {
1104                 u64 rxpackets, rxbytes, txpackets, txbytes;
1105                 struct br_vlan_stats *cpu_stats;
1106                 unsigned int start;
1107
1108                 cpu_stats = per_cpu_ptr(v->stats, i);
1109                 do {
1110                         start = u64_stats_fetch_begin_irq(&cpu_stats->syncp);
1111                         rxpackets = cpu_stats->rx_packets;
1112                         rxbytes = cpu_stats->rx_bytes;
1113                         txbytes = cpu_stats->tx_bytes;
1114                         txpackets = cpu_stats->tx_packets;
1115                 } while (u64_stats_fetch_retry_irq(&cpu_stats->syncp, start));
1116
1117                 stats->rx_packets += rxpackets;
1118                 stats->rx_bytes += rxbytes;
1119                 stats->tx_bytes += txbytes;
1120                 stats->tx_packets += txpackets;
1121         }
1122 }