From: Mike Frysinger <vapier@gentoo.org>
To: David Miller <davem@davemloft.net>
Cc: libc-alpha@sourceware.org, bhutchings@solarflare.com,
yoshfuji@linux-ipv6.org, amwang@redhat.com, tmb@mageia.org,
eblake@redhat.com, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, libvirt-list@redhat.com,
tgraf@suug.ch, schwab@suse.de, carlos@systemhalted.org
Subject: Re: Redefinition of struct in6_addr in <netinet/in.h> and <linux/in6.h>
Date: Wed, 16 Jan 2013 14:29:30 -0500 [thread overview]
Message-ID: <201301161429.33814.vapier@gentoo.org> (raw)
In-Reply-To: <20130116.135744.697469565804508454.davem@davemloft.net>
[-- Attachment #1: Type: Text/Plain, Size: 1916 bytes --]
On Wednesday 16 January 2013 13:57:44 David Miller wrote:
> From: Mike Frysinger <vapier@gentoo.org>
> > certainly true, but the current expectation is that you don't mix your
> > ABIs. if you're programming with the C library API, then use the C
> > library headers. if you're banging directly on the kernel, then use the
> > kernel headers. not saying it's a perfect solution, but it works for
> > the vast majority of use cases.
>
> This isn't how real life works.
>
> GLIBC itself brings in some of the kernel headers, as do various library
> headers for libraries other than glibc.
>
> So you can get these conflicting headers included indirectly, and it is
> of no fault of any of the various parties involved.
the headers glibc includes tend to be pretty stand alone specifically so that
it doesn't matter
> We have to make them work when included at the same time somehow, and
> this is totally unavoidable.
"them" is vague. saying that every kernel header has to be usable in the same
compilation unit as every C library header regardless of order is unrealistic
(at least it is today). there are cases where they define the same structure
different because the structure as the C library expects is different from what
the kernel syscall expects. you could avoid that on the kernel side by giving
them all prefixes (like __kernel_), but that didn't seem entirely palpable to
the kernel folks. i couldn't even get them to remove crap that breaks non-
glibc C libraries (e.g. uapi/linux/stat.h -- looks like someone inadvertently
fixed uapi/linux/socket.h finally).
for many networking headers, the C library will provide enums & defines while
the kernel only provides enums. including the kernel after the C library one
leads to parsing errors as the defines expand in the enum and kill it. like
linux/in.h and netinet/in.h and IPPROTO_*.
-mike
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
next prev parent reply other threads:[~2013-01-16 19:26 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-13 18:38 if_bridge.h: include in6.h for struct in6_addr use Thomas Backlund
2013-01-13 20:05 ` Thomas Backlund
2013-01-14 23:57 ` [libvirt] " Eric Blake
2013-01-15 10:03 ` the patch "bridge: export multicast database via netlink" broke kernel 3.8 uapi (was: Re: [libvirt] if_bridge.h: include in6.h for struct in6_addr use) Thomas Backlund
2013-01-15 10:03 ` [libvirt] the patch "bridge: export multicast database via netlink" broke kernel 3.8 uapi (was: " Thomas Backlund
2013-01-15 10:11 ` the patch "bridge: export multicast database via netlink" broke kernel 3.8 uapi (was: Re: [libvirt] " Cong Wang
2013-01-15 10:55 ` the patch "bridge: export multicast database via netlink" broke kernel 3.8 uapi Thomas Backlund
2013-01-16 5:51 ` Cong Wang
2013-01-16 6:06 ` Redefinition of struct in6_addr in <netinet/in.h> and <linux/in6.h> Cong Wang
2013-01-16 14:21 ` YOSHIFUJI Hideaki
2013-01-16 15:47 ` Ben Hutchings
2013-01-16 17:04 ` Mike Frysinger
2013-01-16 17:10 ` Ben Hutchings
2013-01-16 17:28 ` Mike Frysinger
2013-01-16 18:59 ` David Miller
2013-01-16 19:22 ` Mike Frysinger
2013-01-16 19:25 ` David Miller
2013-01-17 3:40 ` Cong Wang
2013-01-17 3:55 ` [libvirt] " Jike Song
2013-01-17 6:59 ` Cong Wang
2013-01-17 7:02 ` Cong Wang
2013-01-16 18:57 ` David Miller
2013-01-16 19:29 ` Mike Frysinger [this message]
2013-01-17 2:15 ` Carlos O'Donell
2013-01-17 3:10 ` YOSHIFUJI Hideaki
2013-01-17 3:15 ` David Miller
2013-01-18 4:20 ` Mike Frysinger
2013-01-18 4:22 ` Carlos O'Donell
2013-01-18 4:34 ` Mike Frysinger
2013-01-18 10:44 ` Pedro Alves
2013-01-18 13:35 ` Carlos O'Donell
2013-01-18 14:24 ` YOSHIFUJI Hideaki
2013-01-18 14:36 ` Pedro Alves
2013-01-18 14:54 ` Carlos O'Donell
2013-01-21 0:54 ` Mike Frysinger
2013-01-17 3:22 ` YOSHIFUJI Hideaki
2013-01-18 4:13 ` Carlos O'Donell
2013-01-16 21:45 ` David Miller
2013-01-17 1:58 ` Carlos O'Donell
2013-01-17 2:05 ` David Miller
2013-01-17 10:57 ` Jan Engelhardt
2013-01-18 4:14 ` Mike Frysinger
2013-01-18 4:55 ` David Miller
2013-01-18 5:27 ` Mike Frysinger
2013-03-13 15:17 ` [libvirt] if_bridge.h: include in6.h for struct in6_addr use Kumar Gala
2013-03-13 16:24 ` Eric Blake
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201301161429.33814.vapier@gentoo.org \
--to=vapier@gentoo.org \
--cc=amwang@redhat.com \
--cc=bhutchings@solarflare.com \
--cc=carlos@systemhalted.org \
--cc=davem@davemloft.net \
--cc=eblake@redhat.com \
--cc=libc-alpha@sourceware.org \
--cc=libvirt-list@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=schwab@suse.de \
--cc=tgraf@suug.ch \
--cc=tmb@mageia.org \
--cc=yoshfuji@linux-ipv6.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.