Lines Matching refs:br
42 struct net_bridge *br; in __vlan_add() local
53 br = p->br; in __vlan_add()
56 br = v->parent.br; in __vlan_add()
57 dev = br->dev; in __vlan_add()
65 err = vlan_vid_add(dev, br->vlan_proto, vid); in __vlan_add()
70 err = br_fdb_insert(br, p, dev->dev_addr, vid); in __vlan_add()
72 br_err(br, "failed insert local address into bridge " in __vlan_add()
85 vlan_vid_del(dev, br->vlan_proto, vid); in __vlan_add()
99 vlan_vid_del(p->dev, p->br->vlan_proto, vid); in __vlan_del()
108 RCU_INIT_POINTER(v->parent.br->vlan_info, NULL); in __vlan_del()
122 RCU_INIT_POINTER(v->parent.br->vlan_info, NULL); in __vlan_flush()
126 struct sk_buff *br_handle_vlan(struct net_bridge *br, in br_handle_vlan() argument
142 if ((br->dev->flags & IFF_PROMISC) && skb->dev == br->dev) { in br_handle_vlan()
163 bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v, in br_allowed_ingress() argument
172 if (!br->vlan_enabled) { in br_allowed_ingress()
184 proto = br->vlan_proto; in br_allowed_ingress()
256 bool br_allowed_egress(struct net_bridge *br, in br_allowed_egress() argument
279 struct net_bridge *br = p->br; in br_should_learn() local
283 if (!br->vlan_enabled) in br_should_learn()
290 if (!br_vlan_get_tag(skb, vid) && skb->vlan_proto != br->vlan_proto) in br_should_learn()
310 int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags) in br_vlan_add() argument
317 pv = rtnl_dereference(br->vlan_info); in br_vlan_add()
327 pv->parent.br = br; in br_vlan_add()
332 rcu_assign_pointer(br->vlan_info, pv); in br_vlan_add()
342 int br_vlan_delete(struct net_bridge *br, u16 vid) in br_vlan_delete() argument
348 pv = rtnl_dereference(br->vlan_info); in br_vlan_delete()
352 br_fdb_find_delete_local(br, NULL, br->dev->dev_addr, vid); in br_vlan_delete()
358 void br_vlan_flush(struct net_bridge *br) in br_vlan_flush() argument
363 pv = rtnl_dereference(br->vlan_info); in br_vlan_flush()
370 bool br_vlan_find(struct net_bridge *br, u16 vid) in br_vlan_find() argument
376 pv = rcu_dereference(br->vlan_info); in br_vlan_find()
390 static void recalculate_group_addr(struct net_bridge *br) in recalculate_group_addr() argument
392 if (br->group_addr_set) in recalculate_group_addr()
395 spin_lock_bh(&br->lock); in recalculate_group_addr()
396 if (!br->vlan_enabled || br->vlan_proto == htons(ETH_P_8021Q)) { in recalculate_group_addr()
398 br->group_addr[5] = 0x00; in recalculate_group_addr()
401 br->group_addr[5] = 0x08; in recalculate_group_addr()
403 spin_unlock_bh(&br->lock); in recalculate_group_addr()
407 void br_recalculate_fwd_mask(struct net_bridge *br) in br_recalculate_fwd_mask() argument
409 if (!br->vlan_enabled || br->vlan_proto == htons(ETH_P_8021Q)) in br_recalculate_fwd_mask()
410 br->group_fwd_mask_required = BR_GROUPFWD_DEFAULT; in br_recalculate_fwd_mask()
412 br->group_fwd_mask_required = BR_GROUPFWD_8021AD & in br_recalculate_fwd_mask()
413 ~(1u << br->group_addr[5]); in br_recalculate_fwd_mask()
416 int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val) in br_vlan_filter_toggle() argument
421 if (br->vlan_enabled == val) in br_vlan_filter_toggle()
424 br->vlan_enabled = val; in br_vlan_filter_toggle()
425 br_manage_promisc(br); in br_vlan_filter_toggle()
426 recalculate_group_addr(br); in br_vlan_filter_toggle()
427 br_recalculate_fwd_mask(br); in br_vlan_filter_toggle()
434 int br_vlan_set_proto(struct net_bridge *br, unsigned long val) in br_vlan_set_proto() argument
449 if (br->vlan_proto == proto) in br_vlan_set_proto()
453 list_for_each_entry(p, &br->port_list, list) { in br_vlan_set_proto()
465 oldproto = br->vlan_proto; in br_vlan_set_proto()
466 br->vlan_proto = proto; in br_vlan_set_proto()
468 recalculate_group_addr(br); in br_vlan_set_proto()
469 br_recalculate_fwd_mask(br); in br_vlan_set_proto()
472 list_for_each_entry(p, &br->port_list, list) { in br_vlan_set_proto()
490 list_for_each_entry_continue_reverse(p, &br->port_list, list) { in br_vlan_set_proto()
507 static void br_vlan_disable_default_pvid(struct net_bridge *br) in br_vlan_disable_default_pvid() argument
510 u16 pvid = br->default_pvid; in br_vlan_disable_default_pvid()
515 if (vlan_default_pvid(br_get_vlan_info(br), pvid)) in br_vlan_disable_default_pvid()
516 br_vlan_delete(br, pvid); in br_vlan_disable_default_pvid()
518 list_for_each_entry(p, &br->port_list, list) { in br_vlan_disable_default_pvid()
523 br->default_pvid = 0; in br_vlan_disable_default_pvid()
526 static int __br_vlan_set_default_pvid(struct net_bridge *br, u16 pvid) in __br_vlan_set_default_pvid() argument
538 old_pvid = br->default_pvid; in __br_vlan_set_default_pvid()
543 if ((!old_pvid || vlan_default_pvid(br_get_vlan_info(br), old_pvid)) && in __br_vlan_set_default_pvid()
544 !br_vlan_find(br, pvid)) { in __br_vlan_set_default_pvid()
545 err = br_vlan_add(br, pvid, in __br_vlan_set_default_pvid()
550 br_vlan_delete(br, old_pvid); in __br_vlan_set_default_pvid()
554 list_for_each_entry(p, &br->port_list, list) { in __br_vlan_set_default_pvid()
572 br->default_pvid = pvid; in __br_vlan_set_default_pvid()
579 list_for_each_entry_continue_reverse(p, &br->port_list, list) { in __br_vlan_set_default_pvid()
592 br_vlan_add(br, old_pvid, in __br_vlan_set_default_pvid()
595 br_vlan_delete(br, pvid); in __br_vlan_set_default_pvid()
600 int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val) in br_vlan_set_default_pvid() argument
611 if (pvid == br->default_pvid) in br_vlan_set_default_pvid()
615 if (br->vlan_enabled) { in br_vlan_set_default_pvid()
622 br_vlan_disable_default_pvid(br); in br_vlan_set_default_pvid()
624 err = __br_vlan_set_default_pvid(br, pvid); in br_vlan_set_default_pvid()
631 int br_vlan_init(struct net_bridge *br) in br_vlan_init() argument
633 br->vlan_proto = htons(ETH_P_8021Q); in br_vlan_init()
634 br->default_pvid = 1; in br_vlan_init()
635 return br_vlan_add(br, 1, in br_vlan_init()
688 br_fdb_find_delete_local(port->br, port, port->dev->dev_addr, vid); in nbp_vlan_delete()
705 vlan_vid_del(port->dev, port->br->vlan_proto, vid); in nbp_vlan_flush()
731 return p->br->default_pvid ? in nbp_vlan_init()
732 nbp_vlan_add(p, p->br->default_pvid, in nbp_vlan_init()