aboutgitcodebugslistschat
path: root/flow.h
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2023-11-30 13:02:14 +1100
committerStefano Brivio <sbrivio@redhat.com>2023-12-04 09:51:14 +0100
commitdf96a4cb5d4f3907f1019ba50511ee9787443acf (patch)
treec196c13637346995bf9f02ae32788e3397a7071b /flow.h
parenteb8b1a233beee1e11eb700e2201becc34f913f9e (diff)
downloadpasst-df96a4cb5d4f3907f1019ba50511ee9787443acf.tar
passt-df96a4cb5d4f3907f1019ba50511ee9787443acf.tar.gz
passt-df96a4cb5d4f3907f1019ba50511ee9787443acf.tar.bz2
passt-df96a4cb5d4f3907f1019ba50511ee9787443acf.tar.lz
passt-df96a4cb5d4f3907f1019ba50511ee9787443acf.tar.xz
passt-df96a4cb5d4f3907f1019ba50511ee9787443acf.tar.zst
passt-df96a4cb5d4f3907f1019ba50511ee9787443acf.zip
flow: Introduce 'sidx' type to represent one side of one flow
In a number of places, we use indices into the flow table to identify a specific flow. We also have cases where we need to identify a particular side of a particular flow, and we expect those to become more common as we generalise the flow table to cover more things. To assist with that, introduces flow_sidx_t, an index type which identifies a specific side of a specific flow in the table. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> [sbrivio: Suppress false cppcheck positive in flow_sidx()] Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'flow.h')
-rw-r--r--flow.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/flow.h b/flow.h
index c820a15..4f12831 100644
--- a/flow.h
+++ b/flow.h
@@ -39,6 +39,20 @@ struct flow_common {
#define FLOW_TABLE_PRESSURE 30 /* % of FLOW_MAX */
#define FLOW_FILE_PRESSURE 30 /* % of c->nofile */
+/**
+ * struct flow_sidx - ID for one side of a specific flow
+ * @side: Side referenced (0 or 1)
+ * @flow: Index of flow referenced
+ */
+typedef struct flow_sidx {
+ int side :1;
+ unsigned flow :FLOW_INDEX_BITS;
+} flow_sidx_t;
+static_assert(sizeof(flow_sidx_t) <= sizeof(uint32_t),
+ "flow_sidx_t must fit within 32 bits");
+
+#define FLOW_SIDX_NONE ((flow_sidx_t){ .flow = FLOW_MAX })
+
union flow;
void flow_table_compact(struct ctx *c, union flow *hole);