[ovs-dev] [PATCH] compat: Include confirm_neigh parameter if needed

Simon Horman simon.horman at netronome.com
Tue Jan 7 09:34:37 UTC 2020


On Mon, Jan 06, 2020 at 01:36:34PM -0800, Greg Rose wrote:
> A change backported to the Linux 4.14.162 LTS kernel requires
> a boolean parameter.  Check for the presence of the parameter
> and adjust the caller in that case.
> 
> Passes check-kmod test with no regressions.
> 
> Passes Travis build here:
> https://travis-ci.org/gvrose8192/ovs-experimental/builds/633461320
> 
> Signed-off-by: Greg Rose <gvrose8192 at gmail.com>

Thanks Greg,

I have pushed this to master with a view to quickly resolving
the build problem there.

I also plan to push the change to to branch-2.10 ... 2.12
once I've confirmed the problem exists there and testing of those backports
is complete:

  branch-2.12: https://travis-ci.org/horms2/ovs/builds/633651396
  branch-2.12 + backport: https://travis-ci.org/horms2/ovs/builds/633674666
  branch-2.11: https://travis-ci.org/horms2/ovs/builds/633651456
  branch-2.11 + backport: https://travis-ci.org/horms2/ovs/builds/633676376
  branch-2.10: https://travis-ci.org/horms2/ovs/builds/633676916
  branch-2.10 + backport: https://travis-ci.org/horms2/ovs/builds/633677490

> ---
>  acinclude.m4                      | 2 ++
>  datapath/linux/compat/ip6_gre.c   | 4 ++++
>  datapath/linux/compat/ip_tunnel.c | 5 +++++
>  3 files changed, 11 insertions(+)
> 
> diff --git a/acinclude.m4 b/acinclude.m4
> index 542637a..18264c4 100644
> --- a/acinclude.m4
> +++ b/acinclude.m4
> @@ -1065,6 +1065,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
>                    [OVS_DEFINE([HAVE_IP_GRE_CALC_HLEN])])
>    OVS_GREP_IFELSE([$KSRC/include/linux/rbtree.h], [rb_link_node_rcu],
>                    [OVS_DEFINE([HAVE_RBTREE_RB_LINK_NODE_RCU])])
> +  OVS_GREP_IFELSE([$KSRC/include/net/dst_ops.h], [bool confirm_neigh],
> +                  [OVS_DEFINE([HAVE_DST_OPS_CONFIRM_NEIGH])])
>  
>    if cmp -s datapath/linux/kcompat.h.new \
>              datapath/linux/kcompat.h >/dev/null 2>&1; then
> diff --git a/datapath/linux/compat/ip6_gre.c b/datapath/linux/compat/ip6_gre.c
> index afff817..7fd3453 100644
> --- a/datapath/linux/compat/ip6_gre.c
> +++ b/datapath/linux/compat/ip6_gre.c
> @@ -1089,7 +1089,11 @@ static netdev_tx_t ip6erspan_tunnel_xmit(struct sk_buff *skb,
>  
>  	/* TooBig packet may have updated dst->dev's mtu */
>  	if (!t->parms.collect_md && dst && dst_mtu(dst) > dst->dev->mtu)
> +#ifndef HAVE_DST_OPS_CONFIRM_NEIGH
>  		dst->ops->update_pmtu(dst, NULL, skb, dst->dev->mtu);
> +#else
> +		dst->ops->update_pmtu(dst, NULL, skb, dst->dev->mtu, false);
> +#endif

Did you consider using skb_dst_update_pmtu() unconditionally?
That may be cleaner going forwards.

>  
>  	err = ip6_tnl_xmit(skb, dev, dsfield, &fl6, encap_limit, &mtu,
>  			   NEXTHDR_GRE);
> diff --git a/datapath/linux/compat/ip_tunnel.c b/datapath/linux/compat/ip_tunnel.c
> index 7dd57fe..e7a0393 100644
> --- a/datapath/linux/compat/ip_tunnel.c
> +++ b/datapath/linux/compat/ip_tunnel.c
> @@ -267,7 +267,12 @@ static int rpl_tnl_update_pmtu(struct net_device *dev, struct sk_buff *skb,
>  		mtu = skb_valid_dst(skb) ? dst_mtu(skb_dst(skb)) : dev->mtu;
>  
>  	if (skb_valid_dst(skb))
> +#ifndef HAVE_DST_OPS_CONFIRM_NEIGH
>  		skb_dst(skb)->ops->update_pmtu(skb_dst(skb), NULL, skb, mtu);
> +#else
> +		skb_dst(skb)->ops->update_pmtu(skb_dst(skb),
> +					       NULL, skb, mtu, false);
> +#endif
>  
>  	if (skb->protocol == htons(ETH_P_IP)) {
>  		if (!skb_is_gso(skb) &&
> -- 
> 1.8.3.1
> 


More information about the dev mailing list