Bug 7244

Summary: busybox 1.21.1 doesn't compile on old Linux distributions due to new PACKET_AUXDATA usage
Product: Busybox Reporter: bruno
Component: OtherAssignee: unassigned
Status: RESOLVED WONTFIX    
Severity: blocker CC: busybox-cvs, orient_zhu
Priority: P5    
Version: 1.21.x   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Host: Target:
Build:

Description bruno 2014-06-29 16:19:07 UTC
When trying to compile busybox 1.21.1 on RHEL 3 or 4, or SLES 9 (as well as some others), there are compilation errors:

[sles-9-i386] In file included from networking/udhcp/dhcpc.c:29:
[sles-9-i386] /usr/include/linux/filter.h:21: error: parse error before "__u16"
[sles-9-i386] /usr/include/linux/filter.h:23: error: parse error before "jf"
[sles-9-i386] /usr/include/linux/filter.h:24: error: parse error before "k"
[sles-9-i386] networking/udhcp/dhcpc.c: In function `udhcp_recv_raw_packet':
[sles-9-i386] networking/udhcp/dhcpc.c:839: error: invalid application of `sizeof' to an incomplete type
[sles-9-i386] networking/udhcp/dhcpc.c:903: error: `PACKET_AUXDATA' undeclared (first use in this function)
[sles-9-i386] networking/udhcp/dhcpc.c:903: error: (Each undeclared identifier is reported only once
[sles-9-i386] networking/udhcp/dhcpc.c:903: error: for each function it appears in.)
[sles-9-i386] networking/udhcp/dhcpc.c:909: error: dereferencing pointer to incomplete type
[sles-9-i386] networking/udhcp/dhcpc.c: In function `udhcp_raw_socket':
[sles-9-i386] networking/udhcp/dhcpc.c:991: error: elements of array `filter_instr' have incomplete type
[sles-9-i386] networking/udhcp/dhcpc.c:993: warning: excess elements in struct initializer
[...]
[sles-9-i386] networking/udhcp/dhcpc.c:991: error: storage size of `filter_instr' isn't known
[sles-9-i386] networking/udhcp/dhcpc.c:1014: error: initializer element is not constant
[sles-9-i386] networking/udhcp/dhcpc.c:1014: error: (near initialization for `filter_prog.filter')
[sles-9-i386] networking/udhcp/dhcpc.c:1035: error: `PACKET_AUXDATA' undeclared (first use in this function)
[sles-9-i386] networking/udhcp/dhcpc.c:991: warning: unused variable `filter_instr'
[sles-9-i386] make[1]: *** [networking/udhcp/dhcpc.o] Error 1
[sles-9-i386] make: *** [networking/udhcp] Error 2

Declaring PACKET_AUXDATA to its value isn't sufficient as some undeclared types are also used:

[rhel-4-x86_64] In file included from networking/udhcp/dhcpc.c:29:
[rhel-4-x86_64] /usr/include/linux/filter.h:21: error: syntax error before "__u16"
[rhel-4-x86_64] /usr/include/linux/filter.h:23: error: syntax error before "jf"
[rhel-4-x86_64] /usr/include/linux/filter.h:24: error: syntax error before "k"
[rhel-4-x86_64] networking/udhcp/dhcpc.c: In function `udhcp_recv_raw_packet':
[rhel-4-x86_64] networking/udhcp/dhcpc.c:839: error: invalid application of `sizeof' to incomplete type `tpacket_auxdata' 
[rhel-4-x86_64] networking/udhcp/dhcpc.c:913: error: dereferencing pointer to incomplete type
[rhel-4-x86_64] networking/udhcp/dhcpc.c: In function `udhcp_raw_socket':
[rhel-4-x86_64] networking/udhcp/dhcpc.c:995: error: elements of array `filter_instr' have incomplete type
[rhel-4-x86_64] networking/udhcp/dhcpc.c:997: warning: excess elements in struct initializer
[...]
[rhel-4-x86_64] networking/udhcp/dhcpc.c:995: error: storage size of 'filter_instr' isn't known
[rhel-4-x86_64] networking/udhcp/dhcpc.c:1018: error: initializer element is not constant
[rhel-4-x86_64] networking/udhcp/dhcpc.c:1018: error: (near initialization for `filter_prog.filter')
[rhel-4-x86_64] networking/udhcp/dhcpc.c:995: warning: unused variable `filter_instr'
[rhel-4-x86_64] make[1]: *** [networking/udhcp/dhcpc.o] Error 1
[rhel-4-x86_64] make: *** [networking/udhcp] Error 2

Not tried yet with 1.22.1 but none of the patches available seem to address this issue, thus this bug report.
Comment 1 Denys Vlasenko 2014-06-30 11:27:48 UTC
Both those releases are nearly 10 years old.