From cc0145795772671664efd016bc112e40205e21a0 Mon Sep 17 00:00:00 2001 From: evgeny Date: Fri, 23 Oct 2026 14:24:31 +0200 Subject: [PATCH] Record verified INIT recovery and BGP regression results --- doc/etcp_multipath_plan.txt | 26 +++++++++++++++++++------- doc/tasks.md | 24 ++++++++++++++---------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/doc/etcp_multipath_plan.txt b/doc/etcp_multipath_plan.txt index 6bf89d32..39ce342b 100644 --- a/doc/etcp_multipath_plan.txt +++ b/doc/etcp_multipath_plan.txt @@ -72,13 +72,25 @@ jitter30мс есть у обеих формул и требует отдель ранее подтверждённый дефект удаления активного temp по-прежнему остаётся открытым. Логи: /tmp/etcp-rto-margin-full-check.log, /tmp/etcp-rto-margin-bgp-repeat.log. -Разбор BGP-падения: подтверждён дефект ETCP при односторонней потере A->B. -На B линки уже DOWN; его повторные INIT несут flag_up=0. На A ветка INIT -обновляет recv_keepalive/last_recv, но не remote_keepalive: прежнее 1 удерживает -часть входящих линков UP и маршрут A->C. Полный debug тоже воспроизводит падение; -оно не является только эффектом параллельного runner или уровня диагностики. -Тест получил снимки фаз/таймаута; логика ядра и пороги тестов не менялись. -Логи: /tmp/bgp-route-snapshot-2.log, /tmp/bgp-route-detailed-2.log. +Дефект BGP-падения при односторонней потере A->B исправлен в ETCP. +Повторный INIT с flag_up=0 больше не сохраняет устаревший remote_keepalive=1: +RX/remote/status учитываются до перезаписи входного буфера ответом. При DOWN +handshake отвечает и запускает keepalive для двусторонней проверки. Живой +альтернативный линк сохраняет UP соединения. RX защищён от close/удаления +линка из callbacks; повторы прежнего состояния не создают новых DOWN/UP. +INIT_RESPONSE проверяет полное тело >=64 байт без timestamp/flag_up и node_id +до изменения состояния; прежняя проверка общей длины пропускала тело 61..63 байта. +Новых таймеров, очередей, полей или изменений формата нет; пороги тестов сохранены. +test_etcp_init_liveness: 130 отказов с сохранением link/conn и владения pkt, +12 допустимых ответов, потери в обе стороны/оба порядка ключей, восстановление, +резервный линк, close/удаление линка из INIT и KA callbacks PASS. +Тест проходит также с обычными часами. Семь профильных тестов ASAN/UBSan +с detect_leaks=1 PASS; дополненный сценарий удаления линка повторён отдельно. +BGP route exchange: 100/100 PASS (AB:52; последние пять с debug). +Основной регрессионный набор: 184/184 PASS. Логи: +/tmp/etcp-init-boundary-before.log, /tmp/etcp-init-final-{liveness,realtime,asan-liveness}.log, +/tmp/etcp-init-fix-asan-test_*.log, /tmp/etcp-init-bgp-stable-*.log, +/tmp/etcp-init-fix-full-check.log. Скоростные ограничения и ранние копии остаются отдельной задачей. Качество мультилинка: три последовательных прогона каждого скоростного профиля, 3с прогрев +4с измерение, штатный test_clock, UDP/dummynet и настоящее шифрование. diff --git a/doc/tasks.md b/doc/tasks.md index a8db754b..a7086490 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -28,7 +28,7 @@ Три прогона скоростей: 8+8 RTT20/20 — 13.868..14.083Мбит/с; RTT20/200 — 13.567..13.951; 2+8+2 RTT20/80/200 — 10.566..10.749 из12; 2+8 одновременно в обе стороны — 8.080..8.379 из10 на направление. DATA-повторов в измеряемых исправных интервалах нет. Подробные результаты: /tmp/etcp-multilink-quality-20261023.csv/.txt. - BGP-падение локализовано до обработки INIT/remote_keepalive в ETCP (отдельная задача ниже). + BGP-падение из-за INIT/remote_keepalive исправлено; отдельная задача ниже содержит итог проверки. Ранние копии до RTO, здоровье/пробы каналов и STCP backpressure пока не реализованы; пороги тестов сохранены. OOM после принятия данных исправлен аварийной сменой эпохи с сохранением физических линков. Старый поток отбрасывается без воспроизведения; после согласования владельцы получают REINIT. @@ -52,15 +52,19 @@ Лог: /tmp/utun_encrypted_attachment_HwkBUM/test.log (удаление → отказ записи), /tmp/etcp-oom-reinit-full-check.log; профильные OOM/ETCP sanitizer-тесты проходят. -[ ] **ETCP: входящий INIT сохраняет устаревший признак обратной достижимости** — локализовано 23.10.2026: - test_bgp_route_exchange падает при одностороннем разрыве A->B и наличии встречных client-линков B->A. - На B линки DOWN, повтор INIT несёт flag_up=0; на A обработчик запроса обновляет recv_keepalive/last_recv, - но не применяет flag_up к remote_keepalive. Старое remote_keepalive=1 удерживает UP и маршрут A->C. - Ошибка повторяется отдельно: 1/5 обычных запусков, затем 1/3 со снимками и 1/3 с полным debug. - Нужен единый переход состояния живости для принятого INIT и обычных пакетов с корректными DOWN/UP callbacks; - проверить односторонний разрыв в обе стороны, обе роли collision и восстановление без ложного UP. - Диагностика добавлена в тест, логика ядра пока не менялась. Логи: /tmp/bgp-route-snapshot-2.log, - /tmp/bgp-route-detailed-2.log (повторы INIT с flag_up=0 при сохранённом remote_keepalive=1). +[+] **ETCP: входящий INIT сохранял устаревший признак обратной достижимости** — исправлено 23.10.2026: + Принятый INIT обновляет RX и remote_keepalive до переиспользования буфера для ответа; flag_up=0 снимает ложный UP. + INIT/INIT_RESPONSE и обычный RX публикуют переходы живости с защитой от close/удаления линка из callback. + При DOWN handshake продолжает ответ/keepalive; исправный второй линк сохраняет UP соединения. + INIT_RESPONSE проверяет длину тела (>=64 байт без timestamp/flag_up) и node_id до изменения состояния. + Раньше проверка общей длины принимала усечённое тело 61..63 байта. Новых таймеров/очередей/полей нет. + test_etcp_init_liveness: 130 отказов без изменения link/conn и передачи владения pkt, 12 допустимых ответов; + оба направления односторонней потери, оба порядка ключей, восстановление без смены эпохи, резервный линк, + close и удаление link из INIT/keepalive callback PASS, также с обычными часами. + Семь профильных тестов ASAN/UBSan с detect_leaks=1 PASS; дополненный тест удаления link повторён отдельно. + BGP route exchange: 100/100 PASS (AB:52; последние пять с debug). Основной набор: 184/184 PASS. + Логи: /tmp/etcp-init-boundary-before.log, /tmp/etcp-init-final-{liveness,realtime,asan-liveness}.log, + /tmp/etcp-init-fix-asan-test_*.log, /tmp/etcp-init-bgp-stable-*.log, /tmp/etcp-init-fix-full-check.log. [+] **ETCP/BBR: бюджет очереди в установившемся режиме** — реализовано 23.10.2026 по выбору пользователя: В PROBE_BW окно ограничено max(4*MSS, BDP + BW*20мс), с насыщением арифметики и учётом ACK/PROBE_UP резервов