summaryrefslogtreecommitdiffstats
path: root/drivers/net/vxlan.c
diff options
context:
space:
mode:
authorThomas Graf <tgraf@suug.ch>2015-07-21 04:44:00 -0400
committerDavid S. Miller <davem@davemloft.net>2015-07-21 13:39:06 -0400
commit3093fbe7ff4bc7d1571fc217dade1cf80330a714 (patch)
tree4c510f554d3e35e5150c47b3ac107801fc88dede /drivers/net/vxlan.c
parent1b7179d3adff0ab71f85ee24d7de28ccb7734b89 (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.c10
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,
1935static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, 1935static 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:
2141static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev) 2144static 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