From 7a832a8a0edbdd5a705c1fe03fca0790a535ab11 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Tue, 21 May 2024 15:57:03 +1000 Subject: flow: Properly type callbacks to protocol specific handlers The flow dispatches deferred and timer handling for flows centrally, but needs to call into protocol specific code for the handling of individual flows. Currently this passes a general union flow *. It makes more sense to pass the specific relevant flow type structure. That brings the check on the flow type adjacent to casting to the union variant which it tags. Arguably, this is a slight abstraction violation since it involves the generic flow code using protocol specific types. It's already calling into protocol specific functions, so I don't think this really makes any difference. Signed-off-by: David Gibson Signed-off-by: Stefano Brivio --- flow.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'flow.c') diff --git a/flow.c b/flow.c index 80dd269..e257f89 100644 --- a/flow.c +++ b/flow.c @@ -292,17 +292,17 @@ void flow_defer_handler(const struct ctx *c, const struct timespec *now) ASSERT(false); break; case FLOW_TCP: - closed = tcp_flow_defer(flow); + closed = tcp_flow_defer(&flow->tcp); break; case FLOW_TCP_SPLICE: - closed = tcp_splice_flow_defer(flow); + closed = tcp_splice_flow_defer(&flow->tcp_splice); if (!closed && timer) - tcp_splice_timer(c, flow); + tcp_splice_timer(c, &flow->tcp_splice); break; case FLOW_PING4: case FLOW_PING6: if (timer) - closed = icmp_ping_timer(c, flow, now); + closed = icmp_ping_timer(c, &flow->ping, now); break; default: /* Assume other flow types don't need any handling */ -- cgit v1.2.3