From b6652c7c7f5ccd7eadafd0533d5c5caaed5915fc Mon Sep 17 00:00:00 2001 From: evgeny Date: Wed, 14 Oct 2026 01:06:56 +0200 Subject: [PATCH] Record unique acknowledged packets at the instance transport boundary --- src/Makefile.am | 2 ++ src/transport_layer/etcp.c | 1 + src/utun_instance.h | 2 ++ 3 files changed, 5 insertions(+) diff --git a/src/Makefile.am b/src/Makefile.am index 65edb3f3..c97ae4ac 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -64,6 +64,8 @@ utun_CORE_SOURCES = \ tun_freebsd.c \ tun_windows.c \ transport_layer/etcp.c \ + transport_layer/etcp_tx_stats.c \ + transport_layer/etcp_tx_stats.h \ transport_layer/etcp_padding.c \ transport_layer/etcp_padding.h \ transport_layer/etcp_session.c \ diff --git a/src/transport_layer/etcp.c b/src/transport_layer/etcp.c index 9649f51c..5fd7974e 100644 --- a/src/transport_layer/etcp.c +++ b/src/transport_layer/etcp.c @@ -1549,6 +1549,7 @@ void etcp_ack_recv(struct ETCP_CONN* etcp, uint32_t seq, uint16_t ts, uint16_t d DEBUG_TRACE(DEBUG_CATEGORY_ETCP, "packet seq=%u not found in wait_ack queue", seq); return; } + etcp_tx_record_ack(&etcp->instance->tx_history, get_time_us(), acked_pkt->ll.len); // === subtract inflight from the LAST link the packet was sent on === if (acked_pkt->last_link && acked_pkt->last_link->bbr) { diff --git a/src/utun_instance.h b/src/utun_instance.h index c337d84f..62c11579 100644 --- a/src/utun_instance.h +++ b/src/utun_instance.h @@ -20,6 +20,7 @@ extern "C" { #include "etcp_padding.h" #include "reality_io.h" #include "etcp_api.h" +#include "transport_layer/etcp_tx_stats.h" #include "config_parser.h" #include "stcp_link.h" #include "firewall.h" @@ -122,6 +123,7 @@ struct peer_sleep_cbk_entry { // Состояние одного узла. Вложенные модули освобождаются через их lifecycle API. struct UTUN_INSTANCE { + struct etcp_tx_history tx_history; struct reality_owner reality_owner; uint8_t core_started, utun_started, chat_started; // успешный запуск ядра / UTUN / чата