Browse Source

Clarify independent RX watchdog and sleep-aware graceful close deadlines

master
evgeny 24 hours ago
parent
commit
6704a18897
  1. 8
      src/transport_layer/etcp_keepalive.h
  2. 8
      src/transport_layer/node_conn_direct.c

8
src/transport_layer/etcp_keepalive.h

@ -15,8 +15,8 @@ extern "C" {
* Обычный keepalive (normal-режим) и спячка (standby) — раздельные механизмы
* (разные таймеры, разный код):
*
* normal: периодический flagless-keepalive (адаптивный период) + dead-link
* по keepalive_timeout. Активен только когда бодрствуют обе стороны.
* normal: периодический flagless-keepalive (адаптивный период).
* Отправка активна только когда бодрствуют обе стороны.
*
* standby (спящий узел): периодический flagless НЕ шлётся вовсе. На фазовых
* переходах duty-cycle (SLEEP 120с / ACTIVE 2с) шлётся анонс
@ -25,6 +25,10 @@ extern "C" {
* KA_SLEEP_MIN_ATTEMPTS). Кумулятивные провалы (сброс по ACK) — при
* KA_SLEEP_MAX_FAILS → link down (детект мёртвого пира в спячке).
*
* RX watchdog: отдельный конечный deadline работает в обоих режимах. Учитывает
* объявленный ACTIVE+SLEEP и keepalive_timeout; фазы и отправки его
* не продлевают. Пробуждение сразу сокращает срок до normal timeout.
*
* Формат пакета:
* data[0] = ETCP_KEEPALIVE (0x08)
* data[1] = flags (bit0 = KA_FLAG_SLEEP — «я сплю», bit1 = KA_FLAG_SLEEP_ACK — ответ)

8
src/transport_layer/node_conn_direct.c

@ -611,8 +611,8 @@ static void ncd_cancel_deliver_up(struct NODE_CONN_DIRECT* h, struct UASYNC* ua)
/*
* fin_wait — состояние ожидания подтверждения закрытия от пира.
* Вызывающая сторона: мы отправили CLOSE и ждём ответа (KEEP_ALIVE или DOWN).
* Максимальное время ожидания — NCD_FIN_WAIT_TIMEOUT_TB (5 сек), после чего
* соединение форсированно закрывается.
* Обычное ожидание — NCD_FIN_WAIT_TIMEOUT_TB (5 сек); объявленный сон продлевает
* его до RX deadline живого линка. По истечении закрываем транспорт.
*/
/*
@ -627,7 +627,7 @@ static void ncd_fin_wait_cancelled(struct ETCP_CONN* conn, void* arg) {
}
/*
* Таймаут fin_wait: peer не ответил на CLOSE за NCD_FIN_WAIT_TIMEOUT_TB (5 сек).
* Таймаут fin_wait: peer не ответил на CLOSE в отведённый срок с учётом сна.
* Форсированно закрываем conn и освобождаем entry — соединение разорвано
* без подтверждения от пира.
*/
@ -1125,7 +1125,7 @@ int node_conn_direct_open_node(struct UTUN_INSTANCE* inst, uint64_t node_id,
*
* Если это был последний handle (handle_count стал 0):
* - Запускается протокол graceful shutdown: пиру отправляется CLOSE, conn
* переводится в fin_wait, ставится таймер на 5 сек.
* переводится в fin_wait, ставится таймер на 5 сек либо до пробуждения пира.
* - Если пир ответит KEEP_ALIVE (у него ещё есть handle'ы) — conn останется жив,
* просто без наших handle'ов.
* - Если пир не ответит — conn закрывается форсированно по таймауту.

Loading…
Cancel
Save