Currently, batman-adv fails to build for 4.5 kernel headers provided by Debian's make-kpkg. "make" complains with:
"include/net/sch_generic.h:413:2: error: implicit declaration of function ‘G_TC_AT’ [-Werror=implicit-function-declaration]"
And:
"include/net/sch_generic.h:413:33: error: ‘AT_INGRESS’ undeclared (first use in this function)"
The issue seems to be that make-kpkg creates two pkt_cls.h with the same include guard but differing contents, "uapi/linux/pkt_cls.h" and "linux/pkt_cls.h". The latter has its "#ifdef __KERNEL__" section stripped and therefore misses the needed defines.
Depending on the include order, the batman-adv might fail.
This commit provides a workaround by ensuring that the full-blown uapi variant is included first.
Eventually, the issue should be fixed in make-kpkg and this commit reverted (no response from the make-kpkg Debian maintainer yet).
For future reference and updates: * https://www.open-mesh.org/issues/322
Signed-off-by: Linus Lüssing linus.luessing@c0d3.blue --- compat.h | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/compat.h b/compat.h index d61a30e..8e23911 100644 --- a/compat.h +++ b/compat.h @@ -164,4 +164,13 @@ static int __batadv_interface_kill_vid(struct net_device *dev, __be16 proto,\
#endif /* < KERNEL_VERSION(4, 3, 0) */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0) + +/* workaround for current issues with Debian's make-kpkg */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0) +#include <uapi/linux/pkt_cls.h> +#endif + +#endif /* < KERNEL_VERSION(4, 6, 0) */ + #endif /* _NET_BATMAN_ADV_COMPAT_H_ */
This fixes the following warning:
hard-interface.c:104:39: warning: incorrect type in return expression (different base types) hard-interface.c:104:39: expected struct net * hard-interface.c:104:39: got bool
Which allows compiling with -Werror again on kernels < 4.0.
Fixes: bea804dbde21 ("batman-adv: Handle parent interfaces in a different netns") Signed-off-by: Linus Lüssing linus.luessing@c0d3.blue --- compat.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/compat.h b/compat.h index 8e23911..8628cf5 100644 --- a/compat.h +++ b/compat.h @@ -153,8 +153,8 @@ static int __batadv_interface_kill_vid(struct net_device *dev, __be16 proto,\
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)
-/* WARNING for batadv_getlink_net */ -#define get_link_net get_xstats_size || 1 || netdev->rtnl_link_ops->get_xstats_size +/* wild hack for batadv_getlink_net only */ +#define get_link_net get_xstats_size || 1 ? fallback_net : (struct net*)netdev->rtnl_link_ops->get_xstats_size
#endif /* < KERNEL_VERSION(4, 0, 0) */
station_info::expected_throughput is present since 3.16, not 3.15, resulting in compile errors for 3.15. Fixing this by using the correct kernel version in compat.h.
Fixes: 5c3245172c01 ("batman-adv: ELP - compute the metric based on the estimated throughput") Signed-off-by: Linus Lüssing linus.luessing@c0d3.blue --- compat.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/compat.h b/compat.h index 8628cf5..5397629 100644 --- a/compat.h +++ b/compat.h @@ -130,7 +130,7 @@ static int __batadv_interface_kill_vid(struct net_device *dev, __be16 proto,\
#endif /* < KERNEL_VERSION(3, 10, 0) */
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0) +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 16, 0)
/* the expected behaviour of this function is to return 0 on success, therefore * it is possible to define it as 1 so that batman-adv thinks like something @@ -149,7 +149,7 @@ static int __batadv_interface_kill_vid(struct net_device *dev, __be16 proto,\
#endif
-#endif /* < KERNEL_VERSION(3, 15, 0) */ +#endif /* < KERNEL_VERSION(3, 16, 0) */
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)
Compile issues were reported with some 3.2 kernel. Adding the missing includes to the compat skbuff.c file should fix those.
Signed-off-by: Linus Lüssing linus.luessing@c0d3.blue --- compat-sources/net/core/skbuff.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/compat-sources/net/core/skbuff.c b/compat-sources/net/core/skbuff.c index 44d59dc..40c9e8b 100644 --- a/compat-sources/net/core/skbuff.c +++ b/compat-sources/net/core/skbuff.c @@ -32,8 +32,12 @@ * 2 of the License, or (at your option) any later version. */
+#include <linux/in6.h> #include <linux/ipv6.h> #include <linux/skbuff.h> +#include <linux/types.h> +#include <net/checksum.h> +#include <net/ip6_checksum.h>
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 16, 0)
b.a.t.m.a.n@lists.open-mesh.org