patches/ndo_change_mtu.cocci (104 lines of code) (raw):
@ assigned @
identifier gve_netdev_ops;
@@
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
+int gve_change_mtu(struct net_device *dev, int new_mtu)
+{
+ struct gve_priv *priv = netdev_priv(dev);
+
+ if (new_mtu < ETH_MIN_MTU || new_mtu > priv->max_mtu)
+ return -EINVAL;
+ dev->mtu = new_mtu;
+ return 0;
+}
+#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */
+
struct net_device_ops gve_netdev_ops = {
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
+#if RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7, 5) && RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(8, 0)
+ .ndo_change_mtu_rh74 = gve_change_mtu,
+#else /* RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7, 5) || RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(8, 0) */
+ .ndo_change_mtu = gve_change_mtu,
+#endif /* RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7, 5) && RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(8, 0) */
+#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */
...
};
@ block @
expression val;
struct net_device *dev;
@@
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0))
dev->min_mtu = val;
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0) */
@ add @
@@
struct gve_priv {
...
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
+ int max_mtu;
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) */
}
@ add2 @
expression max;
@@
#define GVE_TX_MAX_IOVEC max
+#ifndef ETH_MIN_MTU
+#define ETH_MIN_MTU 68 /* Min IPv4 MTU per RFC791 */
+#endif
@ swap @
expression max;
struct gve_priv *priv;
@@
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
+priv->max_mtu = max;
+#else /* LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) */
priv->dev->max_mtu = max;
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) */
@ swap2 @
expression max, e1;
struct gve_priv *priv;
@@
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
+if (e1 && priv->max_mtu > max)
+#else /* LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) */
if (e1 && priv->dev->max_mtu > max)
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) */
{
...
}
@ swap3 @
struct gve_priv *priv;
@@
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
+priv->dev->mtu = priv->max_mtu;
+#else /* LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) */
priv->dev->mtu = priv->dev->max_mtu;
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) */
@ swap4 @
expression val, ret;
struct net_device *dev;
@@
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
+if (((struct gve_priv *)netdev_priv(dev))->max_mtu > val)
+#else /* LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) */
if (dev->max_mtu > val)
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) */
return ret;
@ swap5 @
struct net_device *dev;
expression max;
@@
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
+return ((struct gve_priv *)netdev_priv(dev))->max_mtu <= max;
+#else /* LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) */
return dev->max_mtu <= max;
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) */
@ swap6 @
struct gve_priv *priv;
expression e1;
@@
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
+e1 = priv->max_mtu;
+#else /* LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) */
e1 = priv->dev->max_mtu;
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) */