diff options
| author | Laurent Vivier <lvivier@redhat.com> | 2026-06-02 15:17:08 +0200 |
|---|---|---|
| committer | Stefano Brivio <sbrivio@redhat.com> | 2026-06-04 06:45:09 +0200 |
| commit | 31d0893d47e3d147b3a1597bbede7de65281a62f (patch) | |
| tree | defd614c18e276b3c902cbac30749f406d67583e | |
| parent | 2420ad2f8f86494f9318ceaeea391502ee947095 (diff) | |
| download | passt-31d0893d47e3d147b3a1597bbede7de65281a62f.tar passt-31d0893d47e3d147b3a1597bbede7de65281a62f.tar.gz passt-31d0893d47e3d147b3a1597bbede7de65281a62f.tar.bz2 passt-31d0893d47e3d147b3a1597bbede7de65281a62f.tar.lz passt-31d0893d47e3d147b3a1597bbede7de65281a62f.tar.xz passt-31d0893d47e3d147b3a1597bbede7de65281a62f.tar.zst passt-31d0893d47e3d147b3a1597bbede7de65281a62f.zip | |
passt, tcp: Inline CALL_PROTO_HANDLER() and merge tcp_timer()
Since 260075bde769 ("tcp, udp, fwd: Run all port scanning from a
single timer"), CALL_PROTO_HANDLER() has only one user (tcp), so
inline it at the call site and remove the macro.
Merge tcp_timer() into tcp_defer_handler(), moving the timer interval
check there, matching the pattern used by flow_defer_handler() and
fwd_scan_ports_timer().
The weak declaration and null check for tcp_defer_handler are also
dropped as the function is always defined.
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
| -rw-r--r-- | passt.c | 23 | ||||
| -rw-r--r-- | tcp.c | 22 | ||||
| -rw-r--r-- | tcp.h | 3 |
3 files changed, 13 insertions, 35 deletions
@@ -101,27 +101,8 @@ struct passt_stats { */ static void post_handler(struct ctx *c, const struct timespec *now) { -#define CALL_PROTO_HANDLER(lc, uc) \ - do { \ - extern void \ - lc ## _defer_handler (struct ctx *c) \ - __attribute__ ((weak)); \ - \ - if (!c->no_ ## lc) { \ - if (lc ## _defer_handler) \ - lc ## _defer_handler(c); \ - \ - if (timespec_diff_ms((now), &c->lc.timer_run) \ - >= uc ## _TIMER_INTERVAL) { \ - lc ## _timer(c, now); \ - c->lc.timer_run = *now; \ - } \ - } \ - } while (0) - - /* NOLINTNEXTLINE(bugprone-branch-clone): intervals can be the same */ - CALL_PROTO_HANDLER(tcp, TCP); -#undef CALL_PROTO_HANDLER + if (!c->no_tcp) + tcp_defer_handler(c, now); flow_defer_handler(c, now); fwd_scan_ports_timer(c, now); @@ -896,16 +896,6 @@ bool tcp_flow_defer(const struct tcp_tap_conn *conn) } /** - * tcp_defer_handler() - Handler for TCP deferred tasks - * @c: Execution context - */ -/* cppcheck-suppress [constParameterPointer, unmatchedSuppression] */ -void tcp_defer_handler(struct ctx *c) -{ - tcp_payload_flush(c); -} - -/** * tcp_fill_header() - Fill the TCP header fields for a given TCP segment. * * @th: Pointer to the TCP header structure @@ -3005,12 +2995,20 @@ static void tcp_inactivity(struct ctx *c, const struct timespec *now) } /** - * tcp_timer() - Periodic tasks: port detection, closed connections, pool refill + * tcp_defer_handler() - Handler for TCP deferred tasks * @c: Execution context * @now: Current timestamp */ -void tcp_timer(struct ctx *c, const struct timespec *now) +/* cppcheck-suppress [constParameterPointer, unmatchedSuppression] */ +void tcp_defer_handler(struct ctx *c, const struct timespec *now) { + tcp_payload_flush(c); + + if (timespec_diff_ms(now, &c->tcp.timer_run) < TCP_TIMER_INTERVAL) + return; + + c->tcp.timer_run = *now; + tcp_sock_refill_init(c); if (c->mode == MODE_PASTA) tcp_splice_refill(c); @@ -29,8 +29,7 @@ int tcp_tap_handler(const struct ctx *c, uint8_t pif, sa_family_t af, int tcp_listen(const struct ctx *c, uint8_t pif, unsigned rule, const union inany_addr *addr, const char *ifname, in_port_t port); int tcp_init(struct ctx *c); -void tcp_timer(struct ctx *c, const struct timespec *now); -void tcp_defer_handler(struct ctx *c); +void tcp_defer_handler(struct ctx *c, const struct timespec *now); void tcp_update_l2_buf(const unsigned char *eth_d); |
