2004-10-27 12:21:20

by Andrei A. Voropaev

[permalink] [raw]
Subject: 2.6.9 byteorder/little_endian.h __le64 type not defined for iproute2

Hi!

Compilation of iproute2 package fails on iptunnel.c because it includes
asm/byteorder.h which in turn includes linux/byteorder/little_endian.h
and in new 2.6.9 headers that declares function

static inline __le64 __cpu_to_le64p(const __u64 *p)

The __le64 type is not defined here. This happens because linux/types.h
defines this type only if __KERNEL_STRICT_NAMES is not defined. And by
default it is defined in features.h

I've tried to define it, but this creates conflicts for dev_t and other
types that are defined in sys/types.h

So, what should be the work around in this case?

Specifically the error is

make[1]: Entering directory `/tools/src/iproute2-2.6.9/ip'
gcc -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g -I../include -DRESOLVE_HOSTNAMES -c -o iptunnel.o iptunnel.c
In file included from /usr/include/asm/byteorder.h:31,
from iptunnel.c:29:
/usr/include/linux/byteorder/little_endian.h:43: error: parse error before "__cpu_to_le64p"
/usr/include/linux/byteorder/little_endian.h: In function `__cpu_to_le64p':
/usr/include/linux/byteorder/little_endian.h:45: error: `__le64' undeclared (first use in this function)
....

Andrei