aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorPravin B Shelar <pshelar@nicira.com>2015-08-26 23:46:50 -0700
committerDavid S. Miller <davem@davemloft.net>2015-08-27 15:42:47 -0700
commitc29a70d2cadfea443c027d23481f820530b70057 (patch)
tree2ebe4f224f810316d5b4f40131fe871bc7fb0ee6 /drivers/net
parentgeneve: Use skb mark and protocol to lookup route. (diff)
downloadlinux-dev-c29a70d2cadfea443c027d23481f820530b70057.tar.xz
linux-dev-c29a70d2cadfea443c027d23481f820530b70057.zip
tunnel: introduce udp_tun_rx_dst()
Introduce function udp_tun_rx_dst() to initialize tunnel dst on receive path. Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Reviewed-by: Jesse Gross <jesse@nicira.com> Acked-by: Thomas Graf <tgraf@suug.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/vxlan.c29
1 files changed, 3 insertions, 26 deletions
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 61b457b9ec00..5b4cf66e632e 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -1264,36 +1264,13 @@ static int vxlan_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
}
if (vxlan_collect_metadata(vs)) {
- tun_dst = metadata_dst_alloc(sizeof(*md), GFP_ATOMIC);
+ tun_dst = udp_tun_rx_dst(skb, vxlan_get_sk_family(vs), TUNNEL_KEY,
+ cpu_to_be64(vni >> 8), sizeof(*md));
+
if (!tun_dst)
goto drop;
info = &tun_dst->u.tun_info;
- if (vxlan_get_sk_family(vs) == AF_INET) {
- const struct iphdr *iph = ip_hdr(skb);
-
- info->key.u.ipv4.src = iph->saddr;
- info->key.u.ipv4.dst = iph->daddr;
- info->key.tos = iph->tos;
- info->key.ttl = iph->ttl;
- } else {
- const struct ipv6hdr *ip6h = ipv6_hdr(skb);
-
- info->key.u.ipv6.src = ip6h->saddr;
- info->key.u.ipv6.dst = ip6h->daddr;
- info->key.tos = ipv6_get_dsfield(ip6h);
- info->key.ttl = ip6h->hop_limit;
- }
-
- info->key.tp_src = udp_hdr(skb)->source;
- info->key.tp_dst = udp_hdr(skb)->dest;
-
- info->mode = IP_TUNNEL_INFO_RX;
- info->key.tun_flags = TUNNEL_KEY;
- info->key.tun_id = cpu_to_be64(vni >> 8);
- if (udp_hdr(skb)->check != 0)
- info->key.tun_flags |= TUNNEL_CSUM;
-
md = ip_tunnel_info_opts(info, sizeof(*md));
} else {
memset(md, 0, sizeof(*md));