[ovs-dev,2/3] datapath: Fix ip6_gre, ip6_tunnel, and ip_gre backport

Message ID 1528764623-19974-2-git-send-email-yihung.wei@gmail.com
State Accepted
Headers show
Series
  • [ovs-dev,1/3] datapath: Fix max MTU size on RHEL 7.5 kernel
Related show

Commit Message

Yi-Hung Wei June 12, 2018, 12:50 a.m.
Recently added ERSAPN feature introduced changes in ip6_gre, ip6_tunnel,
and ip_gre which will break build on RHEL 7.5 kernel because of
ndo_change_mtu().  This patch fixes the issue in RHEL 7.5 kernel.

Fixes: 8e53509c ("gre: introduce native tunnel support for ERSPAN")
Fixes: c387d817 ("compat: Add ipv6 GRE and IPV6 Tunneling")
Signed-off-by: Yi-Hung Wei <yihung.wei@gmail.com>
---
 datapath/linux/compat/ip6_gre.c    | 15 +++++++++++++++
 datapath/linux/compat/ip6_tunnel.c |  5 +++++
 datapath/linux/compat/ip_gre.c     | 10 ++++++++++
 3 files changed, 30 insertions(+)

Comments

Gregory Rose June 12, 2018, 10:26 p.m. | #1
On 6/11/2018 5:50 PM, Yi-Hung Wei wrote:
> Recently added ERSAPN feature introduced changes in ip6_gre, ip6_tunnel,
> and ip_gre which will break build on RHEL 7.5 kernel because of
> ndo_change_mtu().  This patch fixes the issue in RHEL 7.5 kernel.
>
> Fixes: 8e53509c ("gre: introduce native tunnel support for ERSPAN")
> Fixes: c387d817 ("compat: Add ipv6 GRE and IPV6 Tunneling")
> Signed-off-by: Yi-Hung Wei <yihung.wei@gmail.com>
> ---
>   datapath/linux/compat/ip6_gre.c    | 15 +++++++++++++++
>   datapath/linux/compat/ip6_tunnel.c |  5 +++++
>   datapath/linux/compat/ip_gre.c     | 10 ++++++++++
>   3 files changed, 30 insertions(+)
>
> diff --git a/datapath/linux/compat/ip6_gre.c b/datapath/linux/compat/ip6_gre.c
> index dd22240fc962..0c885472df5b 100644
> --- a/datapath/linux/compat/ip6_gre.c
> +++ b/datapath/linux/compat/ip6_gre.c
> @@ -1525,7 +1525,12 @@ static const struct net_device_ops ip6gre_netdev_ops = {
>   	.ndo_uninit		= ip6gre_tunnel_uninit,
>   	.ndo_start_xmit		= ip6gre_tunnel_xmit,
>   	.ndo_do_ioctl		= ip6gre_tunnel_ioctl,
> +#ifdef	HAVE_RHEL7_MAX_MTU
> +	.ndo_size		= sizeof(struct net_device_ops),
> +	.extended.ndo_change_mtu = ip6_tnl_change_mtu,
> +#else
>   	.ndo_change_mtu		= ip6_tnl_change_mtu,
> +#endif
>   	.ndo_get_stats64	= ip_tunnel_get_stats64,
>   #ifdef HAVE_NDO_GET_IFLINK
>   	.ndo_get_iflink		= ip6_tnl_get_iflink,
> @@ -2010,7 +2015,12 @@ static const struct net_device_ops ip6gre_tap_netdev_ops = {
>   	.ndo_start_xmit = ip6gre_tunnel_xmit,
>   	.ndo_set_mac_address = eth_mac_addr,
>   	.ndo_validate_addr = eth_validate_addr,
> +#ifdef	HAVE_RHEL7_MAX_MTU
> +	.ndo_size		= sizeof(struct net_device_ops),
> +	.extended.ndo_change_mtu = ip6_tnl_change_mtu,
> +#else
>   	.ndo_change_mtu = ip6_tnl_change_mtu,
> +#endif
>   	.ndo_get_stats64 = ip_tunnel_get_stats64,
>   #ifdef HAVE_NDO_GET_IFLINK
>   	.ndo_get_iflink = ip6_tnl_get_iflink,
> @@ -2073,7 +2083,12 @@ static const struct net_device_ops ip6erspan_netdev_ops = {
>   	.ndo_start_xmit =	ip6erspan_tunnel_xmit,
>   	.ndo_set_mac_address =	eth_mac_addr,
>   	.ndo_validate_addr =	eth_validate_addr,
> +#ifdef	HAVE_RHEL7_MAX_MTU
> +	.ndo_size		= sizeof(struct net_device_ops),
> +	.extended.ndo_change_mtu = ip6_tnl_change_mtu,
> +#else
>   	.ndo_change_mtu =	ip6_tnl_change_mtu,
> +#endif
>   	.ndo_get_stats64 =	ip_tunnel_get_stats64,
>   #ifdef HAVE_NDO_GET_IFLINK
>   	.ndo_get_iflink =	ip6_tnl_get_iflink,
> diff --git a/datapath/linux/compat/ip6_tunnel.c b/datapath/linux/compat/ip6_tunnel.c
> index f6ac069b5281..7c66787967f6 100644
> --- a/datapath/linux/compat/ip6_tunnel.c
> +++ b/datapath/linux/compat/ip6_tunnel.c
> @@ -1612,7 +1612,12 @@ static const struct net_device_ops ip6_tnl_netdev_ops = {
>   	.ndo_uninit	= ip6_tnl_dev_uninit,
>   	.ndo_start_xmit = ip6_tnl_start_xmit,
>   	.ndo_do_ioctl	= ip6_tnl_ioctl,
> +#ifdef	HAVE_RHEL7_MAX_MTU
> +	.ndo_size		= sizeof(struct net_device_ops),
> +	.extended.ndo_change_mtu = ip6_tnl_change_mtu,
> +#else
>   	.ndo_change_mtu = ip6_tnl_change_mtu,
> +#endif
>   	.ndo_get_stats	= ip6_get_stats,
>   #ifdef HAVE_NDO_GET_IFLINK
>   	.ndo_get_iflink = ip6_tnl_get_iflink,
> diff --git a/datapath/linux/compat/ip_gre.c b/datapath/linux/compat/ip_gre.c
> index d35614ee9a73..ac9fb8bfcc88 100644
> --- a/datapath/linux/compat/ip_gre.c
> +++ b/datapath/linux/compat/ip_gre.c
> @@ -1153,7 +1153,12 @@ static const struct net_device_ops ipgre_netdev_ops = {
>   	.ndo_init		= ipgre_tunnel_init,
>   	.ndo_uninit		= rpl_ip_tunnel_uninit,
>   	.ndo_start_xmit		= ipgre_xmit,
> +#ifdef	HAVE_RHEL7_MAX_MTU
> +	.ndo_size		= sizeof(struct net_device_ops),
> +	.extended.ndo_change_mtu = ip_tunnel_change_mtu,
> +#else
>   	.ndo_change_mtu		= ip_tunnel_change_mtu,
> +#endif
>   	.ndo_get_stats64	= ip_tunnel_get_stats64,
>   #ifdef HAVE_GET_LINK_NET
>   	.ndo_get_iflink		= ip_tunnel_get_iflink,
> @@ -1187,7 +1192,12 @@ static const struct net_device_ops erspan_netdev_ops = {
>   	.ndo_start_xmit		= erspan_xmit,
>   	.ndo_set_mac_address	= eth_mac_addr,
>   	.ndo_validate_addr	= eth_validate_addr,
> +#ifdef	HAVE_RHEL7_MAX_MTU
> +	.ndo_size		= sizeof(struct net_device_ops),
> +	.extended.ndo_change_mtu = ip_tunnel_change_mtu,
> +#else
>   	.ndo_change_mtu		= ip_tunnel_change_mtu,
> +#endif
>   	.ndo_get_stats64	= ip_tunnel_get_stats64,
>   #ifdef HAVE_NDO_GET_IFLINK
>   	.ndo_get_iflink		= rpl_ip_tunnel_get_iflink,

LGTM

Reviewed-by: Greg Rose <gvrose8192@gmail.com>
Tested-by: Greg Rose <gvrose8192@gmail.com>

Patch

diff --git a/datapath/linux/compat/ip6_gre.c b/datapath/linux/compat/ip6_gre.c
index dd22240fc962..0c885472df5b 100644
--- a/datapath/linux/compat/ip6_gre.c
+++ b/datapath/linux/compat/ip6_gre.c
@@ -1525,7 +1525,12 @@  static const struct net_device_ops ip6gre_netdev_ops = {
 	.ndo_uninit		= ip6gre_tunnel_uninit,
 	.ndo_start_xmit		= ip6gre_tunnel_xmit,
 	.ndo_do_ioctl		= ip6gre_tunnel_ioctl,
+#ifdef	HAVE_RHEL7_MAX_MTU
+	.ndo_size		= sizeof(struct net_device_ops),
+	.extended.ndo_change_mtu = ip6_tnl_change_mtu,
+#else
 	.ndo_change_mtu		= ip6_tnl_change_mtu,
+#endif
 	.ndo_get_stats64	= ip_tunnel_get_stats64,
 #ifdef HAVE_NDO_GET_IFLINK
 	.ndo_get_iflink		= ip6_tnl_get_iflink,
@@ -2010,7 +2015,12 @@  static const struct net_device_ops ip6gre_tap_netdev_ops = {
 	.ndo_start_xmit = ip6gre_tunnel_xmit,
 	.ndo_set_mac_address = eth_mac_addr,
 	.ndo_validate_addr = eth_validate_addr,
+#ifdef	HAVE_RHEL7_MAX_MTU
+	.ndo_size		= sizeof(struct net_device_ops),
+	.extended.ndo_change_mtu = ip6_tnl_change_mtu,
+#else
 	.ndo_change_mtu = ip6_tnl_change_mtu,
+#endif
 	.ndo_get_stats64 = ip_tunnel_get_stats64,
 #ifdef HAVE_NDO_GET_IFLINK
 	.ndo_get_iflink = ip6_tnl_get_iflink,
@@ -2073,7 +2083,12 @@  static const struct net_device_ops ip6erspan_netdev_ops = {
 	.ndo_start_xmit =	ip6erspan_tunnel_xmit,
 	.ndo_set_mac_address =	eth_mac_addr,
 	.ndo_validate_addr =	eth_validate_addr,
+#ifdef	HAVE_RHEL7_MAX_MTU
+	.ndo_size		= sizeof(struct net_device_ops),
+	.extended.ndo_change_mtu = ip6_tnl_change_mtu,
+#else
 	.ndo_change_mtu =	ip6_tnl_change_mtu,
+#endif
 	.ndo_get_stats64 =	ip_tunnel_get_stats64,
 #ifdef HAVE_NDO_GET_IFLINK
 	.ndo_get_iflink =	ip6_tnl_get_iflink,
diff --git a/datapath/linux/compat/ip6_tunnel.c b/datapath/linux/compat/ip6_tunnel.c
index f6ac069b5281..7c66787967f6 100644
--- a/datapath/linux/compat/ip6_tunnel.c
+++ b/datapath/linux/compat/ip6_tunnel.c
@@ -1612,7 +1612,12 @@  static const struct net_device_ops ip6_tnl_netdev_ops = {
 	.ndo_uninit	= ip6_tnl_dev_uninit,
 	.ndo_start_xmit = ip6_tnl_start_xmit,
 	.ndo_do_ioctl	= ip6_tnl_ioctl,
+#ifdef	HAVE_RHEL7_MAX_MTU
+	.ndo_size		= sizeof(struct net_device_ops),
+	.extended.ndo_change_mtu = ip6_tnl_change_mtu,
+#else
 	.ndo_change_mtu = ip6_tnl_change_mtu,
+#endif
 	.ndo_get_stats	= ip6_get_stats,
 #ifdef HAVE_NDO_GET_IFLINK
 	.ndo_get_iflink = ip6_tnl_get_iflink,
diff --git a/datapath/linux/compat/ip_gre.c b/datapath/linux/compat/ip_gre.c
index d35614ee9a73..ac9fb8bfcc88 100644
--- a/datapath/linux/compat/ip_gre.c
+++ b/datapath/linux/compat/ip_gre.c
@@ -1153,7 +1153,12 @@  static const struct net_device_ops ipgre_netdev_ops = {
 	.ndo_init		= ipgre_tunnel_init,
 	.ndo_uninit		= rpl_ip_tunnel_uninit,
 	.ndo_start_xmit		= ipgre_xmit,
+#ifdef	HAVE_RHEL7_MAX_MTU
+	.ndo_size		= sizeof(struct net_device_ops),
+	.extended.ndo_change_mtu = ip_tunnel_change_mtu,
+#else
 	.ndo_change_mtu		= ip_tunnel_change_mtu,
+#endif
 	.ndo_get_stats64	= ip_tunnel_get_stats64,
 #ifdef HAVE_GET_LINK_NET
 	.ndo_get_iflink		= ip_tunnel_get_iflink,
@@ -1187,7 +1192,12 @@  static const struct net_device_ops erspan_netdev_ops = {
 	.ndo_start_xmit		= erspan_xmit,
 	.ndo_set_mac_address	= eth_mac_addr,
 	.ndo_validate_addr	= eth_validate_addr,
+#ifdef	HAVE_RHEL7_MAX_MTU
+	.ndo_size		= sizeof(struct net_device_ops),
+	.extended.ndo_change_mtu = ip_tunnel_change_mtu,
+#else
 	.ndo_change_mtu		= ip_tunnel_change_mtu,
+#endif
 	.ndo_get_stats64	= ip_tunnel_get_stats64,
 #ifdef HAVE_NDO_GET_IFLINK
 	.ndo_get_iflink		= rpl_ip_tunnel_get_iflink,