diff --git a/src/transport_layer/auto_socket.c b/src/transport_layer/auto_socket.c index 120e29ad..c2c07f51 100644 --- a/src/transport_layer/auto_socket.c +++ b/src/transport_layer/auto_socket.c @@ -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, diff --git a/src/transport_layer/node_conn_direct.h b/src/transport_layer/node_conn_direct.h index c75ce274..2a8135fb 100644 --- a/src/transport_layer/node_conn_direct.h +++ b/src/transport_layer/node_conn_direct.h @@ -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 ожидает также входящего подключения. Обход адресов использует отдельную копию.