aboutgitcodebugslistschat
diff options
context:
space:
mode:
-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);