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
next prev 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).