From edda10f2ae3dc83f8d01931ef21172d5fff6bf33 Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Tue, 9 Apr 2024 12:44:46 +0200 Subject: [PATCH] tree-wide: make sure net/if.h is included before any linux/ header MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The linux/ headers include linux/libc-compat.h that makes sure the linux/ headers won't redeclare symbols already declared by net/if.h, but glibc's net/if.h doesn't do that, so if the include order is reversed we'll end up with a bunch of errors about redeclared stuff: [3/519] Compiling C object test-network-tables.p/src_network_test-network-tables.c.o FAILED: test-network-tables.p/src_network_test-network-tables.c.o cc -Itest-network-tables.p -I. -I.. -Isrc/basic -I../src/basic -Isrc/fundamental -I../src/fundamental -Isrc/systemd -I../src/systemd -I../src/libsystemd/sd-bus -I../src/libsystemd/sd-device -I../src/libsystemd/sd-event -I../src/libsystemd/sd-hwdb -I../src/libsystemd/sd-id128 -I../src/libsystemd/sd-journal -I../src/libsystemd/sd-netlink -I../src/libsystemd/sd-network -I../src/libsystemd/sd-resolve -Isrc/shared -I../src/shared -Isrc/libsystemd-network -I../src/libsystemd-network -Isrc/network -I../src/network -I../src/network/netdev -I../src/network/tc -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=gnu11 -O0 -g -Wno-missing-field-initializers -Wno-unused-parameter -Wno-nonnull-compare -Warray-bounds -Warray-bounds=2 -Wdate-time -Wendif-labels -Werror=format=2 -Werror=format-signedness -Werror=implicit-function-declaration -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Werror=missing-declarations -Werror=missing-prototypes -Werror=overflow -Werror=override-init -Werror=return-type -Werror=shift-count-overflow -Werror=shift-overflow=2 -Werror=strict-flex-arrays -Werror=undef -Wfloat-equal -Wimplicit-fallthrough=5 -Winit-self -Wlogical-op -Wmissing-include-dirs -Wmissing-noreturn -Wnested-externs -Wold-style-definition -Wpointer-arith -Wredundant-decls -Wshadow -Wstrict-aliasing=2 -Wstrict-prototypes -Wsuggest-attribute=noreturn -Wunused-function -Wwrite-strings -Wzero-length-bounds -fdiagnostics-show-option -fno-common -fstack-protector -fstack-protector-strong -fstrict-flex-arrays --param=ssp-buffer-size=4 -Wno-unused-result -Werror=shadow -fno-strict-aliasing -fstrict-flex-arrays=1 -fvisibility=hidden -fno-omit-frame-pointer -include config.h -pthread -DTEST_CODE=1 -MD -MQ test-network-tables.p/src_network_test-network-tables.c.o -MF test-network-tables.p/src_network_test-network-tables.c.o.d -o test-network-tables.p/src_network_test-network-tables.c.o -c ../src/network/test-network-tables.c In file included from ../src/basic/linux/if_bonding.h:47, from ../src/network/netdev/bond.h:5, from ../src/network/test-network-tables.c:3: ../src/basic/linux/if.h:111:41: error: redeclaration of enumerator ‘IFF_UP’ 111 | #define IFF_UP IFF_UP | ^~~~~~ ../src/basic/linux/if.h:84:9: note: previous definition of ‘IFF_UP’ with type ‘enum net_device_flags’ 84 | IFF_UP = 1<<0, /* sysfs */ | ^~~~~~ ../src/basic/linux/if.h:112:41: error: redeclaration of enumerator ‘IFF_BROADCAST’ 112 | #define IFF_BROADCAST IFF_BROADCAST | ^~~~~~~~~~~~~ ... This also drops remaining workarounds from the last time this issue was brought up (6f270e6bd8) since they shouldn't be needed anymore if the order of the includes is the "correct" one. I also added a comment to each affected include when this is inevitably encountered again in the future. Resolves: #32160 --- src/basic/socket-util.c | 3 ++- src/core/bpf-firewall.c | 3 ++- src/libsystemd-network/dhcp-network.c | 11 ++++++----- src/libsystemd-network/icmp6-util.c | 5 +++-- src/libsystemd-network/test-acd.c | 5 +++-- src/libsystemd-network/test-ipv4ll-manual.c | 5 +++-- src/libsystemd/sd-netlink/test-netlink.c | 1 + src/libudev/libudev-device.c | 3 ++- src/network/netdev/bridge.c | 3 ++- src/network/netdev/fou-tunnel.c | 3 ++- src/network/netdev/geneve.c | 3 ++- src/network/netdev/ipvlan.c | 1 + src/network/netdev/macvlan.c | 1 + src/network/netdev/netdev.c | 1 + src/network/netdev/tuntap.c | 5 +++-- src/network/netdev/veth.c | 5 +++-- src/network/netdev/vlan.c | 3 ++- src/network/netdev/vrf.c | 3 ++- src/network/netdev/vxlan.c | 1 + src/network/netdev/wireguard.c | 5 +++-- src/network/networkctl.c | 3 ++- src/network/networkd-address-label.c | 1 + src/network/networkd-bridge-mdb.c | 1 + src/network/networkd-can.c | 1 + src/network/networkd-link.c | 1 + src/network/networkd-network.c | 1 + src/network/networkd-nexthop.c | 1 + src/network/networkd-routing-policy-rule.c | 1 + src/network/test-network-tables.c | 4 ++++ src/nspawn/nspawn-network.c | 1 + src/shared/firewall-util-iptables.c | 11 ++--------- src/shared/socket-netlink.c | 3 ++- src/test/test-arphrd-util.c | 2 ++ src/test/test-local-addresses.c | 2 ++ src/test/test-netlink-manual.c | 2 ++ src/udev/udev-builtin-net_id.c | 3 ++- 36 files changed, 71 insertions(+), 37 deletions(-) diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c index 537f1e8c64..e66bc426a4 100644 --- a/src/basic/socket-util.c +++ b/src/basic/socket-util.c @@ -1,9 +1,10 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ +#include #include #include #include -#include #include #include #include diff --git a/src/core/bpf-firewall.c b/src/core/bpf-firewall.c index 3bac231c97..185ed7d070 100644 --- a/src/core/bpf-firewall.c +++ b/src/core/bpf-firewall.c @@ -1,12 +1,13 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ +#include #include #include #include #include #include #include -#include #include #include #include diff --git a/src/libsystemd-network/dhcp-network.c b/src/libsystemd-network/dhcp-network.c index 1f4ad095d5..2e73983d6b 100644 --- a/src/libsystemd-network/dhcp-network.c +++ b/src/libsystemd-network/dhcp-network.c @@ -3,15 +3,16 @@ Copyright © 2013 Intel Corporation. All rights reserved. ***/ -#include -#include +/* Make sure the net/if.h header is included before any linux/ one */ #include -#include -#include -#include +#include #include #include #include +#include +#include +#include +#include #include "dhcp-network.h" #include "dhcp-protocol.h" diff --git a/src/libsystemd-network/icmp6-util.c b/src/libsystemd-network/icmp6-util.c index 070e94add1..d4b7ae5855 100644 --- a/src/libsystemd-network/icmp6-util.c +++ b/src/libsystemd-network/icmp6-util.c @@ -3,7 +3,10 @@ Copyright © 2014 Intel Corporation. All rights reserved. ***/ +/* Make sure the net/if.h header is included before any linux/ one */ +#include #include +#include #include #include #include @@ -11,8 +14,6 @@ #include #include #include -#include -#include #include "fd-util.h" #include "icmp6-util.h" diff --git a/src/libsystemd-network/test-acd.c b/src/libsystemd-network/test-acd.c index 4b5ad70cf1..6ed7260a72 100644 --- a/src/libsystemd-network/test-acd.c +++ b/src/libsystemd-network/test-acd.c @@ -1,11 +1,12 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ +#include #include +#include #include #include -#include -#include #include "sd-event.h" #include "sd-ipv4acd.h" diff --git a/src/libsystemd-network/test-ipv4ll-manual.c b/src/libsystemd-network/test-ipv4ll-manual.c index 5dc6b10347..b4e6d2428f 100644 --- a/src/libsystemd-network/test-ipv4ll-manual.c +++ b/src/libsystemd-network/test-ipv4ll-manual.c @@ -1,10 +1,11 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include +/* Make sure the net/if.h header is included before any linux/ one */ #include +#include +#include #include #include -#include #include "sd-event.h" #include "sd-ipv4ll.h" diff --git a/src/libsystemd/sd-netlink/test-netlink.c b/src/libsystemd/sd-netlink/test-netlink.c index fb3150f131..cf19c48213 100644 --- a/src/libsystemd/sd-netlink/test-netlink.c +++ b/src/libsystemd/sd-netlink/test-netlink.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ #include #include #include diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c index 7b9f54c976..50e2459a06 100644 --- a/src/libudev/libudev-device.c +++ b/src/libudev/libudev-device.c @@ -1,11 +1,12 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ +#include #include #include #include #include #include -#include #include #include #include diff --git a/src/network/netdev/bridge.c b/src/network/netdev/bridge.c index 3e394edadf..d426c0c501 100644 --- a/src/network/netdev/bridge.c +++ b/src/network/netdev/bridge.c @@ -1,9 +1,10 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ #include -#include #include #include +#include #include "bridge.h" #include "netlink-util.h" diff --git a/src/network/netdev/fou-tunnel.c b/src/network/netdev/fou-tunnel.c index 3bf41a8bf2..bddee5e98c 100644 --- a/src/network/netdev/fou-tunnel.c +++ b/src/network/netdev/fou-tunnel.c @@ -1,7 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include +/* Make sure the net/if.h header is included before any linux/ one */ #include +#include #include #include diff --git a/src/network/netdev/geneve.c b/src/network/netdev/geneve.c index bc655ec7ff..22c2b00e1b 100644 --- a/src/network/netdev/geneve.c +++ b/src/network/netdev/geneve.c @@ -1,8 +1,9 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ #include -#include #include +#include #include "alloc-util.h" #include "conf-parser.h" diff --git a/src/network/netdev/ipvlan.c b/src/network/netdev/ipvlan.c index 05d5d010f6..51ae64341d 100644 --- a/src/network/netdev/ipvlan.c +++ b/src/network/netdev/ipvlan.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ #include #include #include diff --git a/src/network/netdev/macvlan.c b/src/network/netdev/macvlan.c index 85011e11de..21933d3970 100644 --- a/src/network/netdev/macvlan.c +++ b/src/network/netdev/macvlan.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ #include #include #include diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c index 894cec44cb..229520dfb2 100644 --- a/src/network/netdev/netdev.c +++ b/src/network/netdev/netdev.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ #include #include #include diff --git a/src/network/netdev/tuntap.c b/src/network/netdev/tuntap.c index 97b4b928e7..f5be31ed94 100644 --- a/src/network/netdev/tuntap.c +++ b/src/network/netdev/tuntap.c @@ -1,13 +1,14 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ +#include #include #include -#include +#include #include #include #include #include -#include #include "alloc-util.h" #include "daemon-util.h" diff --git a/src/network/netdev/veth.c b/src/network/netdev/veth.c index e0f5b4ebb1..78555286d1 100644 --- a/src/network/netdev/veth.c +++ b/src/network/netdev/veth.c @@ -1,10 +1,11 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include +/* Make sure the net/if.h header is included before any linux/ one */ #include -#include +#include #include #include +#include #include "netlink-util.h" #include "veth.h" diff --git a/src/network/netdev/vlan.c b/src/network/netdev/vlan.c index adbba14a6e..60e49a5b8a 100644 --- a/src/network/netdev/vlan.c +++ b/src/network/netdev/vlan.c @@ -1,7 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include +/* Make sure the net/if.h header is included before any linux/ one */ #include +#include #include #include diff --git a/src/network/netdev/vrf.c b/src/network/netdev/vrf.c index b75ec2bcc6..24079a7203 100644 --- a/src/network/netdev/vrf.c +++ b/src/network/netdev/vrf.c @@ -1,8 +1,9 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ #include -#include #include +#include #include "vrf.h" diff --git a/src/network/netdev/vxlan.c b/src/network/netdev/vxlan.c index f333abc6c0..37f65967a6 100644 --- a/src/network/netdev/vxlan.c +++ b/src/network/netdev/vxlan.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ #include #include #include diff --git a/src/network/netdev/wireguard.c b/src/network/netdev/wireguard.c index 95c9c8c330..fed1be8d11 100644 --- a/src/network/netdev/wireguard.c +++ b/src/network/netdev/wireguard.c @@ -3,11 +3,12 @@ Copyright © 2015-2017 Jason A. Donenfeld . All Rights Reserved. ***/ -#include +/* Make sure the net/if.h header is included before any linux/ one */ #include -#include #include #include +#include +#include #include "sd-resolve.h" diff --git a/src/network/networkctl.c b/src/network/networkctl.c index fab9ff465b..56fa373b1d 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -1,9 +1,10 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ +#include #include #include #include -#include #include #include #include diff --git a/src/network/networkd-address-label.c b/src/network/networkd-address-label.c index 745b959f77..e91ce3d2fa 100644 --- a/src/network/networkd-address-label.c +++ b/src/network/networkd-address-label.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ #include #include diff --git a/src/network/networkd-bridge-mdb.c b/src/network/networkd-bridge-mdb.c index bd1a9745dc..7ff4a18846 100644 --- a/src/network/networkd-bridge-mdb.c +++ b/src/network/networkd-bridge-mdb.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ #include #include diff --git a/src/network/networkd-can.c b/src/network/networkd-can.c index b8a1871a35..a5b003ad22 100644 --- a/src/network/networkd-can.c +++ b/src/network/networkd-can.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ #include #include diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 192e9df979..bac44a3858 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ #include #include #include diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 880856f596..d42ded6160 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ #include #include #include diff --git a/src/network/networkd-nexthop.c b/src/network/networkd-nexthop.c index b07feede2b..1b44ef320c 100644 --- a/src/network/networkd-nexthop.c +++ b/src/network/networkd-nexthop.c @@ -2,6 +2,7 @@ * Copyright © 2019 VMware, Inc. */ +/* Make sure the net/if.h header is included before any linux/ one */ #include #include diff --git a/src/network/networkd-routing-policy-rule.c b/src/network/networkd-routing-policy-rule.c index bb757eed71..886b4da8e0 100644 --- a/src/network/networkd-routing-policy-rule.c +++ b/src/network/networkd-routing-policy-rule.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ #include #include diff --git a/src/network/test-network-tables.c b/src/network/test-network-tables.c index 564ca09609..96f5b4d705 100644 --- a/src/network/test-network-tables.c +++ b/src/network/test-network-tables.c @@ -1,5 +1,9 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ +#include +#include + #include "bond.h" #include "dhcp6-internal.h" #include "dhcp6-protocol.h" diff --git a/src/nspawn/nspawn-network.c b/src/nspawn/nspawn-network.c index e89f087aea..1e804a2be3 100644 --- a/src/nspawn/nspawn-network.c +++ b/src/nspawn/nspawn-network.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ #include #include #include diff --git a/src/shared/firewall-util-iptables.c b/src/shared/firewall-util-iptables.c index b70b74074b..044d2d0744 100644 --- a/src/shared/firewall-util-iptables.c +++ b/src/shared/firewall-util-iptables.c @@ -1,19 +1,12 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* Temporary work-around for broken glibc vs. linux kernel header definitions - * This is already fixed upstream, remove this when distributions have updated. - */ -#define _NET_IF_H 1 - +/* Make sure the net/if.h header is included before any linux/ one */ +#include #include #include #include #include #include -#include -#ifndef IFNAMSIZ -#define IFNAMSIZ 16 -#endif #include #include #include diff --git a/src/shared/socket-netlink.c b/src/shared/socket-netlink.c index 6865b045b5..a126d5d73b 100644 --- a/src/shared/socket-netlink.c +++ b/src/shared/socket-netlink.c @@ -1,9 +1,10 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ +#include #include #include #include -#include #include #include "alloc-util.h" diff --git a/src/test/test-arphrd-util.c b/src/test/test-arphrd-util.c index d81feff015..15b7997750 100644 --- a/src/test/test-arphrd-util.c +++ b/src/test/test-arphrd-util.c @@ -1,5 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ +#include #include #include "arphrd-util.h" diff --git a/src/test/test-local-addresses.c b/src/test/test-local-addresses.c index e3d6c08d14..f418f3712d 100644 --- a/src/test/test-local-addresses.c +++ b/src/test/test-local-addresses.c @@ -1,5 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ +#include #include #include diff --git a/src/test/test-netlink-manual.c b/src/test/test-netlink-manual.c index 73943bf428..f03fcffc62 100644 --- a/src/test/test-netlink-manual.c +++ b/src/test/test-netlink-manual.c @@ -1,5 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* Make sure the net/if.h header is included before any linux/ one */ +#include #include #include #include diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c index 0d87a35288..ac4541edd7 100644 --- a/src/udev/udev-builtin-net_id.c +++ b/src/udev/udev-builtin-net_id.c @@ -12,9 +12,10 @@ * When the code here is changed, man/systemd.net-naming-scheme.xml must be updated too. */ +/* Make sure the net/if.h header is included before any linux/ one */ +#include #include #include -#include #include #include #include