diff --git a/src/transport_layer/etcp.h b/src/transport_layer/etcp.h index a2a5826b..40047851 100644 --- a/src/transport_layer/etcp.h +++ b/src/transport_layer/etcp.h @@ -80,6 +80,8 @@ struct INFLIGHT_PACKET {// выделяется из etcp->inflight_pool uint8_t state; // WAIT_ACK занимает окно last_link; WAIT_SEND ожидает первую/повторную отправку uint8_t send_hist[8]; // через какие каналы передавался пакет (NEW). send_count - head ptr uint64_t delivered_at_send; // link->delivered_bytes на момент отправки (для BBR prior_delivered) + uint64_t delivered_time_at_send_tb; // время последней доставки при отправке; начало ACK-интервала BBR + uint64_t first_tx_at_send_tb; // начало интервала отправок BBR (оба интервала — в 0.1мс) uint32_t inflight_at_send; // link->inflight_bytes на момент отправки (для BBR tx_in_flight) uint8_t is_app_limited; // данные ограничены приложением на момент отправки }; diff --git a/src/transport_layer/etcp_connections.h b/src/transport_layer/etcp_connections.h index 9ee4a560..2c7c4cac 100644 --- a/src/transport_layer/etcp_connections.h +++ b/src/transport_layer/etcp_connections.h @@ -326,7 +326,8 @@ struct ETCP_LINK { // === BBR congestion control === struct bbr* bbr; // BBR state (per-link, создаётся в etcp_link_new) uint64_t delivered_bytes; // кумулятивно delivered bytes на линке (для round detection) - uint64_t last_ack_time_tb; // 0.1ms timestamp последнего ACK (для interval_us) + uint64_t last_ack_time_tb; // время последней доставки/начала первого flight, 0.1мс + uint64_t first_tx_time_tb; // начало интервала отправок, продвигается подтверждёнными попытками uint32_t bbr_pacing_rate; // bytes/sec output BBR → shaper uint32_t bbr_loss_since_ack; // счётчик потерь на линке с последнего ACK (для rs->lost)