docs: introduce NAT detector results and basic usage

This commit is contained in:
evgeny committed 2026-10-17 17:18:07 +02:00
1 parent 6a2164717e
commit b96ae1a718
1 file changed
+11 -11
+11 -11
View File
@@ -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