Align automatic socket documentation with shared NCD link matching
This commit is contained in:
1 parent
a353797edb
commit
9844fdefcb
2 files changed
+10
-11
No files matched your search
@@ -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,
|
||||
|
||||
@@ -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 ожидает также входящего подключения. Обход адресов использует отдельную копию.
|
||||
|
||||
Reference in new issue
Block a user