diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2024-01-16 11:50:40 +1100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2024-01-22 23:35:29 +0100 |
commit | fb7c00169d49a99ea2d14dae05bf0c8190f0971c (patch) | |
tree | f44225965c30a3cb4a87981ab7dccfa0da875493 /flow.c | |
parent | 7f37bf4cd51fc73441aeee1acf0129f4802e0cba (diff) | |
download | passt-fb7c00169d49a99ea2d14dae05bf0c8190f0971c.tar passt-fb7c00169d49a99ea2d14dae05bf0c8190f0971c.tar.gz passt-fb7c00169d49a99ea2d14dae05bf0c8190f0971c.tar.bz2 passt-fb7c00169d49a99ea2d14dae05bf0c8190f0971c.tar.lz passt-fb7c00169d49a99ea2d14dae05bf0c8190f0971c.tar.xz passt-fb7c00169d49a99ea2d14dae05bf0c8190f0971c.tar.zst passt-fb7c00169d49a99ea2d14dae05bf0c8190f0971c.zip |
flow: Move flow_count from context structure to a global
In general, the passt code is a bit haphazard about what's a true global
variable and what's in the quasi-global 'context structure'. The
flow_count field is one such example: it's in the context structure,
although it's really part of the same data structure as flowtab[], which
is a genuine global.
Move flow_count to be a regular global to match. For now it needs to be
public, rather than static, but we expect to be able to change that in
future.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'flow.c')
-rw-r--r-- | flow.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -26,6 +26,7 @@ static_assert(ARRAY_SIZE(flow_type_str) == FLOW_NUM_TYPES, "flow_type_str[] doesn't match enum flow_type"); /* Global Flow Table */ +unsigned flow_count; union flow flowtab[FLOW_MAX]; /* Last time the flow timers ran */ @@ -54,18 +55,18 @@ void flow_log_(const struct flow_common *f, int pri, const char *fmt, ...) * @c: Execution context * @hole: Pointer to recently closed flow */ -void flow_table_compact(struct ctx *c, union flow *hole) +void flow_table_compact(const struct ctx *c, union flow *hole) { union flow *from; - if (FLOW_IDX(hole) == --c->flow_count) { + if (FLOW_IDX(hole) == --flow_count) { debug("flow: table compaction: maximum index was %u (%p)", FLOW_IDX(hole), (void *)hole); memset(hole, 0, sizeof(*hole)); return; } - from = flowtab + c->flow_count; + from = flowtab + flow_count; memcpy(hole, from, sizeof(*hole)); switch (from->f.type) { @@ -93,7 +94,7 @@ void flow_table_compact(struct ctx *c, union flow *hole) * @c: Execution context * @now: Current timestamp */ -void flow_defer_handler(struct ctx *c, const struct timespec *now) +void flow_defer_handler(const struct ctx *c, const struct timespec *now) { bool timer = false; union flow *flow; @@ -103,7 +104,7 @@ void flow_defer_handler(struct ctx *c, const struct timespec *now) flow_timer_run = *now; } - for (flow = flowtab + c->flow_count - 1; flow >= flowtab; flow--) { + for (flow = flowtab + flow_count - 1; flow >= flowtab; flow--) { switch (flow->f.type) { case FLOW_TCP: tcp_flow_defer(c, flow); |