Merge tag 'kvm-arm-for-4.3-rc2-2' of git://git.kernel.org/pub/scm/linux/kernel/git...
[firefly-linux-kernel-4.4.55.git] / include / net / dst_metadata.h
index 2b83f0d232e09949f1c99fc6164590401ebb0927..af9d5382f6cbae8c38d45106f5702bd1e66c5671 100644 (file)
@@ -7,7 +7,6 @@
 
 struct metadata_dst {
        struct dst_entry                dst;
-       size_t                          opts_len;
        union {
                struct ip_tunnel_info   tun_info;
        } u;
@@ -48,21 +47,16 @@ static inline bool skb_valid_dst(const struct sk_buff *skb)
 struct metadata_dst *metadata_dst_alloc(u8 optslen, gfp_t flags);
 struct metadata_dst __percpu *metadata_dst_alloc_percpu(u8 optslen, gfp_t flags);
 
-static inline struct metadata_dst *tun_rx_dst(__be16 flags,
-                                             __be64 tunnel_id, int md_size)
+static inline struct metadata_dst *tun_rx_dst(int md_size)
 {
        struct metadata_dst *tun_dst;
-       struct ip_tunnel_info *info;
 
        tun_dst = metadata_dst_alloc(md_size, GFP_ATOMIC);
        if (!tun_dst)
                return NULL;
 
-       info = &tun_dst->u.tun_info;
-       info->key.tun_flags = flags;
-       info->key.tun_id = tunnel_id;
-       info->key.tp_src = 0;
-       info->key.tp_dst = 0;
+       tun_dst->u.tun_info.options_len = 0;
+       tun_dst->u.tun_info.mode = 0;
        return tun_dst;
 }
 
@@ -73,17 +67,14 @@ static inline struct metadata_dst *ip_tun_rx_dst(struct sk_buff *skb,
 {
        const struct iphdr *iph = ip_hdr(skb);
        struct metadata_dst *tun_dst;
-       struct ip_tunnel_info *info;
 
-       tun_dst = tun_rx_dst(flags, tunnel_id, md_size);
+       tun_dst = tun_rx_dst(md_size);
        if (!tun_dst)
                return NULL;
 
-       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;
+       ip_tunnel_key_init(&tun_dst->u.tun_info.key,
+                          iph->saddr, iph->daddr, iph->tos, iph->ttl,
+                          0, 0, tunnel_id, flags);
        return tun_dst;
 }
 
@@ -96,11 +87,17 @@ static inline struct metadata_dst *ipv6_tun_rx_dst(struct sk_buff *skb,
        struct metadata_dst *tun_dst;
        struct ip_tunnel_info *info;
 
-       tun_dst = tun_rx_dst(flags, tunnel_id, md_size);
+       tun_dst = tun_rx_dst(md_size);
        if (!tun_dst)
                return NULL;
 
        info = &tun_dst->u.tun_info;
+       info->mode = IP_TUNNEL_INFO_IPV6;
+       info->key.tun_flags = flags;
+       info->key.tun_id = tunnel_id;
+       info->key.tp_src = 0;
+       info->key.tp_dst = 0;
+
        info->key.u.ipv6.src = ip6h->saddr;
        info->key.u.ipv6.dst = ip6h->daddr;
        info->key.tos = ipv6_get_dsfield(ip6h);