net/mlx4_core: Add support for filtering multicast loopback
[cascardo/linux.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
9 static void __vlan_add_pvid(struct net_port_vlans *v, u16 vid)
10 {
11         if (v->pvid == vid)
12                 return;
13
14         smp_wmb();
15         v->pvid = vid;
16 }
17
18 static void __vlan_delete_pvid(struct net_port_vlans *v, u16 vid)
19 {
20         if (v->pvid != vid)
21                 return;
22
23         smp_wmb();
24         v->pvid = 0;
25 }
26
27 static void __vlan_add_flags(struct net_port_vlans *v, u16 vid, u16 flags)
28 {
29         if (flags & BRIDGE_VLAN_INFO_PVID)
30                 __vlan_add_pvid(v, vid);
31         else
32                 __vlan_delete_pvid(v, vid);
33
34         if (flags & BRIDGE_VLAN_INFO_UNTAGGED)
35                 set_bit(vid, v->untagged_bitmap);
36         else
37                 clear_bit(vid, v->untagged_bitmap);
38 }
39
40 static int __vlan_vid_add(struct net_device *dev, struct net_bridge *br,
41                           u16 vid, u16 flags)
42 {
43         const struct net_device_ops *ops = dev->netdev_ops;
44         int err;
45
46         /* If driver uses VLAN ndo ops, use 8021q to install vid
47          * on device, otherwise try switchdev ops to install vid.
48          */
49
50         if (ops->ndo_vlan_rx_add_vid) {
51                 err = vlan_vid_add(dev, br->vlan_proto, vid);
52         } else {
53                 struct switchdev_obj vlan_obj = {
54                         .id = SWITCHDEV_OBJ_PORT_VLAN,
55                         .u.vlan = {
56                                 .flags = flags,
57                                 .vid_begin = vid,
58                                 .vid_end = vid,
59                         },
60                 };
61
62                 err = switchdev_port_obj_add(dev, &vlan_obj);
63                 if (err == -EOPNOTSUPP)
64                         err = 0;
65         }
66
67         return err;
68 }
69
70 static int __vlan_add(struct net_port_vlans *v, u16 vid, u16 flags)
71 {
72         struct net_bridge_port *p = NULL;
73         struct net_bridge *br;
74         struct net_device *dev;
75         int err;
76
77         if (test_bit(vid, v->vlan_bitmap)) {
78                 __vlan_add_flags(v, vid, flags);
79                 return 0;
80         }
81
82         if (v->port_idx) {
83                 p = v->parent.port;
84                 br = p->br;
85                 dev = p->dev;
86         } else {
87                 br = v->parent.br;
88                 dev = br->dev;
89         }
90
91         if (p) {
92                 /* Add VLAN to the device filter if it is supported.
93                  * This ensures tagged traffic enters the bridge when
94                  * promiscuous mode is disabled by br_manage_promisc().
95                  */
96                 err = __vlan_vid_add(dev, br, vid, flags);
97                 if (err)
98                         return err;
99         }
100
101         err = br_fdb_insert(br, p, dev->dev_addr, vid);
102         if (err) {
103                 br_err(br, "failed insert local address into bridge "
104                        "forwarding table\n");
105                 goto out_filt;
106         }
107
108         set_bit(vid, v->vlan_bitmap);
109         v->num_vlans++;
110         __vlan_add_flags(v, vid, flags);
111
112         return 0;
113
114 out_filt:
115         if (p)
116                 vlan_vid_del(dev, br->vlan_proto, vid);
117         return err;
118 }
119
120 static int __vlan_vid_del(struct net_device *dev, struct net_bridge *br,
121                           u16 vid)
122 {
123         const struct net_device_ops *ops = dev->netdev_ops;
124         int err = 0;
125
126         /* If driver uses VLAN ndo ops, use 8021q to delete vid
127          * on device, otherwise try switchdev ops to delete vid.
128          */
129
130         if (ops->ndo_vlan_rx_kill_vid) {
131                 vlan_vid_del(dev, br->vlan_proto, vid);
132         } else {
133                 struct switchdev_obj vlan_obj = {
134                         .id = SWITCHDEV_OBJ_PORT_VLAN,
135                         .u.vlan = {
136                                 .vid_begin = vid,
137                                 .vid_end = vid,
138                         },
139                 };
140
141                 err = switchdev_port_obj_del(dev, &vlan_obj);
142                 if (err == -EOPNOTSUPP)
143                         err = 0;
144         }
145
146         return err;
147 }
148
149 static int __vlan_del(struct net_port_vlans *v, u16 vid)
150 {
151         if (!test_bit(vid, v->vlan_bitmap))
152                 return -EINVAL;
153
154         __vlan_delete_pvid(v, vid);
155         clear_bit(vid, v->untagged_bitmap);
156
157         if (v->port_idx) {
158                 struct net_bridge_port *p = v->parent.port;
159                 int err;
160
161                 err = __vlan_vid_del(p->dev, p->br, vid);
162                 if (err)
163                         return err;
164         }
165
166         clear_bit(vid, v->vlan_bitmap);
167         v->num_vlans--;
168         if (bitmap_empty(v->vlan_bitmap, VLAN_N_VID)) {
169                 if (v->port_idx)
170                         RCU_INIT_POINTER(v->parent.port->vlan_info, NULL);
171                 else
172                         RCU_INIT_POINTER(v->parent.br->vlan_info, NULL);
173                 kfree_rcu(v, rcu);
174         }
175         return 0;
176 }
177
178 static void __vlan_flush(struct net_port_vlans *v)
179 {
180         smp_wmb();
181         v->pvid = 0;
182         bitmap_zero(v->vlan_bitmap, VLAN_N_VID);
183         if (v->port_idx)
184                 RCU_INIT_POINTER(v->parent.port->vlan_info, NULL);
185         else
186                 RCU_INIT_POINTER(v->parent.br->vlan_info, NULL);
187         kfree_rcu(v, rcu);
188 }
189
190 struct sk_buff *br_handle_vlan(struct net_bridge *br,
191                                const struct net_port_vlans *pv,
192                                struct sk_buff *skb)
193 {
194         u16 vid;
195
196         /* If this packet was not filtered at input, let it pass */
197         if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
198                 goto out;
199
200         /* Vlan filter table must be configured at this point.  The
201          * only exception is the bridge is set in promisc mode and the
202          * packet is destined for the bridge device.  In this case
203          * pass the packet as is.
204          */
205         if (!pv) {
206                 if ((br->dev->flags & IFF_PROMISC) && skb->dev == br->dev) {
207                         goto out;
208                 } else {
209                         kfree_skb(skb);
210                         return NULL;
211                 }
212         }
213
214         /* At this point, we know that the frame was filtered and contains
215          * a valid vlan id.  If the vlan id is set in the untagged bitmap,
216          * send untagged; otherwise, send tagged.
217          */
218         br_vlan_get_tag(skb, &vid);
219         if (test_bit(vid, pv->untagged_bitmap))
220                 skb->vlan_tci = 0;
221
222 out:
223         return skb;
224 }
225
226 /* Called under RCU */
227 bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,
228                         struct sk_buff *skb, u16 *vid)
229 {
230         bool tagged;
231         __be16 proto;
232
233         /* If VLAN filtering is disabled on the bridge, all packets are
234          * permitted.
235          */
236         if (!br->vlan_enabled) {
237                 BR_INPUT_SKB_CB(skb)->vlan_filtered = false;
238                 return true;
239         }
240
241         /* If there are no vlan in the permitted list, all packets are
242          * rejected.
243          */
244         if (!v)
245                 goto drop;
246
247         BR_INPUT_SKB_CB(skb)->vlan_filtered = true;
248         proto = br->vlan_proto;
249
250         /* If vlan tx offload is disabled on bridge device and frame was
251          * sent from vlan device on the bridge device, it does not have
252          * HW accelerated vlan tag.
253          */
254         if (unlikely(!skb_vlan_tag_present(skb) &&
255                      skb->protocol == proto)) {
256                 skb = skb_vlan_untag(skb);
257                 if (unlikely(!skb))
258                         return false;
259         }
260
261         if (!br_vlan_get_tag(skb, vid)) {
262                 /* Tagged frame */
263                 if (skb->vlan_proto != proto) {
264                         /* Protocol-mismatch, empty out vlan_tci for new tag */
265                         skb_push(skb, ETH_HLEN);
266                         skb = vlan_insert_tag_set_proto(skb, skb->vlan_proto,
267                                                         skb_vlan_tag_get(skb));
268                         if (unlikely(!skb))
269                                 return false;
270
271                         skb_pull(skb, ETH_HLEN);
272                         skb_reset_mac_len(skb);
273                         *vid = 0;
274                         tagged = false;
275                 } else {
276                         tagged = true;
277                 }
278         } else {
279                 /* Untagged frame */
280                 tagged = false;
281         }
282
283         if (!*vid) {
284                 u16 pvid = br_get_pvid(v);
285
286                 /* Frame had a tag with VID 0 or did not have a tag.
287                  * See if pvid is set on this port.  That tells us which
288                  * vlan untagged or priority-tagged traffic belongs to.
289                  */
290                 if (!pvid)
291                         goto drop;
292
293                 /* PVID is set on this port.  Any untagged or priority-tagged
294                  * ingress frame is considered to belong to this vlan.
295                  */
296                 *vid = pvid;
297                 if (likely(!tagged))
298                         /* Untagged Frame. */
299                         __vlan_hwaccel_put_tag(skb, proto, pvid);
300                 else
301                         /* Priority-tagged Frame.
302                          * At this point, We know that skb->vlan_tci had
303                          * VLAN_TAG_PRESENT bit and its VID field was 0x000.
304                          * We update only VID field and preserve PCP field.
305                          */
306                         skb->vlan_tci |= pvid;
307
308                 return true;
309         }
310
311         /* Frame had a valid vlan tag.  See if vlan is allowed */
312         if (test_bit(*vid, v->vlan_bitmap))
313                 return true;
314 drop:
315         kfree_skb(skb);
316         return false;
317 }
318
319 /* Called under RCU. */
320 bool br_allowed_egress(struct net_bridge *br,
321                        const struct net_port_vlans *v,
322                        const struct sk_buff *skb)
323 {
324         u16 vid;
325
326         /* If this packet was not filtered at input, let it pass */
327         if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
328                 return true;
329
330         if (!v)
331                 return false;
332
333         br_vlan_get_tag(skb, &vid);
334         if (test_bit(vid, v->vlan_bitmap))
335                 return true;
336
337         return false;
338 }
339
340 /* Called under RCU */
341 bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid)
342 {
343         struct net_bridge *br = p->br;
344         struct net_port_vlans *v;
345
346         /* If filtering was disabled at input, let it pass. */
347         if (!br->vlan_enabled)
348                 return true;
349
350         v = rcu_dereference(p->vlan_info);
351         if (!v)
352                 return false;
353
354         if (!br_vlan_get_tag(skb, vid) && skb->vlan_proto != br->vlan_proto)
355                 *vid = 0;
356
357         if (!*vid) {
358                 *vid = br_get_pvid(v);
359                 if (!*vid)
360                         return false;
361
362                 return true;
363         }
364
365         if (test_bit(*vid, v->vlan_bitmap))
366                 return true;
367
368         return false;
369 }
370
371 /* Must be protected by RTNL.
372  * Must be called with vid in range from 1 to 4094 inclusive.
373  */
374 int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags)
375 {
376         struct net_port_vlans *pv = NULL;
377         int err;
378
379         ASSERT_RTNL();
380
381         pv = rtnl_dereference(br->vlan_info);
382         if (pv)
383                 return __vlan_add(pv, vid, flags);
384
385         /* Create port vlan infomration
386          */
387         pv = kzalloc(sizeof(*pv), GFP_KERNEL);
388         if (!pv)
389                 return -ENOMEM;
390
391         pv->parent.br = br;
392         err = __vlan_add(pv, vid, flags);
393         if (err)
394                 goto out;
395
396         rcu_assign_pointer(br->vlan_info, pv);
397         return 0;
398 out:
399         kfree(pv);
400         return err;
401 }
402
403 /* Must be protected by RTNL.
404  * Must be called with vid in range from 1 to 4094 inclusive.
405  */
406 int br_vlan_delete(struct net_bridge *br, u16 vid)
407 {
408         struct net_port_vlans *pv;
409
410         ASSERT_RTNL();
411
412         pv = rtnl_dereference(br->vlan_info);
413         if (!pv)
414                 return -EINVAL;
415
416         br_fdb_find_delete_local(br, NULL, br->dev->dev_addr, vid);
417
418         __vlan_del(pv, vid);
419         return 0;
420 }
421
422 void br_vlan_flush(struct net_bridge *br)
423 {
424         struct net_port_vlans *pv;
425
426         ASSERT_RTNL();
427         pv = rtnl_dereference(br->vlan_info);
428         if (!pv)
429                 return;
430
431         __vlan_flush(pv);
432 }
433
434 bool br_vlan_find(struct net_bridge *br, u16 vid)
435 {
436         struct net_port_vlans *pv;
437         bool found = false;
438
439         rcu_read_lock();
440         pv = rcu_dereference(br->vlan_info);
441
442         if (!pv)
443                 goto out;
444
445         if (test_bit(vid, pv->vlan_bitmap))
446                 found = true;
447
448 out:
449         rcu_read_unlock();
450         return found;
451 }
452
453 /* Must be protected by RTNL. */
454 static void recalculate_group_addr(struct net_bridge *br)
455 {
456         if (br->group_addr_set)
457                 return;
458
459         spin_lock_bh(&br->lock);
460         if (!br->vlan_enabled || br->vlan_proto == htons(ETH_P_8021Q)) {
461                 /* Bridge Group Address */
462                 br->group_addr[5] = 0x00;
463         } else { /* vlan_enabled && ETH_P_8021AD */
464                 /* Provider Bridge Group Address */
465                 br->group_addr[5] = 0x08;
466         }
467         spin_unlock_bh(&br->lock);
468 }
469
470 /* Must be protected by RTNL. */
471 void br_recalculate_fwd_mask(struct net_bridge *br)
472 {
473         if (!br->vlan_enabled || br->vlan_proto == htons(ETH_P_8021Q))
474                 br->group_fwd_mask_required = BR_GROUPFWD_DEFAULT;
475         else /* vlan_enabled && ETH_P_8021AD */
476                 br->group_fwd_mask_required = BR_GROUPFWD_8021AD &
477                                               ~(1u << br->group_addr[5]);
478 }
479
480 int __br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
481 {
482         if (br->vlan_enabled == val)
483                 return 0;
484
485         br->vlan_enabled = val;
486         br_manage_promisc(br);
487         recalculate_group_addr(br);
488         br_recalculate_fwd_mask(br);
489
490         return 0;
491 }
492
493 int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
494 {
495         if (!rtnl_trylock())
496                 return restart_syscall();
497
498         __br_vlan_filter_toggle(br, val);
499         rtnl_unlock();
500
501         return 0;
502 }
503
504 int __br_vlan_set_proto(struct net_bridge *br, __be16 proto)
505 {
506         int err = 0;
507         struct net_bridge_port *p;
508         struct net_port_vlans *pv;
509         __be16 oldproto;
510         u16 vid, errvid;
511
512         if (br->vlan_proto == proto)
513                 return 0;
514
515         /* Add VLANs for the new proto to the device filter. */
516         list_for_each_entry(p, &br->port_list, list) {
517                 pv = rtnl_dereference(p->vlan_info);
518                 if (!pv)
519                         continue;
520
521                 for_each_set_bit(vid, pv->vlan_bitmap, VLAN_N_VID) {
522                         err = vlan_vid_add(p->dev, proto, vid);
523                         if (err)
524                                 goto err_filt;
525                 }
526         }
527
528         oldproto = br->vlan_proto;
529         br->vlan_proto = proto;
530
531         recalculate_group_addr(br);
532         br_recalculate_fwd_mask(br);
533
534         /* Delete VLANs for the old proto from the device filter. */
535         list_for_each_entry(p, &br->port_list, list) {
536                 pv = rtnl_dereference(p->vlan_info);
537                 if (!pv)
538                         continue;
539
540                 for_each_set_bit(vid, pv->vlan_bitmap, VLAN_N_VID)
541                         vlan_vid_del(p->dev, oldproto, vid);
542         }
543
544         return 0;
545
546 err_filt:
547         errvid = vid;
548         for_each_set_bit(vid, pv->vlan_bitmap, errvid)
549                 vlan_vid_del(p->dev, proto, vid);
550
551         list_for_each_entry_continue_reverse(p, &br->port_list, list) {
552                 pv = rtnl_dereference(p->vlan_info);
553                 if (!pv)
554                         continue;
555
556                 for_each_set_bit(vid, pv->vlan_bitmap, VLAN_N_VID)
557                         vlan_vid_del(p->dev, proto, vid);
558         }
559
560         return err;
561 }
562
563 int br_vlan_set_proto(struct net_bridge *br, unsigned long val)
564 {
565         int err;
566
567         if (val != ETH_P_8021Q && val != ETH_P_8021AD)
568                 return -EPROTONOSUPPORT;
569
570         if (!rtnl_trylock())
571                 return restart_syscall();
572
573         err = __br_vlan_set_proto(br, htons(val));
574         rtnl_unlock();
575
576         return err;
577 }
578
579 static bool vlan_default_pvid(struct net_port_vlans *pv, u16 vid)
580 {
581         return pv && vid == pv->pvid && test_bit(vid, pv->untagged_bitmap);
582 }
583
584 static void br_vlan_disable_default_pvid(struct net_bridge *br)
585 {
586         struct net_bridge_port *p;
587         u16 pvid = br->default_pvid;
588
589         /* Disable default_pvid on all ports where it is still
590          * configured.
591          */
592         if (vlan_default_pvid(br_get_vlan_info(br), pvid))
593                 br_vlan_delete(br, pvid);
594
595         list_for_each_entry(p, &br->port_list, list) {
596                 if (vlan_default_pvid(nbp_get_vlan_info(p), pvid))
597                         nbp_vlan_delete(p, pvid);
598         }
599
600         br->default_pvid = 0;
601 }
602
603 static int __br_vlan_set_default_pvid(struct net_bridge *br, u16 pvid)
604 {
605         struct net_bridge_port *p;
606         u16 old_pvid;
607         int err = 0;
608         unsigned long *changed;
609
610         changed = kcalloc(BITS_TO_LONGS(BR_MAX_PORTS), sizeof(unsigned long),
611                           GFP_KERNEL);
612         if (!changed)
613                 return -ENOMEM;
614
615         old_pvid = br->default_pvid;
616
617         /* Update default_pvid config only if we do not conflict with
618          * user configuration.
619          */
620         if ((!old_pvid || vlan_default_pvid(br_get_vlan_info(br), old_pvid)) &&
621             !br_vlan_find(br, pvid)) {
622                 err = br_vlan_add(br, pvid,
623                                   BRIDGE_VLAN_INFO_PVID |
624                                   BRIDGE_VLAN_INFO_UNTAGGED);
625                 if (err)
626                         goto out;
627                 br_vlan_delete(br, old_pvid);
628                 set_bit(0, changed);
629         }
630
631         list_for_each_entry(p, &br->port_list, list) {
632                 /* Update default_pvid config only if we do not conflict with
633                  * user configuration.
634                  */
635                 if ((old_pvid &&
636                      !vlan_default_pvid(nbp_get_vlan_info(p), old_pvid)) ||
637                     nbp_vlan_find(p, pvid))
638                         continue;
639
640                 err = nbp_vlan_add(p, pvid,
641                                    BRIDGE_VLAN_INFO_PVID |
642                                    BRIDGE_VLAN_INFO_UNTAGGED);
643                 if (err)
644                         goto err_port;
645                 nbp_vlan_delete(p, old_pvid);
646                 set_bit(p->port_no, changed);
647         }
648
649         br->default_pvid = pvid;
650
651 out:
652         kfree(changed);
653         return err;
654
655 err_port:
656         list_for_each_entry_continue_reverse(p, &br->port_list, list) {
657                 if (!test_bit(p->port_no, changed))
658                         continue;
659
660                 if (old_pvid)
661                         nbp_vlan_add(p, old_pvid,
662                                      BRIDGE_VLAN_INFO_PVID |
663                                      BRIDGE_VLAN_INFO_UNTAGGED);
664                 nbp_vlan_delete(p, pvid);
665         }
666
667         if (test_bit(0, changed)) {
668                 if (old_pvid)
669                         br_vlan_add(br, old_pvid,
670                                     BRIDGE_VLAN_INFO_PVID |
671                                     BRIDGE_VLAN_INFO_UNTAGGED);
672                 br_vlan_delete(br, pvid);
673         }
674         goto out;
675 }
676
677 int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val)
678 {
679         u16 pvid = val;
680         int err = 0;
681
682         if (val >= VLAN_VID_MASK)
683                 return -EINVAL;
684
685         if (!rtnl_trylock())
686                 return restart_syscall();
687
688         if (pvid == br->default_pvid)
689                 goto unlock;
690
691         /* Only allow default pvid change when filtering is disabled */
692         if (br->vlan_enabled) {
693                 pr_info_once("Please disable vlan filtering to change default_pvid\n");
694                 err = -EPERM;
695                 goto unlock;
696         }
697
698         if (!pvid)
699                 br_vlan_disable_default_pvid(br);
700         else
701                 err = __br_vlan_set_default_pvid(br, pvid);
702
703 unlock:
704         rtnl_unlock();
705         return err;
706 }
707
708 int br_vlan_init(struct net_bridge *br)
709 {
710         br->vlan_proto = htons(ETH_P_8021Q);
711         br->default_pvid = 1;
712         return br_vlan_add(br, 1,
713                            BRIDGE_VLAN_INFO_PVID | BRIDGE_VLAN_INFO_UNTAGGED);
714 }
715
716 /* Must be protected by RTNL.
717  * Must be called with vid in range from 1 to 4094 inclusive.
718  */
719 int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags)
720 {
721         struct net_port_vlans *pv = NULL;
722         int err;
723
724         ASSERT_RTNL();
725
726         pv = rtnl_dereference(port->vlan_info);
727         if (pv)
728                 return __vlan_add(pv, vid, flags);
729
730         /* Create port vlan infomration
731          */
732         pv = kzalloc(sizeof(*pv), GFP_KERNEL);
733         if (!pv) {
734                 err = -ENOMEM;
735                 goto clean_up;
736         }
737
738         pv->port_idx = port->port_no;
739         pv->parent.port = port;
740         err = __vlan_add(pv, vid, flags);
741         if (err)
742                 goto clean_up;
743
744         rcu_assign_pointer(port->vlan_info, pv);
745         return 0;
746
747 clean_up:
748         kfree(pv);
749         return err;
750 }
751
752 /* Must be protected by RTNL.
753  * Must be called with vid in range from 1 to 4094 inclusive.
754  */
755 int nbp_vlan_delete(struct net_bridge_port *port, u16 vid)
756 {
757         struct net_port_vlans *pv;
758
759         ASSERT_RTNL();
760
761         pv = rtnl_dereference(port->vlan_info);
762         if (!pv)
763                 return -EINVAL;
764
765         br_fdb_find_delete_local(port->br, port, port->dev->dev_addr, vid);
766         br_fdb_delete_by_port(port->br, port, vid, 0);
767
768         return __vlan_del(pv, vid);
769 }
770
771 void nbp_vlan_flush(struct net_bridge_port *port)
772 {
773         struct net_port_vlans *pv;
774         u16 vid;
775
776         ASSERT_RTNL();
777
778         pv = rtnl_dereference(port->vlan_info);
779         if (!pv)
780                 return;
781
782         for_each_set_bit(vid, pv->vlan_bitmap, VLAN_N_VID)
783                 vlan_vid_del(port->dev, port->br->vlan_proto, vid);
784
785         __vlan_flush(pv);
786 }
787
788 bool nbp_vlan_find(struct net_bridge_port *port, u16 vid)
789 {
790         struct net_port_vlans *pv;
791         bool found = false;
792
793         rcu_read_lock();
794         pv = rcu_dereference(port->vlan_info);
795
796         if (!pv)
797                 goto out;
798
799         if (test_bit(vid, pv->vlan_bitmap))
800                 found = true;
801
802 out:
803         rcu_read_unlock();
804         return found;
805 }
806
807 int nbp_vlan_init(struct net_bridge_port *p)
808 {
809         return p->br->default_pvid ?
810                         nbp_vlan_add(p, p->br->default_pvid,
811                                      BRIDGE_VLAN_INFO_PVID |
812                                      BRIDGE_VLAN_INFO_UNTAGGED) :
813                         0;
814 }