aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorLaurent Vivier <lvivier@redhat.com>2026-06-02 15:17:08 +0200
committerStefano Brivio <sbrivio@redhat.com>2026-06-04 06:45:09 +0200
commit31d0893d47e3d147b3a1597bbede7de65281a62f (patch)
treedefd614c18e276b3c902cbac30749f406d67583e
parent2420ad2f8f86494f9318ceaeea391502ee947095 (diff)
downloadpasst-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.c23
-rw-r--r--tcp.c22
-rw-r--r--tcp.h3
3 files changed, 13 insertions, 35 deletions
diff --git a/passt.c b/passt.c
index b6fc12d..b3f806b 100644
--- a/passt.c
+++ b/passt.c
@@ -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);
diff --git a/tcp.c b/tcp.c
index 0fb8da0..c400075 100644
--- a/tcp.c
+++ b/tcp.c
@@ -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);
diff --git a/tcp.h b/tcp.h
index 8a0eb93..3262a80 100644
--- a/tcp.h
+++ b/tcp.h
@@ -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);