public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
From: Peter Foley <pefoley@google.com>
To: sbrivio@redhat.com
Cc: passt-dev@passt.top, Peter Foley <pefoley@google.com>
Subject: [PATCH v2] Add missing includes to headers
Date: Mon, 23 Feb 2026 13:11:19 -0500	[thread overview]
Message-ID: <20260223181119.179746-1-pefoley@google.com> (raw)
In-Reply-To: <CAAAKUPMQZetb9RYoxaUZGyp7dWm8pifmvEfyV3M4Q6+j9jw89g@mail.gmail.com>

Support build systems like bazel that check that headers are
self-contained.

Also update includes so that clang-include-cleaner succeeds.

Tested with:
clang-include-cleaner-19 --extra-arg=-D_GNU_SOURCE --extra-arg=-DPAGE_SIZE=4096 --extra-arg=-DVERSION=\"git\" --extra-arg=-DHAS_GETRANDOM *.h *.c

Signed-off-by: Peter Foley <pefoley@google.com>
---
 arp.h          |  2 ++
 checksum.h     |  3 +++
 flow.h         |  6 ++++++
 flow_table.h   |  1 +
 fwd.h          | 10 +++++++++-
 icmp.h         |  4 ++++
 icmp_flow.h    |  2 ++
 inany.h        |  6 ++++++
 iov.h          |  3 ++-
 ip.h           |  2 ++
 isolation.h    |  3 +++
 lineread.h     |  2 ++
 linux_dep.h    |  3 +++
 log.h          |  2 ++
 migrate.h      |  3 +++
 netlink.h      |  4 ++++
 packet.h       |  2 ++
 pasta.h        |  2 ++
 pcap.h         |  2 ++
 pif.h          |  6 ++++++
 repair.h       |  2 ++
 seccomp.sh     |  5 +++++
 siphash.h      |  3 +++
 tap.h          |  5 +++++
 tcp.h          |  8 ++++++++
 tcp_conn.h     |  4 ++++
 tcp_internal.h |  5 +++++
 tcp_splice.h   |  2 ++
 udp.h          |  5 +++++
 udp_flow.h     |  6 ++++++
 udp_internal.h |  3 +++
 udp_vu.h       |  2 ++
 util.c         |  1 +
 vu_common.h    |  6 ++++++
 34 files changed, 123 insertions(+), 2 deletions(-)

diff --git a/arp.h b/arp.h
index 4862e90..4b1f38b 100644
--- a/arp.h
+++ b/arp.h
@@ -6,6 +6,8 @@
 #ifndef ARP_H
 #define ARP_H
 
+#include <linux/if_ether.h>
+
 /**
  * struct arpmsg - 802.2 ARP IPv4 payload
  * @sha:	Sender hardware address
diff --git a/checksum.h b/checksum.h
index 683a09b..4e3b098 100644
--- a/checksum.h
+++ b/checksum.h
@@ -6,6 +6,9 @@
 #ifndef CHECKSUM_H
 #define CHECKSUM_H
 
+#include <stddef.h>
+#include <stdint.h>
+
 struct udphdr;
 struct icmphdr;
 struct icmp6hdr;
diff --git a/flow.h b/flow.h
index d636358..897c9ea 100644
--- a/flow.h
+++ b/flow.h
@@ -7,6 +7,12 @@
 #ifndef FLOW_H
 #define FLOW_H
 
+#include <stdint.h>
+#include <netinet/in.h>
+
+#include "inany.h"
+#include "util.h"
+
 #define FLOW_TIMER_INTERVAL		1000	/* ms */
 
 /**
diff --git a/flow_table.h b/flow_table.h
index 73de13b..8fb7b5c 100644
--- a/flow_table.h
+++ b/flow_table.h
@@ -7,6 +7,7 @@
 #ifndef FLOW_TABLE_H
 #define FLOW_TABLE_H
 
+#include "pif.h"
 #include "tcp_conn.h"
 #include "icmp_flow.h"
 #include "udp_flow.h"
diff --git a/fwd.h b/fwd.h
index 1607011..c0b30f3 100644
--- a/fwd.h
+++ b/fwd.h
@@ -7,7 +7,15 @@
 #ifndef FWD_H
 #define FWD_H
 
-union inany_addr;
+#include <assert.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+
+#include <netinet/in.h>
+
+#include "inany.h"
+
 struct flowside;
 
 /* Number of ports for both TCP and UDP */
diff --git a/icmp.h b/icmp.h
index 1a0e620..e8b928b 100644
--- a/icmp.h
+++ b/icmp.h
@@ -6,6 +6,10 @@
 #ifndef ICMP_H
 #define ICMP_H
 
+#include <stdint.h>
+
+#include <netinet/in.h>
+
 struct ctx;
 struct icmp_ping_flow;
 
