Re: ebtables commit

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Edriss,

On Fri, May 25, 2018 at 02:43:39PM -0400, Edriss Mirzadeh wrote:
> Hi there Duncan,
>
> I tried pulling the most up to date version of ebtables to compile as part
> of the Tomato Firmware (for ARM routers).
>
> I found that the build failed on two files I believe related to commit
>
> 66a97018a31eed416c6a25d051ea172e4d65be1b
> <https://git.netfilter.org/ebtables/commit/?id=66a97018a31eed416c6a25d051ea172e4d65be1b>
> The issue is/was that:
>
>    - In ebtables_u.h, the new entry "<ebtables.h> should be "ebtables.h"
>    - In extensions/ebt_ip.c, <linux/netfilter_bridge/ebt_ip.h> should be
>    ""../include/linux/netfilter_bridge/ebt_ip.h"
>
>
> Just wanted to share in case you are able to validate on your side and
> update...
>
> All the best,

Thanks for reporting this.  Would you be able please to report what compiler and
version you are building with? Your problem doesn't reproduce for me with either
gcc-8.1.0 or gcc-5.3.0.

I think you have uncovered a real problem here. K&R2 says the implementation of
angle-bracket includes is implementation-dependent and it would seem your
compiler's implementation differs from that of gcc.

Makefile compiles extensions from the top-level directory thusly:

  gcc [options] -o extensions/(whatever).o extensions/(whatever).c -Iinclude
                                                                   ~~~~~~~~~

It seems your compiler ignores -I when processing an angle-bracketed include.

This accounts for needing "ebtables.h".

extensions/ebt_ip.c is more interesting. I didn't touch that BTW, that was the
previous 2 commits.

All the extension sources use #include <linux/netfilter_bridge/(whatever).h>.
This works even on your platform because /usr/include/linux/netfilter_bridge/ is
fully populated by the kernel-headers package. But ebtables has a private copy
of this directory which it is expecting to use.

In the case of linux/netfilter_bridge/ebt_ip.h, the local copy is newer than
kernel-headers, even kernel-headers built from linux-4.16.12 which is the newest
release.

With -Iinclude, gcc is finding the local headers, but clearly your compiler is
not.

It's becoming clear to me that the correct fix is to replace angle brackets with
double quotes for all include statements that intend to use local headers. I'll
try to submit a patch today.

Cheers ... Duncan.
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux