From c3671447765281ddb41a4277480a254166fc1c76 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Tue, 21 Jul 2026 22:29:19 +0300 Subject: [PATCH] =?UTF-8?q?etcp:=20rtt=5Flast=E2=86=92ping=5Fupdate=5Frtt?= =?UTF-8?q?=20=D1=80=D0=B0=D0=B7=20=D0=B2=20=D0=BC=D0=B8=D0=BD=D1=83=D1=82?= =?UTF-8?q?=D1=83;=20route=5Fping:=20ping=5Fupdate=5Frtt=20=D0=BD=D0=B0=20?= =?UTF-8?q?PING=5FRESP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/routing_layer/route_ping.c | 1 + src/transport_layer/etcp.c | 8 ++++++++ src/transport_layer/etcp.h | 3 +++ 3 files changed, 12 insertions(+) diff --git a/src/routing_layer/route_ping.c b/src/routing_layer/route_ping.c index 2b20f83b..dad1e81c 100644 --- a/src/routing_layer/route_ping.c +++ b/src/routing_layer/route_ping.c @@ -80,6 +80,7 @@ void route_ping_handle_resp(struct NAT_DETECTION* nd, struct ETCP_CONN* from_con DEBUG_INFO(DEBUG_CATEGORY_BGP, "from=%s request_id=%08x sent=%u ok=%u avg_rtt=%u", from_conn->log_name, (unsigned)resp->request_id, (unsigned)resp->count_sent, (unsigned)resp->count_ok, (unsigned)resp->avg_rtt); + topo_node_ping_update_rtt(nd->inst->topo_groups, from_conn->peer_node_id, resp->avg_rtt); struct route_ping_pending** cur = &nd->ping_pending; while (*cur) { diff --git a/src/transport_layer/etcp.c b/src/transport_layer/etcp.c index b7bcdadd..c55059bb 100644 --- a/src/transport_layer/etcp.c +++ b/src/transport_layer/etcp.c @@ -441,6 +441,7 @@ void etcp_conn_reset(struct ETCP_CONN* etcp) { etcp->rtt_avg_10 = 0; etcp->rtt_avg_100 = 0; etcp->jitter = 0; + etcp->last_rtt_cb_time = 0; etcp->bytes_sent_total = 0; etcp->retransmissions_count = 0; etcp->ack_packets_count = 0; @@ -1545,6 +1546,13 @@ void etcp_conn_input(struct ETCP_DGRAM* pkt) { etcp->rtt_avg_10=rtt_max; etcp->tt_last=tt_sum/cnt; etcp->jitter=j_sum/cnt; + if (etcp->rtt_last) { + uint64_t now_tb = get_time_tb(); + if (now_tb - etcp->last_rtt_cb_time > RTT_CB_PERIOD_TB) { + topo_node_ping_update_rtt(etcp->instance->topo_groups, etcp->peer_node_id, etcp->rtt_last); + etcp->last_rtt_cb_time = now_tb; + } + } break; } case ETCP_SECTION_PAYLOAD: { diff --git a/src/transport_layer/etcp.h b/src/transport_layer/etcp.h index 6e9faae0..cda281c1 100644 --- a/src/transport_layer/etcp.h +++ b/src/transport_layer/etcp.h @@ -199,6 +199,7 @@ struct ETCP_CONN { uint16_t rtt_avg_10; uint16_t rtt_avg_100; uint16_t jitter; + uint64_t last_rtt_cb_time; // время последнего вызова ping_update_rtt (0.1ms) uint32_t bytes_sent_total; // uint32_t bytes_received_total; // Not used uint32_t retransmissions_count; @@ -258,6 +259,8 @@ struct ETCP_CONN { char* name; // Connection name from config (e.g., "client_test1"), or NULL/empty }; +#define RTT_CB_PERIOD_TB 600000 // 1 минута в 0.1ms + // Functions struct ETCP_CONN* etcp_connection_create(struct UTUN_INSTANCE* instance, char* name); void etcp_connection_close(struct ETCP_CONN* etcp);