diff mbox

[ovs-dev,04/24] datapath: compat: reset md_dst on recieve.

Message ID 1468387441-61781-4-git-send-email-pshelar@ovn.org
State Accepted
Headers show

Commit Message

Pravin Shelar July 13, 2016, 5:23 a.m. UTC
On transmit metadata dst is cleared, do same on recieve.

Signed-off-by: Pravin B Shelar <pshelar@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 mbox

Patch

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));