From f4ddd484e96650ffd83ef368b19ca14ce83ce4e6 Mon Sep 17 00:00:00 2001 From: evgeny Date: Fri, 23 Oct 2026 13:14:51 +0200 Subject: [PATCH] Identify one-way INIT liveness defect behind intermittent BGP failure --- doc/tasks.md | 10 ++++++++++ tests/test_bgp_route_exchange.c | 5 +++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/doc/tasks.md b/doc/tasks.md index 555c43588..20fba21d2 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -48,6 +48,16 @@ Лог: /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/BBR: бюджет очереди в установившемся режиме** — реализовано 23.10.2026 по выбору пользователя: В PROBE_BW окно ограничено max(4*MSS, BDP + BW*20мс), с насыщением арифметики и учётом ACK/PROBE_UP резервов внутри общего предела. Ограничение применяется также на fast path и до callback. 0 отключает политику. diff --git a/tests/test_bgp_route_exchange.c b/tests/test_bgp_route_exchange.c index 3e1b9f36b..38449bd9c 100644 --- a/tests/test_bgp_route_exchange.c +++ b/tests/test_bgp_route_exchange.c @@ -1,9 +1,10 @@ /** * @file test_bgp_route_exchange.c - * @brief Тест цепочной BGP-маршрутизации A↔B↔C с эмуляцией потерь через dummynet_filter + * @brief Тест цепочной BGP-маршрутизации A↔B↔C с управляемыми потерями через send_hook * * Топология: A (2 линка) ↔ B (2 линка к A, 1 к C) ↔ C (1 линк) - * Потери имитируются через dummynet_filter, встроенный в send-путь линка. + * test_connection_loss отбрасывает исходящие пакеты выбранной стороны, включая новые линки пары. + * Обратное направление остаётся доступным: проверяется также распространение признака неработоспособности. * A и C принимают только ключ B: recovery не может обойти разрыв цепочки. * Автоматическое построение обходного пути проверяет test_topo_recovery. *