docs: clarify STUN result fields and API usage

This commit is contained in:
evgeny committed 2026-10-17 18:50:39 +02:00
1 parent dbe2640e74
commit d7ad58b380
1 file changed
+10 -8
+10 -8
View File
@@ -1,7 +1,8 @@
/* Определяет поведение NAT через внешние STUN-серверы: совпадает ли внешний IP:порт
* при обращении к разным IP и доступны ли входящие без предварительного контакта.
* mapping: MATCH — два сервера видят одинаковый адрес; DEPENDENT — разные;
* RFC 5780 уточняет EIM/ADM/APDM и filtering (EIF/ADF/APDF). UNKNOWN — данных недостаточно.
* RFC 5780 уточняет зависимость mapping: EIM — не зависит от назначения, ADM — от IP, APDM — от IP:порта.
* filtering: EIF — незнакомый вход разрешён, ADF — нужен контакт с IP, APDF — с IP:портом. UNKNOWN — данных мало.
* Для работы: [stun] enabled=yes и минимум две строки server=host[:port] с разными IP.
* Ядро вызывает init(instance)/destroy(instance), модуль сам измеряет и обновляет результат.
* get_socket_result(instance, socket, &result) возвращает снимок; recheck(instance) повторяет проверку.
@@ -39,15 +40,16 @@ enum stun_nat_reason {
STUN_REASON_ROUTE, STUN_REASON_PORTS
};
/* Снимок одного пути IP/netif; несколько рабочих портов используют общее измерение. */
struct stun_nat_result {
struct stun_nat_key key;
uint64_t generation, evidence_id, measured_at_us;
unsigned members;
int refreshing;
struct stun_nat_key key; // локальный IP и интерфейс измерения
uint64_t generation, evidence_id, measured_at_us; // поколение пути, ID и календарное время результата (мкс)
unsigned members; // число рабочих сокетов этого пути
int refreshing; // идёт обновление, пока возвращается действующий кэш
enum stun_nat_status status;
enum stun_nat_mapping mapping;
enum stun_nat_filtering filtering;
enum stun_nat_reason mapping_reason, filtering_reason;
enum stun_nat_reason mapping_reason, filtering_reason; // причины неполного результата по каждому свойству
struct sockaddr_storage local; // адрес независимого тестового UDP-сокета
struct sockaddr_storage servers[2], mapped[2]; // реальные серверы и наблюдаемые внешние адреса
unsigned server_count;
@@ -66,8 +68,8 @@ void stun_nat_forget_ports(struct UTUN_INSTANCE* inst);
void stun_nat_recheck(struct UTUN_INSTANCE* inst);
/* Копирует результат для имени исходного сокета; -1 если модуль выключен/имя отсутствует. */
int stun_nat_get_result(const struct UTUN_INSTANCE* inst, const char* socket_name, struct stun_nat_result* result);
/* Проверяет принадлежность текущего рабочего сокета группе и её routing options.
* Во время refresh возвращает ещё действующий кэш; время кэша не омолаживается. */
/* Записывает в result снимок пути socket из instance; 0 — готово, -1 — подходящего пути нет.
* Проверяет IP, интерфейс и routing options. Во время refresh возвращает действующий кэш с прежним временем. */
int stun_nat_get_socket_result(const struct UTUN_INSTANCE* inst, const struct ETCP_SOCKET* socket, struct stun_nat_result* result);
const char* stun_nat_mapping_name(enum stun_nat_mapping value);
const char* stun_nat_filtering_name(enum stun_nat_filtering value);