diff options
author | Thomas Graf <tgraf@suug.ch> | 2015-07-21 04:44:00 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-07-21 13:39:06 -0400 |
commit | 3093fbe7ff4bc7d1571fc217dade1cf80330a714 (patch) | |
tree | 4c510f554d3e35e5150c47b3ac107801fc88dede /drivers/net/vxlan.c | |
parent | 1b7179d3adff0ab71f85ee24d7de28ccb7734b89 (diff) |
route: Per route IP tunnel metadata via lightweight tunnel
This introduces a new IP tunnel lightweight tunnel type which allows
to specify IP tunnel instructions per route. Only IPv4 is supported
at this point.
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/vxlan.c')
-rw-r--r-- | drivers/net/vxlan.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 06c092b05a51..9486d7ec128c 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c | |||
@@ -1935,7 +1935,7 @@ static void vxlan_encap_bypass(struct sk_buff *skb, struct vxlan_dev *src_vxlan, | |||
1935 | static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, | 1935 | static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, |
1936 | struct vxlan_rdst *rdst, bool did_rsc) | 1936 | struct vxlan_rdst *rdst, bool did_rsc) |
1937 | { | 1937 | { |
1938 | struct ip_tunnel_info *info = skb_tunnel_info(skb); | 1938 | struct ip_tunnel_info *info; |
1939 | struct vxlan_dev *vxlan = netdev_priv(dev); | 1939 | struct vxlan_dev *vxlan = netdev_priv(dev); |
1940 | struct sock *sk = vxlan->vn_sock->sock->sk; | 1940 | struct sock *sk = vxlan->vn_sock->sock->sk; |
1941 | struct rtable *rt = NULL; | 1941 | struct rtable *rt = NULL; |
@@ -1952,6 +1952,9 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, | |||
1952 | int err; | 1952 | int err; |
1953 | u32 flags = vxlan->flags; | 1953 | u32 flags = vxlan->flags; |
1954 | 1954 | ||
1955 | /* FIXME: Support IPv6 */ | ||
1956 | info = skb_tunnel_info(skb, AF_INET); | ||
1957 | |||
1955 | if (rdst) { | 1958 | if (rdst) { |
1956 | dst_port = rdst->remote_port ? rdst->remote_port : vxlan->dst_port; | 1959 | dst_port = rdst->remote_port ? rdst->remote_port : vxlan->dst_port; |
1957 | vni = rdst->remote_vni; | 1960 | vni = rdst->remote_vni; |
@@ -2141,12 +2144,15 @@ tx_free: | |||
2141 | static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev) | 2144 | static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev) |
2142 | { | 2145 | { |
2143 | struct vxlan_dev *vxlan = netdev_priv(dev); | 2146 | struct vxlan_dev *vxlan = netdev_priv(dev); |
2144 | const struct ip_tunnel_info *info = skb_tunnel_info(skb); | 2147 | const struct ip_tunnel_info *info; |
2145 | struct ethhdr *eth; | 2148 | struct ethhdr *eth; |
2146 | bool did_rsc = false; | 2149 | bool did_rsc = false; |
2147 | struct vxlan_rdst *rdst, *fdst = NULL; | 2150 | struct vxlan_rdst *rdst, *fdst = NULL; |
2148 | struct vxlan_fdb *f; | 2151 | struct vxlan_fdb *f; |
2149 | 2152 | ||
2153 | /* FIXME: Support IPv6 */ | ||
2154 | info = skb_tunnel_info(skb, AF_INET); | ||
2155 | |||
2150 | skb_reset_mac_header(skb); | 2156 | skb_reset_mac_header(skb); |
2151 | eth = eth_hdr(skb); | 2157 | eth = eth_hdr(skb); |
2152 | 2158 | ||