David Woodhouse wrote:
On Tue, 2008-02-19 at 15:01 +0100, Patrick McHardy wrote:
David Woodhouse wrote:
+union nf_inet_addr {
+       u_int32_t       all[4];
+       __be32          ip;
+       __be32          ip6[4];
+};
+
 #ifdef __KERNEL__
 #ifdef CONFIG_NETFILTER
This breaks the busybox build:

CC      ipsvd/tcpudp.o
In file included from /usr/include/linux/netfilter_ipv4.h:8,
                 from ipsvd/tcpudp.c:33:
/usr/include/linux/netfilter.h:40: error: expected specifier-qualifier-list 
before 'u_int32_t'

What is this 'u_int32_t' nonsense anyway?

If a user-visible header is likely to be included by libc directly from
a 'standard' header, it may not require <stdint.h>. Therefore it should
use the system-specific types such as '__u32'.
Right, I queued this patch to fix it.

That does the trick -- but are we using u_int32_t elsewhere in
user-visible headers? Does it work there? How?


Its used in nearly every ip_tables header file. Those are most likely
not included by glibc and iptables includes sys/types.h. Besides
iptables I'm only aware of a perl module that uses these files,
which is probably also including sys/types.h.

A later commit adds struct in_addr and struct in6_addr to this union
too, which breaks busybox even harder.
Thats odd, the iptables headers have always used struct in_addr and
struct in6_addr in struct ipt_ip/struct ip6t_ip6, which are also
used by userspace. What is "ipsvd/tcpudp.c"? I couldn't find it in
the Debian busybox source.

It's in busybox 1.9.1. Just including <netinet/in.h> seems to be
sufficient to make it happy again. I wonder if netfilter.h should
include that for itself?


That would break iptables compilation, which already includes
linux/in.h in some files. I guess the best fix for now is to
include netinet/in.h in busybox and long-term clean this up
properly.


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to