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