diff --git a/icmp_flow.h b/icmp_flow.h
index fb93801..3af98be 100644
--- a/icmp_flow.h
+++ b/icmp_flow.h
@@ -7,6 +7,8 @@
 #ifndef ICMP_FLOW_H
 #define ICMP_FLOW_H
 
+#include "flow.h"
+
 /**
  * struct icmp_ping_flow - Descriptor for a flow of ping requests/replies
  * @f:		Generic flow information
diff --git a/inany.h b/inany.h
index b02c289..efbe2e2 100644
--- a/inany.h
+++ b/inany.h
@@ -9,6 +9,12 @@
 #ifndef INANY_H
 #define INANY_H
 
+#include <assert.h>
+#include <string.h>
+
+#include "ip.h"
+#include "siphash.h"
+
 struct siphash_state;
 
 /** union inany_addr - Represents either an IPv4 or IPv6 address
diff --git a/iov.h b/iov.h
index d2184bf..d1ab91a 100644
--- a/iov.h
+++ b/iov.h
@@ -15,8 +15,9 @@
 #ifndef IOVEC_H
 #define IOVEC_H
 
-#include <unistd.h>
+#include <stdbool.h>
 #include <string.h>
+#include <unistd.h>
 
 #define IOV_OF_LVALUE(lval) \
 	(struct iovec){ .iov_base = &(lval), .iov_len = sizeof(lval) }
diff --git a/ip.h b/ip.h
index a8043c2..3be2d4e 100644
--- a/ip.h
+++ b/ip.h
@@ -9,6 +9,8 @@
 #include <netinet/ip.h>
 #include <netinet/ip6.h>
 
+#include "util.h"
+
 #define IN4_IS_ADDR_UNSPECIFIED(a) \
 	(((struct in_addr *)(a))->s_addr == htonl_constant(INADDR_ANY))
 #define IN4_IS_ADDR_BROADCAST(a) \
diff --git a/isolation.h b/isolation.h
index 80bb68d..0576168 100644
--- a/isolation.h
+++ b/isolation.h
@@ -7,6 +7,9 @@
 #ifndef ISOLATION_H
 #define ISOLATION_H
 
+#include <stdbool.h>
+#include <unistd.h>
+
 void isolate_initial(int argc, char **argv);
 void isolate_user(uid_t uid, gid_t gid, bool use_userns, const char *userns,
 		  enum passt_modes mode);
diff --git a/lineread.h b/lineread.h
index 9203e28..ef6a7d4 100644
--- a/lineread.h
+++ b/lineread.h
@@ -6,6 +6,8 @@
 #ifndef LINEREAD_H
 #define LINEREAD_H
 
+#include <sys/types.h>
+
 #define LINEREAD_BUFFER_SIZE	8192
 
 /**
diff --git a/linux_dep.h b/linux_dep.h
index 89e590c..3f8184b 100644
--- a/linux_dep.h
+++ b/linux_dep.h
@@ -7,6 +7,9 @@
 #ifndef LINUX_DEP_H
 #define LINUX_DEP_H
 
+#include <stdint.h>
+#include <unistd.h>
+
 /* struct tcp_info_linux - Information from Linux TCP_INFO getsockopt()
  *
  * Largely derived from include/linux/tcp.h in the Linux kernel
diff --git a/log.h b/log.h
index b7b2067..6ceb686 100644
--- a/log.h
+++ b/log.h
@@ -6,7 +6,9 @@
 #ifndef LOG_H
 #define LOG_H
 
+#include <stdarg.h>
 #include <stdbool.h>
+#include <stddef.h>
 #include <syslog.h>
 
 /* This would make more sense in util.h, but because we use it in die(), that
diff --git a/migrate.h b/migrate.h
index 2c51cd9..844be47 100644
--- a/migrate.h
+++ b/migrate.h
@@ -6,6 +6,9 @@
 #ifndef MIGRATE_H
 #define MIGRATE_H
 
+#include <stdbool.h>
+#include <stdint.h>
+
 /**
  * struct migrate_header - Migration header from source
  * @magic:		0xB1BB1D1B0BB1D1B0, network order
diff --git a/netlink.h b/netlink.h
index 8f1e9b9..b22f485 100644
--- a/netlink.h
+++ b/netlink.h
@@ -6,6 +6,10 @@
 #ifndef NETLINK_H
 #define NETLINK_H
 
+#include <stdbool.h>
+
+#include <netinet/in.h>
+
 extern int nl_sock;
 extern int nl_sock_ns;
 
diff --git a/packet.h b/packet.h
index ba8d5c2..7b7fa71 100644
--- a/packet.h
+++ b/packet.h
@@ -7,6 +7,8 @@
 #define PACKET_H
 
 #include <stdbool.h>
+#include <sys/uio.h>
+
 #include "iov.h"
 #include "virtio.h"
 
diff --git a/pasta.h b/pasta.h
index 4b063d1..07e04b3 100644
--- a/pasta.h
+++ b/pasta.h
@@ -6,6 +6,8 @@
 #ifndef PASTA_H
 #define PASTA_H
 
+#include <unistd.h>
+
 extern int pasta_child_pid;
 
 void pasta_open_ns(struct ctx *c, const char *netns);
diff --git a/pcap.h b/pcap.h
index 2aeb53e..dface5d 100644
--- a/pcap.h
+++ b/pcap.h
@@ -6,6 +6,8 @@
 #ifndef PCAP_H
 #define PCAP_H
 
+#include <stddef.h>
+
 extern int pcap_fd;
 
 void pcap(const char *pkt, size_t l2len);
diff --git a/pif.h b/pif.h
index 0f7f667..f4bec1e 100644
--- a/pif.h
+++ b/pif.h
@@ -7,6 +7,12 @@
 #ifndef PIF_H
 #define PIF_H
 
+#include <stdbool.h>
+
+#include <netinet/in.h>
+
+#include "epoll_type.h"
+
 union inany_addr;
 union sockaddr_inany;
 
diff --git a/repair.h b/repair.h
index ab27e67..f39c237 100644
--- a/repair.h
+++ b/repair.h
@@ -6,6 +6,8 @@
 #ifndef REPAIR_H
 #define REPAIR_H
 
+#include <stdint.h>
+
 void repair_sock_init(const struct ctx *c);
 int repair_listen_handler(struct ctx *c, uint32_t events);
 void repair_handler(struct ctx *c, uint32_t events);
diff --git a/seccomp.sh b/seccomp.sh
index 60ebe84..5347586 100755
--- a/seccomp.sh
+++ b/seccomp.sh
@@ -34,6 +34,11 @@ AUDIT_ARCH="AUDIT_ARCH_$(echo ${ARCH} | tr '[a-z]' '[A-Z]'         \
 
 HEADER="/* This file was automatically generated by $(basename ${0}) */
 
