diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index 56f13f89..52c9ec0d 100644 --- a/docs/ux-ui-external-acceptance.md +++ b/docs/ux-ui-external-acceptance.md @@ -703,3 +703,20 @@ flowchart LR Актуальное продолжение 2026-10-09: 12.5.77 завершил укрупнённый основной блок IPsec: достоверное чтение, запрет опроса выключенных устройств, совместимый RouterOS7 мастер, раздельные ID клиентов, безопаснее удаление, URL устройства/вкладки, Docker обеих частей и реальная приёмка. Local30/30 + context6/6 + backend67, live browser4/4, PSK и сертификатный защищённый GRE/Ping3/3 на двух CHR; cleanup/DB controls passed. Runtime backend/frontend ux-ipsec77, version1.0.0-test.ipsec77. Следующий12.5.78 — остаточная профильная приёмка IPsec: сопоставление active-peer/online, выдача mode-config, поздние ошибки операций и история восстановления; затем маршрутизация. Этап12.5 открыт. Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md). + +## 12.5.86 — BFD/OSPF: раздельные наблюдения реакции и маршрута (2026-10-09) + +**Проверка.** Собственная OSPFv2/GRE пара, link198.18.86.0/30 и loopbacks198.18.186.1/32↔2/32. BFD200ms×3, OSPF hello1s/dead20s. Два временных firewall filter правила блокировали только UDP3784 в input/output на своём GRE CHR2 и адресе private peer. Hello не блокировались. Временные memory logging rules bfd/ospf debug без packet; исходные правила не редактировались. Другие интерфейсы, default/public routes и пароли сохранены. + +| Сценарий | Первый BFD не Up | Первый сосед не Full | Первый маршрут не active | +| --- | --- | --- | --- | +| Только BFD UDP, окончательный run | 629ms | 630ms | 1845ms | +| Полная административная потеря своего GRE | 622ms | 622ms | 2842ms | + +Измерение начинается перед первой записью fault и включает RPC. Каждое GET имеет start/end в отчёте, три коллекции читаются одновременно, между раундами100ms. Это верхние границы первого наблюдения; точное время внутренних BFD/SPF событий и SLA не установлены. Native log подтверждает bfd down → state change to Down, но его timestamps имеют секундную точность. Удаление маршрута наблюдалось отдельно, позже потери соседа; прежние5245ms блока85 нельзя называть временем детектора BFD. + +**Существенное ограничение.** Первый BFD-only run обнаружил BFD Down за736ms и потерю Full за736ms, но к концу8,78s сосед снова Full, маршрут active; strict withdrawal assertion отказалась. Cleanup прошёл. При сохранённых Hello RouterOS может заново поднять adjacency даже с BFD Down: устойчивую блокировку маршрута и alternate-path failover эта проверка не доказывает. Окончательный run фиксирует первый transient withdrawal и не выдаётся за постоянную потерю маршрута. После снятия firewall fault и после включения GRE отдельно подтверждены BFD Up, OSPF Full и active route. + +**Результат.** [Очищенный отчёт](ux-ui/acceptance/ospf-bfd-timing-2026-10-09.json): HTTP samples, scoped native logs, initial-attempt summary, recovery и baseline. Все свои firewall/logging/OSPF/BFD/IP/bridge/GRE объекты удалены после exact-ID/атрибутов preflight. Исходные ID10 коллекций×2 совпали; оба CHR доступны. Продукт/зависимости/runtime не менялись, сборки/широкие регрессии не повторялись. Локальный коммит без push. Квота5% использовано после завершения. + +Настройки протокола подтверждены [MikroTik BFD](https://help.mikrotik.com/docs/spaces/ROS/pages/191299691/BFD), механика memory logging — [MikroTik Log](https://help.mikrotik.com/docs/spaces/ROS/pages/328094/Log). Продолжение87: собственные OSPF templates через production optimizer preview/apply, неизвестные/модельные метрики и частичный отказ без заявления полного успеха; далее recursive diagnostics. Этап12.5 остаётся открытым. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index 6ea781b8..5e5cd3d9 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,6 +1,6 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-09: 12.5.85 принял BFD Up на своей OSPF/GRE паре,4 live PC/320px UI checks и loss/withdrawal/recovery. Exact baseline8 коллекций×2 восстановлен. Наблюдение route withdrawal5,245ms не доказывает sub-second detection; timing/failover остаются открытыми. Runtime backend ux-routing83/frontend ux-ipsec77. Следующий12.5.86 — точный разбор BFD/OSPF/SPF timing и оставшиеся optimizer/recursive diagnostics по плану. Квота контрольной точки96%, работа остановлена после сохранения результата; этап12.5 открыт. +Актуальное продолжение 2026-10-09: 12.5.86 разделил наблюдения BFD/OSPF и удаления маршрута: BFD-only fault 629/630/1845ms; GRE loss 622/622/2842ms при dead20s. Это первые HTTP-наблюдения, не точные event timestamps/SLA. BFD-only допускает повторный Full при доступных Hello; устойчивый failover не принят. Baseline10 коллекций×2 восстановлен. Runtime backend ux-routing83/frontend ux-ipsec77. Следующий12.5.87 — реальная приёмка OSPF optimizer preview/apply и достоверность частичных операций; затем recursive diagnostics. Квота после блока5% использовано; этап12.5 открыт. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-09. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index 67bed056..431382a3 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-09: 12.5.85 принял BFD Up на своей OSPF/GRE паре,4 live PC/320px UI checks и loss/withdrawal/recovery. Exact baseline8 коллекций×2 восстановлен. Наблюдение route withdrawal5,245ms не доказывает sub-second detection; timing/failover остаются открытыми. Runtime backend ux-routing83/frontend ux-ipsec77. Следующий12.5.86 — точный разбор BFD/OSPF/SPF timing и оставшиеся optimizer/recursive diagnostics по плану. Квота контрольной точки96%, работа остановлена после сохранения результата; этап12.5 открыт. +Актуальное продолжение 2026-10-09: 12.5.86 разделил наблюдения BFD/OSPF и удаления маршрута: BFD-only fault 629/630/1845ms; GRE loss 622/622/2842ms при dead20s. Это первые HTTP-наблюдения, не точные event timestamps/SLA. BFD-only допускает повторный Full при доступных Hello; устойчивый failover не принят. Baseline10 коллекций×2 восстановлен. Runtime backend ux-routing83/frontend ux-ipsec77. Следующий12.5.87 — реальная приёмка OSPF optimizer preview/apply и достоверность частичных операций; затем recursive diagnostics. Квота после блока5% использовано; этап12.5 открыт. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -36,7 +36,24 @@ | 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 | | 11А | Пользователи, контейнеры, сертификаты и резервные копии | Завершён в границах локальной приёмки 2026-10-01; 11А.1–11А.33, внешние ограничения в 11А.33 | | 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 | -| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–85 и ограничения ниже. Runtime backend ux-routing83/frontend ux-ipsec77. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–86 и ограничения ниже. Runtime backend ux-routing83/frontend ux-ipsec77. | + +## 12.5.86 — BFD/OSPF: раздельные наблюдения реакции и маршрута (2026-10-09) + +**Проверка.** Собственная OSPFv2/GRE пара, link198.18.86.0/30 и loopbacks198.18.186.1/32↔2/32. BFD200ms×3, OSPF hello1s/dead20s. Два временных firewall filter правила блокировали только UDP3784 в input/output на своём GRE CHR2 и адресе private peer. Hello не блокировались. Временные memory logging rules bfd/ospf debug без packet; исходные правила не редактировались. Другие интерфейсы, default/public routes и пароли сохранены. + +| Сценарий | Первый BFD не Up | Первый сосед не Full | Первый маршрут не active | +| --- | --- | --- | --- | +| Только BFD UDP, окончательный run | 629ms | 630ms | 1845ms | +| Полная административная потеря своего GRE | 622ms | 622ms | 2842ms | + +Измерение начинается перед первой записью fault и включает RPC. Каждое GET имеет start/end в отчёте, три коллекции читаются одновременно, между раундами100ms. Это верхние границы первого наблюдения; точное время внутренних BFD/SPF событий и SLA не установлены. Native log подтверждает bfd down → state change to Down, но его timestamps имеют секундную точность. Удаление маршрута наблюдалось отдельно, позже потери соседа; прежние5245ms блока85 нельзя называть временем детектора BFD. + +**Существенное ограничение.** Первый BFD-only run обнаружил BFD Down за736ms и потерю Full за736ms, но к концу8,78s сосед снова Full, маршрут active; strict withdrawal assertion отказалась. Cleanup прошёл. При сохранённых Hello RouterOS может заново поднять adjacency даже с BFD Down: устойчивую блокировку маршрута и alternate-path failover эта проверка не доказывает. Окончательный run фиксирует первый transient withdrawal и не выдаётся за постоянную потерю маршрута. После снятия firewall fault и после включения GRE отдельно подтверждены BFD Up, OSPF Full и active route. + +**Результат.** [Очищенный отчёт](ux-ui/acceptance/ospf-bfd-timing-2026-10-09.json): HTTP samples, scoped native logs, initial-attempt summary, recovery и baseline. Все свои firewall/logging/OSPF/BFD/IP/bridge/GRE объекты удалены после exact-ID/атрибутов preflight. Исходные ID10 коллекций×2 совпали; оба CHR доступны. Продукт/зависимости/runtime не менялись, сборки/широкие регрессии не повторялись. Локальный коммит без push. Квота5% использовано после завершения. + +Настройки протокола подтверждены [MikroTik BFD](https://help.mikrotik.com/docs/spaces/ROS/pages/191299691/BFD), механика memory logging — [MikroTik Log](https://help.mikrotik.com/docs/spaces/ROS/pages/328094/Log). Продолжение87: собственные OSPF templates через production optimizer preview/apply, неизвестные/модельные метрики и частичный отказ без заявления полного успеха; далее recursive diagnostics. Этап12.5 остаётся открытым. ## 12.5.85 — BFD: реальные Up, потеря GRE и восстановление (2026-10-09) diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index a32960e3..36c7ba30 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -2012,3 +2012,20 @@ HTTP sampling показал withdrawal за5245ms при OSPF dead interval4000 **Очистка и фиксация.** На каждом run exact returned ID и name/comment/address/interface/interfaces сверены до удаления. OSPF templates/areas/instances, own BFD config/IP/bridge/GRE удалены; затем bounded route convergence и исходные IDs8 коллекций×2 совпали. Loss run тоже cleanup passed/error=null. Credentials прежние;195.195.195.195/32/default routes сохранены. Production backend routing83/PG healthy, frontend ipsec77 Up; временных контейнеров/fixture DB записей не осталось. UI/source/dependencies не менялись, сборки/миграции не запускались. Один локальный commit без push. Продолжение86: проверить раздельно BFD event и SPF withdrawal timing, затем профильные optimizer/recursive diagnostics, routing failover/масштаб в согласованных границах. Сохраняются Portal SSO/browser auth, multi-instance/physical disconnect/durable retry, client OS/IPv6/сложные DN/maximum throughput/полный PKI-policy restore ограничения82. Контрольная квота96%, дальнейшие mutations в этом окне не начинать. [MikroTik BFD](https://help.mikrotik.com/docs/spaces/ROS/pages/191299691/BFD) подтверждает отдельную configuration и use-bfd; acceptance основана на настоящем API и native состояниях. + +## 12.5.86 — BFD/OSPF: раздельные наблюдения реакции и маршрута (2026-10-09) + +**Проверка.** Собственная OSPFv2/GRE пара, link198.18.86.0/30 и loopbacks198.18.186.1/32↔2/32. BFD200ms×3, OSPF hello1s/dead20s. Два временных firewall filter правила блокировали только UDP3784 в input/output на своём GRE CHR2 и адресе private peer. Hello не блокировались. Временные memory logging rules bfd/ospf debug без packet; исходные правила не редактировались. Другие интерфейсы, default/public routes и пароли сохранены. + +| Сценарий | Первый BFD не Up | Первый сосед не Full | Первый маршрут не active | +| --- | --- | --- | --- | +| Только BFD UDP, окончательный run | 629ms | 630ms | 1845ms | +| Полная административная потеря своего GRE | 622ms | 622ms | 2842ms | + +Измерение начинается перед первой записью fault и включает RPC. Каждое GET имеет start/end в отчёте, три коллекции читаются одновременно, между раундами100ms. Это верхние границы первого наблюдения; точное время внутренних BFD/SPF событий и SLA не установлены. Native log подтверждает bfd down → state change to Down, но его timestamps имеют секундную точность. Удаление маршрута наблюдалось отдельно, позже потери соседа; прежние5245ms блока85 нельзя называть временем детектора BFD. + +**Существенное ограничение.** Первый BFD-only run обнаружил BFD Down за736ms и потерю Full за736ms, но к концу8,78s сосед снова Full, маршрут active; strict withdrawal assertion отказалась. Cleanup прошёл. При сохранённых Hello RouterOS может заново поднять adjacency даже с BFD Down: устойчивую блокировку маршрута и alternate-path failover эта проверка не доказывает. Окончательный run фиксирует первый transient withdrawal и не выдаётся за постоянную потерю маршрута. После снятия firewall fault и после включения GRE отдельно подтверждены BFD Up, OSPF Full и active route. + +**Результат.** [Очищенный отчёт](ux-ui/acceptance/ospf-bfd-timing-2026-10-09.json): HTTP samples, scoped native logs, initial-attempt summary, recovery и baseline. Все свои firewall/logging/OSPF/BFD/IP/bridge/GRE объекты удалены после exact-ID/атрибутов preflight. Исходные ID10 коллекций×2 совпали; оба CHR доступны. Продукт/зависимости/runtime не менялись, сборки/широкие регрессии не повторялись. Локальный коммит без push. Квота5% использовано после завершения. + +Настройки протокола подтверждены [MikroTik BFD](https://help.mikrotik.com/docs/spaces/ROS/pages/191299691/BFD), механика memory logging — [MikroTik Log](https://help.mikrotik.com/docs/spaces/ROS/pages/328094/Log). Продолжение87: собственные OSPF templates через production optimizer preview/apply, неизвестные/модельные метрики и частичный отказ без заявления полного успеха; далее recursive diagnostics. Этап12.5 остаётся открытым. diff --git a/docs/ux-ui/acceptance/ospf-bfd-timing-2026-10-09.json b/docs/ux-ui/acceptance/ospf-bfd-timing-2026-10-09.json new file mode 100644 index 00000000..49caab9b --- /dev/null +++ b/docs/ux-ui/acceptance/ospf-bfd-timing-2026-10-09.json @@ -0,0 +1,1099 @@ +{ + "date": "2026-10-09", + "name": "mm-ospf86-1791551363675", + "observations": [ + { + "serverId": 1, + "nativeNeighbor": { + ".id": "*F3FDDC00", + "router-id": "198.18.186.2", + "address": "198.18.86.2", + "interface": "mm-ospf86-1791551363675", + "state": "Full", + "state-changes": "6" + }, + "nativeRoute": { + ".id": "*2014C000", + "dst-address": "198.18.186.2/32", + "gateway": "198.18.86.2%mm-ospf86-1791551363675", + "ospf": "true", + "active": "true", + "distance": "110" + }, + "catalogNeighbors": [ + { + "id": "*F3FDDC00", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "address": "198.18.86.2", + "routerId": "198.18.186.2", + "instance": "mm-ospf86-1791551363675", + "area": "mm-ospf86-1791551363675", + "areaId": "0.0.0.0", + "interface": "mm-ospf86-1791551363675", + "state": "Full", + "uptime": "5s", + "stateChanges": 6, + "priority": null + } + ], + "catalogRoutes": [ + { + "id": "*2014C000", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "destination": "198.18.186.2/32", + "type": "Unknown", + "cost": null, + "nextHop": "198.18.86.2", + "via": "mm-ospf86-1791551363675", + "area": "" + } + ], + "pingReceived": 3 + }, + { + "serverId": 2, + "nativeNeighbor": { + ".id": "*F3FDDC00", + "router-id": "198.18.186.1", + "address": "198.18.86.1", + "interface": "mm-ospf86-1791551363675", + "state": "Full", + "state-changes": "5" + }, + "nativeRoute": { + ".id": "*2014C000", + "dst-address": "198.18.186.1/32", + "gateway": "198.18.86.1%mm-ospf86-1791551363675", + "ospf": "true", + "active": "true", + "distance": "110" + }, + "catalogNeighbors": [ + { + "id": "*F3FDDC00", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "address": "198.18.86.1", + "routerId": "198.18.186.1", + "instance": "mm-ospf86-1791551363675", + "area": "mm-ospf86-1791551363675", + "areaId": "0.0.0.0", + "interface": "mm-ospf86-1791551363675", + "state": "Full", + "uptime": "6s", + "stateChanges": 5, + "priority": null + } + ], + "catalogRoutes": [ + { + "id": "*2014C000", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "destination": "198.18.186.1/32", + "type": "Unknown", + "cost": null, + "nextHop": "198.18.86.1", + "via": "mm-ospf86-1791551363675", + "area": "" + } + ], + "pingReceived": 3 + } + ], + "cleanup": [ + { + "serverId": 1, + "/ip/firewall/filter": true, + "/system/logging": true, + "/routing/bfd/configuration": true, + "/routing/ospf/interface-template": true, + "/routing/ospf/area": true, + "/routing/ospf/instance": true, + "/interface/gre": true, + "/interface/bridge": true, + "/ip/address": true, + "/ip/route": true + }, + { + "serverId": 2, + "/ip/firewall/filter": true, + "/system/logging": true, + "/routing/bfd/configuration": true, + "/routing/ospf/interface-template": true, + "/routing/ospf/area": true, + "/routing/ospf/instance": true, + "/interface/gre": true, + "/interface/bridge": true, + "/ip/address": true, + "/ip/route": true + } + ], + "currentRoutes": [ + { + ".id": "*20145050", + "dst-address": "198.18.86.0/30", + "gateway": "mm-ospf86-1791551363675", + "active": "true", + "distance": "0", + "routing-table": "main" + }, + { + ".id": "*2014C000", + "dst-address": "198.18.186.1/32", + "gateway": "198.18.86.1%mm-ospf86-1791551363675", + "active": "true", + "ospf": "true", + "distance": "110", + "routing-table": "main" + }, + { + ".id": "*20145060", + "dst-address": "198.18.186.2/32", + "gateway": "mm-ospf86-1791551363675-loop", + "active": "true", + "distance": "0", + "routing-table": "main" + } + ], + "bfd": [ + { + "serverId": 1, + "native": [ + { + ".id": "*1", + "state": "up", + "remote-address": "198.18.86.2%mm-ospf86-1791551363675", + "local-address": "198.18.86.1%mm-ospf86-1791551363675", + "desired-tx-interval": "200ms", + "required-min-rx": "200ms", + "remote-min-rx": "200ms", + "multiplier": "3", + "packets-rx": "34", + "packets-tx": "36", + "state-changes": "2", + "multihop": "false" + } + ], + "catalog": [ + { + "id": "*1", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "localAddr": "198.18.86.1", + "remoteAddr": "198.18.86.2", + "interface": "mm-ospf86-1791551363675", + "state": "Up", + "uptime": "5s", + "multihop": false, + "multiplier": 3, + "txInterval": 200, + "rxInterval": 200, + "holdTime": 600, + "packetsRx": 31, + "packetsTx": 32, + "stateChanges": 2 + } + ] + }, + { + "serverId": 2, + "native": [ + { + ".id": "*1", + "state": "up", + "remote-address": "198.18.86.1%mm-ospf86-1791551363675", + "local-address": "198.18.86.2%mm-ospf86-1791551363675", + "desired-tx-interval": "200ms", + "required-min-rx": "200ms", + "remote-min-rx": "200ms", + "multiplier": "3", + "packets-rx": "39", + "packets-tx": "39", + "state-changes": "1", + "multihop": "false" + } + ], + "catalog": [ + { + "id": "*1", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "localAddr": "198.18.86.2", + "remoteAddr": "198.18.86.1", + "interface": "mm-ospf86-1791551363675", + "state": "Up", + "uptime": "6s", + "multihop": false, + "multiplier": 3, + "txInterval": 200, + "rxInterval": 200, + "holdTime": 600, + "packetsRx": 31, + "packetsTx": 31, + "stateChanges": 1 + } + ] + } + ], + "timing": { + "fault": "bidirectional BFD-only UDP3784 drop on own CHR2 GRE", + "deadIntervalMs": 20000, + "nominalHoldMs": 600, + "faultAcknowledgedMs": 145.4294520000003, + "firstBfdNotUp": 628.723688, + "firstNeighborNotFull": 629.9366069999996, + "firstRouteWithdrawn": 1844.5897260000002, + "samples": [ + { + "kind": "bfd", + "startedMs": 145.80076999999983, + "endedMs": 211.16646199999923, + "state": [ + { + "state": "up", + "holdTime": "600ms", + "actualTx": "200ms", + "changes": "1" + } + ] + }, + { + "kind": "neighbor", + "startedMs": 146.08987800000068, + "endedMs": 274.24926199999936, + "state": [ + { + "state": "Full", + "changes": "5" + } + ] + }, + { + "kind": "route", + "startedMs": 146.45447000000058, + "endedMs": 278.105603, + "state": [ + { + "active": "true", + "ospf": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 378.7555940000002, + "endedMs": 454.590381, + "state": [ + { + "state": "up", + "holdTime": "600ms", + "actualTx": "200ms", + "changes": "1" + } + ] + }, + { + "kind": "neighbor", + "startedMs": 379.15131999999903, + "endedMs": 453.2838759999995, + "state": [ + { + "state": "Full", + "changes": "5" + } + ] + }, + { + "kind": "route", + "startedMs": 379.3609699999997, + "endedMs": 459.23505099999966, + "state": [ + { + "active": "true", + "ospf": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 559.7371879999992, + "endedMs": 628.723688, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 560.1174489999994, + "endedMs": 629.9366069999996, + "state": [] + }, + { + "kind": "route", + "startedMs": 560.2181689999998, + "endedMs": 628.3639750000002, + "state": [ + { + "active": "true", + "ospf": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 733.7990759999993, + "endedMs": 799.7861659999999, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 734.1571050000002, + "endedMs": 799.4638269999996, + "state": [] + }, + { + "kind": "route", + "startedMs": 734.2421680000007, + "endedMs": 803.5731689999993, + "state": [ + { + "active": "true", + "ospf": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 903.9271549999994, + "endedMs": 974.4152919999997, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 904.2128819999998, + "endedMs": 974.1505849999994, + "state": [] + }, + { + "kind": "route", + "startedMs": 904.2878180000007, + "endedMs": 979.6840269999993, + "state": [ + { + "active": "true", + "ospf": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 1080.0341850000004, + "endedMs": 1149.2165829999994, + "state": [ + { + "state": "down", + "actualTx": "1s", + "changes": "0" + } + ] + }, + { + "kind": "neighbor", + "startedMs": 1080.311635, + "endedMs": 1149.5092929999992, + "state": [ + { + "state": "ExStart", + "changes": "2" + } + ] + }, + { + "kind": "route", + "startedMs": 1080.3865019999994, + "endedMs": 1148.1763520000004, + "state": [ + { + "active": "true", + "ospf": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 1248.953974, + "endedMs": 1315.8067410000003, + "state": [ + { + "state": "down", + "actualTx": "1s", + "changes": "0" + } + ] + }, + { + "kind": "neighbor", + "startedMs": 1249.3889889999991, + "endedMs": 1316.9467920000006, + "state": [ + { + "state": "ExStart", + "changes": "2" + } + ] + }, + { + "kind": "route", + "startedMs": 1249.4858019999992, + "endedMs": 1320.9522159999997, + "state": [ + { + "active": "true", + "ospf": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 1421.483435, + "endedMs": 1488.726634999999, + "state": [ + { + "state": "down", + "actualTx": "1s", + "changes": "0" + } + ] + }, + { + "kind": "neighbor", + "startedMs": 1421.8601180000005, + "endedMs": 1491.9042379999992, + "state": [ + { + "state": "ExStart", + "changes": "2" + } + ] + }, + { + "kind": "route", + "startedMs": 1421.950256, + "endedMs": 1494.117005, + "state": [ + { + "active": "true", + "ospf": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 1594.4926269999996, + "endedMs": 1665.7575899999993, + "state": [ + { + "state": "down", + "actualTx": "1s", + "changes": "0" + } + ] + }, + { + "kind": "neighbor", + "startedMs": 1594.8128359999992, + "endedMs": 1666.6293979999991, + "state": [ + { + "state": "ExStart", + "changes": "2" + } + ] + }, + { + "kind": "route", + "startedMs": 1594.8895929999999, + "endedMs": 1663.4181090000002, + "state": [ + { + "active": "true", + "ospf": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 1767.064273, + "endedMs": 1838.2159360000005, + "state": [ + { + "state": "down", + "actualTx": "1s", + "changes": "0" + } + ] + }, + { + "kind": "neighbor", + "startedMs": 1767.363405, + "endedMs": 1836.698644, + "state": [ + { + "state": "ExStart", + "changes": "2" + } + ] + }, + { + "kind": "route", + "startedMs": 1767.441730999999, + "endedMs": 1844.5897260000002, + "state": [] + } + ], + "logs": [ + { + "time": "2026-10-09 15:09:35", + "topics": "system,info", + "message": "filter rule added by api:admin@:: (*3 = /ip firewall filter add action=drop chain=input comment=mm-ospf86-1791551363675-bfd-input dst-port=3784 in-interface=mm-ospf86-1791551363675 protocol=udp src-address=198.18.86.1)" + }, + { + "time": "2026-10-09 15:09:35", + "topics": "system,info", + "message": "filter rule added by api:admin@:: (*4 = /ip firewall filter add action=drop chain=output comment=mm-ospf86-1791551363675-bfd-output dst-address=198.18.86.1 dst-port=3784 out-interface=mm-ospf86-1791551363675 protocol=udp)" + }, + { + "time": "2026-10-09 15:09:36", + "topics": "route,ospf,info", + "message": "mm-ospf86-1791551363675 { version: 2 router-id: 198.18.186.2 } mm-ospf86-1791551363675 { 0.0.0.0 } interface { p2p 198.18.86.2%mm-ospf86-1791551363675 } neighbor { router-id: 198.18.186.1 state: Full } bfd down" + }, + { + "time": "2026-10-09 15:09:36", + "topics": "route,ospf,info", + "message": "mm-ospf86-1791551363675 { version: 2 router-id: 198.18.186.2 } mm-ospf86-1791551363675 { 0.0.0.0 } interface { p2p 198.18.86.2%mm-ospf86-1791551363675 } neighbor { router-id: 198.18.186.1 state: Full } state change to Down" + }, + { + "time": "2026-10-09 15:09:36", + "topics": "route,ospf,debug", + "message": "mm-ospf86-1791551363675: mm-ospf86-1791551363675 { version: 2 router-id: 198.18.186.2 } mm-ospf86-1791551363675 { 0.0.0.0 } lsa { router originator: 198.18.186.2 id: 198.18.186.2 seq: 0x80000002 csum: 0x125a } originator update" + }, + { + "time": "2026-10-09 15:09:36", + "topics": "route,ospf,info", + "message": "mm-ospf86-1791551363675 { version: 2 router-id: 198.18.186.2 } mm-ospf86-1791551363675 { 0.0.0.0 } interface { p2p 198.18.86.2%mm-ospf86-1791551363675 } neighbor { router-id: 198.18.186.1 state: Down } state change to Init" + }, + { + "time": "2026-10-09 15:09:36", + "topics": "route,ospf,info", + "message": "mm-ospf86-1791551363675 { version: 2 router-id: 198.18.186.2 } mm-ospf86-1791551363675 { 0.0.0.0 } interface { p2p 198.18.86.2%mm-ospf86-1791551363675 } neighbor { router-id: 198.18.186.1 state: Init } state change to ExStart" + }, + { + "time": "2026-10-09 15:09:36", + "topics": "route,ospf,debug", + "message": "mm-ospf86-1791551363675: mm-ospf86-1791551363675 { version: 2 router-id: 198.18.186.2 } calc schedule" + }, + { + "time": "2026-10-09 15:09:36", + "topics": "route,ospf,debug", + "message": "mm-ospf86-1791551363675: mm-ospf86-1791551363675 { version: 2 router-id: 198.18.186.2 } mm-ospf86-1791551363675 { 0.0.0.0 } lsa { router originator: 198.18.186.2 id: 198.18.186.2 seq: 0x80000003 csum: 0xcf79 } flooding" + }, + { + "time": "2026-10-09 15:09:37", + "topics": "route,ospf,debug", + "message": "mm-ospf86-1791551363675: mm-ospf86-1791551363675 { version: 2 router-id: 198.18.186.2 } calc start" + }, + { + "time": "2026-10-09 15:09:37", + "topics": "route,ospf,debug", + "message": "mm-ospf86-1791551363675: mm-ospf86-1791551363675 { version: 2 router-id: 198.18.186.2 } mm-ospf86-1791551363675 { 0.0.0.0 } calc spt" + }, + { + "time": "2026-10-09 15:09:37", + "topics": "route,ospf,debug", + "message": "mm-ospf86-1791551363675: mm-ospf86-1791551363675 { version: 2 router-id: 198.18.186.2 } process summaries for mm-ospf86-1791551363675 { version: 2 router-id: 198.18.186.2 } mm-ospf86-1791551363675 { 0.0.0.0 }" + }, + { + "time": "2026-10-09 15:09:37", + "topics": "route,ospf,debug", + "message": "mm-ospf86-1791551363675: mm-ospf86-1791551363675 { version: 2 router-id: 198.18.186.2 } process externals" + }, + { + "time": "2026-10-09 15:09:37", + "topics": "route,ospf,debug", + "message": "mm-ospf86-1791551363675: mm-ospf86-1791551363675 { version: 2 router-id: 198.18.186.2 } install routes" + }, + { + "time": "2026-10-09 15:09:37", + "topics": "route,ospf,debug", + "message": "mm-ospf86-1791551363675: mm-ospf86-1791551363675 { version: 2 router-id: 198.18.186.2 } post process summaries" + }, + { + "time": "2026-10-09 15:09:37", + "topics": "route,ospf,debug", + "message": "mm-ospf86-1791551363675: mm-ospf86-1791551363675 { version: 2 router-id: 198.18.186.2 } calc done" + } + ], + "recovered": true, + "routeWithdrawalObserved": true, + "lastSamples": [ + { + "kind": "bfd", + "startedMs": 1767.064273, + "endedMs": 1838.2159360000005, + "state": [ + { + "state": "down", + "actualTx": "1s", + "changes": "0" + } + ] + }, + { + "kind": "neighbor", + "startedMs": 1767.363405, + "endedMs": 1836.698644, + "state": [ + { + "state": "ExStart", + "changes": "2" + } + ] + }, + { + "kind": "route", + "startedMs": 1767.441730999999, + "endedMs": 1844.5897260000002, + "state": [] + } + ], + "note": "First non-Up/non-Full/non-active observation, not continuous outage or exact event timestamp. Native memory log timestamps have one-second precision." + }, + "greControl": { + "fault": "own GRE administratively disabled", + "deadIntervalMs": 20000, + "acknowledgedMs": 37.317331999998714, + "samples": [ + { + "kind": "bfd", + "startedMs": 37.459984000000986, + "endedMs": 109.20055099999809, + "state": [ + { + "state": "up", + "holdTime": "600ms" + } + ] + }, + { + "kind": "neighbor", + "startedMs": 37.67235200000141, + "endedMs": 109.55557399999816, + "state": [ + { + "state": "Full" + } + ] + }, + { + "kind": "route", + "startedMs": 37.79469799999788, + "endedMs": 108.63208400000076, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 209.97085900000093, + "endedMs": 280.9229180000002, + "state": [ + { + "state": "up", + "holdTime": "600ms" + } + ] + }, + { + "kind": "neighbor", + "startedMs": 210.2944669999997, + "endedMs": 279.81998300000123, + "state": [ + { + "state": "Full" + } + ] + }, + { + "kind": "route", + "startedMs": 210.40061799999967, + "endedMs": 283.5772480000014, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 384.00521500000104, + "endedMs": 450.88905499999964, + "state": [ + { + "state": "up", + "holdTime": "600ms" + } + ] + }, + { + "kind": "neighbor", + "startedMs": 384.3428529999983, + "endedMs": 450.5511399999996, + "state": [ + { + "state": "Full" + } + ] + }, + { + "kind": "route", + "startedMs": 384.45173799999975, + "endedMs": 452.9352719999988, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 553.4677310000006, + "endedMs": 622.0164130000012, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 553.8067599999995, + "endedMs": 622.3681240000005, + "state": [] + }, + { + "kind": "route", + "startedMs": 553.9096170000012, + "endedMs": 622.6630619999996, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 722.0461230000001, + "endedMs": 789.0051749999984, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 722.3492650000007, + "endedMs": 788.1174399999982, + "state": [] + }, + { + "kind": "route", + "startedMs": 722.4378429999997, + "endedMs": 791.8304810000009, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 892.1873430000014, + "endedMs": 956.9726540000011, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 892.4822720000011, + "endedMs": 958.5225619999983, + "state": [] + }, + { + "kind": "route", + "startedMs": 892.5608990000001, + "endedMs": 962.6321360000002, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 1062.3655059999983, + "endedMs": 1132.1438600000001, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 1062.7662280000004, + "endedMs": 1134.1992299999984, + "state": [] + }, + { + "kind": "route", + "startedMs": 1062.861582999998, + "endedMs": 1131.6688619999986, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 1234.634665999998, + "endedMs": 1304.1655729999984, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 1234.9955520000003, + "endedMs": 1304.7677609999992, + "state": [] + }, + { + "kind": "route", + "startedMs": 1235.076359999999, + "endedMs": 1303.829221, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 1405.2022240000006, + "endedMs": 1471.9817909999983, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 1405.6153559999984, + "endedMs": 1471.5852989999985, + "state": [] + }, + { + "kind": "route", + "startedMs": 1405.7077610000015, + "endedMs": 1473.6682909999981, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 1573.3344519999991, + "endedMs": 1643.0555129999993, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 1573.6752469999992, + "endedMs": 1642.3247100000008, + "state": [] + }, + { + "kind": "route", + "startedMs": 1573.781916, + "endedMs": 1641.9829409999984, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 1743.4861950000013, + "endedMs": 1814.183151000001, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 1743.8553350000002, + "endedMs": 1814.8422490000012, + "state": [] + }, + { + "kind": "route", + "startedMs": 1743.9441939999997, + "endedMs": 1813.3654290000013, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 1915.3259599999983, + "endedMs": 1983.5884210000004, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 1915.7164789999988, + "endedMs": 1983.3062019999998, + "state": [] + }, + { + "kind": "route", + "startedMs": 1915.8003419999986, + "endedMs": 1988.3805629999988, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 2089.665032000001, + "endedMs": 2160.8429959999994, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 2090.0549390000015, + "endedMs": 2157.437857000001, + "state": [] + }, + { + "kind": "route", + "startedMs": 2090.1357639999987, + "endedMs": 2159.033875000001, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 2261.291526000001, + "endedMs": 2327.5986249999987, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 2261.659384999999, + "endedMs": 2331.895055000001, + "state": [] + }, + { + "kind": "route", + "startedMs": 2261.7406139999985, + "endedMs": 2332.286605000001, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 2432.9289519999984, + "endedMs": 2498.4643399999986, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 2433.2715419999986, + "endedMs": 2498.710618000001, + "state": [] + }, + { + "kind": "route", + "startedMs": 2433.3576360000006, + "endedMs": 2501.8853469999995, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 2602.333781999998, + "endedMs": 2668.363140999998, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 2602.671682, + "endedMs": 2668.0180489999984, + "state": [] + }, + { + "kind": "route", + "startedMs": 2602.7461550000007, + "endedMs": 2671.763586000001, + "state": [ + { + "active": "true" + } + ] + }, + { + "kind": "bfd", + "startedMs": 2772.6727109999993, + "endedMs": 2838.9760449999994, + "state": [] + }, + { + "kind": "neighbor", + "startedMs": 2773.0074319999985, + "endedMs": 2838.6855069999983, + "state": [] + }, + { + "kind": "route", + "startedMs": 2773.080479, + "endedMs": 2842.0176539999993, + "state": [] + } + ], + "firstBfdNotUp": 622.0164130000012, + "firstNeighborNotFull": 622.3681240000005, + "firstRouteWithdrawn": 2842.0176539999993, + "recovered": true + }, + "initialAttempt": { + "bfdNotUpMs": 736.057562, + "neighborNotFullMs": 736.355774, + "routeWithdrawalObserved": false, + "observationWindowMs": 8783.37507, + "laterNeighborFull": true, + "cleanupMatched": true, + "outcome": "Strict withdrawal assertion failed. Isolated BFD drop allowed OSPF adjacency restart; persistent failover was not accepted." + } +}