On transmit metadata dst is cleared, do same on recieve.
Signed-off-by: Pravin B Shelar <[email protected]>
---
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
[email protected]
http://openvswitch.org/mailman/listinfo/dev