1 #include <linux/kernel.h>
2 #include <linux/netdevice.h>
3 #include <linux/rtnetlink.h>
4 #include <linux/slab.h>
6 #include "br_private.h"
8 static void __vlan_add_pvid(struct net_port_vlans *v, u16 vid)
17 static void __vlan_delete_pvid(struct net_port_vlans *v, u16 vid)
26 static void __vlan_add_flags(struct net_port_vlans *v, u16 vid, u16 flags)
28 if (flags & BRIDGE_VLAN_INFO_PVID)
29 __vlan_add_pvid(v, vid);
31 if (flags & BRIDGE_VLAN_INFO_UNTAGGED)
32 set_bit(vid, v->untagged_bitmap);
35 static int __vlan_add(struct net_port_vlans *v, u16 vid, u16 flags)
37 const struct net_device_ops *ops;
38 struct net_bridge_port *p = NULL;
39 struct net_bridge *br;
40 struct net_device *dev;
43 if (test_bit(vid, v->vlan_bitmap)) {
44 __vlan_add_flags(v, vid, flags);
57 ops = dev->netdev_ops;
59 if (p && (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER)) {
60 /* Add VLAN to the device filter if it is supported.
61 * Stricly speaking, this is not necessary now, since
62 * devices are made promiscuous by the bridge, but if
63 * that ever changes this code will allow tagged
64 * traffic to enter the bridge.
66 err = ops->ndo_vlan_rx_add_vid(dev, htons(ETH_P_8021Q),
72 err = br_fdb_insert(br, p, dev->dev_addr, vid);
74 br_err(br, "failed insert local address into bridge "
75 "forwarding table\n");
81 set_bit(vid, v->vlan_bitmap);
83 __vlan_add_flags(v, vid, flags);
88 if (p && (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER))
89 ops->ndo_vlan_rx_kill_vid(dev, htons(ETH_P_8021Q), vid);
93 static int __vlan_del(struct net_port_vlans *v, u16 vid)
95 if (!test_bit(vid, v->vlan_bitmap))
98 __vlan_delete_pvid(v, vid);
99 clear_bit(vid, v->untagged_bitmap);
101 if (v->port_idx && vid) {
102 struct net_device *dev = v->parent.port->dev;
103 const struct net_device_ops *ops = dev->netdev_ops;
105 if (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER)
106 ops->ndo_vlan_rx_kill_vid(dev, htons(ETH_P_8021Q), vid);
109 clear_bit(vid, v->vlan_bitmap);
111 if (bitmap_empty(v->vlan_bitmap, BR_VLAN_BITMAP_LEN)) {
113 rcu_assign_pointer(v->parent.port->vlan_info, NULL);
115 rcu_assign_pointer(v->parent.br->vlan_info, NULL);
121 static void __vlan_flush(struct net_port_vlans *v)
125 bitmap_zero(v->vlan_bitmap, BR_VLAN_BITMAP_LEN);
127 rcu_assign_pointer(v->parent.port->vlan_info, NULL);
129 rcu_assign_pointer(v->parent.br->vlan_info, NULL);
133 /* Strip the tag from the packet. Will return skb with tci set 0. */
134 static struct sk_buff *br_vlan_untag(struct sk_buff *skb)
136 if (skb->protocol != htons(ETH_P_8021Q)) {
142 skb = vlan_untag(skb);
149 struct sk_buff *br_handle_vlan(struct net_bridge *br,
150 const struct net_port_vlans *pv,
155 if (!br->vlan_enabled)
158 /* At this point, we know that the frame was filtered and contains
159 * a valid vlan id. If the vlan id is set in the untagged bitmap,
160 * send untagged; otherwise, send taged.
162 br_vlan_get_tag(skb, &vid);
163 if (test_bit(vid, pv->untagged_bitmap))
164 skb = br_vlan_untag(skb);
166 /* Egress policy says "send tagged". If output device
167 * is the bridge, we need to add the VLAN header
168 * ourselves since we'll be going through the RX path.
169 * Sending to ports puts the frame on the TX path and
170 * we let dev_hard_start_xmit() add the header.
172 if (skb->protocol != htons(ETH_P_8021Q) &&
174 /* vlan_put_tag expects skb->data to point to
177 skb_push(skb, ETH_HLEN);
178 skb = __vlan_put_tag(skb, skb->vlan_proto, skb->vlan_tci);
181 /* put skb->data back to where it was */
182 skb_pull(skb, ETH_HLEN);
191 /* Called under RCU */
192 bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,
193 struct sk_buff *skb, u16 *vid)
195 /* If VLAN filtering is disabled on the bridge, all packets are
198 if (!br->vlan_enabled)
201 /* If there are no vlan in the permitted list, all packets are
207 if (br_vlan_get_tag(skb, vid)) {
208 u16 pvid = br_get_pvid(v);
210 /* Frame did not have a tag. See if pvid is set
211 * on this port. That tells us which vlan untagged
212 * traffic belongs to.
214 if (pvid == VLAN_N_VID)
217 /* PVID is set on this port. Any untagged ingress
218 * frame is considered to belong to this vlan.
220 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), pvid);
224 /* Frame had a valid vlan tag. See if vlan is allowed */
225 if (test_bit(*vid, v->vlan_bitmap))
231 /* Called under RCU. */
232 bool br_allowed_egress(struct net_bridge *br,
233 const struct net_port_vlans *v,
234 const struct sk_buff *skb)
238 if (!br->vlan_enabled)
244 br_vlan_get_tag(skb, &vid);
245 if (test_bit(vid, v->vlan_bitmap))
251 /* Must be protected by RTNL */
252 int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags)
254 struct net_port_vlans *pv = NULL;
259 pv = rtnl_dereference(br->vlan_info);
261 return __vlan_add(pv, vid, flags);
263 /* Create port vlan infomration
265 pv = kzalloc(sizeof(*pv), GFP_KERNEL);
270 err = __vlan_add(pv, vid, flags);
274 rcu_assign_pointer(br->vlan_info, pv);
281 /* Must be protected by RTNL */
282 int br_vlan_delete(struct net_bridge *br, u16 vid)
284 struct net_port_vlans *pv;
288 pv = rtnl_dereference(br->vlan_info);
293 /* If the VID !=0 remove fdb for this vid. VID 0 is special
294 * in that it's the default and is always there in the fdb.
296 spin_lock_bh(&br->hash_lock);
297 fdb_delete_by_addr(br, br->dev->dev_addr, vid);
298 spin_unlock_bh(&br->hash_lock);
305 void br_vlan_flush(struct net_bridge *br)
307 struct net_port_vlans *pv;
310 pv = rtnl_dereference(br->vlan_info);
317 int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
320 return restart_syscall();
322 if (br->vlan_enabled == val)
325 br->vlan_enabled = val;
332 /* Must be protected by RTNL */
333 int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags)
335 struct net_port_vlans *pv = NULL;
340 pv = rtnl_dereference(port->vlan_info);
342 return __vlan_add(pv, vid, flags);
344 /* Create port vlan infomration
346 pv = kzalloc(sizeof(*pv), GFP_KERNEL);
352 pv->port_idx = port->port_no;
353 pv->parent.port = port;
354 err = __vlan_add(pv, vid, flags);
358 rcu_assign_pointer(port->vlan_info, pv);
366 /* Must be protected by RTNL */
367 int nbp_vlan_delete(struct net_bridge_port *port, u16 vid)
369 struct net_port_vlans *pv;
373 pv = rtnl_dereference(port->vlan_info);
378 /* If the VID !=0 remove fdb for this vid. VID 0 is special
379 * in that it's the default and is always there in the fdb.
381 spin_lock_bh(&port->br->hash_lock);
382 fdb_delete_by_addr(port->br, port->dev->dev_addr, vid);
383 spin_unlock_bh(&port->br->hash_lock);
386 return __vlan_del(pv, vid);
389 void nbp_vlan_flush(struct net_bridge_port *port)
391 struct net_port_vlans *pv;
395 pv = rtnl_dereference(port->vlan_info);
402 bool nbp_vlan_find(struct net_bridge_port *port, u16 vid)
404 struct net_port_vlans *pv;
408 pv = rcu_dereference(port->vlan_info);
413 if (test_bit(vid, pv->vlan_bitmap))