Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Compilation issues using netlink.h

503 views
Skip to first unread message

Matthew Burgess

unread,
Dec 27, 2009, 7:40:02 PM12/27/09
to
Hi,

The test case below simplifies a failure I see when trying to compile
strace using kernel headers from Linux-2.6.32.2:

#include <linux/netlink.h>
struct sockaddr_nl nl;
int main() {
return 0;
}

$ gcc -o test test.c
In file included from test.c:1:
/usr/include/linux/netlink.h:34: error: expected
specifier-qualifier-list before 'sa_family_t'

The comment in netlink.h suggests that 'sa_family_t' is expected to be
found in linux/socket.h, but since commit 9c501935a3 ("net: Support
inclusion of <linux/socket.h> before <sys/socket.h>") that appears to
not be true anymore, it's now in sys/socket.h. Sure enough, if I change
the include in netlink.h to pull in sys/socket.h instead of
linux/socket.h, that enables the test case (and strace) to compile
again, but I wasn't sure if it was really the right thing to do.

Thanks,

Matt.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majo...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

Ben Hutchings

unread,
Jan 4, 2010, 9:40:01 PM1/4/10
to
On Mon, 2009-12-28 at 00:32 +0000, Matthew Burgess wrote:
> Hi,
>
> The test case below simplifies a failure I see when trying to compile
> strace using kernel headers from Linux-2.6.32.2:
>
> #include <linux/netlink.h>
> struct sockaddr_nl nl;
> int main() {
> return 0;
> }
>
> $ gcc -o test test.c
> In file included from test.c:1:
> /usr/include/linux/netlink.h:34: error: expected
> specifier-qualifier-list before 'sa_family_t'
>
> The comment in netlink.h suggests that 'sa_family_t' is expected to be
> found in linux/socket.h, but since commit 9c501935a3 ("net: Support
> inclusion of <linux/socket.h> before <sys/socket.h>") that appears to
> not be true anymore, it's now in sys/socket.h.

Right. I'm aware of this and suggested that it should be reverted, but
David Miller reckons I was right in the first place.

> Sure enough, if I change
> the include in netlink.h to pull in sys/socket.h instead of
> linux/socket.h, that enables the test case (and strace) to compile
> again, but I wasn't sure if it was really the right thing to do.

I don't think it is - that will bring in many more definitions.

There are actually a whole lot of kernel networking headers which
require sa_family_t when included by user-space code. Until
<linux/socket.h> and <sys/socket.h> cooperate to define sa_family_t
once, you will just have to include <sys/socket.h> before kernel
networking headers.

Ben.

--
Ben Hutchings
The obvious mathematical breakthrough [to break modern encryption] would be
development of an easy way to factor large prime numbers. - Bill Gates

signature.asc
0 new messages