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