Document NCD startup rollback reentrant lifetime and address snapshots
This commit is contained in:
1 parent
9844fdefcb
commit
db0d7a1f47
2 files changed
+26
No files matched your search
@@ -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
|
||||
|
||||
@@ -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. Фазовые таймеры и наши
|
||||
|
||||
Reference in new issue
Block a user