Align automatic socket documentation with shared NCD link matching

This commit is contained in:
evgeny committed 2026-10-24 20:24:22 +02:00
1 parent a353797edb
commit 9844fdefcb
2 files changed
+10 -11

No files matched your search

+9 -10
View File
@@ -9,9 +9,8 @@
* Для каждого интерфейса с v4/v6 адресами:
* 1. UDP-сокет (etcp_socket_add) — bind на 0.0.0.0/[::] + SO_BINDTODEVICE, случайный порт
* 2. TCP-сокет (tcp_socket_add + stcp_server) — слушает входящие STCP-подключения
* 3. Для каждого сокета сразу добавляются линки (etcp_link_new) ко ВСЕМ активным
* ETCP-соединениям (inst->connections), случайно выбирая один совместимый
* адрес пира отдельно для v4 и v6.
* 3. Для нового сокета NCD добавляет все разрешённые пары адрес/сокет к своим
* активным транспортам (ncd_registry), кроме FIN_WAIT. Правила общие с NCD open/update.
*
* === Тип сокета ===
* PUBLIC — если на интерфейсе есть глобальный (не RFC1918) адрес; иначе NAT.
@@ -31,8 +30,8 @@
* - интерфейс стал DOWN → удалить все сокеты
*
* === Линки ===
* Каждый созданный сокет получает линки ко всем активным соединениям через
* ncd_add_socket_links() — по одному случайному адресу пира на каждый address family.
* Каждый созданный сокет получает линки к активным NCD-соединениям через
* ncd_add_socket_links(): все разрешённые адреса того же family и протокола, с проверкой политики и REALITY.
* На линке сохраняется local_bound_addr (interface_addr в момент создания) для
* последующей проверки принадлежности.
*
@@ -265,7 +264,7 @@ static uint16_t random_port(void) {
/*
* Создаёт UDP-сокет привязанный к конкретному интерфейсу и добавляет к нему
* линки ко всем активным ETCP-соединениям.
* линки к активным NCD-соединениям.
*
* Алгоритм:
* 1. Пытается переиспользовать сохранённый порт из БД (на случай перезапуска)
@@ -274,8 +273,8 @@ static uint16_t random_port(void) {
* 4. Обновляет interface_addr через socket_monitor_update_if_addr
* 5. Отбрасывает сокет если адрес нулевой (INADDR_ANY / ::) — интерфейс без реального IP
* 6. Сохраняет порт в БД для будущих перезапусков
* 7. Вызывает ncd_add_socket_links — добавляет по одному случайному линку
* к каждому активному соединению (для каждого address family)
* 7. Вызывает ncd_add_socket_links — добавляет разрешённые UDP-пары этого family
* к активным NCD-соединениям, кроме FIN_WAIT
*
* Возвращает 0 при успехе, -1 при ошибке. */
static int create_iface_udp_socket(struct AUTO_SOCKET* as, uint32_t ifindex, const char* ifname, int family, uint8_t type) {
@@ -350,7 +349,7 @@ static int create_iface_udp_socket(struct AUTO_SOCKET* as, uint32_t ifindex, con
/*
* Создаёт TCP-сокет и STCP-сервер на интерфейсе, добавляет исходящие TCP-линки
* ко всем активным ETCP-соединениям.
* к активным NCD-соединениям.
*
* Алгоритм аналогичен create_iface_udp_socket:
* 1. Переиспользует сохранённый порт или генерирует случайный
@@ -359,7 +358,7 @@ static int create_iface_udp_socket(struct AUTO_SOCKET* as, uint32_t ifindex, con
* 4. Создаёт stcp_server (слушает входящие STCP-подключения)
* 5. Регистрирует сервер через stcp_server_list_add
* 6. Вызывает ncd_add_socket_links — добавляет исходящие TCP-линки
* (etcp_link_new + is_tcp=1 + etcp_tcp_link_start_connect) к каждому соединению
* с проверкой политики и REALITY к активным NCD-соединениям, кроме FIN_WAIT
*
* Возвращает stcp_server* при успехе, NULL при ошибке. */
static struct stcp_server* create_iface_tcp_socket(struct AUTO_SOCKET* as, uint32_t ifindex, const char* ifname,
+1 -1
View File
@@ -82,7 +82,7 @@ int node_conn_direct_open(struct UTUN_INSTANCE* inst, uint64_t node_id,
/*
* То же, но с уже загруженным TOPO_NODE (ni не владеем — можно передать временный на стеке).
* ni заимствован до возврата; node_id должен совпадать с ни́м и производным public_key.
* ni заимствован до возврата; node_id должен совпадать с ni->node_id и значением, производным из public_key.
* timestamp>0 требует верной подписи: более свежая запись принимается целиком, старая уступает известной,
* одинаковый timestamp с другой подписью отклоняется. timestamp=0 — bootstrap, он не заменяет подписанную запись.
* Адреса могут отсутствовать: handle ожидает также входящего подключения. Обход адресов использует отдельную копию.