Re: [PATCH iproute2] Add missing headers to the project
From: Stephen Hemminger <stephen@networkplumber.org>
Date: 2021-11-20 17:26:43
Subsystem:
library code, the rest · Maintainers:
Andrew Morton, Linus Torvalds
On Sat, 20 Nov 2021 17:00:45 +0300 Maxim Petrov [off-list ref] wrote:
The project's headers are not self-contained, as they use some types without explicitly including the corresponding headers with definitions. That makes the overall headers structure fragile: reordering/updating the headers may break the compilation. IDEs also suffer and generate dozens of errors when jumping to some random header file, distracting programmers from more serious code issues. Some building issue caused by missing headers has arised just recently and it required some local cleanup in a31e7b79 (mptcp: cleanup include section). In this patch I tried to improve the situation for the whole project by adding missing includes for virtually all the project headers, except uapi ones. Signed-off-by: Maxim Petrov <redacted>
Would be better to do this with an existing tool like IncludeWhatYouUse Is this what you did? From 343062efbb3895f9afbff015d49df497b180f3d9 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger <stephen@networkplumber.org> Date: Sat, 20 Nov 2021 09:21:22 -0800 Subject: [PATCH] lib: update headers using iwyu This is a semi-automated patch generated by using the iwyu tool: https://github.com/include-what-you-use/include-what-you-use The result was manually corrected to remove unnecessary references to <asm/int-ll64.h> --- lib/ax25_ntop.c | 1 + lib/bpf_glue.c | 3 ++- lib/bpf_legacy.c | 21 +++++++++++++++------ lib/cg_map.c | 7 ++++--- lib/color.c | 3 ++- lib/inet_proto.c | 5 +---- lib/json_print.c | 12 ++++++++++-- lib/json_print_math.c | 2 +- lib/json_writer.c | 6 +++--- lib/libgenl.c | 7 ++++++- lib/libnetlink.c | 15 +++++++++++---- lib/ll_addr.c | 9 --------- lib/ll_map.c | 10 ++++++---- lib/ll_proto.c | 13 ++----------- lib/ll_types.c | 12 ------------ lib/mnl_utils.c | 9 ++++++++- lib/mpls_ntop.c | 4 +++- lib/mpls_pton.c | 4 +++- lib/names.c | 5 ++--- lib/netrom_ntop.c | 1 + lib/rose_ntop.c | 12 ------------ lib/rt_names.c | 11 +++-------- lib/utils_math.c | 2 +- 23 files changed, 85 insertions(+), 89 deletions(-)
diff --git a/lib/ax25_ntop.c b/lib/ax25_ntop.c
index cfd0e04b06f9..c76cf781d95c 100644
--- a/lib/ax25_ntop.c
+++ b/lib/ax25_ntop.c@@ -3,6 +3,7 @@ #include <errno.h> #include <sys/socket.h> #include <netax25/ax25.h> +#include <stddef.h> #include "utils.h"
diff --git a/lib/bpf_glue.c b/lib/bpf_glue.c
index 70d001840f7b..b093031a0f9c 100644
--- a/lib/bpf_glue.c
+++ b/lib/bpf_glue.c@@ -4,9 +4,10 @@ * Authors: Hangbin Liu <haliu@redhat.com> * */ -#include <limits.h> +#include <stddef.h> #include "bpf_util.h" +#include "linux/bpf.h" #ifdef HAVE_LIBBPF #include <bpf/bpf.h> #endif
diff --git a/lib/bpf_legacy.c b/lib/bpf_legacy.c
index 6e3891c9f1f1..88ea5ade640f 100644
--- a/lib/bpf_legacy.c
+++ b/lib/bpf_legacy.c@@ -22,29 +22,38 @@ #include <stdarg.h> #include <limits.h> #include <assert.h> +#include <bsd/string.h> +#include <elf.h> +#include <netinet/in.h> +#include <sys/socket.h> +#include <sys/statfs.h> +#include <syscall.h> #ifdef HAVE_ELF #include <libelf.h> #include <gelf.h> #endif -#include <sys/types.h> #include <sys/stat.h> #include <sys/un.h> -#include <sys/vfs.h> #include <sys/mount.h> -#include <sys/syscall.h> #include <sys/sendfile.h> #include <sys/resource.h> -#include <arpa/inet.h> - #include "utils.h" #include "json_print.h" - #include "bpf_util.h" #include "bpf_elf.h" #include "bpf_scm.h" +#include "linux/bpf.h" +#include "linux/bpf_common.h" +#include "linux/btf.h" +#include "linux/elf-em.h" +#include "linux/filter.h" +#include "linux/if_alg.h" +#include "linux/limits.h" +#include "linux/magic.h" +#include "linux/rtnetlink.h" struct bpf_prog_meta { const char *type;
diff --git a/lib/cg_map.c b/lib/cg_map.c
index 39f244dbc5bd..80d605d98663 100644
--- a/lib/cg_map.c
+++ b/lib/cg_map.c@@ -9,18 +9,19 @@ * Authors: Dmitry Yakunin <zeil@yandex-team.ru> */ +#include "cg_map.h" + #include <stdlib.h> #include <string.h> #include <stdio.h> #include <stdbool.h> -#include <linux/types.h> -#include <linux/limits.h> #include <ftw.h> -#include "cg_map.h" #include "list.h" #include "utils.h" +struct stat; + struct cg_cache { struct hlist_node id_hash; __u64 id;
diff --git a/lib/color.c b/lib/color.c
index 59976847295c..930cd5a9a59f 100644
--- a/lib/color.c
+++ b/lib/color.c@@ -5,10 +5,11 @@ #include <string.h> #include <unistd.h> #include <sys/socket.h> -#include <sys/types.h> +#include <stdbool.h> #include <linux/if.h> #include "color.h" + #include "utils.h" static void set_color_palette(void);
diff --git a/lib/inet_proto.c b/lib/inet_proto.c
index 41e2e8b88d82..fe1333ce80dc 100644
--- a/lib/inet_proto.c
+++ b/lib/inet_proto.c@@ -12,12 +12,9 @@ #include <stdio.h> #include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> -#include <sys/socket.h> -#include <netinet/in.h> #include <netdb.h> #include <string.h> +#include <bsd/string.h> #include "rt_names.h" #include "utils.h"
diff --git a/lib/json_print.c b/lib/json_print.c
index e3a88375fe7c..51c443e0123d 100644
--- a/lib/json_print.c
+++ b/lib/json_print.c@@ -9,11 +9,19 @@ * Authors: Julien Fortin, <julien@cumulusnetworks.com> */ -#include <stdarg.h> +#include "json_print.h" + #include <stdio.h> +#include <stdbool.h> +#include <stdint.h> +#include <stdlib.h> +#include <sys/time.h> #include "utils.h" -#include "json_print.h" +#include "color.h" +#include "json_writer.h" + +struct timeval; static json_writer_t *_jw;
diff --git a/lib/json_print_math.c b/lib/json_print_math.c
index f4d504995924..837b8dcd4a6f 100644
--- a/lib/json_print_math.c
+++ b/lib/json_print_math.c@@ -1,11 +1,11 @@ // SPDX-License-Identifier: GPL-2.0+ -#include <stdarg.h> #include <stdio.h> #include <math.h> #include "utils.h" #include "json_print.h" +#include "color.h" char *sprint_size(__u32 sz, char *buf) {
diff --git a/lib/json_writer.c b/lib/json_writer.c
index 88c5eb888225..e2d410beb2dc 100644
--- a/lib/json_writer.c
+++ b/lib/json_writer.c@@ -8,15 +8,15 @@ * Authors: Stephen Hemminger <stephen@networkplumber.org> */ +#include "json_writer.h" + #include <stdio.h> #include <stdbool.h> #include <stdarg.h> #include <assert.h> -#include <malloc.h> #include <inttypes.h> #include <stdint.h> - -#include "json_writer.h" +#include <stdlib.h> struct json_writer { FILE *out; /* output file */
diff --git a/lib/libgenl.c b/lib/libgenl.c
index fca07f9fe768..288ccefcc449 100644
--- a/lib/libgenl.c
+++ b/lib/libgenl.c@@ -6,9 +6,14 @@ #include <errno.h> #include <stdio.h> #include <stdlib.h> -#include <unistd.h> +#include <string.h> #include <linux/genetlink.h> + +#include "libnetlink.h" +#include "linux/netlink.h" + +struct rtattr; #include "libgenl.h" static int genl_parse_getfamily(struct nlmsghdr *nlh)
diff --git a/lib/libnetlink.c b/lib/libnetlink.c
index 7e977a6762f8..22977e005303 100644
--- a/lib/libnetlink.c
+++ b/lib/libnetlink.c@@ -14,21 +14,28 @@ #include <stdlib.h> #include <stdbool.h> #include <unistd.h> -#include <fcntl.h> -#include <net/if_arp.h> #include <sys/socket.h> -#include <netinet/in.h> #include <string.h> #include <errno.h> #include <time.h> -#include <sys/uio.h> +#include <bits/types/struct_iovec.h> +#include <bsd/sys/cdefs.h> +#include <stdint.h> +#include <sys/param.h> #include <linux/fib_rules.h> #include <linux/if_addrlabel.h> #include <linux/if_bridge.h> #include <linux/nexthop.h> #include "libnetlink.h" + #include "utils.h" +#include "linux/if_addr.h" +#include "linux/if_link.h" +#include "linux/neighbour.h" +#include "linux/netconf.h" +#include "linux/netlink.h" +#include "linux/rtnetlink.h" #ifndef __aligned #define __aligned(x) __attribute__((aligned(x)))
diff --git a/lib/ll_addr.c b/lib/ll_addr.c
index d6fd736b1e3a..9a5c45faf5dc 100644
--- a/lib/ll_addr.c
+++ b/lib/ll_addr.c@@ -10,19 +10,10 @@ */ #include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> -#include <sys/ioctl.h> #include <sys/socket.h> -#include <netinet/in.h> #include <arpa/inet.h> #include <string.h> - -#include <linux/netdevice.h> #include <linux/if_arp.h> -#include <linux/sockios.h> - #include "rt_names.h" #include "utils.h"
diff --git a/lib/ll_map.c b/lib/ll_map.c
index 70ea3d499c8f..1ec94bdcd495 100644
--- a/lib/ll_map.c
+++ b/lib/ll_map.c@@ -10,19 +10,21 @@ * */ +#include "ll_map.h" + #include <stdio.h> #include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> #include <sys/socket.h> -#include <netinet/in.h> #include <string.h> #include <net/if.h> +#include <stdbool.h> #include "libnetlink.h" -#include "ll_map.h" #include "list.h" #include "utils.h" +#include "linux/if_link.h" +#include "linux/netlink.h" +#include "linux/rtnetlink.h" struct ll_cache { struct hlist_node idx_hash;
diff --git a/lib/ll_proto.c b/lib/ll_proto.c
index 78179311c066..aa92fa939f9d 100644
--- a/lib/ll_proto.c
+++ b/lib/ll_proto.c@@ -10,21 +10,12 @@ */ #include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> -#include <sys/ioctl.h> -#include <sys/socket.h> #include <netinet/in.h> -#include <arpa/inet.h> -#include <string.h> - -#include <linux/netdevice.h> -#include <linux/if_arp.h> -#include <linux/sockios.h> +#include <strings.h> #include "utils.h" #include "rt_names.h" +#include "linux/if_ether.h" #define __PF(f,n) { ETH_P_##f, #n },
diff --git a/lib/ll_types.c b/lib/ll_types.c
index 49da15df911d..484956f91f7e 100644
--- a/lib/ll_types.c
+++ b/lib/ll_types.c@@ -10,19 +10,7 @@ */ #include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> -#include <sys/ioctl.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <string.h> - -#include <linux/netdevice.h> #include <linux/if_arp.h> -#include <linux/sockios.h> - #include "rt_names.h" #include "utils.h"
diff --git a/lib/mnl_utils.c b/lib/mnl_utils.c
index d5abff58d816..2ee1045731c9 100644
--- a/lib/mnl_utils.c
+++ b/lib/mnl_utils.c@@ -7,11 +7,18 @@ #include <string.h> #include <time.h> #include <libmnl/libmnl.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> #include <linux/genetlink.h> -#include "libnetlink.h" #include "mnl_utils.h" + +#include "libnetlink.h" #include "utils.h" +#include "linux/netlink.h" + +struct mnl_socket; struct mnl_socket *mnlu_socket_open(int bus) {
diff --git a/lib/mpls_ntop.c b/lib/mpls_ntop.c
index f8d89f421ecb..f11358956946 100644
--- a/lib/mpls_ntop.c
+++ b/lib/mpls_ntop.c@@ -2,8 +2,10 @@ #include <errno.h> #include <string.h> -#include <sys/types.h> #include <netinet/in.h> +#include <stdint.h> +#include <stdio.h> +#include <sys/socket.h> #include <linux/mpls.h> #include "utils.h"
diff --git a/lib/mpls_pton.c b/lib/mpls_pton.c
index 065374eb11bf..715f49b96dce 100644
--- a/lib/mpls_pton.c
+++ b/lib/mpls_pton.c@@ -2,8 +2,10 @@ #include <errno.h> #include <string.h> -#include <sys/types.h> #include <netinet/in.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/socket.h> #include <linux/mpls.h> #include "utils.h"
diff --git a/lib/names.c b/lib/names.c
index b46ea7910946..3f086bb5eb0e 100644
--- a/lib/names.c
+++ b/lib/names.c@@ -8,14 +8,13 @@ * */ +#include "names.h" + #include <stdio.h> #include <string.h> #include <stdlib.h> #include <errno.h> -#include "names.h" -#include "utils.h" - #define MAX_ENTRIES 256 #define NAME_MAX_LEN 512
diff --git a/lib/netrom_ntop.c b/lib/netrom_ntop.c
index 3dd6cb0b3d23..e3e9a2dbb6f6 100644
--- a/lib/netrom_ntop.c
+++ b/lib/netrom_ntop.c@@ -2,6 +2,7 @@ #include <sys/socket.h> #include <errno.h> +#include <stddef.h> #include <linux/ax25.h> #include "utils.h"
diff --git a/lib/rose_ntop.c b/lib/rose_ntop.c
index c9ba712c515c..9676fa0844c0 100644
--- a/lib/rose_ntop.c
+++ b/lib/rose_ntop.c@@ -1,22 +1,10 @@ /* SPDX-License-Identifier: GPL-2.0+ */ #include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> -#include <sys/ioctl.h> #include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <string.h> #include <errno.h> - -#include <linux/netdevice.h> -#include <linux/if_arp.h> -#include <linux/sockios.h> #include <linux/rose.h> -#include "rt_names.h" #include "utils.h" static const char *rose_ntop1(const rose_address *src, char *dst,
diff --git a/lib/rt_names.c b/lib/rt_names.c
index b976471d7979..a4ae0c7b7e96 100644
--- a/lib/rt_names.c
+++ b/lib/rt_names.c@@ -11,19 +11,14 @@ #include <stdio.h> #include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> #include <string.h> -#include <sys/time.h> -#include <sys/socket.h> #include <dirent.h> -#include <limits.h> - -#include <asm/types.h> #include <linux/rtnetlink.h> +#include "linux/limits.h" +#include "linux/netlink.h" + #include "rt_names.h" -#include "utils.h" #define NAME_MAX_LEN 512
diff --git a/lib/utils_math.c b/lib/utils_math.c
index 9ef3dd6ed93b..1c3780119649 100644
--- a/lib/utils_math.c
+++ b/lib/utils_math.c@@ -4,7 +4,7 @@ #include <stdlib.h> #include <string.h> #include <math.h> -#include <asm/types.h> +#include <strings.h> #include "utils.h"
--
2.30.2