Document NCD startup rollback reentrant lifetime and address snapshots

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

No files matched your search

+11
View File
@@ -88,10 +88,21 @@ READY сессии. Принятая подписанная запись и пу
доставка не создаёт дубликаты UDP/TCP. Работающие линки не закрываются только
из-за смены списка адресов. NCD удерживает ссылку на общую запись, пока
обслуживает соединение, и использует её при восстановлении.
Для обхода адресов NCD делает отдельную копию: callbacks транспорта могут заменить
списки в общем реестре до завершения обхода. Удержание ссылки на запись сохраняет
сам объект, но не старые списки. Обновление, открытие и добавление нового сокета
используют общий подбор разрешённых пар: family, UDP/TCP, локальная политика,
NAT-профиль и обязательные метаданные REALITY. IPv6 link-local требует netif_index.
Новый сокет обслуживает NCD-транспорты вне FIN_WAIT; случайный выбор одного адреса не используется.
`node_conn_direct_open_node` сверяет переданную запись с реестром/БД. Более
свежая подписанная запись принимается целиком, старая уступает уже известной.
Bootstrap-адреса не перекрывают подписанную запись даже при DOWN.
ID узла проверяется по public_key. Ошибка запуска возвращает NULL handle и не снимает
прежний FIN_WAIT. Отдельно принятый snapshot и уже добавленные линки при частичной
ошибке могут сохраниться; новый handle публикуется после подготовки ресурсов.
Явный specific_sock задаёт локальную политику, сохраняя проверки family/протокола/цели/REALITY;
автоматическое появление сокета использует обычную политику подбора.
Конфигурационные подключения UTUN используют один адаптер
`init_client_connections` для старта и reload. Все адреса, TCP и REALITY
+15
View File
@@ -107,6 +107,21 @@ KEEP_ALIVE полностью отменяет FIN_WAIT. Ожидание CLOSE
для спящего пира увеличивается до его RX deadline. Сам факт DOWN во время FIN_WAIT
завершает ранее запрошенное мягкое закрытие.
NCD возвращает новый handle после подготовки подписки на все события ETCP и нужных
таймеров. До возврата open новый владелец событий не получает; уже работающий
транспорт доставляет начальный UP через call_soon. Отказ подписки, таймера или
планирования UP возвращает ошибку и сохраняет прежних владельцев и FIN_WAIT.
TIMEOUT не закрывает удерживаемый транспорт: возможен поздний UP, новое open может
начать новый бюджет подключения. CLOSED отменяет таймеры, отсоединяет conn и требует
закрыть оставшийся handle; его можно закрыть после уничтожения ядра.
Операции открытия, обновления линков и закрытия удерживают NCD/ETCP через вложенные
callbacks, включая синхронный callback исходящей очереди при отправке CLOSE.
Более новый вложенный переход прекращает оставшуюся рассылку прежнего события.
Управляющий пакет NCD занимает ровно 10 байт: cmd=0x12, subcmd и node_id little-endian.
Приём проверяет длину, команду и принадлежность отправителя тому же транспорту.
Отказы ресурсов, вложенные события, обновление snapshot и удаление соседних линков
проверяет `test_ncd_faults`; готовый handle, TIMEOUT и сетевой CLOSE/KEEP_ALIVE — `test_node_conn_direct`.
Контроль RX независим от отправки keepalive. Объявленный сон не отключает проверку
жизни: срок от последнего RX равен максимуму согласованного keepalive timeout и
объявленного остатка ACTIVE+SLEEP с запасом normal timeout. Фазовые таймеры и наши