On Sat, Dec 27, 2014 at 03:30:53PM +0100, Antonio Quartulli wrote:
first of all you should know that I really appreciate your hard work. Thank you very much for this!
On 26/12/14 12:41, Markus Pargmann wrote:
Signed-off-by: Markus Pargmann firstname.lastname@example.org
packet.h | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/packet.h b/packet.h index facd1feddd4e..5fd0d814b6de 100644 --- a/packet.h +++ b/packet.h @@ -18,6 +18,11 @@ #ifndef _NET_BATMAN_ADV_PACKET_H_ #define _NET_BATMAN_ADV_PACKET_H_
+#ifdef __KERNEL__ +#include <linux/bitops.h> +#include <uapi/linux/if_ether.h> +#endif /* __KERNEL__ */
Unfortunately we can't do this :-(
Patches sent to the kernel cannot contain conditional code on being in the kernel or not (same is true for checks against a particular kernel version - such code can't be in the kernel).
Patches sent to the kernel must assume that they are only for the kernel (and for that particular version we are sending the patches against).
Oh, I checked by grepping through the kernel before changing the patch like this. git grep "^#if.*def.*__KERNEL__" | grep -v include | wc -l 145
So there are 145 uses of an ifdef __KERNEL__ outside of include directories (I excluded include directories as they may be exported to userspace). So I thought it would be ok.
Of course this makes everything a bit trickier for us since we share files between kernel and userspace .....
This is one of the reasons why we have compat.c/h in the batman-adv package: you will see that in those files we had to implement all sort of hackish/dirty tricks in order to keep the code in the other files clean (compat.h/c are not sent to the kernel but are part of the batman-adv out-of-the-tree package).
Yes I saw that. I still don't really understand why this whole out of tree package is necessary. But I am wondering if it wouldn't be easier to develope and build directly in the kernel tree.
However, as far as I know, you should be able to simply do:
#include <linux/if_ether.h> (without the uapi subfolder)
and this should happily work for both the kernel and the userspace. Have you tried that? I might be wrong - it's quite some time I haven't used uapi headers.
Yep, that works for the kernel, thanks. However, bitops.h remains as we don't have bitops.h for the userspace.
Otherwise we might need to find a different solution - or live we what we have now :)
Yeah it works normally as the includes leak through other include files. But I prefer explicit includes. I am thinking about some solution for the bitops.h