From 3b894753b19ff0fd5103be31c10ee0ace2237095 Mon Sep 17 00:00:00 2001 From: evgeny Date: Mon, 12 Oct 2026 20:25:42 +0200 Subject: [PATCH] Trigger NAT rechecks after direct timeout and exhausted reverse --- src/routing_layer/conn_mgr_core.c | 3 +++ src/transport_layer/node_conn_direct.c | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/routing_layer/conn_mgr_core.c b/src/routing_layer/conn_mgr_core.c index 36a25338..8034cab3 100644 --- a/src/routing_layer/conn_mgr_core.c +++ b/src/routing_layer/conn_mgr_core.c @@ -22,6 +22,7 @@ #include "topo_node.h" #include "topo_node_sqlite.h" #include "sock_match.h" +#include "nat_detection.h" #include "topo_group.h" #include "route_ping.h" #include "ntp_time.h" @@ -443,6 +444,8 @@ static void cm_attempt_tick(void* arg) { } if (entry->state == CONN_MGR_STATE_DISCONNECTED) return; if (entry->attempt_active && now >= entry->deadline_tb) { + if (!direct_ready && entry->reverse_started && entry->ncd_handle) + nat_detection_connection_failed(entry->mgr->instance->nat_det, node_conn_direct_get_conn(entry->ncd_handle), 1); entry->attempt_active = 0; if (!entry->retry_delay_ms) entry->retry_delay_ms = CONN_MGR_RETRY_MIN_MS; entry->retry_tb = now + entry->retry_delay_ms * 10; diff --git a/src/transport_layer/node_conn_direct.c b/src/transport_layer/node_conn_direct.c index 6de13995..a8580712 100644 --- a/src/transport_layer/node_conn_direct.c +++ b/src/transport_layer/node_conn_direct.c @@ -16,6 +16,7 @@ #include "topo_node.h" #include "topo_node_sqlite.h" #include "sock_match.h" +#include "nat_detection.h" #include "topo_group.h" #include "ntp_time.h" #include "config_parser.h" @@ -582,6 +583,7 @@ static void ncd_connect_timeout_cb(void* arg) { entry->connect_timer = NULL; DEBUG_WARN(DEBUG_CATEGORY_NCD, "[ncd] connect TIMEOUT: node=0x%016llx now_tb=%llu handles=%d", (unsigned long long)entry->node_id, (unsigned long long)get_time_tb(), entry->handle_count); + nat_detection_connection_failed(entry->inst->nat_det, entry->conn, 0); ncd_event_dispatch(entry, NCD_EVENT_TIMEOUT); }