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