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=utf8 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 | 9 +++++---- 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, 70 insertions(+), 36 deletions(-) diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c index 537f1e8c64c..e66bc426a4d 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 3bac231c975..185ed7d0708 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 1f4ad095d5d..2e73983d6bc 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. ***/ +/* 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 #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 070e94add1b..d4b7ae58558 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 4b5ad70cf15..6ed7260a72b 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 5dc6b103476..b4e6d2428fe 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 fb3150f1310..cf19c482139 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 7b9f54c976b..50e2459a063 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 3e394edadfd..d426c0c5019 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 3bf41a8bf29..bddee5e98cd 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 bc655ec7ffd..22c2b00e1b7 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 05d5d010f65..51ae64341db 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 85011e11de4..21933d3970a 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 894cec44cbb..229520dfb2b 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 97b4b928e76..f5be31ed943 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 e0f5b4ebb1a..78555286d1a 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 adbba14a6e8..60e49a5b8a9 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 b75ec2bcc68..24079a7203c 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 f333abc6c04..37f65967a6b 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 95c9c8c3300..fed1be8d110 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 fab9ff465ba..56fa373b1d2 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 745b959f774..e91ce3d2fa4 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 bd1a9745dce..7ff4a188467 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 b8a1871a350..a5b003ad228 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 192e9df979b..bac44a38581 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 880856f596d..d42ded61608 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 b07feede2ba..1b44ef320c9 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 bb757eed71f..886b4da8e0a 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 564ca096099..96f5b4d705a 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 e89f087aea6..1e804a2be3c 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 b70b74074bf..044d2d07447 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 6865b045b5e..a126d5d73b1 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 d81feff0150..15b79977504 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 e3d6c08d145..f418f3712d1 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 73943bf428f..f03fcffc624 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 0d87a35288a..ac4541edd71 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 -- 2.39.2