Identify one-way INIT liveness defect behind intermittent BGP failure

This commit is contained in:
evgeny committed 2026-10-23 13:14:51 +02:00
1 parent d061b1b65c
commit f4ddd484e9
2 files changed
+13 -2

No files matched your search

+10
View File
@@ -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 отключает политику.
+3 -2
View File
@@ -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.
*