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