* [PATCH nftables] include: fix for musl with iptables v1.8.11
@ 2024-12-19 23:10 Alyssa Ross
2024-12-20 11:50 ` Phil Sutter
0 siblings, 1 reply; 13+ messages in thread
From: Alyssa Ross @ 2024-12-19 23:10 UTC (permalink / raw)
To: netfilter-devel; +Cc: Phil Sutter, Joshua Lant
Since iptables commit 810f8568 (libxtables: xtoptions: Implement
XTTYPE_ETHERMACMASK), nftables failed to build for musl libc:
In file included from /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/et…
from /nix/store/kz6fymqpgbrj6330s6wv4idcf9pwsqs4-iptables-1.8.10-de…
from src/xt.c:30:
/nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/if_ether.h:115:8: error: redefinition of 'struct ethhdr'
115 | struct ethhdr {
| ^~~~~~
In file included from ./include/linux/netfilter_bridge.h:8,
from ./include/linux/netfilter_bridge/ebtables.h:1,
from src/xt.c:27:
/nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/linux/if_ether.h:173:8: note: originally defined here
173 | struct ethhdr {
| ^~~~~~
The fix is to use libc's version of if_ether.h before any kernel
headers, which takes care of conflicts with the kernel's struct ethhdr
definition by defining __UAPI_DEF_ETHHDR, which will tell the kernel's
header not to define its own version.
Signed-off-by: Alyssa Ross <hi@alyssa.is>
---
A similar fix would solve the problem properly in iptables, which was
worked around with 76fce228 ("configure: Determine if musl is used for build").
The __UAPI_DEF_ETHHDR is supposed to be set by netinet/if_ether.h,
rather than manually by users.
include/linux/netfilter_bridge.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/include/linux/netfilter_bridge.h b/include/linux/netfilter_bridge.h
index 6187a558..78ec2cde 100644
--- a/include/linux/netfilter_bridge.h
+++ b/include/linux/netfilter_bridge.h
@@ -4,8 +4,9 @@
/* bridge-specific defines for netfilter.
*/
+#include <netinet/if_ether.h>
+
#include <linux/netfilter.h>
-#include <linux/if_ether.h>
#include <linux/if_vlan.h>
#include <linux/if_pppox.h>
base-commit: 3271d78e70ec75246e8a61a6791fe22b8d89c2c1
--
2.47.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH nftables] include: fix for musl with iptables v1.8.11 2024-12-19 23:10 [PATCH nftables] include: fix for musl with iptables v1.8.11 Alyssa Ross @ 2024-12-20 11:50 ` Phil Sutter 2024-12-20 12:07 ` Alyssa Ross 0 siblings, 1 reply; 13+ messages in thread From: Phil Sutter @ 2024-12-20 11:50 UTC (permalink / raw) To: Alyssa Ross; +Cc: netfilter-devel, Joshua Lant Hi Alyssa, On Fri, Dec 20, 2024 at 12:10:02AM +0100, Alyssa Ross wrote: > Since iptables commit 810f8568 (libxtables: xtoptions: Implement > XTTYPE_ETHERMACMASK), nftables failed to build for musl libc: > > In file included from /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/et… > from /nix/store/kz6fymqpgbrj6330s6wv4idcf9pwsqs4-iptables-1.8.10-de… > from src/xt.c:30: > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/if_ether.h:115:8: error: redefinition of 'struct ethhdr' > 115 | struct ethhdr { > | ^~~~~~ > In file included from ./include/linux/netfilter_bridge.h:8, > from ./include/linux/netfilter_bridge/ebtables.h:1, > from src/xt.c:27: > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/linux/if_ether.h:173:8: note: originally defined here > 173 | struct ethhdr { > | ^~~~~~ > > The fix is to use libc's version of if_ether.h before any kernel > headers, which takes care of conflicts with the kernel's struct ethhdr > definition by defining __UAPI_DEF_ETHHDR, which will tell the kernel's > header not to define its own version. What I don't like about this is how musl tries to force projects to not include linux/if_ether.h directly. From the project's view, this is a workaround not a fix. > Signed-off-by: Alyssa Ross <hi@alyssa.is> > --- > A similar fix would solve the problem properly in iptables, which was > worked around with 76fce228 ("configure: Determine if musl is used for build"). > The __UAPI_DEF_ETHHDR is supposed to be set by netinet/if_ether.h, > rather than manually by users. Why does 76fce228 not work for you? Cheers, Phil ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nftables] include: fix for musl with iptables v1.8.11 2024-12-20 11:50 ` Phil Sutter @ 2024-12-20 12:07 ` Alyssa Ross 2024-12-20 12:33 ` Phil Sutter 0 siblings, 1 reply; 13+ messages in thread From: Alyssa Ross @ 2024-12-20 12:07 UTC (permalink / raw) To: Phil Sutter, netfilter-devel, Joshua Lant [-- Attachment #1: Type: text/plain, Size: 2902 bytes --] On Fri, Dec 20, 2024 at 12:50:42PM +0100, Phil Sutter wrote: > Hi Alyssa, > > On Fri, Dec 20, 2024 at 12:10:02AM +0100, Alyssa Ross wrote: > > Since iptables commit 810f8568 (libxtables: xtoptions: Implement > > XTTYPE_ETHERMACMASK), nftables failed to build for musl libc: > > > > In file included from /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/et… > > from /nix/store/kz6fymqpgbrj6330s6wv4idcf9pwsqs4-iptables-1.8.10-de… > > from src/xt.c:30: > > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/if_ether.h:115:8: error: redefinition of 'struct ethhdr' > > 115 | struct ethhdr { > > | ^~~~~~ > > In file included from ./include/linux/netfilter_bridge.h:8, > > from ./include/linux/netfilter_bridge/ebtables.h:1, > > from src/xt.c:27: > > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/linux/if_ether.h:173:8: note: originally defined here > > 173 | struct ethhdr { > > | ^~~~~~ > > > > The fix is to use libc's version of if_ether.h before any kernel > > headers, which takes care of conflicts with the kernel's struct ethhdr > > definition by defining __UAPI_DEF_ETHHDR, which will tell the kernel's > > header not to define its own version. > > What I don't like about this is how musl tries to force projects to not > include linux/if_ether.h directly. From the project's view, this is a > workaround not a fix. My understanding is that it's a general principle of using any libc on Linux that if there's both a libc and kernel header for the same thing, the libc header should be used. libc headers will of course include other libc headers in preference to kernel headers, so if you also include the kernel headers you're likely to end up with conflicts. Whether conflicts occur in any particular case depends on how a particular libc chooses to expose a particular kernel API. I could be misremembering, but I believe the same thing can happen with Glibc — some headers under sys/ cause conflicts with their corresponding kernel headers if both are included. While this case is musl specific, I think the principle applies to all libcs. > > Signed-off-by: Alyssa Ross <hi@alyssa.is> > > --- > > A similar fix would solve the problem properly in iptables, which was > > worked around with 76fce228 ("configure: Determine if musl is used for build"). > > The __UAPI_DEF_ETHHDR is supposed to be set by netinet/if_ether.h, > > rather than manually by users. > > Why does 76fce228 not work for you? It does work, but that's a fix for iptables. This is a fix for nftables. I could have submitted a copy of the iptables fix, but I don't think it's the best fix due to its reliance on internal macros that are not part of the public interface. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nftables] include: fix for musl with iptables v1.8.11 2024-12-20 12:07 ` Alyssa Ross @ 2024-12-20 12:33 ` Phil Sutter 2024-12-21 15:34 ` Alyssa Ross 2025-01-08 23:34 ` Pablo Neira Ayuso 0 siblings, 2 replies; 13+ messages in thread From: Phil Sutter @ 2024-12-20 12:33 UTC (permalink / raw) To: Alyssa Ross, Pablo Neira Ayuso; +Cc: netfilter-devel, Joshua Lant On Fri, Dec 20, 2024 at 01:07:56PM +0100, Alyssa Ross wrote: > On Fri, Dec 20, 2024 at 12:50:42PM +0100, Phil Sutter wrote: > > Hi Alyssa, > > > > On Fri, Dec 20, 2024 at 12:10:02AM +0100, Alyssa Ross wrote: > > > Since iptables commit 810f8568 (libxtables: xtoptions: Implement > > > XTTYPE_ETHERMACMASK), nftables failed to build for musl libc: > > > > > > In file included from /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/et… > > > from /nix/store/kz6fymqpgbrj6330s6wv4idcf9pwsqs4-iptables-1.8.10-de… > > > from src/xt.c:30: > > > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/if_ether.h:115:8: error: redefinition of 'struct ethhdr' > > > 115 | struct ethhdr { > > > | ^~~~~~ > > > In file included from ./include/linux/netfilter_bridge.h:8, > > > from ./include/linux/netfilter_bridge/ebtables.h:1, > > > from src/xt.c:27: > > > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/linux/if_ether.h:173:8: note: originally defined here > > > 173 | struct ethhdr { > > > | ^~~~~~ > > > > > > The fix is to use libc's version of if_ether.h before any kernel > > > headers, which takes care of conflicts with the kernel's struct ethhdr > > > definition by defining __UAPI_DEF_ETHHDR, which will tell the kernel's > > > header not to define its own version. > > > > What I don't like about this is how musl tries to force projects to not > > include linux/if_ether.h directly. From the project's view, this is a > > workaround not a fix. > > My understanding is that it's a general principle of using any libc on > Linux that if there's both a libc and kernel header for the same thing, > the libc header should be used. libc headers will of course include > other libc headers in preference to kernel headers, so if you also > include the kernel headers you're likely to end up with conflicts. > Whether conflicts occur in any particular case depends on how a > particular libc chooses to expose a particular kernel API. I could be > misremembering, but I believe the same thing can happen with Glibc — > some headers under sys/ cause conflicts with their corresponding kernel > headers if both are included. While this case is musl specific, I > think the principle applies to all libcs. While this may be true for the vast majority of user space programs, netfilter tools and libraries are a bit special in how close they interface with the kernel. Not all netfilter-related kernel API is exposed by glibc, for instance. Including (some) kernel headers is therefore unavoidable, and (as your patch shows) order of inclusion becomes subtly relevant in ways which won't show when compile-testing against glibc only. > > > Signed-off-by: Alyssa Ross <hi@alyssa.is> > > > --- > > > A similar fix would solve the problem properly in iptables, which was > > > worked around with 76fce228 ("configure: Determine if musl is used for build"). > > > The __UAPI_DEF_ETHHDR is supposed to be set by netinet/if_ether.h, > > > rather than manually by users. > > > > Why does 76fce228 not work for you? > > It does work, but that's a fix for iptables. This is a fix for > nftables. I could have submitted a copy of the iptables fix, but I > don't think it's the best fix due to its reliance on internal macros > that are not part of the public interface. Ah, sorry! Patch subject and description managed to confuse me. Pablo, what's your opinion? Maybe we should strive for the same solution for the problem in all netfilter user space, so either take what we have in iptables or adjust iptables to what nftables decides how things should be? Cheers, Phil ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nftables] include: fix for musl with iptables v1.8.11 2024-12-20 12:33 ` Phil Sutter @ 2024-12-21 15:34 ` Alyssa Ross 2025-01-08 23:34 ` Pablo Neira Ayuso 1 sibling, 0 replies; 13+ messages in thread From: Alyssa Ross @ 2024-12-21 15:34 UTC (permalink / raw) To: Phil Sutter, Pablo Neira Ayuso; +Cc: netfilter-devel, Joshua Lant [-- Attachment #1: Type: text/plain, Size: 3364 bytes --] Phil Sutter <phil@nwl.cc> writes: > On Fri, Dec 20, 2024 at 01:07:56PM +0100, Alyssa Ross wrote: >> On Fri, Dec 20, 2024 at 12:50:42PM +0100, Phil Sutter wrote: >> > Hi Alyssa, >> > >> > On Fri, Dec 20, 2024 at 12:10:02AM +0100, Alyssa Ross wrote: >> > > Since iptables commit 810f8568 (libxtables: xtoptions: Implement >> > > XTTYPE_ETHERMACMASK), nftables failed to build for musl libc: >> > > >> > > In file included from /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/et… >> > > from /nix/store/kz6fymqpgbrj6330s6wv4idcf9pwsqs4-iptables-1.8.10-de… >> > > from src/xt.c:30: >> > > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/if_ether.h:115:8: error: redefinition of 'struct ethhdr' >> > > 115 | struct ethhdr { >> > > | ^~~~~~ >> > > In file included from ./include/linux/netfilter_bridge.h:8, >> > > from ./include/linux/netfilter_bridge/ebtables.h:1, >> > > from src/xt.c:27: >> > > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/linux/if_ether.h:173:8: note: originally defined here >> > > 173 | struct ethhdr { >> > > | ^~~~~~ >> > > >> > > The fix is to use libc's version of if_ether.h before any kernel >> > > headers, which takes care of conflicts with the kernel's struct ethhdr >> > > definition by defining __UAPI_DEF_ETHHDR, which will tell the kernel's >> > > header not to define its own version. >> > >> > What I don't like about this is how musl tries to force projects to not >> > include linux/if_ether.h directly. From the project's view, this is a >> > workaround not a fix. >> >> My understanding is that it's a general principle of using any libc on >> Linux that if there's both a libc and kernel header for the same thing, >> the libc header should be used. libc headers will of course include >> other libc headers in preference to kernel headers, so if you also >> include the kernel headers you're likely to end up with conflicts. >> Whether conflicts occur in any particular case depends on how a >> particular libc chooses to expose a particular kernel API. I could be >> misremembering, but I believe the same thing can happen with Glibc — >> some headers under sys/ cause conflicts with their corresponding kernel >> headers if both are included. While this case is musl specific, I >> think the principle applies to all libcs. > > While this may be true for the vast majority of user space programs, > netfilter tools and libraries are a bit special in how close they > interface with the kernel. Not all netfilter-related kernel API is > exposed by glibc, for instance. Including (some) kernel headers is > therefore unavoidable, and (as your patch shows) order of inclusion > becomes subtly relevant in ways which won't show when compile-testing > against glibc only. Yeah — really it needs to be ensured in review that libc headers are included before kernel headers, and libc headers are preferred over kernel headers where both are available. It's not too much to keep in mind, but it does need to be taught/learned because the issues it causes won't always be caught during testing in any particular environment. The same holds for lots of things in C, though. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 227 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nftables] include: fix for musl with iptables v1.8.11 2024-12-20 12:33 ` Phil Sutter 2024-12-21 15:34 ` Alyssa Ross @ 2025-01-08 23:34 ` Pablo Neira Ayuso 2025-01-08 23:49 ` Phil Sutter 1 sibling, 1 reply; 13+ messages in thread From: Pablo Neira Ayuso @ 2025-01-08 23:34 UTC (permalink / raw) To: Phil Sutter, Alyssa Ross, netfilter-devel, Joshua Lant Hi, On Fri, Dec 20, 2024 at 01:33:42PM +0100, Phil Sutter wrote: > On Fri, Dec 20, 2024 at 01:07:56PM +0100, Alyssa Ross wrote: > > On Fri, Dec 20, 2024 at 12:50:42PM +0100, Phil Sutter wrote: > > > Hi Alyssa, > > > > > > On Fri, Dec 20, 2024 at 12:10:02AM +0100, Alyssa Ross wrote: > > > > Since iptables commit 810f8568 (libxtables: xtoptions: Implement > > > > XTTYPE_ETHERMACMASK), nftables failed to build for musl libc: > > > > > > > > In file included from /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/et… > > > > from /nix/store/kz6fymqpgbrj6330s6wv4idcf9pwsqs4-iptables-1.8.10-de… > > > > from src/xt.c:30: > > > > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/if_ether.h:115:8: error: redefinition of 'struct ethhdr' > > > > 115 | struct ethhdr { > > > > | ^~~~~~ > > > > In file included from ./include/linux/netfilter_bridge.h:8, > > > > from ./include/linux/netfilter_bridge/ebtables.h:1, > > > > from src/xt.c:27: > > > > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/linux/if_ether.h:173:8: note: originally defined here > > > > 173 | struct ethhdr { > > > > | ^~~~~~ > > > > > > > > The fix is to use libc's version of if_ether.h before any kernel > > > > headers, which takes care of conflicts with the kernel's struct ethhdr > > > > definition by defining __UAPI_DEF_ETHHDR, which will tell the kernel's > > > > header not to define its own version. > > > > > > What I don't like about this is how musl tries to force projects to not > > > include linux/if_ether.h directly. From the project's view, this is a > > > workaround not a fix. > > > > My understanding is that it's a general principle of using any libc on > > Linux that if there's both a libc and kernel header for the same thing, > > the libc header should be used. libc headers will of course include > > other libc headers in preference to kernel headers, so if you also > > include the kernel headers you're likely to end up with conflicts. > > Whether conflicts occur in any particular case depends on how a > > particular libc chooses to expose a particular kernel API. I could be > > misremembering, but I believe the same thing can happen with Glibc — > > some headers under sys/ cause conflicts with their corresponding kernel > > headers if both are included. While this case is musl specific, I > > think the principle applies to all libcs. > > While this may be true for the vast majority of user space programs, > netfilter tools and libraries are a bit special in how close they > interface with the kernel. Not all netfilter-related kernel API is > exposed by glibc, for instance. Including (some) kernel headers is > therefore unavoidable, and (as your patch shows) order of inclusion > becomes subtly relevant in ways which won't show when compile-testing > against glibc only. > > > > > Signed-off-by: Alyssa Ross <hi@alyssa.is> > > > > --- > > > > A similar fix would solve the problem properly in iptables, which was > > > > worked around with 76fce228 ("configure: Determine if musl is used for build"). > > > > The __UAPI_DEF_ETHHDR is supposed to be set by netinet/if_ether.h, > > > > rather than manually by users. > > > > > > Why does 76fce228 not work for you? > > > > It does work, but that's a fix for iptables. This is a fix for > > nftables. I could have submitted a copy of the iptables fix, but I > > don't think it's the best fix due to its reliance on internal macros > > that are not part of the public interface. > > Ah, sorry! Patch subject and description managed to confuse me. > > Pablo, what's your opinion? Maybe we should strive for the same solution > for the problem in all netfilter user space, so either take what we have > in iptables or adjust iptables to what nftables decides how things > should be? I see, you mean to use this (from iptables): commit 76fce22826f8e860b5eb5b5a2463040c17ff85da Author: Joshua Lant <joshualant@googlemail.com> Date: Wed Aug 28 13:47:31 2024 +0100 configure: Determine if musl is used for build and adapt to use it from nftables (and everywhere else). Alyssa's patch is more simple, but it is mangling a cache kernel header. Is this configure.ac workaround needed everywhere in the netfilter.org trees to make musl happy? I don't see any better option at this stage. Thanks. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nftables] include: fix for musl with iptables v1.8.11 2025-01-08 23:34 ` Pablo Neira Ayuso @ 2025-01-08 23:49 ` Phil Sutter 2025-01-09 0:03 ` Pablo Neira Ayuso 0 siblings, 1 reply; 13+ messages in thread From: Phil Sutter @ 2025-01-08 23:49 UTC (permalink / raw) To: Pablo Neira Ayuso; +Cc: Alyssa Ross, netfilter-devel, Joshua Lant Hi Pablo, On Thu, Jan 09, 2025 at 12:34:01AM +0100, Pablo Neira Ayuso wrote: > On Fri, Dec 20, 2024 at 01:33:42PM +0100, Phil Sutter wrote: > > On Fri, Dec 20, 2024 at 01:07:56PM +0100, Alyssa Ross wrote: > > > On Fri, Dec 20, 2024 at 12:50:42PM +0100, Phil Sutter wrote: > > > > Hi Alyssa, > > > > > > > > On Fri, Dec 20, 2024 at 12:10:02AM +0100, Alyssa Ross wrote: > > > > > Since iptables commit 810f8568 (libxtables: xtoptions: Implement > > > > > XTTYPE_ETHERMACMASK), nftables failed to build for musl libc: > > > > > > > > > > In file included from /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/et… > > > > > from /nix/store/kz6fymqpgbrj6330s6wv4idcf9pwsqs4-iptables-1.8.10-de… > > > > > from src/xt.c:30: > > > > > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/if_ether.h:115:8: error: redefinition of 'struct ethhdr' > > > > > 115 | struct ethhdr { > > > > > | ^~~~~~ > > > > > In file included from ./include/linux/netfilter_bridge.h:8, > > > > > from ./include/linux/netfilter_bridge/ebtables.h:1, > > > > > from src/xt.c:27: > > > > > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/linux/if_ether.h:173:8: note: originally defined here > > > > > 173 | struct ethhdr { > > > > > | ^~~~~~ > > > > > > > > > > The fix is to use libc's version of if_ether.h before any kernel > > > > > headers, which takes care of conflicts with the kernel's struct ethhdr > > > > > definition by defining __UAPI_DEF_ETHHDR, which will tell the kernel's > > > > > header not to define its own version. > > > > > > > > What I don't like about this is how musl tries to force projects to not > > > > include linux/if_ether.h directly. From the project's view, this is a > > > > workaround not a fix. > > > > > > My understanding is that it's a general principle of using any libc on > > > Linux that if there's both a libc and kernel header for the same thing, > > > the libc header should be used. libc headers will of course include > > > other libc headers in preference to kernel headers, so if you also > > > include the kernel headers you're likely to end up with conflicts. > > > Whether conflicts occur in any particular case depends on how a > > > particular libc chooses to expose a particular kernel API. I could be > > > misremembering, but I believe the same thing can happen with Glibc — > > > some headers under sys/ cause conflicts with their corresponding kernel > > > headers if both are included. While this case is musl specific, I > > > think the principle applies to all libcs. > > > > While this may be true for the vast majority of user space programs, > > netfilter tools and libraries are a bit special in how close they > > interface with the kernel. Not all netfilter-related kernel API is > > exposed by glibc, for instance. Including (some) kernel headers is > > therefore unavoidable, and (as your patch shows) order of inclusion > > becomes subtly relevant in ways which won't show when compile-testing > > against glibc only. > > > > > > > Signed-off-by: Alyssa Ross <hi@alyssa.is> > > > > > --- > > > > > A similar fix would solve the problem properly in iptables, which was > > > > > worked around with 76fce228 ("configure: Determine if musl is used for build"). > > > > > The __UAPI_DEF_ETHHDR is supposed to be set by netinet/if_ether.h, > > > > > rather than manually by users. > > > > > > > > Why does 76fce228 not work for you? > > > > > > It does work, but that's a fix for iptables. This is a fix for > > > nftables. I could have submitted a copy of the iptables fix, but I > > > don't think it's the best fix due to its reliance on internal macros > > > that are not part of the public interface. > > > > Ah, sorry! Patch subject and description managed to confuse me. > > > > Pablo, what's your opinion? Maybe we should strive for the same solution > > for the problem in all netfilter user space, so either take what we have > > in iptables or adjust iptables to what nftables decides how things > > should be? > > I see, you mean to use this (from iptables): > > commit 76fce22826f8e860b5eb5b5a2463040c17ff85da > Author: Joshua Lant <joshualant@googlemail.com> > Date: Wed Aug 28 13:47:31 2024 +0100 > > configure: Determine if musl is used for build > > and adapt to use it from nftables (and everywhere else). > > Alyssa's patch is more simple, but it is mangling a cache kernel > header. Right, so the fixing should start in kernel repo, then update the cached header in nftables. > Is this configure.ac workaround needed everywhere in the netfilter.org > trees to make musl happy? AIUI, only in those including linux/if_ether.h directly. ;) Though there is such include in nftables' src/payload.c which remains unchanged by Alyssa's patch. Not sure if intentional, maybe there are factors which make the include harmless. > I don't see any better option at this stage. According to a quick grep, there are currently six spots including linux/if_ether.h (including one cached kernel header). I like about the configure hack that it avoids breaking musl by accident via some seemingly unrelated patch. Just one less thing to keep in mind, but this is just me. I appreciate other opinions! Cheers, Phil PS: Can't we just fix musl instead? *hides* ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nftables] include: fix for musl with iptables v1.8.11 2025-01-08 23:49 ` Phil Sutter @ 2025-01-09 0:03 ` Pablo Neira Ayuso 2025-01-09 10:02 ` Phil Sutter 0 siblings, 1 reply; 13+ messages in thread From: Pablo Neira Ayuso @ 2025-01-09 0:03 UTC (permalink / raw) To: Phil Sutter, Alyssa Ross, netfilter-devel, Joshua Lant Hi Phil, On Thu, Jan 09, 2025 at 12:49:53AM +0100, Phil Sutter wrote: > Hi Pablo, > > On Thu, Jan 09, 2025 at 12:34:01AM +0100, Pablo Neira Ayuso wrote: > > On Fri, Dec 20, 2024 at 01:33:42PM +0100, Phil Sutter wrote: > > > On Fri, Dec 20, 2024 at 01:07:56PM +0100, Alyssa Ross wrote: > > > > On Fri, Dec 20, 2024 at 12:50:42PM +0100, Phil Sutter wrote: > > > > > Hi Alyssa, > > > > > > > > > > On Fri, Dec 20, 2024 at 12:10:02AM +0100, Alyssa Ross wrote: > > > > > > Since iptables commit 810f8568 (libxtables: xtoptions: Implement > > > > > > XTTYPE_ETHERMACMASK), nftables failed to build for musl libc: > > > > > > > > > > > > In file included from /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/et… > > > > > > from /nix/store/kz6fymqpgbrj6330s6wv4idcf9pwsqs4-iptables-1.8.10-de… > > > > > > from src/xt.c:30: > > > > > > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/if_ether.h:115:8: error: redefinition of 'struct ethhdr' > > > > > > 115 | struct ethhdr { > > > > > > | ^~~~~~ > > > > > > In file included from ./include/linux/netfilter_bridge.h:8, > > > > > > from ./include/linux/netfilter_bridge/ebtables.h:1, > > > > > > from src/xt.c:27: > > > > > > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/linux/if_ether.h:173:8: note: originally defined here > > > > > > 173 | struct ethhdr { > > > > > > | ^~~~~~ > > > > > > > > > > > > The fix is to use libc's version of if_ether.h before any kernel > > > > > > headers, which takes care of conflicts with the kernel's struct ethhdr > > > > > > definition by defining __UAPI_DEF_ETHHDR, which will tell the kernel's > > > > > > header not to define its own version. > > > > > > > > > > What I don't like about this is how musl tries to force projects to not > > > > > include linux/if_ether.h directly. From the project's view, this is a > > > > > workaround not a fix. > > > > > > > > My understanding is that it's a general principle of using any libc on > > > > Linux that if there's both a libc and kernel header for the same thing, > > > > the libc header should be used. libc headers will of course include > > > > other libc headers in preference to kernel headers, so if you also > > > > include the kernel headers you're likely to end up with conflicts. > > > > Whether conflicts occur in any particular case depends on how a > > > > particular libc chooses to expose a particular kernel API. I could be > > > > misremembering, but I believe the same thing can happen with Glibc — > > > > some headers under sys/ cause conflicts with their corresponding kernel > > > > headers if both are included. While this case is musl specific, I > > > > think the principle applies to all libcs. > > > > > > While this may be true for the vast majority of user space programs, > > > netfilter tools and libraries are a bit special in how close they > > > interface with the kernel. Not all netfilter-related kernel API is > > > exposed by glibc, for instance. Including (some) kernel headers is > > > therefore unavoidable, and (as your patch shows) order of inclusion > > > becomes subtly relevant in ways which won't show when compile-testing > > > against glibc only. > > > > > > > > > Signed-off-by: Alyssa Ross <hi@alyssa.is> > > > > > > --- > > > > > > A similar fix would solve the problem properly in iptables, which was > > > > > > worked around with 76fce228 ("configure: Determine if musl is used for build"). > > > > > > The __UAPI_DEF_ETHHDR is supposed to be set by netinet/if_ether.h, > > > > > > rather than manually by users. > > > > > > > > > > Why does 76fce228 not work for you? > > > > > > > > It does work, but that's a fix for iptables. This is a fix for > > > > nftables. I could have submitted a copy of the iptables fix, but I > > > > don't think it's the best fix due to its reliance on internal macros > > > > that are not part of the public interface. > > > > > > Ah, sorry! Patch subject and description managed to confuse me. > > > > > > Pablo, what's your opinion? Maybe we should strive for the same solution > > > for the problem in all netfilter user space, so either take what we have > > > in iptables or adjust iptables to what nftables decides how things > > > should be? > > > > I see, you mean to use this (from iptables): > > > > commit 76fce22826f8e860b5eb5b5a2463040c17ff85da > > Author: Joshua Lant <joshualant@googlemail.com> > > Date: Wed Aug 28 13:47:31 2024 +0100 > > > > configure: Determine if musl is used for build > > > > and adapt to use it from nftables (and everywhere else). > > > > Alyssa's patch is more simple, but it is mangling a cache kernel > > header. > > Right, so the fixing should start in kernel repo, then update the cached > header in nftables. > > > Is this configure.ac workaround needed everywhere in the netfilter.org > > trees to make musl happy? > > AIUI, only in those including linux/if_ether.h directly. ;) Hm. I am looking at include/uapi/linux/netfilter_bridge.h and... #include <linux/in.h> #include <linux/netfilter.h> #include <linux/if_ether.h> #include <linux/if_vlan.h> #include <linux/if_pppox.h> I don't understand why all those #include need to be there, this header file contains only defines an enumeration... git annotate takes me to: 607ca46e97a1 ("UAPI: (Scripted) Disintegrate include/linux") Silly question: Does it break any netfilter userspace software if #include <linux/if_ether.h> is moved from that kernel header file to to the non-uapi netfilter_bridge.h header file. > Though there is such include in nftables' src/payload.c which remains > unchanged by Alyssa's patch. Not sure if intentional, maybe there are > factors which make the include harmless. This is userspace, I guess we can replace it with userspace netinet/ header variant. > > I don't see any better option at this stage. > > According to a quick grep, there are currently six spots including > linux/if_ether.h (including one cached kernel header). I like about the > configure hack that it avoids breaking musl by accident via some > seemingly unrelated patch. Just one less thing to keep in mind, but this > is just me. I appreciate other opinions! Agreed, avoiding the configure kludge would be good. > Cheers, Phil > > PS: Can't we just fix musl instead? *hides* ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nftables] include: fix for musl with iptables v1.8.11 2025-01-09 0:03 ` Pablo Neira Ayuso @ 2025-01-09 10:02 ` Phil Sutter 2026-02-11 13:49 ` Florian Westphal 0 siblings, 1 reply; 13+ messages in thread From: Phil Sutter @ 2025-01-09 10:02 UTC (permalink / raw) To: Pablo Neira Ayuso; +Cc: Alyssa Ross, netfilter-devel, Joshua Lant Hi Pablo, On Thu, Jan 09, 2025 at 01:03:25AM +0100, Pablo Neira Ayuso wrote: > On Thu, Jan 09, 2025 at 12:49:53AM +0100, Phil Sutter wrote: > > On Thu, Jan 09, 2025 at 12:34:01AM +0100, Pablo Neira Ayuso wrote: > > > On Fri, Dec 20, 2024 at 01:33:42PM +0100, Phil Sutter wrote: > > > > On Fri, Dec 20, 2024 at 01:07:56PM +0100, Alyssa Ross wrote: > > > > > On Fri, Dec 20, 2024 at 12:50:42PM +0100, Phil Sutter wrote: > > > > > > Hi Alyssa, > > > > > > > > > > > > On Fri, Dec 20, 2024 at 12:10:02AM +0100, Alyssa Ross wrote: > > > > > > > Since iptables commit 810f8568 (libxtables: xtoptions: Implement > > > > > > > XTTYPE_ETHERMACMASK), nftables failed to build for musl libc: > > > > > > > > > > > > > > In file included from /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/et… > > > > > > > from /nix/store/kz6fymqpgbrj6330s6wv4idcf9pwsqs4-iptables-1.8.10-de… > > > > > > > from src/xt.c:30: > > > > > > > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/netinet/if_ether.h:115:8: error: redefinition of 'struct ethhdr' > > > > > > > 115 | struct ethhdr { > > > > > > > | ^~~~~~ > > > > > > > In file included from ./include/linux/netfilter_bridge.h:8, > > > > > > > from ./include/linux/netfilter_bridge/ebtables.h:1, > > > > > > > from src/xt.c:27: > > > > > > > /nix/store/bvffdqfhyxvx66bqlqqdmjmkyklkafv6-musl-1.2.5-dev/include/linux/if_ether.h:173:8: note: originally defined here > > > > > > > 173 | struct ethhdr { > > > > > > > | ^~~~~~ > > > > > > > > > > > > > > The fix is to use libc's version of if_ether.h before any kernel > > > > > > > headers, which takes care of conflicts with the kernel's struct ethhdr > > > > > > > definition by defining __UAPI_DEF_ETHHDR, which will tell the kernel's > > > > > > > header not to define its own version. > > > > > > > > > > > > What I don't like about this is how musl tries to force projects to not > > > > > > include linux/if_ether.h directly. From the project's view, this is a > > > > > > workaround not a fix. > > > > > > > > > > My understanding is that it's a general principle of using any libc on > > > > > Linux that if there's both a libc and kernel header for the same thing, > > > > > the libc header should be used. libc headers will of course include > > > > > other libc headers in preference to kernel headers, so if you also > > > > > include the kernel headers you're likely to end up with conflicts. > > > > > Whether conflicts occur in any particular case depends on how a > > > > > particular libc chooses to expose a particular kernel API. I could be > > > > > misremembering, but I believe the same thing can happen with Glibc — > > > > > some headers under sys/ cause conflicts with their corresponding kernel > > > > > headers if both are included. While this case is musl specific, I > > > > > think the principle applies to all libcs. > > > > > > > > While this may be true for the vast majority of user space programs, > > > > netfilter tools and libraries are a bit special in how close they > > > > interface with the kernel. Not all netfilter-related kernel API is > > > > exposed by glibc, for instance. Including (some) kernel headers is > > > > therefore unavoidable, and (as your patch shows) order of inclusion > > > > becomes subtly relevant in ways which won't show when compile-testing > > > > against glibc only. > > > > > > > > > > > Signed-off-by: Alyssa Ross <hi@alyssa.is> > > > > > > > --- > > > > > > > A similar fix would solve the problem properly in iptables, which was > > > > > > > worked around with 76fce228 ("configure: Determine if musl is used for build"). > > > > > > > The __UAPI_DEF_ETHHDR is supposed to be set by netinet/if_ether.h, > > > > > > > rather than manually by users. > > > > > > > > > > > > Why does 76fce228 not work for you? > > > > > > > > > > It does work, but that's a fix for iptables. This is a fix for > > > > > nftables. I could have submitted a copy of the iptables fix, but I > > > > > don't think it's the best fix due to its reliance on internal macros > > > > > that are not part of the public interface. > > > > > > > > Ah, sorry! Patch subject and description managed to confuse me. > > > > > > > > Pablo, what's your opinion? Maybe we should strive for the same solution > > > > for the problem in all netfilter user space, so either take what we have > > > > in iptables or adjust iptables to what nftables decides how things > > > > should be? > > > > > > I see, you mean to use this (from iptables): > > > > > > commit 76fce22826f8e860b5eb5b5a2463040c17ff85da > > > Author: Joshua Lant <joshualant@googlemail.com> > > > Date: Wed Aug 28 13:47:31 2024 +0100 > > > > > > configure: Determine if musl is used for build > > > > > > and adapt to use it from nftables (and everywhere else). > > > > > > Alyssa's patch is more simple, but it is mangling a cache kernel > > > header. > > > > Right, so the fixing should start in kernel repo, then update the cached > > header in nftables. > > > > > Is this configure.ac workaround needed everywhere in the netfilter.org > > > trees to make musl happy? > > > > AIUI, only in those including linux/if_ether.h directly. ;) > > Hm. I am looking at include/uapi/linux/netfilter_bridge.h and... > > #include <linux/in.h> > #include <linux/netfilter.h> > #include <linux/if_ether.h> > #include <linux/if_vlan.h> > #include <linux/if_pppox.h> > > I don't understand why all those #include need to be there, this > header file contains only defines an enumeration... git annotate takes > me to: > > 607ca46e97a1 ("UAPI: (Scripted) Disintegrate include/linux") > > Silly question: Does it break any netfilter userspace software if > #include <linux/if_ether.h> is moved from that kernel header file to > to the non-uapi netfilter_bridge.h header file. Silly counter question: Does removing an include statement break UAPI? I was once told source files shall directly include everything they need and not depend on includes in headers, but "now you need this extra header" is not far away from "now you need this other header", right? Even sillier, is Alyssa's change legal regarding UAPI? All of glibc, musl and uClibc seem fine, but in theory there might be a libc which has odd things in netinet/if_ether.h. BTW: I see only a single UAPI kernel header include from netinet space (include/uapi/linux/mptcp.h) and it's for compat reasons (06e445f740c1 ("mptcp: fix conflict with <netinet/in.h>")). Speaking of which, what if we added: | #ifndef __KERNEL__ | #include <netinet/if_ether.h> | #endif early into include/uapi/linux/if_ether.h? Aside from any header caches, this should fix all of user space at once, no? > > Though there is such include in nftables' src/payload.c which remains > > unchanged by Alyssa's patch. Not sure if intentional, maybe there are > > factors which make the include harmless. > > This is userspace, I guess we can replace it with userspace netinet/ > header variant. > > > > I don't see any better option at this stage. > > > > According to a quick grep, there are currently six spots including > > linux/if_ether.h (including one cached kernel header). I like about the > > configure hack that it avoids breaking musl by accident via some > > seemingly unrelated patch. Just one less thing to keep in mind, but this > > is just me. I appreciate other opinions! > > Agreed, avoiding the configure kludge would be good. OK! I could probably write some git hooks to support my lossy memory. Cheers, Phil ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nftables] include: fix for musl with iptables v1.8.11 2025-01-09 10:02 ` Phil Sutter @ 2026-02-11 13:49 ` Florian Westphal 2026-02-11 18:59 ` Phil Sutter 0 siblings, 1 reply; 13+ messages in thread From: Florian Westphal @ 2026-02-11 13:49 UTC (permalink / raw) To: Phil Sutter, Pablo Neira Ayuso, Alyssa Ross, netfilter-devel, Joshua Lant Phil Sutter <phil@nwl.cc> wrote: > On Thu, Jan 09, 2025 at 01:03:25AM +0100, Pablo Neira Ayuso wrote: > > Hm. I am looking at include/uapi/linux/netfilter_bridge.h and... > > > > #include <linux/in.h> > > #include <linux/netfilter.h> > > #include <linux/if_ether.h> > > #include <linux/if_vlan.h> > > #include <linux/if_pppox.h> > > > > I don't understand why all those #include need to be there, this > > header file contains only defines an enumeration... git annotate takes > > me to: > > > > 607ca46e97a1 ("UAPI: (Scripted) Disintegrate include/linux") > > > > Silly question: Does it break any netfilter userspace software if > > #include <linux/if_ether.h> is moved from that kernel header file to > > to the non-uapi netfilter_bridge.h header file. > > Silly counter question: Does removing an include statement break UAPI? Yes, it risks uapi breakage. > BTW: I see only a single UAPI kernel header include from netinet space > (include/uapi/linux/mptcp.h) and it's for compat reasons (06e445f740c1 > ("mptcp: fix conflict with <netinet/in.h>")). Speaking of which, what if > we added: > > | #ifndef __KERNEL__ > | #include <netinet/if_ether.h> > | #endif > > early into include/uapi/linux/if_ether.h? Aside from any header caches, > this should fix all of user space at once, no? Phil, would you send a formal patch to make this workaround *ONLY* in netfilter_bridge.h (06e445f740c1)? That way the fix can be propagated to nftables.git without having to adjust cached headers on every update. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nftables] include: fix for musl with iptables v1.8.11 2026-02-11 13:49 ` Florian Westphal @ 2026-02-11 18:59 ` Phil Sutter 2026-02-11 19:09 ` Florian Westphal 0 siblings, 1 reply; 13+ messages in thread From: Phil Sutter @ 2026-02-11 18:59 UTC (permalink / raw) To: Florian Westphal Cc: Pablo Neira Ayuso, Alyssa Ross, netfilter-devel, Joshua Lant On Wed, Feb 11, 2026 at 02:49:42PM +0100, Florian Westphal wrote: > Phil Sutter <phil@nwl.cc> wrote: > > On Thu, Jan 09, 2025 at 01:03:25AM +0100, Pablo Neira Ayuso wrote: > > > Hm. I am looking at include/uapi/linux/netfilter_bridge.h and... > > > > > > #include <linux/in.h> > > > #include <linux/netfilter.h> > > > #include <linux/if_ether.h> > > > #include <linux/if_vlan.h> > > > #include <linux/if_pppox.h> > > > > > > I don't understand why all those #include need to be there, this > > > header file contains only defines an enumeration... git annotate takes > > > me to: > > > > > > 607ca46e97a1 ("UAPI: (Scripted) Disintegrate include/linux") > > > > > > Silly question: Does it break any netfilter userspace software if > > > #include <linux/if_ether.h> is moved from that kernel header file to > > > to the non-uapi netfilter_bridge.h header file. > > > > Silly counter question: Does removing an include statement break UAPI? > > Yes, it risks uapi breakage. I hope this extra include is safe in that regard. > > BTW: I see only a single UAPI kernel header include from netinet space > > (include/uapi/linux/mptcp.h) and it's for compat reasons (06e445f740c1 > > ("mptcp: fix conflict with <netinet/in.h>")). Speaking of which, what if > > we added: > > > > | #ifndef __KERNEL__ > > | #include <netinet/if_ether.h> > > | #endif > > > > early into include/uapi/linux/if_ether.h? Aside from any header caches, > > this should fix all of user space at once, no? > > Phil, would you send a formal patch to make this workaround *ONLY* in > netfilter_bridge.h (06e445f740c1)? DONE. > That way the fix can be propagated to nftables.git without having to > adjust cached headers on every update. I assume you prefer to keep headers untouched which are iptables-specific. But why not attempt to patch if_ether.h itself? Cheers, Phil ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nftables] include: fix for musl with iptables v1.8.11 2026-02-11 18:59 ` Phil Sutter @ 2026-02-11 19:09 ` Florian Westphal 2026-02-11 20:19 ` Phil Sutter 0 siblings, 1 reply; 13+ messages in thread From: Florian Westphal @ 2026-02-11 19:09 UTC (permalink / raw) To: Phil Sutter, Pablo Neira Ayuso, Alyssa Ross, netfilter-devel, Joshua Lant Phil Sutter <phil@nwl.cc> wrote: > > Phil, would you send a formal patch to make this workaround *ONLY* in > > netfilter_bridge.h (06e445f740c1)? > > DONE. Thanks. > > That way the fix can be propagated to nftables.git without having to > > adjust cached headers on every update. > > I assume you prefer to keep headers untouched which are > iptables-specific. But why not attempt to patch if_ether.h itself? Because this is a quagmire and I prefer to only break netfiler_bridge.h users (which should be few) rather than everyone using if_ether.h. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nftables] include: fix for musl with iptables v1.8.11 2026-02-11 19:09 ` Florian Westphal @ 2026-02-11 20:19 ` Phil Sutter 0 siblings, 0 replies; 13+ messages in thread From: Phil Sutter @ 2026-02-11 20:19 UTC (permalink / raw) To: Florian Westphal Cc: Pablo Neira Ayuso, Alyssa Ross, netfilter-devel, Joshua Lant On Wed, Feb 11, 2026 at 08:09:30PM +0100, Florian Westphal wrote: > Phil Sutter <phil@nwl.cc> wrote: > > > Phil, would you send a formal patch to make this workaround *ONLY* in > > > netfilter_bridge.h (06e445f740c1)? > > > > DONE. > > Thanks. > > > > That way the fix can be propagated to nftables.git without having to > > > adjust cached headers on every update. > > > > I assume you prefer to keep headers untouched which are > > iptables-specific. But why not attempt to patch if_ether.h itself? > > Because this is a quagmire and I prefer to only break netfiler_bridge.h > users (which should be few) rather than everyone using if_ether.h. Fine with me! The resulting flame^Wdiscussion from such a patch would have been entertaining though, maybe even productive in a sense of "either tell musl to go fix themselves or finish what has been started by introducing __UAPI_DEF_ETHHDR." :) Cheers, Phil ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2026-02-11 20:19 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-12-19 23:10 [PATCH nftables] include: fix for musl with iptables v1.8.11 Alyssa Ross 2024-12-20 11:50 ` Phil Sutter 2024-12-20 12:07 ` Alyssa Ross 2024-12-20 12:33 ` Phil Sutter 2024-12-21 15:34 ` Alyssa Ross 2025-01-08 23:34 ` Pablo Neira Ayuso 2025-01-08 23:49 ` Phil Sutter 2025-01-09 0:03 ` Pablo Neira Ayuso 2025-01-09 10:02 ` Phil Sutter 2026-02-11 13:49 ` Florian Westphal 2026-02-11 18:59 ` Phil Sutter 2026-02-11 19:09 ` Florian Westphal 2026-02-11 20:19 ` Phil Sutter
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.