aboutgitcodebugslistschat
path: root/flow.h
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2023-12-07 16:53:52 +1100
committerStefano Brivio <sbrivio@redhat.com>2023-12-27 19:29:45 +0100
commit64e5459ba644930ef99ea56dd3df92101bd364ff (patch)
tree1269aef34abf9e346f1706817206ee4ca03524f2 /flow.h
parent5913f2641506c0c6df32baf2556f683d7c5e6185 (diff)
downloadpasst-64e5459ba644930ef99ea56dd3df92101bd364ff.tar
passt-64e5459ba644930ef99ea56dd3df92101bd364ff.tar.gz
passt-64e5459ba644930ef99ea56dd3df92101bd364ff.tar.bz2
passt-64e5459ba644930ef99ea56dd3df92101bd364ff.tar.lz
passt-64e5459ba644930ef99ea56dd3df92101bd364ff.tar.xz
passt-64e5459ba644930ef99ea56dd3df92101bd364ff.tar.zst
passt-64e5459ba644930ef99ea56dd3df92101bd364ff.zip
tcp: Implement hash table with indices rather than pointers
We implement our hash table with pointers to the entry for each bucket (or NULL). However, the entries are always allocated within the flow table, meaning that a flow index will suffice, halving the size of the hash table. For TCP, just a flow index would be enough, but future uses will want to expand the hash table to cover indexing either side of a flow, so use a flow_sidx_t as the type for each hash bucket. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'flow.h')
-rw-r--r--flow.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/flow.h b/flow.h
index c2a5190..959b461 100644
--- a/flow.h
+++ b/flow.h
@@ -53,6 +53,17 @@ static_assert(sizeof(flow_sidx_t) <= sizeof(uint32_t),
#define FLOW_SIDX_NONE ((flow_sidx_t){ .flow = FLOW_MAX })
+/**
+ * flow_sidx_eq() - Test if two sidx values are equal
+ * @a, @b: sidx values
+ *
+ * Return: true iff @a and @b refer to the same side of the same flow
+ */
+static inline bool flow_sidx_eq(flow_sidx_t a, flow_sidx_t b)
+{
+ return (a.flow == b.flow) && (a.side == b.side);
+}
+
union flow;
void flow_table_compact(struct ctx *c, union flow *hole);