From b96ae1a718500a19bc03b3f44b37571fc4dac886 Mon Sep 17 00:00:00 2001 From: evgeny Date: Sat, 17 Oct 2026 17:18:07 +0200 Subject: [PATCH] docs: introduce NAT detector results and basic usage --- src/routing_layer/nat_detection.h | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/routing_layer/nat_detection.h b/src/routing_layer/nat_detection.h index 69b3b953..ee72fd84 100644 --- a/src/routing_layer/nat_detection.h +++ b/src/routing_layer/nat_detection.h @@ -1,14 +1,14 @@ -/* Определяет NAT и доступность незнакомых входящих для рабочего UDP-сокета. - * Два узла сообщают, какой внешний IP:порт видят: стабильное равенство означает EIM - * (совпадение с локальным — отсутствие трансляции), различие — strict. - * Помощник отправляет пакеты до и после исходящего контакта: - * вход до контакта означает open, только после — оценку filtered. - * Получатель проверяет настоящий IP отправителя; непубличный адрес не подходит. - * Команды и результаты идут по работающей сети uTun, тестовые пакеты — напрямую. - * Недостаток данных оставляет соответствующую часть результата UNKNOWN. - * TCP-вход проверяется отдельно подключением к listener, без переноса UDP-профиля. - * Все функции вызываются в uasync-потоке ядра; detector ниже — контекст этого ядра. - * Общее описание алгоритма: doc/nat_detection.txt. */ +/* Модуль определяет тип NAT и доступность входящих для каждого рабочего сокета. + * Результат — address_profile с двумя независимыми свойствами: + * mapping: UNCHANGED — адрес не меняется; EIM — внешний IP:порт одинаков для разных IP назначения; + * DEPENDENT (strict) — внешний IP:порт зависит от IP назначения. + * inbound: OPEN — пакеты от незнакомого IP проходят; CONTACT — проходят после исходящего контакта (оценка filtered). + * UNKNOWN в любом свойстве означает, что данных для его определения пока недостаточно. + * Для UDP сочетания EIM+OPEN и EIM+CONTACT означают eim open и eim filtered. TCP-вход проверяется отдельно. + * create(instance) запускает автоматические асинхронные проверки через доступные узлы сети. + * get_status(detector, socket, &status) возвращает результат в status.effective_profile и ход проверки в остальных полях. + * request_check_*() запрашивает повторную проверку; destroy(detector) останавливает модуль и освобождает его ресурсы. + * Все вызовы — в uasync-потоке ядра; detector — его контекст NAT. Алгоритм: doc/nat_detection.txt. */ #ifndef NAT_DETECTION_H #define NAT_DETECTION_H