On transmit metadata dst is cleared, do same on recieve.

Signed-off-by: Pravin B Shelar <pshe...@ovn.org>
---
 datapath/linux/compat/geneve.c                   |  2 +-
 datapath/linux/compat/include/net/dst_metadata.h | 20 ++++++++++----------
 datapath/linux/compat/include/net/udp_tunnel.h   | 14 ++++++++------
 datapath/linux/compat/ip_gre.c                   |  2 +-
 datapath/linux/compat/lisp.c                     |  2 +-
 datapath/linux/compat/stt.c                      |  2 +-
 datapath/linux/compat/vxlan.c                    |  2 +-
 7 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/datapath/linux/compat/geneve.c b/datapath/linux/compat/geneve.c
index fd495d6..f782606 100644
--- a/datapath/linux/compat/geneve.c
+++ b/datapath/linux/compat/geneve.c
@@ -244,7 +244,7 @@ static void geneve_rx(struct geneve_dev *geneve, struct 
geneve_sock *gs,
                        (gnvh->critical ? TUNNEL_CRIT_OPT : 0);
 
                tun_dst = &buf.dst;
-               ovs_udp_tun_rx_dst(&tun_dst->u.tun_info,
+               ovs_udp_tun_rx_dst(tun_dst,
                                   skb, geneve_get_sk_family(gs), flags,
                                   vni_to_tunnel_id(gnvh->vni),
                                   gnvh->opt_len * 4);
diff --git a/datapath/linux/compat/include/net/dst_metadata.h 
b/datapath/linux/compat/include/net/dst_metadata.h
index 6e38a3e..6660dfc 100644
--- a/datapath/linux/compat/include/net/dst_metadata.h
+++ b/datapath/linux/compat/include/net/dst_metadata.h
@@ -50,7 +50,7 @@ static inline struct metadata_dst *metadata_dst_alloc(u8 
optslen, gfp_t flags)
 #define skb_tunnel_info ovs_skb_tunnel_info
 #endif
 
-static inline void ovs_tun_rx_dst(struct ip_tunnel_info *info, int md_size)
+static inline void ovs_tun_rx_dst(struct metadata_dst *md_dst, int optslen)
 {
        /* No need to allocate for OVS backport case. */
 #if 0
@@ -61,31 +61,31 @@ static inline void ovs_tun_rx_dst(struct ip_tunnel_info 
*info, int md_size)
        if (!tun_dst)
                return NULL;
 #endif
-       info->mode = 0;
-       info->options_len = 0;
+       __metadata_dst_init(md_dst, optslen);
 }
 
-static inline void ovs_ip_tun_rx_dst(struct ip_tunnel_info *tun_info,
-                                struct sk_buff *skb, __be16 flags,
-                                __be64 tunnel_id, int md_size)
+static inline void ovs_ip_tun_rx_dst(struct metadata_dst *md_dst,
+                                    struct sk_buff *skb, __be16 flags,
+                                    __be64 tunnel_id, int md_size)
 {
        const struct iphdr *iph = ip_hdr(skb);
 
-       ovs_tun_rx_dst(tun_info, md_size);
-       ip_tunnel_key_init(&tun_info->key,
+       ovs_tun_rx_dst(md_dst, md_size);
+       ip_tunnel_key_init(&md_dst->u.tun_info.key,
                           iph->saddr, iph->daddr, iph->tos, iph->ttl, 0,
                           0, 0, tunnel_id, flags);
 }
 
-static inline void ovs_ipv6_tun_rx_dst(struct ip_tunnel_info *info,
+static inline void ovs_ipv6_tun_rx_dst(struct metadata_dst *md_dst,
                                       struct sk_buff *skb,
                                       __be16 flags,
                                       __be64 tunnel_id,
                                       int md_size)
 {
+       struct ip_tunnel_info *info = &md_dst->u.tun_info;
        const struct ipv6hdr *ip6h = ipv6_hdr(skb);
 
-       ovs_tun_rx_dst(info, md_size);
+       ovs_tun_rx_dst(md_dst, md_size);
        info->mode = IP_TUNNEL_INFO_IPV6;
        info->key.tun_flags = flags;
        info->key.tun_id = tunnel_id;
diff --git a/datapath/linux/compat/include/net/udp_tunnel.h 
b/datapath/linux/compat/include/net/udp_tunnel.h
index f1e8853..ded7f30 100644
--- a/datapath/linux/compat/include/net/udp_tunnel.h
+++ b/datapath/linux/compat/include/net/udp_tunnel.h
@@ -188,15 +188,17 @@ static inline int rpl_udp_tunnel_handle_offloads(struct 
sk_buff *skb,
 #endif /* USE_UPSTREAM_TUNNEL */
 
 #define udp_tunnel_handle_offloads rpl_udp_tunnel_handle_offloads
-static inline void ovs_udp_tun_rx_dst(struct ip_tunnel_info *info,
-                                 struct sk_buff *skb,
-                                 unsigned short family,
-                                 __be16 flags, __be64 tunnel_id, int md_size)
+static inline void ovs_udp_tun_rx_dst(struct metadata_dst *md_dst,
+                                     struct sk_buff *skb,
+                                     unsigned short family,
+                                     __be16 flags, __be64 tunnel_id, int 
md_size)
 {
+       struct ip_tunnel_info *info = &md_dst->u.tun_info;
+
        if (family == AF_INET)
-               ovs_ip_tun_rx_dst(info, skb, flags, tunnel_id, md_size);
+               ovs_ip_tun_rx_dst(md_dst, skb, flags, tunnel_id, md_size);
        else
-               ovs_ipv6_tun_rx_dst(info, skb, flags, tunnel_id, md_size);
+               ovs_ipv6_tun_rx_dst(md_dst, skb, flags, tunnel_id, md_size);
 
        info->key.tp_src = udp_hdr(skb)->source;
        info->key.tp_dst = udp_hdr(skb)->dest;
diff --git a/datapath/linux/compat/ip_gre.c b/datapath/linux/compat/ip_gre.c
index f28fca9..d585f67 100644
--- a/datapath/linux/compat/ip_gre.c
+++ b/datapath/linux/compat/ip_gre.c
@@ -144,7 +144,7 @@ static int ipgre_rcv(struct sk_buff *skb, const struct 
tnl_ptk_info *tpi)
                skb_pop_mac_header(skb);
                flags = tpi->flags & (TUNNEL_CSUM | TUNNEL_KEY);
                tun_id = key_to_tunnel_id(tpi->key);
-               ovs_ip_tun_rx_dst(&tun_dst.u.tun_info, skb, flags, tun_id, 0);
+               ovs_ip_tun_rx_dst(&tun_dst, skb, flags, tun_id, 0);
 
                skb_reset_network_header(skb);
                err = IP_ECN_decapsulate(iph, skb);
diff --git a/datapath/linux/compat/lisp.c b/datapath/linux/compat/lisp.c
index 3cb916d..bf65102 100644
--- a/datapath/linux/compat/lisp.c
+++ b/datapath/linux/compat/lisp.c
@@ -238,7 +238,7 @@ static int lisp_rcv(struct sock *sk, struct sk_buff *skb)
        /* Save outer tunnel values */
 #ifndef USE_UPSTREAM_TUNNEL
        tun_dst = &temp;
-       ovs_udp_tun_rx_dst(&tun_dst->u.tun_info, skb, AF_INET, TUNNEL_KEY, key, 
0);
+       ovs_udp_tun_rx_dst(tun_dst, skb, AF_INET, TUNNEL_KEY, key, 0);
 #else
        tun_dst = udp_tun_rx_dst(skb, AF_INET, TUNNEL_KEY, key, 0);
 #endif
diff --git a/datapath/linux/compat/stt.c b/datapath/linux/compat/stt.c
index 1a3cf76..1488afa 100644
--- a/datapath/linux/compat/stt.c
+++ b/datapath/linux/compat/stt.c
@@ -1413,7 +1413,7 @@ static int __stt_rcv(struct stt_dev *stt_dev, struct 
sk_buff *skb)
 {
        struct metadata_dst tun_dst;
 
-       ovs_ip_tun_rx_dst(&tun_dst.u.tun_info, skb, TUNNEL_KEY | TUNNEL_CSUM,
+       ovs_ip_tun_rx_dst(&tun_dst, skb, TUNNEL_KEY | TUNNEL_CSUM,
                          get_unaligned(&stt_hdr(skb)->key), 0);
        tun_dst.u.tun_info.key.tp_src = tcp_hdr(skb)->source;
        tun_dst.u.tun_info.key.tp_dst = tcp_hdr(skb)->dest;
diff --git a/datapath/linux/compat/vxlan.c b/datapath/linux/compat/vxlan.c
index d4a177f..8e0075d 100644
--- a/datapath/linux/compat/vxlan.c
+++ b/datapath/linux/compat/vxlan.c
@@ -718,7 +718,7 @@ static int vxlan_rcv(struct sock *sk, struct sk_buff *skb)
                struct metadata_dst *tun_dst;
 
                tun_dst = &buf.dst;
-               ovs_udp_tun_rx_dst(&tun_dst->u.tun_info, skb,
+               ovs_udp_tun_rx_dst(tun_dst, skb,
                                   vxlan_get_sk_family(vs), TUNNEL_KEY,
                                   vxlan_vni_to_tun_id(vni), sizeof(*md));
 
-- 
1.9.1

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to