patches: network: add spatch for mtu range checking
authorArend van Spriel <arend.vanspriel@broadcom.com>
Wed, 23 Nov 2016 10:33:13 +0000 (10:33 +0000)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 6 Feb 2017 14:00:43 +0000 (15:00 +0100)
The mtu range checking was moved into network subsystem resulting in
the addition of min_mtu and max_mtu fields in struct net_device. For
drivers with a .ndo_change_mtu() which took care of range checking this
resulted in removal of the callback. This spatch restores the callback
using the values set in {min,max}_mtu fields for kernels before v4.10.

Signed-off-by: Julia Lawall <julia.lawall@lip6.fr>
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
patches/collateral-evolutions/network/0073-netdevice-mtu-range.cocci [new file with mode: 0644]

diff --git a/patches/collateral-evolutions/network/0073-netdevice-mtu-range.cocci b/patches/collateral-evolutions/network/0073-netdevice-mtu-range.cocci
new file mode 100644 (file)
index 0000000..30276f9
--- /dev/null
@@ -0,0 +1,75 @@
+@initialize:python@
+@@
+
+first_ops = 0
+
+@r@
+identifier OPS;
+position p;
+@@
+
+struct net_device_ops OPS@p = { ... };
+
+@script:python depends on r@
+@@
+
+first_ops = 0
+
+@script:python@
+p << r.p;
+@@
+
+ln = int(p[0].line)
+if first_ops == 0 or ln < first_ops:
+  first_ops = ln
+
+@script:python@
+p << r.p;
+@@
+
+ln = int(p[0].line)
+if not(first_ops == ln):
+  cocci.include_match(False)
+
+@r1 exists@
+expression ndevexp, e1, e2;
+identifier func;
+@@
+func(...) {
+       <+...
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+       ndevexp->min_mtu = e1;
+       ndevexp->max_mtu = e2;
++#endif
+       ...+>
+}
+
+@r2@
+expression r1.e1,r1.e2;
+identifier r.OPS;
+@@
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)
++ static int __change_mtu(struct net_device *ndev, int new_mtu)
++ {
++ if (new_mtu < e1 || new_mtu > e2)
++             return -EINVAL;
++             ndev->mtu = new_mtu;
++             return 0;
++ }
++#endif
++
+struct net_device_ops OPS = {
+       ...
+};
+
+@depends on r2@
+identifier OPS;
+@@
+
+struct net_device_ops OPS = {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)
++      .ndo_change_mtu = __change_mtu,
++#endif
+       ...
+};
+