summaryrefslogtreecommitdiff
path: root/net/ipv4/ip_gre.c
diff options
context:
space:
mode:
authorPravin B Shelar <pshelar@nicira.com>2015-08-27 09:46:50 +0300
committerDavid S. Miller <davem@davemloft.net>2015-08-28 01:42:47 +0300
commitc29a70d2cadfea443c027d23481f820530b70057 (patch)
tree2ebe4f224f810316d5b4f40131fe871bc7fb0ee6 /net/ipv4/ip_gre.c
parent980c394c53e420f7e5484d011378a4bec861ec7a (diff)
downloadlinux-c29a70d2cadfea443c027d23481f820530b70057.tar.xz
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 'net/ipv4/ip_gre.c')
-rw-r--r--net/ipv4/ip_gre.c21
1 files changed, 5 insertions, 16 deletions
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
index 1bf328182697..faf1cde6f8da 100644
--- a/net/ipv4/ip_gre.c
+++ b/net/ipv4/ip_gre.c
@@ -400,25 +400,14 @@ static int ipgre_rcv(struct sk_buff *skb, const struct tnl_ptk_info *tpi)
if (tunnel) {
skb_pop_mac_header(skb);
if (tunnel->collect_md) {
- struct ip_tunnel_info *info;
+ __be16 flags;
+ __be64 tun_id;
- tun_dst = metadata_dst_alloc(0, GFP_ATOMIC);
+ flags = tpi->flags & (TUNNEL_CSUM | TUNNEL_KEY);
+ tun_id = key_to_tunnel_id(tpi->key);
+ tun_dst = ip_tun_rx_dst(skb, flags, tun_id, 0);
if (!tun_dst)
return PACKET_REJECT;
-
- info = &tun_dst->u.tun_info;
- info->key.u.ipv4.src = iph->saddr;
- info->key.u.ipv4.dst = iph->daddr;
- info->key.tos = iph->tos;
- info->key.ttl = iph->ttl;
-
- info->mode = IP_TUNNEL_INFO_RX;
- info->key.tun_flags = tpi->flags &
- (TUNNEL_CSUM | TUNNEL_KEY);
- info->key.tun_id = key_to_tunnel_id(tpi->key);
-
- info->key.tp_src = 0;
- info->key.tp_dst = 0;
}
ip_tunnel_rcv(tunnel, skb, tpi, tun_dst, log_ecn_error);