diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2024-01-16 11:50:41 +1100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2024-01-22 23:35:31 +0100 |
commit | 4a849e95267c30e63dbe61c4576c059c927b99d9 (patch) | |
tree | 5d73a19f7ee2bb10633deabcf7956bddcc10cdf4 /flow_table.h | |
parent | fb7c00169d49a99ea2d14dae05bf0c8190f0971c (diff) | |
download | passt-4a849e95267c30e63dbe61c4576c059c927b99d9.tar passt-4a849e95267c30e63dbe61c4576c059c927b99d9.tar.gz passt-4a849e95267c30e63dbe61c4576c059c927b99d9.tar.bz2 passt-4a849e95267c30e63dbe61c4576c059c927b99d9.tar.lz passt-4a849e95267c30e63dbe61c4576c059c927b99d9.tar.xz passt-4a849e95267c30e63dbe61c4576c059c927b99d9.tar.zst passt-4a849e95267c30e63dbe61c4576c059c927b99d9.zip |
flow: Abstract allocation of new flows with helper function
Currently tcp.c open codes the process of allocating a new flow from the
flow table: twice, in fact, once for guest to host and once for host to
guest connections. This duplication isn't ideal and will get worse as we
add more protocols to the flow table. It also makes it harder to
experiment with different ways of handling flow table allocation.
Instead, introduce a function to allocate a new flow: flow_alloc(). In
some cases we currently check if we're able to allocate, but delay the
actual allocation. We now handle that slightly differently with a
flow_alloc_cancel() function to back out a recent allocation. We have that
separate from a flow_free() function, because future changes we have in
mind will need to handle this case a little differently.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'flow_table.h')
-rw-r--r-- | flow_table.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/flow_table.h b/flow_table.h index 4aa2398..2773a2b 100644 --- a/flow_table.h +++ b/flow_table.h @@ -88,4 +88,7 @@ static inline flow_sidx_t flow_sidx(const struct flow_common *f, */ #define FLOW_SIDX(f_, side) (flow_sidx(&(f_)->f, (side))) +union flow *flow_alloc(void); +void flow_alloc_cancel(union flow *flow); + #endif /* FLOW_TABLE_H */ |