+#include <stddef.h>
+#include <linux/audit.h>
+#include <linux/filter.h>
+#include <linux/seccomp.h>
+
 #ifndef AUDIT_ARCH_PPC64LE
 #define AUDIT_ARCH_PPC64LE (AUDIT_ARCH_PPC64 | __AUDIT_ARCH_LE)
 #endif"
diff --git a/siphash.h b/siphash.h
index e760236..bbddcac 100644
--- a/siphash.h
+++ b/siphash.h
@@ -44,6 +44,9 @@
 #ifndef SIPHASH_H
 #define SIPHASH_H
 
+#include <stddef.h>
+#include <stdint.h>
+
 /**
  * struct siphash_state - Internal state of siphash calculation
  */
diff --git a/tap.h b/tap.h
index cc780d1..07ca096 100644
--- a/tap.h
+++ b/tap.h
@@ -6,6 +6,11 @@
 #ifndef TAP_H
 #define TAP_H
 
+#include <stddef.h>
+#include <stdint.h>
+
+#include "passt.h"
+
 /** L2_MAX_LEN_PASTA - Maximum frame length for pasta mode (with L2 header)
  *
  * The kernel tuntap device imposes a maximum frame size of 65535 including
diff --git a/tcp.h b/tcp.h
index 24b9087..bfcadf9 100644
--- a/tcp.h
+++ b/tcp.h
@@ -6,6 +6,14 @@
 #ifndef TCP_H
 #define TCP_H
 
+#include <stdbool.h>
+#include <stdint.h>
+
+#include <netinet/in.h>
+#include <sys/socket.h>
+
+#include "fwd.h"
+
 #define TCP_TIMER_INTERVAL		1000	/* ms */
 
 struct ctx;
diff --git a/tcp_conn.h b/tcp_conn.h
index 21cea10..d4d0139 100644
--- a/tcp_conn.h
+++ b/tcp_conn.h
@@ -9,6 +9,10 @@
 #ifndef TCP_CONN_H
 #define TCP_CONN_H
 
