diff options
author | 2017-01-31 22:59:55 -0800 | |
---|---|---|
committer | 2017-02-03 15:21:22 -0500 | |
commit | 11538d039ac6efcf4f1a6c536e1b87cd3668a9fd (patch) | |
tree | 48288a17219c037942267db3c6c469cf47bf7ecb /net/bridge/br_vlan.c | |
parent | bridge: per vlan dst_metadata netlink support (diff) | |
download | linux-11538d039ac6efcf4f1a6c536e1b87cd3668a9fd.tar.gz linux-11538d039ac6efcf4f1a6c536e1b87cd3668a9fd.tar.bz2 linux-11538d039ac6efcf4f1a6c536e1b87cd3668a9fd.zip |
bridge: vlan dst_metadata hooks in ingress and egress paths
- ingress hook:
- if port is a tunnel port, use tunnel info in
attached dst_metadata to map it to a local vlan
- egress hook:
- if port is a tunnel port, use tunnel info attached to
vlan to set dst_metadata on the skb
CC: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge/br_vlan.c')
-rw-r--r-- | net/bridge/br_vlan.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c index 64002e3941ca..62e68c0dc687 100644 --- a/net/bridge/br_vlan.c +++ b/net/bridge/br_vlan.c @@ -341,6 +341,7 @@ static void __vlan_flush(struct net_bridge_vlan_group *vg) } struct sk_buff *br_handle_vlan(struct net_bridge *br, + const struct net_bridge_port *p, struct net_bridge_vlan_group *vg, struct sk_buff *skb) { @@ -381,6 +382,12 @@ struct sk_buff *br_handle_vlan(struct net_bridge *br, if (v->flags & BRIDGE_VLAN_INFO_UNTAGGED) skb->vlan_tci = 0; + + if (p && (p->flags & BR_VLAN_TUNNEL) && + br_handle_egress_vlan_tunnel(skb, v)) { + kfree_skb(skb); + return NULL; + } out: return skb; } |