aboutgitcodebugslistschat
path: root/udp_flow.h
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2024-07-18 15:26:46 +1000
committerStefano Brivio <sbrivio@redhat.com>2024-07-19 18:33:39 +0200
commita45a7e97982acc7c9d00fddb0192fbbfcd2030d6 (patch)
tree371c1d0ce44f09463702386c6dc0c75a6b65cf1c /udp_flow.h
parent8abd06e9fac93b60cc98d90f7310d94cfc295090 (diff)
downloadpasst-a45a7e97982acc7c9d00fddb0192fbbfcd2030d6.tar
passt-a45a7e97982acc7c9d00fddb0192fbbfcd2030d6.tar.gz
passt-a45a7e97982acc7c9d00fddb0192fbbfcd2030d6.tar.bz2
passt-a45a7e97982acc7c9d00fddb0192fbbfcd2030d6.tar.lz
passt-a45a7e97982acc7c9d00fddb0192fbbfcd2030d6.tar.xz
passt-a45a7e97982acc7c9d00fddb0192fbbfcd2030d6.tar.zst
passt-a45a7e97982acc7c9d00fddb0192fbbfcd2030d6.zip
udp: Create flows for datagrams from originating sockets
This implements the first steps of tracking UDP packets with the flow table rather than its own (buggy) set of port maps. Specifically we create flow table entries for datagrams received from a socket (PIF_HOST or PIF_SPLICE). When splitting datagrams from sockets into batches, we group by the flow as well as splicesrc. This may result in smaller batches, but makes things easier down the line. We can re-optimise this later if necessary. For now we don't do anything else with the flow, not even match reply packets to the same flow. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'udp_flow.h')
-rw-r--r--udp_flow.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/udp_flow.h b/udp_flow.h
new file mode 100644
index 0000000..18af9ac
--- /dev/null
+++ b/udp_flow.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later
+ * Copyright Red Hat
+ * Author: David Gibson <david@gibson.dropbear.id.au>
+ *
+ * UDP flow tracking data structures
+ */
+#ifndef UDP_FLOW_H
+#define UDP_FLOW_H
+
+/**
+ * struct udp - Descriptor for a flow of UDP packets
+ * @f: Generic flow information
+ * @ts: Activity timestamp
+ */
+struct udp_flow {
+ /* Must be first element */
+ struct flow_common f;
+
+ time_t ts;
+};
+
+bool udp_flow_timer(const struct ctx *c, const struct udp_flow *uflow,
+ const struct timespec *now);
+
+#endif /* UDP_FLOW_H */