+#include <stdint.h>
+
+#include "flow.h"
+
 /**
  * struct tcp_tap_conn - Descriptor for a TCP connection (not spliced)
  * @f:			Generic flow information
diff --git a/tcp_internal.h b/tcp_internal.h
index 518913b..591e58c 100644
--- a/tcp_internal.h
+++ b/tcp_internal.h
@@ -6,6 +6,11 @@
 #ifndef TCP_INTERNAL_H
 #define TCP_INTERNAL_H
 
+#include <stdint.h>
+#include <netinet/tcp.h>
+
+#include "util.h"
+
 #define MAX_WS				8
 #define MAX_WINDOW			(1 << (16 + (MAX_WS)))
 
diff --git a/tcp_splice.h b/tcp_splice.h
index a20f3e2..dbfd55d 100644
--- a/tcp_splice.h
+++ b/tcp_splice.h
@@ -6,6 +6,8 @@
 #ifndef TCP_SPLICE_H
 #define TCP_SPLICE_H
 
+#include <stdint.h>
+
 struct tcp_splice_conn;
 union sockaddr_inany;
 
diff --git a/udp.h b/udp.h
index da9c2df..0eca1ab 100644
--- a/udp.h
+++ b/udp.h
@@ -6,6 +6,11 @@
 #ifndef UDP_H
 #define UDP_H
 
+#include <stdint.h>
+#include <netinet/in.h>
+
+#include "fwd.h"
+
 void udp_listen_sock_handler(const struct ctx *c, union epoll_ref ref,
 			     uint32_t events, const struct timespec *now);
 void udp_sock_handler(const struct ctx *c, union epoll_ref ref,
diff --git a/udp_flow.h b/udp_flow.h
index 3ca49c5..62cc9b3 100644
--- a/udp_flow.h
+++ b/udp_flow.h
@@ -7,6 +7,12 @@
 #ifndef UDP_FLOW_H
 #define UDP_FLOW_H
 
+#include <stdbool.h>
+#include <stdint.h>
+#include <netinet/in.h>
+
+#include "flow.h"
+
 /**
  * struct udp_flow - Descriptor for a flow of UDP packets
  * @f:		Generic flow information
diff --git a/udp_internal.h b/udp_internal.h
index 0a8fe49..64e4577 100644
--- a/udp_internal.h
+++ b/udp_internal.h
@@ -6,6 +6,9 @@
 #ifndef UDP_INTERNAL_H
 #define UDP_INTERNAL_H
 
+#include <netinet/in.h>
+#include <netinet/udp.h>
+
 #include "tap.h" /* needed by udp_meta_t */
 
 /**
diff --git a/udp_vu.h b/udp_vu.h
index 576b0e7..1e38af3 100644
--- a/udp_vu.h
+++ b/udp_vu.h
@@ -6,6 +6,8 @@
 #ifndef UDP_VU_H
 #define UDP_VU_H
 
+#include "flow.h"
+
 void udp_vu_listen_sock_data(const struct ctx *c, union epoll_ref ref,
 			     const struct timespec *now);
 void udp_vu_sock_to_tap(const struct ctx *c, int s, int n, flow_sidx_t tosidx);
diff --git a/util.c b/util.c
index a48f727..db27431 100644
--- a/util.c
+++ b/util.c
@@ -25,6 +25,7 @@
 #include <errno.h>
 #include <stdbool.h>
 #include <linux/errqueue.h>
+#include <linux/in6.h>
 #include <getopt.h>
 
 #include "linux_dep.h"
diff --git a/vu_common.h b/vu_common.h
index 052aff7..76eee87 100644
--- a/vu_common.h
+++ b/vu_common.h
@@ -7,8 +7,14 @@
 
 #ifndef VU_COMMON_H
 #define VU_COMMON_H
+
+#include <stddef.h>
+
 #include <linux/virtio_net.h>
 
+#include "ip.h"
+#include "virtio.h"
+
 static inline void *vu_eth(void *base)
 {
 	return ((char *)base + VNET_HLEN);
-- 
2.53.0.371.g1d285c8824-goog


  parent reply	other threads:[~2026-02-23 18:11 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-19 17:45 [PATCH] " Peter Foley
2026-02-21 17:57 ` Stefano Brivio
     [not found]   ` <CAAAKUPN=GPDp84tQAv4Kpxs-AzKR44pDkWda-AbXWaUomYN5eg@mail.gmail.com>
     [not found]     ` <CAAAKUPMP8goRHqk0VDn6UDWmyyPXpzs37UuCLL8x7wDp10tY6A@mail.gmail.com>
2026-02-23 17:35       ` Stefano Brivio
     [not found]         ` <CAAAKUPMQZetb9RYoxaUZGyp7dWm8pifmvEfyV3M4Q6+j9jw89g@mail.gmail.com>
2026-02-23 18:11           ` Peter Foley [this message]
2026-02-23 19:05           ` Stefano Brivio
     [not found]             ` <CAAAKUPMRYcbeTXZHX9aQtZfv4L=sBbzqSWqo-xG91F6r7f8M1w@mail.gmail.com>
2026-02-23 20:47               ` Stefano Brivio
2026-02-23  5:33 ` David Gibson
2026-02-23 16:32   ` Stefano Brivio

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260223181119.179746-1-pefoley@google.com \
    --to=pefoley@google.com \
    --cc=passt-dev@passt.top \
    --cc=sbrivio@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).