diff --git a/app/(main)/ospf/page.tsx b/app/(main)/ospf/page.tsx index f4f2337e..8c75409a 100644 --- a/app/(main)/ospf/page.tsx +++ b/app/(main)/ospf/page.tsx @@ -5,7 +5,7 @@ import { OspfTopologyScope } from "@/components/ospf-topology-scope" import { usePrefersReducedMotion } from "@/hooks/use-prefers-reduced-motion" import { deriveOspfRouterIdentity } from "@/lib/ospf-router-identity" import { buildOspfCostIndex, ospfCostKey } from "@/lib/ospf-cost" -import { normalizeOspfState, normalizeBfdState, ospfNodeState, type OspfNeighborState, type BfdState } from "@/lib/ospf-state" +import { normalizeOspfState, normalizeBfdState, ospfNodeState, ospfBfdConflicts, type OspfNeighborState, type BfdState } from "@/lib/ospf-state" import { useMemo, useState, useEffect, useRef, Suspense } from "react" import { useSearchParams } from "next/navigation" import { readOspfUrl, patchOspfUrl, type OspfTab } from "@/lib/ospf-url-state" @@ -62,6 +62,7 @@ interface OspfItem { } interface OspfNeighbor { + neighborAddress?: string id: string localRouter: string localLabel: string @@ -136,6 +137,7 @@ function backendToNeighbor(b: BackendNeighbor, ifaceMap: Map navigate({ q: value }, true)} onSelectNode={node => navigate({ node })} onSelectServer={id => navigate({ server: id === ALL_SERVERS_ID ? null : id, node: null })} onSelectTab={tab => navigate({ tab: tab === "interfaces" ? null : tab })} onResetContext={() => navigate({ server: null, tab: null, q: null, node: null })} /> + return navigate({ q: value }, true)} onSelectNode={node => navigate({ node })} onSelectServer={id => navigate({ server: id === ALL_SERVERS_ID ? null : id, node: null })} onSelectTab={tab => navigate({ tab: tab === "interfaces" ? null : tab })} onInspectBfd={() => navigate({ tab: "bfd", q: null })} onResetContext={() => navigate({ server: null, tab: null, q: null, node: null })} /> } -function OspfPageContent({ search, selectedNodeId, onSearch, onSelectNode, filterServerId, activeTab, contextError, onSelectServer, onSelectTab, onResetContext }: { search: string; selectedNodeId: string | null; onSearch: (value: string) => void; onSelectNode: (id: string | null) => void; filterServerId: string; activeTab: OspfTab; contextError: string | null; onSelectServer: (id: string) => void; onSelectTab: (tab: OspfTab) => void; onResetContext: () => void }) { +function OspfPageContent({ search, selectedNodeId, onSearch, onSelectNode, filterServerId, activeTab, contextError, onSelectServer, onSelectTab, onInspectBfd, onResetContext }: { search: string; selectedNodeId: string | null; onSearch: (value: string) => void; onSelectNode: (id: string | null) => void; filterServerId: string; activeTab: OspfTab; contextError: string | null; onSelectServer: (id: string) => void; onSelectTab: (tab: OspfTab) => void; onInspectBfd: () => void; onResetContext: () => void }) { const { mode, backendUrl } = useDataSource() const isLive = mode === "live" @@ -1272,6 +1274,7 @@ function OspfPageContent({ search, selectedNodeId, onSearch, onSelectNode, filte const scopedNeighbors = unavailable ? [] : filterServerId === ALL_SERVERS_ID ? neighbors : neighbors.filter(n => n.localRouter === filterServerId) const scopedBfdSessions = unavailable ? [] : filterServerId === ALL_SERVERS_ID ? bfdSessions : bfdSessions.filter(b => b.serverId === filterServerId) const scopedRoutes = unavailable ? [] : filterServerId === ALL_SERVERS_ID ? routes : routes.filter(r => r.serverId === filterServerId) + const bfdConflicts = ospfBfdConflicts(scopedNeighbors, scopedItems, scopedBfdSessions) const query = search.trim().toLocaleLowerCase("ru") const matches = (...fields: (string | number | null | undefined)[]) => !query || fields.some(field => String(field ?? "").toLocaleLowerCase("ru").includes(query)) const displayItems = scopedItems.filter(i => matches(i.routerLabel, i.interfaceName, i.area, i.type)) @@ -1350,6 +1353,7 @@ function OspfPageContent({ search, selectedNodeId, onSearch, onSelectNode, filte
{unavailable && Контекст OSPF недоступен{contextError ?? `Сервер ${filterServerId} отсутствует среди доступных устройств.`}} + {bfdConflicts.length > 0 && OSPF Full при недоступном BFDПоследний опрос: {bfdConflicts.map(n => `${n.localLabel} · ${n.localIface}`).join("; ")} — OSPF Full, BFD не Up. Проверьте канал: Full не подтверждает работу BFD.} onSearch("")}>Сбросить поиск : undefined} /> {/* data source banner */} {isLive && loading && ( diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index 5eda356e..f92db034 100644 --- a/docs/ux-ui-external-acceptance.md +++ b/docs/ux-ui-external-acceptance.md @@ -1,6 +1,6 @@ # UX/UI: протокол внешней приёмки 12.5 -Актуальное продолжение 2026-10-11: завершён12.5.152 — WireGuard IPv6 static lifecycle/create/PATCH/history/delete и single-address RSC/conf export/import.29 real API cases, native handshake/Ping3/3×2,33 disabled-server API/SQL cases всех трёх типов с zero ROS contacts,56 backend tests/профили GRE и контейнеров/live maps,10 E2E/types/ESLint/builds/984 parity/live PC/mobile passed. Runtime backend/frontend ux-wg152 healthy;12.5 открыт. Следующий153 — OSPF/BFD sustained gate: BFD-only loss при сохранённых OSPF Hello на собственных GRE, восстановление и independent cleanup. +Актуальное продолжение 2026-10-11: завершён12.5.153 — предупреждение Full/BFD Down с точным device/interface/peer binding и переходом к BFD без потери device context.51 native rounds/30s подтвердили поздние Full+active при BFD Down; sustained route gate не гарантирован, а не ошибочно принят. Recovery/Ping3/3×2/10 baseline collections×2/cleanup,3 unit/9 E2E/2 real source UI/2 deployed smoke/types/ESLint/frontend build passed. Runtime backend ux-wg152/frontend ux-ospf153 healthy;12.5 открыт. Следующий154 — OSPFv3 IPv6 routes: добавить оба route catalogs с family-safe IDs и проверить собственную GRE IPv6 пару. IPsec78: реальный PSK responder established, mode-config198.18.78.10 и online=true подтверждены API; точные собственные объекты удалены. Сертификатный/DN online, late failure и history restore остаются открытыми. [Отчёт](ux-ui/acceptance/ipsec-mode-config-2026-10-09.json), [журнал](ux-ui-progress.md). @@ -696,7 +696,7 @@ flowchart LR ## 12.5.77 — основной блок IPsec (2026-10-09) -Актуальное продолжение 2026-10-11: завершён12.5.152 — WireGuard IPv6 static lifecycle/create/PATCH/history/delete и single-address RSC/conf export/import.29 real API cases, native handshake/Ping3/3×2,33 disabled-server API/SQL cases всех трёх типов с zero ROS contacts,56 backend tests/профили GRE и контейнеров/live maps,10 E2E/types/ESLint/builds/984 parity/live PC/mobile passed. Runtime backend/frontend ux-wg152 healthy;12.5 открыт. Следующий153 — OSPF/BFD sustained gate: BFD-only loss при сохранённых OSPF Hello на собственных GRE, восстановление и independent cleanup. +Актуальное продолжение 2026-10-11: завершён12.5.153 — предупреждение Full/BFD Down с точным device/interface/peer binding и переходом к BFD без потери device context.51 native rounds/30s подтвердили поздние Full+active при BFD Down; sustained route gate не гарантирован, а не ошибочно принят. Recovery/Ping3/3×2/10 baseline collections×2/cleanup,3 unit/9 E2E/2 real source UI/2 deployed smoke/types/ESLint/frontend build passed. Runtime backend ux-wg152/frontend ux-ospf153 healthy;12.5 открыт. Следующий154 — OSPFv3 IPv6 routes: добавить оба route catalogs с family-safe IDs и проверить собственную GRE IPv6 пару. Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md). @@ -1669,3 +1669,17 @@ Runtime backend/frontend ux-wg152 healthy; deployed live read-only catalog/creat Протоколы: [native/cleanup](ux-ui/acceptance/wireguard-ipv6-native-2026-10-11.json), [API/history/import/export](ux-ui/acceptance/wireguard-ipv6-api-history-2026-10-11.json), [33 SQL/API gates](ux-ui/acceptance/network-disabled-sql-2026-10-11.json), [до исправления getter](ux-ui/acceptance/wireguard-ipv6-before-gate-api-2026-10-11.json), [compiled](ux-ui/acceptance/wireguard-ipv6-compiled-2026-10-11.json), [live UI](ux-ui/acceptance/wireguard-ipv6-smoke-2026-10-11.json). Следующий153 — sustained OSPF/BFD-only gate и recovery на собственных GRE;12.5 остаётся открытым. + +## 12.5.153 — граница OSPF/BFD и предупреждение конфликта состояний (2026-10-11) + +В существующей OSPF странице ReUI/Frame/base-nova добавлено предупреждение последнего опроса: OSPF Full при наблюдаемом BFD Down/AdminDown. Correlation требует точный server/interface/neighbor IP, explicit active/useBfd=true, одну direct multihop=false BFD session и свежие данные; чужое устройство/интерфейс/peer, duplicate sessions, unknown/multihop/inactive/non-BFD template не создают вывод. Native Full/route states и правила RouterOS не меняются. Переход Проверить BFD сохраняет server/node context и атомарно снимает search, чтобы найденная сессия была видна. Референс остаётся существующий ReUI Data Grid/Frame, новые vendor components не устанавливались. + +На обоих CHR собственные GRE198.18.153.0/30 и OSPFv2 loopbacks198.18.253.1/32↔2/32, hello1s/dead20s, BFD200ms×3. Два own firewall правила на CHR2 блокировали только UDP3784 input/output на own GRE с exact private src/dst. Protocol89/ICMP не блокировались; OSPF Hello отдельным packet capture не измерялся.51 native rounds около30s: BFD Down наблюдался, в поздних samples после20s оба OSPF neighbors Full и own route active. Это подтверждает отсутствие гарантированного постоянного route gate при BFD-only ACL loss; непрерывность каждого пакета/мгновенного состояния не заявляется. Data plane initial/fault/recovery Ping3/3×2. После удаления fault — BFD Up/Full/active, затем собственные firewall/OSPF/BFD/IP/bridge/GRE objects удалены.10 static collections×2 совпали с baseline; filter/BFD config order также сравнивался. Default/public routes и пароли сохранены. + +UI native positive проверена в source Next dev3133 с настоящим backend8000, без JSON mocks и browser mutations:1440/320 показывают alert+native Full; переход ведёт к реальному Down, сохраняет server и очищает q. Скриншоты [1440](ux-ui/screens/ospf-bfd-conflict153-1440-2026-10-11.png), [320](ux-ui/screens/ospf-bfd-conflict153-320-2026-10-11.png); мобильный экран визуально проверен.3 unit cases,9 controlled E2E с recovery/foreign/non-BFD/unknown и previous data-cache scenarios, source types/ESLint passed. Read-only deployed PC/mobile smoke после cleanup подтвердил отсутствие ложного alert. + +Frontend production build прошёл с окончательным source context; frontend ux-ospf153 развёрнут, backend ux-wg152/PG healthy. Первоначальная SCP сессия истекла в ожидании пароля; первый frontend candidate был собран без delta и не развёртывался. Context пересинхронизирован/хеш проверен, финальная сборка повторена и принята. Backend code/build не менялись, broad regression не повторялась. Только собственный завершённый container6a521d… удалён после exact-ID/state check; background main polling продолжался, собственная SQL база не создавалась. + +Правила конфигурации сверены с [MikroTik BFD](https://manual.mikrotik.com/docs/user-guides/routing-and-networking-protocols/unicast/bfd/). Протоколы: [native51 samples/recovery/cleanup](ux-ui/acceptance/ospf-bfd-sustained-2026-10-11.json), [real source UI](ux-ui/acceptance/ospf-bfd-live-source-2026-10-11.json), [deployed smoke](ux-ui/acceptance/ospf-bfd-deployed-smoke-2026-10-11.json). + +Границы: sustained BFD-only gate не гарантирован на RouterOS7.24.5; программа показывает реально наблюдаемый конфликт и не навязывает новые network rules. IPv6/scale/independent WAN/continuous packet loss/SLA не приняты этим блоком. Следующий154 — OSPFv3 IPv6 routes; существующий catalog читает только /ip/route, требуется family-safe /ipv6/route.12.5 открыт. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index 4465ef4f..817c3a46 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,12 +1,12 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-11: завершён12.5.152 — WireGuard IPv6 static lifecycle/create/PATCH/history/delete и single-address RSC/conf export/import.29 real API cases, native handshake/Ping3/3×2,33 disabled-server API/SQL cases всех трёх типов с zero ROS contacts,56 backend tests/профили GRE и контейнеров/live maps,10 E2E/types/ESLint/builds/984 parity/live PC/mobile passed. Runtime backend/frontend ux-wg152 healthy;12.5 открыт. Следующий153 — OSPF/BFD sustained gate: BFD-only loss при сохранённых OSPF Hello на собственных GRE, восстановление и independent cleanup. +Актуальное продолжение 2026-10-11: завершён12.5.153 — предупреждение Full/BFD Down с точным device/interface/peer binding и переходом к BFD без потери device context.51 native rounds/30s подтвердили поздние Full+active при BFD Down; sustained route gate не гарантирован, а не ошибочно принят. Recovery/Ping3/3×2/10 baseline collections×2/cleanup,3 unit/9 E2E/2 real source UI/2 deployed smoke/types/ESLint/frontend build passed. Runtime backend ux-wg152/frontend ux-ospf153 healthy;12.5 открыт. Следующий154 — OSPFv3 IPv6 routes: добавить оба route catalogs с family-safe IDs и проверить собственную GRE IPv6 пару. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-10. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. ## Актуальная точка продолжения — 2026-10-10 -Актуальное продолжение 2026-10-11: завершён12.5.152 — WireGuard IPv6 static lifecycle/create/PATCH/history/delete и single-address RSC/conf export/import.29 real API cases, native handshake/Ping3/3×2,33 disabled-server API/SQL cases всех трёх типов с zero ROS contacts,56 backend tests/профили GRE и контейнеров/live maps,10 E2E/types/ESLint/builds/984 parity/live PC/mobile passed. Runtime backend/frontend ux-wg152 healthy;12.5 открыт. Следующий153 — OSPF/BFD sustained gate: BFD-only loss при сохранённых OSPF Hello на собственных GRE, восстановление и independent cleanup. +Актуальное продолжение 2026-10-11: завершён12.5.153 — предупреждение Full/BFD Down с точным device/interface/peer binding и переходом к BFD без потери device context.51 native rounds/30s подтвердили поздние Full+active при BFD Down; sustained route gate не гарантирован, а не ошибочно принят. Recovery/Ping3/3×2/10 baseline collections×2/cleanup,3 unit/9 E2E/2 real source UI/2 deployed smoke/types/ESLint/frontend build passed. Runtime backend ux-wg152/frontend ux-ospf153 healthy;12.5 открыт. Следующий154 — OSPFv3 IPv6 routes: добавить оба route catalogs с family-safe IDs и проверить собственную GRE IPv6 пару. Этапы0–11 завершены в локальных границах журнала. История выполненных внешних блоков и доказательства сохранены в [журнале](ux-ui-stage-12.md) и [протоколе](ux-ui-external-acceptance.md). Реальная Telegram доставка, Portal SSO, multi-instance и оставшиеся профильные сетевые ограничения открыты. @@ -371,6 +371,6 @@ flowchart LR ## 12.5.77 — основной блок IPsec (2026-10-09) -Актуальное продолжение 2026-10-11: завершён12.5.152 — WireGuard IPv6 static lifecycle/create/PATCH/history/delete и single-address RSC/conf export/import.29 real API cases, native handshake/Ping3/3×2,33 disabled-server API/SQL cases всех трёх типов с zero ROS contacts,56 backend tests/профили GRE и контейнеров/live maps,10 E2E/types/ESLint/builds/984 parity/live PC/mobile passed. Runtime backend/frontend ux-wg152 healthy;12.5 открыт. Следующий153 — OSPF/BFD sustained gate: BFD-only loss при сохранённых OSPF Hello на собственных GRE, восстановление и independent cleanup. +Актуальное продолжение 2026-10-11: завершён12.5.153 — предупреждение Full/BFD Down с точным device/interface/peer binding и переходом к BFD без потери device context.51 native rounds/30s подтвердили поздние Full+active при BFD Down; sustained route gate не гарантирован, а не ошибочно принят. Recovery/Ping3/3×2/10 baseline collections×2/cleanup,3 unit/9 E2E/2 real source UI/2 deployed smoke/types/ESLint/frontend build passed. Runtime backend ux-wg152/frontend ux-ospf153 healthy;12.5 открыт. Следующий154 — OSPFv3 IPv6 routes: добавить оба route catalogs с family-safe IDs и проверить собственную GRE IPv6 пару. Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md). diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index e7a5125d..e24c179a 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-11: завершён12.5.152 — WireGuard IPv6 static lifecycle/create/PATCH/history/delete и single-address RSC/conf export/import.29 real API cases, native handshake/Ping3/3×2,33 disabled-server API/SQL cases всех трёх типов с zero ROS contacts,56 backend tests/профили GRE и контейнеров/live maps,10 E2E/types/ESLint/builds/984 parity/live PC/mobile passed. Runtime backend/frontend ux-wg152 healthy;12.5 открыт. Следующий153 — OSPF/BFD sustained gate: BFD-only loss при сохранённых OSPF Hello на собственных GRE, восстановление и independent cleanup. +Актуальное продолжение 2026-10-11: завершён12.5.153 — предупреждение Full/BFD Down с точным device/interface/peer binding и переходом к BFD без потери device context.51 native rounds/30s подтвердили поздние Full+active при BFD Down; sustained route gate не гарантирован, а не ошибочно принят. Recovery/Ping3/3×2/10 baseline collections×2/cleanup,3 unit/9 E2E/2 real source UI/2 deployed smoke/types/ESLint/frontend build passed. Runtime backend ux-wg152/frontend ux-ospf153 healthy;12.5 открыт. Следующий154 — OSPFv3 IPv6 routes: добавить оба route catalogs с family-safe IDs и проверить собственную GRE IPv6 пару. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -36,7 +36,21 @@ | 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–152 и ограничения ниже. Runtime backend ux-month149/frontend ux-sessions150. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–153 и ограничения ниже. Runtime backend ux-month149/frontend ux-sessions150. | + +## 12.5.153 — граница OSPF/BFD и предупреждение конфликта состояний (2026-10-11) + +В существующей OSPF странице ReUI/Frame/base-nova добавлено предупреждение последнего опроса: OSPF Full при наблюдаемом BFD Down/AdminDown. Correlation требует точный server/interface/neighbor IP, explicit active/useBfd=true, одну direct multihop=false BFD session и свежие данные; чужое устройство/интерфейс/peer, duplicate sessions, unknown/multihop/inactive/non-BFD template не создают вывод. Native Full/route states и правила RouterOS не меняются. Переход Проверить BFD сохраняет server/node context и атомарно снимает search, чтобы найденная сессия была видна. Референс остаётся существующий ReUI Data Grid/Frame, новые vendor components не устанавливались. + +На обоих CHR собственные GRE198.18.153.0/30 и OSPFv2 loopbacks198.18.253.1/32↔2/32, hello1s/dead20s, BFD200ms×3. Два own firewall правила на CHR2 блокировали только UDP3784 input/output на own GRE с exact private src/dst. Protocol89/ICMP не блокировались; OSPF Hello отдельным packet capture не измерялся.51 native rounds около30s: BFD Down наблюдался, в поздних samples после20s оба OSPF neighbors Full и own route active. Это подтверждает отсутствие гарантированного постоянного route gate при BFD-only ACL loss; непрерывность каждого пакета/мгновенного состояния не заявляется. Data plane initial/fault/recovery Ping3/3×2. После удаления fault — BFD Up/Full/active, затем собственные firewall/OSPF/BFD/IP/bridge/GRE objects удалены.10 static collections×2 совпали с baseline; filter/BFD config order также сравнивался. Default/public routes и пароли сохранены. + +UI native positive проверена в source Next dev3133 с настоящим backend8000, без JSON mocks и browser mutations:1440/320 показывают alert+native Full; переход ведёт к реальному Down, сохраняет server и очищает q. Скриншоты [1440](ux-ui/screens/ospf-bfd-conflict153-1440-2026-10-11.png), [320](ux-ui/screens/ospf-bfd-conflict153-320-2026-10-11.png); мобильный экран визуально проверен.3 unit cases,9 controlled E2E с recovery/foreign/non-BFD/unknown и previous data-cache scenarios, source types/ESLint passed. Read-only deployed PC/mobile smoke после cleanup подтвердил отсутствие ложного alert. + +Frontend production build прошёл с окончательным source context; frontend ux-ospf153 развёрнут, backend ux-wg152/PG healthy. Первоначальная SCP сессия истекла в ожидании пароля; первый frontend candidate был собран без delta и не развёртывался. Context пересинхронизирован/хеш проверен, финальная сборка повторена и принята. Backend code/build не менялись, broad regression не повторялась. Только собственный завершённый container6a521d… удалён после exact-ID/state check; background main polling продолжался, собственная SQL база не создавалась. + +Правила конфигурации сверены с [MikroTik BFD](https://manual.mikrotik.com/docs/user-guides/routing-and-networking-protocols/unicast/bfd/). Протоколы: [native51 samples/recovery/cleanup](ux-ui/acceptance/ospf-bfd-sustained-2026-10-11.json), [real source UI](ux-ui/acceptance/ospf-bfd-live-source-2026-10-11.json), [deployed smoke](ux-ui/acceptance/ospf-bfd-deployed-smoke-2026-10-11.json). + +Границы: sustained BFD-only gate не гарантирован на RouterOS7.24.5; программа показывает реально наблюдаемый конфликт и не навязывает новые network rules. IPv6/scale/independent WAN/continuous packet loss/SLA не приняты этим блоком. Следующий154 — OSPFv3 IPv6 routes; существующий catalog читает только /ip/route, требуется family-safe /ipv6/route.12.5 открыт. ## 12.5.152 — IPv6 lifecycle WireGuard и общий допуск выключенных серверов (2026-10-11) diff --git a/docs/ux-ui-remaining-acceptance.md b/docs/ux-ui-remaining-acceptance.md index c0cf59f1..a514eb58 100644 --- a/docs/ux-ui-remaining-acceptance.md +++ b/docs/ux-ui-remaining-acceptance.md @@ -1,8 +1,8 @@ # Оставшаяся внешняя приёмка — 2026-10-11 -Это актуальная матрица после 12.5.152. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии. +Это актуальная матрица после 12.5.153. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии. -Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-wg152`, frontend `ux-wg152`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись. +Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-wg152`, frontend `ux-ospf153`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись. | Раздел | Подтверждено | Осталось / условие завершения | | --- | --- | --- | @@ -13,12 +13,12 @@ | WireGuard | Native handshake/data plane58, deletion60, live create/peer/disable/enable/delete62, mobile64, export/import67–74; native IPv6 ULA inner/allowedIps/handshake109; application static IPv6 lifecycle152 | Клиентские ОС и произвольные конфигурации, IPv6 outer/scale, from-pool/EUI-64 и multiple-address import/export, физический lost ACK и устойчивое восстановление; `.conf` с placeholders — шаблон, не принятый клиентский tunnel | | VXLAN | Собственная пара/private Ping/catalog/URL/export75–76; bridge/FDB/port loss/recovery107; IPv6 ULA inner по IPv4 outer108 | API приложения read-only: create/delete проверены native. IPv6 outer, масштаб/производительность, профильные mutation RBAC/concurrency отдельно не приняты | | IPsec | PSK и сертификатное шифрование77–82, active peer/online/mode-config, scoped NAT/group, partial/unknown/applied receipts, restore conflicts, JWT; full DN/специальные символы/online110; literal CN namespace guards и explicit FQDN111; certificate/PSK shared ID unknown/recovery112; multiple sessions controlled snapshots113; shared certificate rows/target guards114; preserve-certificate UI/native DELETE115; explicit deletion binding/PSK collision116; legacy export binding118; real duplicate DN sessions/Linux Ping/UI119; DN DER/ASCII tag и FQDN SAN native120; implicit unique DNS SAN/mixed IDs/API/UI121; короткий CHILD/IKE rekey/reconnect122; server pin и unbound same-CA certificate refusal123; own RSA Root/Intermediate/client chain/CRLs/IKE/reauth138; external revoked CRL new-handshake refusal/existing-session boundary137; certificate-bound malformed/signed expired CRL IKE refusal/recovery136; certificate-bound missing-CDP404/IKE refusal and recovery135; external HTTP CRL download/404/cache preservation134; isolated diagnostic buffers132; own ECDSA P-256/Ping/API export131 and final18×2 inventory; isolated same-key/CA time boundary with explicit AUTH_FAILED130; valid-renewal control timeout/clock/log observation129; original/renewed controls and time-invalid timeout observation128; CRL-issued cert/CA no-write delete guards127; own CRL-enabled valid/revoked control126; local revoked flag/CRL-disabled reconnect observation125; certificate reauth/CHILD absence boundary/UI124 | Реальные duplicate certificate-derived DN sessions приняты119; arbitrary custom PKI/OIDs/policies/path-length and missing/intermediate-revoked chain; native intermediate chain accepted138; ECDSA P-256 accepted131;128/129 timeout cause still unknown,130 time boundary accepted; periodic refresh; existing IKE survives short external-revocation observation137, automatic termination not guaranteed; direct CHR-to-CHR CRL HTTP failure cause134; reauth/CHILD loss принят124; длительный rekey/переходная потеря пакетов; прочие ID типы/ADDR4/manual DN/custom PKI; native edit identical matching rules rejected; клиентские Windows/macOS/iOS/Android, прочие DN форматы/custom OIDs/IKE ID namespaces, полная PKI и policy/profile/proposal restore, физический disconnect, durable retry/multi-instance, IPv6/maximum throughput | -| OSPF/BFD | Real Full/own routes84–85, раздельные наблюдения BFD86, effective disabled/optimizer cost/partial/RBAC87, alternate path90 и CIDR91 | Sustained BFD-only gate не принят: в86 сосед мог вновь статьFull при доступныхHello. В90 переходный Ping18/40 с55% loss: бесшовность не принята. REST timing — наблюдаемая граница, не SLA; IPv6/scale/independent WAN открыты | +| OSPF/BFD | Real Full/own routes84–85, раздельные наблюдения BFD86, effective disabled/optimizer cost/partial/RBAC87, alternate path90 и CIDR91 | BFD-only sustained route gate не гарантирован:153 подтвердил поздние Full/active при BFD Down в30s samples, UI предупреждение/recovery принято. В90 переходный Ping18/40 с55% loss: бесшовность не принята. REST timing — наблюдаемая граница, не SLA; IPv6/scale/independent WAN открыты | | BGP | Established83, exact /32 exchange/API/UI/administrative withdrawal92, BFD primary GRE loss/alternate/recovery93 | Hold timer/TCP loss безBFD принят104; packet loss в переходе, разные внешние peers/WAN policy, IPv6/scale. Два логических пути используют тот же public WAN; physical redundancy не принята | | Recursive routes | Production PUT/change/own history restore88, disabled guards, partial/unknown/applied outcomes, live формы/контекст | Автоматический rollback/retry, durable receipts и несколько экземпляров отсутствуют; PUT не является idempotent noop. Полная произвольная legacy catalog миграция не принята | | Diagnostics/terminal | Allowlist/native reads, Ping/trace/route/MTU/DNS, actual avg-rtt, disabled guards, JWT/live PC/mobile89; real default memory tail/log limits/API/UI133 | DNS использует backend resolver; MTU — ограниченная оценка, не гарантированный максимум. Stop ожидания не доказывает остановку RouterOS команды; arbitrary CLI и physical disconnect не приняты | | Portal/интеграции | Локальные и isolated JWT guards; UI/API error states в границах журналов | Настоящий Portal issuer/login/отзыв прав; RIPE SDK two-IP/no-fetch passed140, native IPv6 ULA flow pipeline passed145 (IPv4 transport), public IPv6 WAN/local licensed MaxMind/S3/container/certificate jobs и Gitea delivery требуют отдельных тестовых endpoints/аккаунтов. Не отправлять сообщения и не публиковать релиз без соответствующего поручения | -| Общая приёмка | Локальная12.3.83; UI1244/context221/compiled984 parity139; профильные build/E2E/live проверки последующих блоков | Traffic initial live mock-id gate passed141; IPv6 special ranges/cache passed142; unknown RIPE coordinates passed143; IPv6 synthetic UDP/worker/SQL passed144; native CHR ULA/IPFIX/API/UI passed145; ICMPv6/IPv6 endpoint labels passed146; HTTP DTO validation passed147; scoped flow catalog/serverId guards passed148; strict monthly calendar passed149; Sessions labels passed150; application GRE static IPv6 lifecycle151 passed; WireGuard static IPv6 lifecycle152 и disabled SQL/API gates passed; следующий sustained OSPF/BFD153; последующие изменения проверять отдельно; scoped axe не означает полную WCAG сертификацию | +| Общая приёмка | Локальная12.3.83; UI1244/context221/compiled984 parity139; профильные build/E2E/live проверки последующих блоков | Traffic initial live mock-id gate passed141; IPv6 special ranges/cache passed142; unknown RIPE coordinates passed143; IPv6 synthetic UDP/worker/SQL passed144; native CHR ULA/IPFIX/API/UI passed145; ICMPv6/IPv6 endpoint labels passed146; HTTP DTO validation passed147; scoped flow catalog/serverId guards passed148; strict monthly calendar passed149; Sessions labels passed150; application GRE static IPv6 lifecycle151 passed; WireGuard static IPv6 lifecycle152 и disabled SQL/API gates passed; OSPF/BFD boundary/warning153 passed; следующий OSPFv3 IPv6 routes154; последующие изменения проверять отдельно; scoped axe не означает полную WCAG сертификацию | Доказательства и точные ограничения: [полная история этапа12](ux-ui-stage-12.md), [внешний протокол](ux-ui-external-acceptance.md), [BGP93](ux-ui/acceptance/bgp-failover-2026-10-10.json), [паспорт стенда](ux-ui-test-server.md). Невыполненные пункты не являются все блокерами данного лабораторного сценария: для выпуска необходимо явно определить требуемые конфигурации и принять их либо согласовать ограничение. @@ -584,3 +584,17 @@ Runtime backend/frontend ux-wg152 healthy; deployed live read-only catalog/creat Протоколы: [native/cleanup](ux-ui/acceptance/wireguard-ipv6-native-2026-10-11.json), [API/history/import/export](ux-ui/acceptance/wireguard-ipv6-api-history-2026-10-11.json), [33 SQL/API gates](ux-ui/acceptance/network-disabled-sql-2026-10-11.json), [до исправления getter](ux-ui/acceptance/wireguard-ipv6-before-gate-api-2026-10-11.json), [compiled](ux-ui/acceptance/wireguard-ipv6-compiled-2026-10-11.json), [live UI](ux-ui/acceptance/wireguard-ipv6-smoke-2026-10-11.json). Следующий153 — sustained OSPF/BFD-only gate и recovery на собственных GRE;12.5 остаётся открытым. + +## 12.5.153 — граница OSPF/BFD и предупреждение конфликта состояний (2026-10-11) + +В существующей OSPF странице ReUI/Frame/base-nova добавлено предупреждение последнего опроса: OSPF Full при наблюдаемом BFD Down/AdminDown. Correlation требует точный server/interface/neighbor IP, explicit active/useBfd=true, одну direct multihop=false BFD session и свежие данные; чужое устройство/интерфейс/peer, duplicate sessions, unknown/multihop/inactive/non-BFD template не создают вывод. Native Full/route states и правила RouterOS не меняются. Переход Проверить BFD сохраняет server/node context и атомарно снимает search, чтобы найденная сессия была видна. Референс остаётся существующий ReUI Data Grid/Frame, новые vendor components не устанавливались. + +На обоих CHR собственные GRE198.18.153.0/30 и OSPFv2 loopbacks198.18.253.1/32↔2/32, hello1s/dead20s, BFD200ms×3. Два own firewall правила на CHR2 блокировали только UDP3784 input/output на own GRE с exact private src/dst. Protocol89/ICMP не блокировались; OSPF Hello отдельным packet capture не измерялся.51 native rounds около30s: BFD Down наблюдался, в поздних samples после20s оба OSPF neighbors Full и own route active. Это подтверждает отсутствие гарантированного постоянного route gate при BFD-only ACL loss; непрерывность каждого пакета/мгновенного состояния не заявляется. Data plane initial/fault/recovery Ping3/3×2. После удаления fault — BFD Up/Full/active, затем собственные firewall/OSPF/BFD/IP/bridge/GRE objects удалены.10 static collections×2 совпали с baseline; filter/BFD config order также сравнивался. Default/public routes и пароли сохранены. + +UI native positive проверена в source Next dev3133 с настоящим backend8000, без JSON mocks и browser mutations:1440/320 показывают alert+native Full; переход ведёт к реальному Down, сохраняет server и очищает q. Скриншоты [1440](ux-ui/screens/ospf-bfd-conflict153-1440-2026-10-11.png), [320](ux-ui/screens/ospf-bfd-conflict153-320-2026-10-11.png); мобильный экран визуально проверен.3 unit cases,9 controlled E2E с recovery/foreign/non-BFD/unknown и previous data-cache scenarios, source types/ESLint passed. Read-only deployed PC/mobile smoke после cleanup подтвердил отсутствие ложного alert. + +Frontend production build прошёл с окончательным source context; frontend ux-ospf153 развёрнут, backend ux-wg152/PG healthy. Первоначальная SCP сессия истекла в ожидании пароля; первый frontend candidate был собран без delta и не развёртывался. Context пересинхронизирован/хеш проверен, финальная сборка повторена и принята. Backend code/build не менялись, broad regression не повторялась. Только собственный завершённый container6a521d… удалён после exact-ID/state check; background main polling продолжался, собственная SQL база не создавалась. + +Правила конфигурации сверены с [MikroTik BFD](https://manual.mikrotik.com/docs/user-guides/routing-and-networking-protocols/unicast/bfd/). Протоколы: [native51 samples/recovery/cleanup](ux-ui/acceptance/ospf-bfd-sustained-2026-10-11.json), [real source UI](ux-ui/acceptance/ospf-bfd-live-source-2026-10-11.json), [deployed smoke](ux-ui/acceptance/ospf-bfd-deployed-smoke-2026-10-11.json). + +Границы: sustained BFD-only gate не гарантирован на RouterOS7.24.5; программа показывает реально наблюдаемый конфликт и не навязывает новые network rules. IPv6/scale/independent WAN/continuous packet loss/SLA не приняты этим блоком. Следующий154 — OSPFv3 IPv6 routes; существующий catalog читает только /ip/route, требуется family-safe /ipv6/route.12.5 открыт. diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index b2d1e018..85fb377a 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -1,6 +1,6 @@ # Этап 12: итоговая приёмка UX/UI -Актуальное продолжение 2026-10-11: завершён12.5.152 — WireGuard IPv6 static lifecycle/create/PATCH/history/delete и single-address RSC/conf export/import.29 real API cases, native handshake/Ping3/3×2,33 disabled-server API/SQL cases всех трёх типов с zero ROS contacts,56 backend tests/профили GRE и контейнеров/live maps,10 E2E/types/ESLint/builds/984 parity/live PC/mobile passed. Runtime backend/frontend ux-wg152 healthy;12.5 открыт. Следующий153 — OSPF/BFD sustained gate: BFD-only loss при сохранённых OSPF Hello на собственных GRE, восстановление и independent cleanup. +Актуальное продолжение 2026-10-11: завершён12.5.153 — предупреждение Full/BFD Down с точным device/interface/peer binding и переходом к BFD без потери device context.51 native rounds/30s подтвердили поздние Full+active при BFD Down; sustained route gate не гарантирован, а не ошибочно принят. Recovery/Ping3/3×2/10 baseline collections×2/cleanup,3 unit/9 E2E/2 real source UI/2 deployed smoke/types/ESLint/frontend build passed. Runtime backend ux-wg152/frontend ux-ospf153 healthy;12.5 открыт. Следующий154 — OSPFv3 IPv6 routes: добавить оба route catalogs с family-safe IDs и проверить собственную GRE IPv6 пару. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -2974,3 +2974,17 @@ Runtime backend/frontend ux-wg152 healthy; deployed live read-only catalog/creat Протоколы: [native/cleanup](ux-ui/acceptance/wireguard-ipv6-native-2026-10-11.json), [API/history/import/export](ux-ui/acceptance/wireguard-ipv6-api-history-2026-10-11.json), [33 SQL/API gates](ux-ui/acceptance/network-disabled-sql-2026-10-11.json), [до исправления getter](ux-ui/acceptance/wireguard-ipv6-before-gate-api-2026-10-11.json), [compiled](ux-ui/acceptance/wireguard-ipv6-compiled-2026-10-11.json), [live UI](ux-ui/acceptance/wireguard-ipv6-smoke-2026-10-11.json). Следующий153 — sustained OSPF/BFD-only gate и recovery на собственных GRE;12.5 остаётся открытым. + +## 12.5.153 — граница OSPF/BFD и предупреждение конфликта состояний (2026-10-11) + +В существующей OSPF странице ReUI/Frame/base-nova добавлено предупреждение последнего опроса: OSPF Full при наблюдаемом BFD Down/AdminDown. Correlation требует точный server/interface/neighbor IP, explicit active/useBfd=true, одну direct multihop=false BFD session и свежие данные; чужое устройство/интерфейс/peer, duplicate sessions, unknown/multihop/inactive/non-BFD template не создают вывод. Native Full/route states и правила RouterOS не меняются. Переход Проверить BFD сохраняет server/node context и атомарно снимает search, чтобы найденная сессия была видна. Референс остаётся существующий ReUI Data Grid/Frame, новые vendor components не устанавливались. + +На обоих CHR собственные GRE198.18.153.0/30 и OSPFv2 loopbacks198.18.253.1/32↔2/32, hello1s/dead20s, BFD200ms×3. Два own firewall правила на CHR2 блокировали только UDP3784 input/output на own GRE с exact private src/dst. Protocol89/ICMP не блокировались; OSPF Hello отдельным packet capture не измерялся.51 native rounds около30s: BFD Down наблюдался, в поздних samples после20s оба OSPF neighbors Full и own route active. Это подтверждает отсутствие гарантированного постоянного route gate при BFD-only ACL loss; непрерывность каждого пакета/мгновенного состояния не заявляется. Data plane initial/fault/recovery Ping3/3×2. После удаления fault — BFD Up/Full/active, затем собственные firewall/OSPF/BFD/IP/bridge/GRE objects удалены.10 static collections×2 совпали с baseline; filter/BFD config order также сравнивался. Default/public routes и пароли сохранены. + +UI native positive проверена в source Next dev3133 с настоящим backend8000, без JSON mocks и browser mutations:1440/320 показывают alert+native Full; переход ведёт к реальному Down, сохраняет server и очищает q. Скриншоты [1440](ux-ui/screens/ospf-bfd-conflict153-1440-2026-10-11.png), [320](ux-ui/screens/ospf-bfd-conflict153-320-2026-10-11.png); мобильный экран визуально проверен.3 unit cases,9 controlled E2E с recovery/foreign/non-BFD/unknown и previous data-cache scenarios, source types/ESLint passed. Read-only deployed PC/mobile smoke после cleanup подтвердил отсутствие ложного alert. + +Frontend production build прошёл с окончательным source context; frontend ux-ospf153 развёрнут, backend ux-wg152/PG healthy. Первоначальная SCP сессия истекла в ожидании пароля; первый frontend candidate был собран без delta и не развёртывался. Context пересинхронизирован/хеш проверен, финальная сборка повторена и принята. Backend code/build не менялись, broad regression не повторялась. Только собственный завершённый container6a521d… удалён после exact-ID/state check; background main polling продолжался, собственная SQL база не создавалась. + +Правила конфигурации сверены с [MikroTik BFD](https://manual.mikrotik.com/docs/user-guides/routing-and-networking-protocols/unicast/bfd/). Протоколы: [native51 samples/recovery/cleanup](ux-ui/acceptance/ospf-bfd-sustained-2026-10-11.json), [real source UI](ux-ui/acceptance/ospf-bfd-live-source-2026-10-11.json), [deployed smoke](ux-ui/acceptance/ospf-bfd-deployed-smoke-2026-10-11.json). + +Границы: sustained BFD-only gate не гарантирован на RouterOS7.24.5; программа показывает реально наблюдаемый конфликт и не навязывает новые network rules. IPv6/scale/independent WAN/continuous packet loss/SLA не приняты этим блоком. Следующий154 — OSPFv3 IPv6 routes; существующий catalog читает только /ip/route, требуется family-safe /ipv6/route.12.5 открыт. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index 99cd5f09..f75e6341 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -1,6 +1,6 @@ # Тестовый сервер UX/UI — 2026-10-10 -Сервер161.104.46.222: завершён12.5.152 — WireGuard IPv6 static lifecycle/create/PATCH/history/delete и single-address RSC/conf export/import.29 real API cases, native handshake/Ping3/3×2,33 disabled-server API/SQL cases всех трёх типов с zero ROS contacts,56 backend tests/профили GRE и контейнеров/live maps,10 E2E/types/ESLint/builds/984 parity/live PC/mobile passed. Runtime backend/frontend ux-wg152 healthy;12.5 открыт. Следующий153 — OSPF/BFD sustained gate: BFD-only loss при сохранённых OSPF Hello на собственных GRE, восстановление и independent cleanup. +Сервер161.104.46.222: завершён12.5.153 — предупреждение Full/BFD Down с точным device/interface/peer binding и переходом к BFD без потери device context.51 native rounds/30s подтвердили поздние Full+active при BFD Down; sustained route gate не гарантирован, а не ошибочно принят. Recovery/Ping3/3×2/10 baseline collections×2/cleanup,3 unit/9 E2E/2 real source UI/2 deployed smoke/types/ESLint/frontend build passed. Runtime backend ux-wg152/frontend ux-ospf153 healthy;12.5 открыт. Следующий154 — OSPFv3 IPv6 routes: добавить оба route catalogs с family-safe IDs и проверить собственную GRE IPv6 пару. | Параметр | Проверенное состояние | | --- | --- | @@ -14,7 +14,7 @@ | PostgreSQL | postgres:18-alpine,18.6;mmapp-test-postgres healthy;SELECT version() passed | | Данные | Отдельный Compose project mmapp-test,том mmapp-test_mmapp-pgdata и каталог ./data | | Доступ | PostgreSQL не публикуется;frontend3000/backend8000 привязаны к127.0.0.1 после запуска | -| Образы приложения | mmapp-test/backend:ux-wg152 и mmapp-test/frontend:ux-wg152; запущены | +| Образы приложения | mmapp-test/backend:ux-wg152 и mmapp-test/frontend:ux-ospf153; запущены | Compose SHA256:3052bd6ab5d9865f97605cebfb5ff27a4410cd3357b81153a65a87fb7c92582f. OptionalBACKEND_IMAGE_TAG позволяетобновлятьbackendотдельно. Локальный и удалённый файлы совпали. Шаблоны: [Compose](../deploy/docker-compose.test.yml), [env без секретов](../deploy/env.test.example). @@ -1400,3 +1400,17 @@ Runtime backend/frontend ux-wg152 healthy; deployed live read-only catalog/creat Протоколы: [native/cleanup](ux-ui/acceptance/wireguard-ipv6-native-2026-10-11.json), [API/history/import/export](ux-ui/acceptance/wireguard-ipv6-api-history-2026-10-11.json), [33 SQL/API gates](ux-ui/acceptance/network-disabled-sql-2026-10-11.json), [до исправления getter](ux-ui/acceptance/wireguard-ipv6-before-gate-api-2026-10-11.json), [compiled](ux-ui/acceptance/wireguard-ipv6-compiled-2026-10-11.json), [live UI](ux-ui/acceptance/wireguard-ipv6-smoke-2026-10-11.json). Следующий153 — sustained OSPF/BFD-only gate и recovery на собственных GRE;12.5 остаётся открытым. + +## 12.5.153 — граница OSPF/BFD и предупреждение конфликта состояний (2026-10-11) + +В существующей OSPF странице ReUI/Frame/base-nova добавлено предупреждение последнего опроса: OSPF Full при наблюдаемом BFD Down/AdminDown. Correlation требует точный server/interface/neighbor IP, explicit active/useBfd=true, одну direct multihop=false BFD session и свежие данные; чужое устройство/интерфейс/peer, duplicate sessions, unknown/multihop/inactive/non-BFD template не создают вывод. Native Full/route states и правила RouterOS не меняются. Переход Проверить BFD сохраняет server/node context и атомарно снимает search, чтобы найденная сессия была видна. Референс остаётся существующий ReUI Data Grid/Frame, новые vendor components не устанавливались. + +На обоих CHR собственные GRE198.18.153.0/30 и OSPFv2 loopbacks198.18.253.1/32↔2/32, hello1s/dead20s, BFD200ms×3. Два own firewall правила на CHR2 блокировали только UDP3784 input/output на own GRE с exact private src/dst. Protocol89/ICMP не блокировались; OSPF Hello отдельным packet capture не измерялся.51 native rounds около30s: BFD Down наблюдался, в поздних samples после20s оба OSPF neighbors Full и own route active. Это подтверждает отсутствие гарантированного постоянного route gate при BFD-only ACL loss; непрерывность каждого пакета/мгновенного состояния не заявляется. Data plane initial/fault/recovery Ping3/3×2. После удаления fault — BFD Up/Full/active, затем собственные firewall/OSPF/BFD/IP/bridge/GRE objects удалены.10 static collections×2 совпали с baseline; filter/BFD config order также сравнивался. Default/public routes и пароли сохранены. + +UI native positive проверена в source Next dev3133 с настоящим backend8000, без JSON mocks и browser mutations:1440/320 показывают alert+native Full; переход ведёт к реальному Down, сохраняет server и очищает q. Скриншоты [1440](ux-ui/screens/ospf-bfd-conflict153-1440-2026-10-11.png), [320](ux-ui/screens/ospf-bfd-conflict153-320-2026-10-11.png); мобильный экран визуально проверен.3 unit cases,9 controlled E2E с recovery/foreign/non-BFD/unknown и previous data-cache scenarios, source types/ESLint passed. Read-only deployed PC/mobile smoke после cleanup подтвердил отсутствие ложного alert. + +Frontend production build прошёл с окончательным source context; frontend ux-ospf153 развёрнут, backend ux-wg152/PG healthy. Первоначальная SCP сессия истекла в ожидании пароля; первый frontend candidate был собран без delta и не развёртывался. Context пересинхронизирован/хеш проверен, финальная сборка повторена и принята. Backend code/build не менялись, broad regression не повторялась. Только собственный завершённый container6a521d… удалён после exact-ID/state check; background main polling продолжался, собственная SQL база не создавалась. + +Правила конфигурации сверены с [MikroTik BFD](https://manual.mikrotik.com/docs/user-guides/routing-and-networking-protocols/unicast/bfd/). Протоколы: [native51 samples/recovery/cleanup](ux-ui/acceptance/ospf-bfd-sustained-2026-10-11.json), [real source UI](ux-ui/acceptance/ospf-bfd-live-source-2026-10-11.json), [deployed smoke](ux-ui/acceptance/ospf-bfd-deployed-smoke-2026-10-11.json). + +Границы: sustained BFD-only gate не гарантирован на RouterOS7.24.5; программа показывает реально наблюдаемый конфликт и не навязывает новые network rules. IPv6/scale/independent WAN/continuous packet loss/SLA не приняты этим блоком. Следующий154 — OSPFv3 IPv6 routes; существующий catalog читает только /ip/route, требуется family-safe /ipv6/route.12.5 открыт. diff --git a/docs/ux-ui/acceptance/ospf-bfd-deployed-smoke-2026-10-11.json b/docs/ux-ui/acceptance/ospf-bfd-deployed-smoke-2026-10-11.json new file mode 100644 index 00000000..a6620c31 --- /dev/null +++ b/docs/ux-ui/acceptance/ospf-bfd-deployed-smoke-2026-10-11.json @@ -0,0 +1,49 @@ +{ + "date": "2026-10-11", + "block": "12.5.153", + "runtime": { + "backend": "ux-wg152", + "frontend": "ux-ospf153" + }, + "cases": [ + { + "width": 1440, + "status": 200, + "api": [ + { + "path": "/api/servers", + "status": 200 + }, + { + "path": "/api/ospf/catalog", + "status": 200 + } + ], + "pageErrors": [], + "noOverflow": true, + "noConflictAfterCleanup": true + }, + { + "width": 320, + "status": 200, + "api": [ + { + "path": "/api/servers", + "status": 200 + }, + { + "path": "/api/ospf/catalog", + "status": 200 + } + ], + "pageErrors": [], + "noOverflow": true, + "noConflictAfterCleanup": true + } + ], + "bounds": [ + "Read-only deployed production frontend153/backend152 catalog after native own cleanup; warning correctly absent", + "Positive Full/BFD Down source-preview3133 UI uses real deployed backend8000 and is recorded separately", + "Native OSPFv2/BFD IPv4 inner over IPv4 GRE; no IPv6, physical WAN redundancy, continuous packet capture, SLA or throughput claim" + ] +} diff --git a/docs/ux-ui/acceptance/ospf-bfd-live-source-2026-10-11.json b/docs/ux-ui/acceptance/ospf-bfd-live-source-2026-10-11.json new file mode 100644 index 00000000..3b7bfabb --- /dev/null +++ b/docs/ux-ui/acceptance/ospf-bfd-live-source-2026-10-11.json @@ -0,0 +1,36 @@ +{ + "date": "2026-10-11", + "block": "12.5.153", + "cases": [ + { + "width": 1440, + "errors": [], + "api": [ + { + "status": 200 + } + ], + "nativeFullAndDownShown": true, + "sourcePreview": true, + "serverContextPreserved": true, + "queryCleared": true + }, + { + "width": 320, + "errors": [], + "api": [ + { + "status": 200 + } + ], + "nativeFullAndDownShown": true, + "sourcePreview": true, + "serverContextPreserved": true, + "queryCleared": true + } + ], + "bounds": [ + "Source Next dev3133 proxies real deployed backend8000; no mocked response and no browser mutation", + "Production frontend build/deployment is checked separately after own native cleanup" + ] +} diff --git a/docs/ux-ui/acceptance/ospf-bfd-sustained-2026-10-11.json b/docs/ux-ui/acceptance/ospf-bfd-sustained-2026-10-11.json new file mode 100644 index 00000000..c67f012b --- /dev/null +++ b/docs/ux-ui/acceptance/ospf-bfd-sustained-2026-10-11.json @@ -0,0 +1,6078 @@ +{ + "date": "2026-10-11", + "block": "12.5.153", + "name": "mm-bfd153-1791732031266", + "devices": [ + "194.226.121.150", + "104.165.244.7" + ], + "observations": [ + { + "elapsedMs": 489, + "states": [ + { + "serverId": 1, + "started": 1791732324658, + "ended": 1791732324676, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "200ms", + "desired-tx-interval": "200ms", + "hold-time": "600ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "284", + "packets-tx": "284", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "200ms", + "remote-min-tx": "200ms", + "required-min-rx": "200ms", + "state": "up", + "state-changes": "2", + "up": "true", + "uptime": "49s", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "49s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732324660, + "ended": 1791732324853, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "200ms", + "desired-tx-interval": "200ms", + "hold-time": "600ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "283", + "packets-tx": "285", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "200ms", + "remote-min-tx": "200ms", + "required-min-rx": "200ms", + "state": "up", + "state-changes": "2", + "up": "true", + "uptime": "50s", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "50s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 1085, + "states": [ + { + "serverId": 1, + "started": 1791732325355, + "ended": 1791732325367, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "200ms", + "desired-tx-interval": "200ms", + "hold-time": "600ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "286", + "packets-tx": "288", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "200ms", + "remote-min-tx": "200ms", + "required-min-rx": "200ms", + "state": "up", + "state-changes": "2", + "up": "true", + "uptime": "50s", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "50s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732325355, + "ended": 1791732325449, + "bfd": [], + "neighbors": [], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 1675, + "states": [ + { + "serverId": 1, + "started": 1791732325950, + "ended": 1791732325961, + "bfd": [], + "neighbors": [], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732325950, + "ended": 1791732326038, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "1", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "ls-requests": "1", + "router-id": "198.18.253.1", + "state": "Exchange", + "state-changes": "3", + "timeout": "19s" + } + ], + "routes": [] + } + ] + }, + { + "elapsedMs": 2263, + "states": [ + { + "serverId": 1, + "started": 1791732326539, + "ended": 1791732326548, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "1", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "ExStart", + "state-changes": "2", + "timeout": "20s" + } + ], + "routes": [] + }, + { + "serverId": 2, + "started": 1791732326540, + "ended": 1791732326627, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "2", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "ExStart", + "state-changes": "6", + "timeout": "20s" + } + ], + "routes": [] + } + ] + }, + { + "elapsedMs": 2848, + "states": [ + { + "serverId": 1, + "started": 1791732327127, + "ended": 1791732327136, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "1", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "1s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [] + }, + { + "serverId": 2, + "started": 1791732327128, + "ended": 1791732327212, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "2", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "0s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [] + } + ] + }, + { + "elapsedMs": 3423, + "states": [ + { + "serverId": 1, + "started": 1791732327713, + "ended": 1791732327723, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "2", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "1s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [] + }, + { + "serverId": 2, + "started": 1791732327714, + "ended": 1791732327787, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "3", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "1s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [] + } + ] + }, + { + "elapsedMs": 4010, + "states": [ + { + "serverId": 1, + "started": 1791732328288, + "ended": 1791732328299, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "3", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "2s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [] + }, + { + "serverId": 2, + "started": 1791732328288, + "ended": 1791732328374, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "4", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "1s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [] + } + ] + }, + { + "elapsedMs": 4608, + "states": [ + { + "serverId": 1, + "started": 1791732328875, + "ended": 1791732328885, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "3", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "3s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [] + }, + { + "serverId": 2, + "started": 1791732328875, + "ended": 1791732328972, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "4", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "2s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [] + } + ] + }, + { + "elapsedMs": 5197, + "states": [ + { + "serverId": 1, + "started": 1791732329473, + "ended": 1791732329491, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "4", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "3s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [] + }, + { + "serverId": 2, + "started": 1791732329473, + "ended": 1791732329561, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "5", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "2s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [] + } + ] + }, + { + "elapsedMs": 5793, + "states": [ + { + "serverId": 1, + "started": 1791732330062, + "ended": 1791732330072, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "5", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "4s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [] + }, + { + "serverId": 2, + "started": 1791732330063, + "ended": 1791732330157, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "5", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "3s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [] + } + ] + }, + { + "elapsedMs": 6371, + "states": [ + { + "serverId": 1, + "started": 1791732330657, + "ended": 1791732330666, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "5", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "4s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [] + }, + { + "serverId": 2, + "started": 1791732330658, + "ended": 1791732330735, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "6", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "4s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "ls-retransmits": "1", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [] + } + ] + }, + { + "elapsedMs": 6953, + "states": [ + { + "serverId": 1, + "started": 1791732331237, + "ended": 1791732331245, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "6", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "5s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "ls-retransmits": "1", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [] + }, + { + "serverId": 2, + "started": 1791732331237, + "ended": 1791732331316, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "7", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "4s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [] + } + ] + }, + { + "elapsedMs": 7537, + "states": [ + { + "serverId": 1, + "started": 1791732331817, + "ended": 1791732331827, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "7", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "5s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [] + }, + { + "serverId": 2, + "started": 1791732331818, + "ended": 1791732331901, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "7", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "5s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 8136, + "states": [ + { + "serverId": 1, + "started": 1791732332401, + "ended": 1791732332410, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "8", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "6s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732332402, + "ended": 1791732332500, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "8", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "5s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 8743, + "states": [ + { + "serverId": 1, + "started": 1791732333001, + "ended": 1791732333012, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "8", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "7s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732333001, + "ended": 1791732333107, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "9", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "6s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 9332, + "states": [ + { + "serverId": 1, + "started": 1791732333607, + "ended": 1791732333617, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "9", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "7s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732333608, + "ended": 1791732333696, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "10", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "7s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 9921, + "states": [ + { + "serverId": 1, + "started": 1791732334197, + "ended": 1791732334211, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "10", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "8s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732334201, + "ended": 1791732334285, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "10", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "7s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 10503, + "states": [ + { + "serverId": 1, + "started": 1791732334786, + "ended": 1791732334796, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "10", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "8s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732334786, + "ended": 1791732334867, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "11", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "8s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 11098, + "states": [ + { + "serverId": 1, + "started": 1791732335367, + "ended": 1791732335378, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "11", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "9s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732335368, + "ended": 1791732335462, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "12", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "8s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 11699, + "states": [ + { + "serverId": 1, + "started": 1791732335963, + "ended": 1791732335972, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "12", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "10s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732335963, + "ended": 1791732336062, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "13", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "9s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 12291, + "states": [ + { + "serverId": 1, + "started": 1791732336563, + "ended": 1791732336572, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "12", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "10s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732336564, + "ended": 1791732336655, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "13", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "9s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 12871, + "states": [ + { + "serverId": 1, + "started": 1791732337157, + "ended": 1791732337168, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "13", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "11s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732337157, + "ended": 1791732337235, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "14", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "10s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 13445, + "states": [ + { + "serverId": 1, + "started": 1791732337736, + "ended": 1791732337745, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "14", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "11s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732337736, + "ended": 1791732337808, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "15", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "11s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 14043, + "states": [ + { + "serverId": 1, + "started": 1791732338313, + "ended": 1791732338324, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "14", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "12s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732338315, + "ended": 1791732338407, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "15", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "11s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 14624, + "states": [ + { + "serverId": 1, + "started": 1791732338907, + "ended": 1791732338921, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "15", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "13s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732338908, + "ended": 1791732338988, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "16", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "12s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 15212, + "states": [ + { + "serverId": 1, + "started": 1791732339489, + "ended": 1791732339500, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "16", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "13s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732339489, + "ended": 1791732339576, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "17", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "12s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 15790, + "states": [ + { + "serverId": 1, + "started": 1791732340077, + "ended": 1791732340085, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "16", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "14s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732340078, + "ended": 1791732340154, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "17", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "13s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 16363, + "states": [ + { + "serverId": 1, + "started": 1791732340656, + "ended": 1791732340665, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "17", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "14s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732340656, + "ended": 1791732340727, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "18", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "14s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 16946, + "states": [ + { + "serverId": 1, + "started": 1791732341228, + "ended": 1791732341237, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "18", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "15s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732341229, + "ended": 1791732341310, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "19", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "14s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 17528, + "states": [ + { + "serverId": 1, + "started": 1791732341811, + "ended": 1791732341819, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "18", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "15s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732341811, + "ended": 1791732341892, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "19", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "15s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 18105, + "states": [ + { + "serverId": 1, + "started": 1791732342392, + "ended": 1791732342402, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "19", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "16s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732342393, + "ended": 1791732342469, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "20", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "15s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 18691, + "states": [ + { + "serverId": 1, + "started": 1791732342970, + "ended": 1791732342979, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "20", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "17s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732342970, + "ended": 1791732343055, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "21", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "16s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 19274, + "states": [ + { + "serverId": 1, + "started": 1791732343556, + "ended": 1791732343564, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "20", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "17s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732343556, + "ended": 1791732343638, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "21", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "16s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 19849, + "states": [ + { + "serverId": 1, + "started": 1791732344139, + "ended": 1791732344147, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "21", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "18s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732344139, + "ended": 1791732344213, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "22", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "17s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 20429, + "states": [ + { + "serverId": 1, + "started": 1791732344714, + "ended": 1791732344723, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "22", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "18s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732344714, + "ended": 1791732344793, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "22", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "18s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 21009, + "states": [ + { + "serverId": 1, + "started": 1791732345294, + "ended": 1791732345303, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "22", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "19s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732345294, + "ended": 1791732345373, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "23", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "18s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 21587, + "states": [ + { + "serverId": 1, + "started": 1791732345873, + "ended": 1791732345882, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "23", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "20s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732345874, + "ended": 1791732345951, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "24", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "19s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 22164, + "states": [ + { + "serverId": 1, + "started": 1791732346452, + "ended": 1791732346462, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "24", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "20s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732346453, + "ended": 1791732346528, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "24", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "19s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 22743, + "states": [ + { + "serverId": 1, + "started": 1791732347029, + "ended": 1791732347042, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "24", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "21s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732347030, + "ended": 1791732347107, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "25", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "20s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 23323, + "states": [ + { + "serverId": 1, + "started": 1791732347607, + "ended": 1791732347617, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "25", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "21s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732347608, + "ended": 1791732347687, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "25", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "21s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 23903, + "states": [ + { + "serverId": 1, + "started": 1791732348187, + "ended": 1791732348195, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "26", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "22s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732348188, + "ended": 1791732348267, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "26", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "21s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 24504, + "states": [ + { + "serverId": 1, + "started": 1791732348768, + "ended": 1791732348777, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "26", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "22s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732348769, + "ended": 1791732348868, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "26", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "22s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 25104, + "states": [ + { + "serverId": 1, + "started": 1791732349369, + "ended": 1791732349377, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "27", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "23s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732349369, + "ended": 1791732349468, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "27", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "22s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 25709, + "states": [ + { + "serverId": 1, + "started": 1791732349969, + "ended": 1791732349978, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "28", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "24s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732349969, + "ended": 1791732350073, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "28", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "23s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 26314, + "states": [ + { + "serverId": 1, + "started": 1791732350574, + "ended": 1791732350582, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "28", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "24s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732350574, + "ended": 1791732350678, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "28", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "23s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 26899, + "states": [ + { + "serverId": 1, + "started": 1791732351179, + "ended": 1791732351189, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "29", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "25s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732351180, + "ended": 1791732351263, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "29", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "24s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 27486, + "states": [ + { + "serverId": 1, + "started": 1791732351764, + "ended": 1791732351773, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "30", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "25s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732351764, + "ended": 1791732351850, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "30", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "25s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 28070, + "states": [ + { + "serverId": 1, + "started": 1791732352351, + "ended": 1791732352365, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "31", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "26s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732352352, + "ended": 1791732352434, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "31", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "25s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 28649, + "states": [ + { + "serverId": 1, + "started": 1791732352934, + "ended": 1791732352942, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "31", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "27s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732352935, + "ended": 1791732353013, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "31", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "26s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 29226, + "states": [ + { + "serverId": 1, + "started": 1791732353514, + "ended": 1791732353523, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "32", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "27s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732353514, + "ended": 1791732353590, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "32", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "26s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + }, + { + "elapsedMs": 29809, + "states": [ + { + "serverId": 1, + "started": 1791732354091, + "ended": 1791732354102, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "32", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "28s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732354092, + "ended": 1791732354173, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "1s", + "desired-tx-interval": "200ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "0", + "packets-tx": "33", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "1us", + "required-min-rx": "200ms", + "state": "down", + "state-changes": "0", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "27s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ] + } + ], + "cleanup": [ + { + "serverId": 1, + "/routing/ospf/interface-template": true, + "/routing/ospf/area": true, + "/routing/ospf/instance": true, + "/routing/bfd/configuration": true, + "/interface/gre": true, + "/interface/bridge": true, + "/ip/address": true, + "/ip/route": true, + "/ip/firewall/filter": true, + "/ipv6/address": true + }, + { + "serverId": 2, + "/routing/ospf/interface-template": true, + "/routing/ospf/area": true, + "/routing/ospf/instance": true, + "/routing/bfd/configuration": true, + "/interface/gre": true, + "/interface/bridge": true, + "/ip/address": true, + "/ip/route": true, + "/ip/firewall/filter": true, + "/ipv6/address": true + } + ], + "initial": [ + { + "serverId": 1, + "started": 1791732041487, + "ended": 1791732041498, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "200ms", + "desired-tx-interval": "200ms", + "hold-time": "600ms", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "32", + "packets-tx": "30", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "200ms", + "remote-min-tx": "200ms", + "required-min-rx": "200ms", + "state": "up", + "state-changes": "2", + "up": "true", + "uptime": "5s", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "6s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "6", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732041487, + "ended": 1791732041565, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "200ms", + "desired-tx-interval": "200ms", + "hold-time": "600ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "29", + "packets-tx": "33", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "200ms", + "remote-min-tx": "200ms", + "required-min-rx": "200ms", + "state": "up", + "state-changes": "1", + "up": "true", + "uptime": "6s", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "6s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ], + "initialPings": [ + { + "serverId": 1, + "sent": 3, + "received": 3 + }, + { + "serverId": 2, + "sent": 3, + "received": 3 + } + ], + "initialCatalog": { + "neighbors": [ + { + "id": "*F3FDDC00", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "address": "198.18.153.2", + "routerId": "198.18.253.2", + "instance": "mm-bfd153-1791732031266", + "area": "mm-bfd153-1791732031266", + "areaId": "0.0.0.0", + "interface": "mm-bfd153-1791732031266-g", + "state": "Full", + "uptime": "7s", + "stateChanges": 6, + "priority": null + }, + { + "id": "*F3FDDC00", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "address": "198.18.153.1", + "routerId": "198.18.253.1", + "instance": "mm-bfd153-1791732031266", + "area": "mm-bfd153-1791732031266", + "areaId": "0.0.0.0", + "interface": "mm-bfd153-1791732031266-g", + "state": "Full", + "uptime": "8s", + "stateChanges": 5, + "priority": null + } + ], + "interfaces": [ + { + "id": "*26", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "instance": "mm-bfd153-1791732031266", + "area": "mm-bfd153-1791732031266", + "areaId": "0.0.0.0", + "interface": "mm-bfd153-1791732031266-g", + "cost": 10, + "type": "ptp", + "disabled": false, + "inactive": false, + "priority": 128, + "helloInterval": 1, + "deadInterval": 20, + "useBfd": true + }, + { + "id": "*24", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "instance": "mm-bfd153-1791732031266", + "area": "mm-bfd153-1791732031266", + "areaId": "0.0.0.0", + "interface": "mm-bfd153-1791732031266-g", + "cost": 10, + "type": "ptp", + "disabled": false, + "inactive": false, + "priority": 128, + "helloInterval": 1, + "deadInterval": 20, + "useBfd": true + } + ], + "bfdSessions": [ + { + "id": "*1", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "localAddr": "198.18.153.1", + "remoteAddr": "198.18.153.2", + "interface": "mm-bfd153-1791732031266-g", + "state": "Up", + "uptime": "6s", + "multihop": false, + "multiplier": 3, + "txInterval": 200, + "rxInterval": 200, + "holdTime": 600, + "packetsRx": 40, + "packetsTx": 37, + "stateChanges": 2 + }, + { + "id": "*1", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "localAddr": "198.18.153.2", + "remoteAddr": "198.18.153.1", + "interface": "mm-bfd153-1791732031266-g", + "state": "Up", + "uptime": "8s", + "multihop": false, + "multiplier": 3, + "txInterval": 200, + "rxInterval": 200, + "holdTime": 600, + "packetsRx": 36, + "packetsTx": 41, + "stateChanges": 1 + } + ], + "routes": [ + { + "id": "*2014D000", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "destination": "198.18.253.2/32", + "type": "Unknown", + "cost": null, + "nextHop": "198.18.153.2", + "via": "mm-bfd153-1791732031266-g", + "area": "" + }, + { + "id": "*2014D000", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "destination": "198.18.253.1/32", + "type": "Unknown", + "cost": null, + "nextHop": "198.18.153.1", + "via": "mm-bfd153-1791732031266-g", + "area": "" + } + ], + "instances": [ + { + "id": "*12", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "name": "mm-bfd153-1791732031266", + "routerId": "198.18.253.1", + "version": 2, + "disabled": false, + "inactive": false, + "redistribute": "" + }, + { + "id": "*10", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "name": "mm-bfd153-1791732031266", + "routerId": "198.18.253.2", + "version": 2, + "disabled": false, + "inactive": false, + "redistribute": "" + } + ], + "failures": [] + }, + "faultStarted": 1791732324364, + "faultInstalled": 1791732324658, + "faultCatalog": { + "neighbors": [ + { + "id": "*F3FDDC00", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "address": "198.18.153.2", + "routerId": "198.18.253.2", + "instance": "mm-bfd153-1791732031266", + "area": "mm-bfd153-1791732031266", + "areaId": "0.0.0.0", + "interface": "mm-bfd153-1791732031266-g", + "state": "Full", + "uptime": "28s", + "stateChanges": 5, + "priority": null + }, + { + "id": "*F3FDDC00", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "address": "198.18.153.1", + "routerId": "198.18.253.1", + "instance": "mm-bfd153-1791732031266", + "area": "mm-bfd153-1791732031266", + "areaId": "0.0.0.0", + "interface": "mm-bfd153-1791732031266-g", + "state": "Full", + "uptime": "28s", + "stateChanges": 9, + "priority": null + } + ], + "interfaces": [ + { + "id": "*26", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "instance": "mm-bfd153-1791732031266", + "area": "mm-bfd153-1791732031266", + "areaId": "0.0.0.0", + "interface": "mm-bfd153-1791732031266-g", + "cost": 10, + "type": "ptp", + "disabled": false, + "inactive": false, + "priority": 128, + "helloInterval": 1, + "deadInterval": 20, + "useBfd": true + }, + { + "id": "*24", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "instance": "mm-bfd153-1791732031266", + "area": "mm-bfd153-1791732031266", + "areaId": "0.0.0.0", + "interface": "mm-bfd153-1791732031266-g", + "cost": 10, + "type": "ptp", + "disabled": false, + "inactive": false, + "priority": 128, + "helloInterval": 1, + "deadInterval": 20, + "useBfd": true + } + ], + "bfdSessions": [ + { + "id": "*1", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "localAddr": "198.18.153.1", + "remoteAddr": "198.18.153.2", + "interface": "mm-bfd153-1791732031266-g", + "state": "Down", + "uptime": null, + "multihop": false, + "multiplier": 3, + "txInterval": 1000, + "rxInterval": 200, + "holdTime": null, + "packetsRx": 0, + "packetsTx": 33, + "stateChanges": 0 + }, + { + "id": "*1", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "localAddr": "198.18.153.2", + "remoteAddr": "198.18.153.1", + "interface": "mm-bfd153-1791732031266-g", + "state": "Down", + "uptime": null, + "multihop": false, + "multiplier": 3, + "txInterval": 1000, + "rxInterval": 200, + "holdTime": null, + "packetsRx": 0, + "packetsTx": 34, + "stateChanges": 0 + } + ], + "routes": [ + { + "id": "*2014D000", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "destination": "198.18.253.2/32", + "type": "Unknown", + "cost": null, + "nextHop": "198.18.153.2", + "via": "mm-bfd153-1791732031266-g", + "area": "" + }, + { + "id": "*2014D000", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "destination": "198.18.253.1/32", + "type": "Unknown", + "cost": null, + "nextHop": "198.18.153.1", + "via": "mm-bfd153-1791732031266-g", + "area": "" + } + ], + "instances": [ + { + "id": "*12", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "name": "mm-bfd153-1791732031266", + "routerId": "198.18.253.1", + "version": 2, + "disabled": false, + "inactive": false, + "redistribute": "" + }, + { + "id": "*10", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "name": "mm-bfd153-1791732031266", + "routerId": "198.18.253.2", + "version": 2, + "disabled": false, + "inactive": false, + "redistribute": "" + } + ], + "failures": [] + }, + "faultPings": [ + { + "serverId": 1, + "sent": 3, + "received": 3 + }, + { + "serverId": 2, + "sent": 3, + "received": 3 + } + ], + "fullWhileBfdDown": true, + "recovery": [ + { + "serverId": 1, + "started": 1791732411787, + "ended": 1791732411796, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "200ms", + "desired-tx-interval": "200ms", + "hold-time": "3s", + "local-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "1", + "packets-tx": "99", + "remote-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "remote-min-rx": "200ms", + "remote-min-tx": "1s", + "required-min-rx": "200ms", + "state": "up", + "state-changes": "1", + "up": "true", + "uptime": "0s", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.2", + "adjacency": "1m25s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.2", + "state": "Full", + "state-changes": "5", + "timeout": "20s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.2/32", + "dynamic": "true", + "gateway": "198.18.153.2%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.2%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + }, + { + "serverId": 2, + "started": 1791732411788, + "ended": 1791732411874, + "bfd": [ + { + ".id": "*1", + "actual-tx-interval": "200ms", + "desired-tx-interval": "200ms", + "hold-time": "600ms", + "local-address": "198.18.153.2%mm-bfd153-1791732031266-g", + "multihop": "false", + "multiplier": "3", + "packets-rx": "3", + "packets-tx": "99", + "remote-address": "198.18.153.1%mm-bfd153-1791732031266-g", + "remote-min-rx": "200ms", + "remote-min-tx": "200ms", + "required-min-rx": "200ms", + "state": "up", + "state-changes": "2", + "up": "true", + "uptime": "1s", + "vrf": "main" + } + ], + "neighbors": [ + { + ".id": "*F3FDDC00", + "address": "198.18.153.1", + "adjacency": "1m25s", + "area": "mm-bfd153-1791732031266", + "dynamic": "true", + "instance": "mm-bfd153-1791732031266", + "interface": "mm-bfd153-1791732031266-g", + "router-id": "198.18.253.1", + "state": "Full", + "state-changes": "9", + "timeout": "19s" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "distance": "110", + "dst-address": "198.18.253.1/32", + "dynamic": "true", + "gateway": "198.18.153.1%mm-bfd153-1791732031266-g", + "immediate-gw": "198.18.153.1%mm-bfd153-1791732031266-g", + "inactive": "false", + "ospf": "true", + "routing-table": "main", + "scope": "20", + "target-scope": "10" + } + ] + } + ], + "recoveryPings": [ + { + "serverId": 1, + "sent": 3, + "received": 3 + }, + { + "serverId": 2, + "sent": 3, + "received": 3 + } + ], + "passed": true +} \ No newline at end of file diff --git a/docs/ux-ui/screens/ospf-bfd-conflict153-1440-2026-10-11.png b/docs/ux-ui/screens/ospf-bfd-conflict153-1440-2026-10-11.png new file mode 100644 index 00000000..c8d84624 Binary files /dev/null and b/docs/ux-ui/screens/ospf-bfd-conflict153-1440-2026-10-11.png differ diff --git a/docs/ux-ui/screens/ospf-bfd-conflict153-320-2026-10-11.png b/docs/ux-ui/screens/ospf-bfd-conflict153-320-2026-10-11.png new file mode 100644 index 00000000..8cb57929 Binary files /dev/null and b/docs/ux-ui/screens/ospf-bfd-conflict153-320-2026-10-11.png differ diff --git a/lib/ospf-state.test.ts b/lib/ospf-state.test.ts index f65c7e06..d4be80d8 100644 --- a/lib/ospf-state.test.ts +++ b/lib/ospf-state.test.ts @@ -1,12 +1,26 @@ import assert from "node:assert/strict" import { test } from "node:test" -import { normalizeOspfState, normalizeBfdState, ospfNodeState } from "./ospf-state" +import { normalizeOspfState, normalizeBfdState, ospfNodeState, ospfBfdConflicts } from "./ospf-state" test("RouterOS states keep transitional adjacency separate from failure", () => { assert.deepEqual(["full", "2-way", "ExStart", "exchange", "loading", "attempt", "init", "down"].map(normalizeOspfState), ["Full", "2-Way", "ExStart", "Exchange", "Loading", "Attempt", "Init", "Down"]) assert.equal(normalizeOspfState("future-state"), "Unknown") assert.equal(normalizeBfdState(""), "Unknown") assert.equal(normalizeBfdState(" UP "), "Up") }) + +test("Full/BFD conflict requires fresh exact device, interface, peer, explicit active BFD and unique direct session", () => { + const neighbor = { localRouter: "1", localIface: "gre-own", neighborAddress: "198.18.153.2", state: "Full" as const } + const iface = { serverId: "1", interfaceName: "gre-own", active: true, useBfd: true } + const session = { serverId: "1", iface: "gre-own", remoteAddr: "198.18.153.2", state: "Down" as const, multihop: false } + assert.deepEqual(ospfBfdConflicts([neighbor], [iface], [session]), [neighbor]) + assert.deepEqual(ospfBfdConflicts([neighbor], [iface], [{ ...session, state: "AdminDown" }]), [neighbor]) + for (const s of [{ ...session, serverId: "2" }, { ...session, iface: "ether1" }, { ...session, remoteAddr: "198.18.153.3" }, { ...session, multihop: true }, { ...session, multihop: null }, { ...session, state: "Unknown" as const }, { ...session, state: "Up" as const }, { ...session, dataUnknown: true }]) assert.deepEqual(ospfBfdConflicts([neighbor], [iface], [s]), []) + assert.deepEqual(ospfBfdConflicts([neighbor], [iface], [session, { ...session, state: "Up" }]), []) + for (const i of [{ ...iface, useBfd: null }, { ...iface, useBfd: false }, { ...iface, active: false }, { ...iface, active: null }, { ...iface, dataUnknown: true }]) assert.deepEqual(ospfBfdConflicts([neighbor], [i], [session]), []) + assert.deepEqual(ospfBfdConflicts([{ ...neighbor, dataUnknown: true }], [iface], [session]), []) + assert.deepEqual(ospfBfdConflicts([{ ...neighbor, state: "Down" }], [iface], [session]), []) + assert.deepEqual(ospfBfdConflicts([{ ...neighbor, neighborAddress: undefined }], [iface], [session]), []) +}) test("topology does not infer Down from missing or transitional evidence", () => { assert.equal(ospfNodeState([]), "none") assert.equal(ospfNodeState(["Down"]), "Down") diff --git a/lib/ospf-state.ts b/lib/ospf-state.ts index 7d73cd82..eaf4f2dc 100644 --- a/lib/ospf-state.ts +++ b/lib/ospf-state.ts @@ -12,3 +12,18 @@ export function ospfNodeState(states: OspfNeighborState[]): "Full" | "2-Way" | " if (states.some(state => state !== "Down")) return "Pending" return "Down" } + +/** Correlate only a single observed direct BFD session on an explicitly configured interface. */ +export function ospfBfdConflicts( + neighbors: T[], + interfaces: Array<{ serverId: string; interfaceName: string; useBfd?: boolean | null; active?: boolean | null; dataUnknown?: boolean }>, + sessions: Array<{ serverId: string; iface: string; remoteAddr: string; state: BfdState; multihop?: boolean | null; dataUnknown?: boolean }>, +): T[] { + const ip = (value: string) => value.split("%")[0]?.toLowerCase() ?? "" + return neighbors.filter(n => { + if (n.dataUnknown || n.state !== "Full" || !n.neighborAddress || !n.localIface) return false + if (!interfaces.some(i => !i.dataUnknown && i.active === true && i.useBfd === true && i.serverId === n.localRouter && i.interfaceName === n.localIface)) return false + const matching = sessions.filter(s => !s.dataUnknown && s.multihop === false && s.serverId === n.localRouter && s.iface === n.localIface && ip(s.remoteAddr) === ip(n.neighborAddress!)) + return matching.length === 1 && (matching[0]!.state === "Down" || matching[0]!.state === "AdminDown") + }) +} diff --git a/tests/e2e/ospf-bfd-conflict.spec.ts b/tests/e2e/ospf-bfd-conflict.spec.ts new file mode 100644 index 00000000..fed56d40 --- /dev/null +++ b/tests/e2e/ospf-bfd-conflict.spec.ts @@ -0,0 +1,37 @@ +import { test, expect } from "@playwright/test" +for (const width of [1440, 320]) { + test(`OSPF Full/BFD Down: предупреждение, scope и recovery, ширина ${width}`, async ({ page }) => { + await page.setViewportSize({ width, height: 1000 }) + let phase = "down" + const base = { serverId: 1, serverName: "CHR 1", serverSite: "", serverCountry: "RU" } + const neighbor = { ...base, id: "*n", address: "198.18.153.2", routerId: "198.18.253.2", instance: "own", area: "own", areaId: "0.0.0.0", interface: "gre-own", state: "Full", uptime: "1m", stateChanges: 1, priority: 1 } + const iface = { ...base, id: "*i", instance: "own", area: "own", areaId: "0.0.0.0", interface: "gre-own", cost: 10, type: "ptp", disabled: false, inactive: false, priority: 1, helloInterval: 1, deadInterval: 20, useBfd: true } + const bfd = { ...base, id: "*b", localAddr: "198.18.153.1", remoteAddr: "198.18.153.2", interface: "gre-own", state: "Down", uptime: "1s", multihop: false, multiplier: 3, txInterval: 200, rxInterval: 200, holdTime: null, packetsRx: 10, packetsTx: 20, stateChanges: 1 } + const errors: string[] = [] + page.on("pageerror", e => errors.push(e.message)) + await page.route("**/health", route => route.fulfill({ json: { ok: true } })) + await page.route("**/api/**", route => { + const path = new URL(route.request().url()).pathname + if (path === "/api/servers") return route.fulfill({ json: [1, 2].map(id => ({ id, name: "CHR " + id, host: "192.0.2." + id, country: "RU", enabled: true, status: "online" })) }) + if (path === "/api/ospf/catalog") return route.fulfill({ json: { neighbors: [neighbor], interfaces: [{ ...iface, useBfd: phase === "not-used" ? false : true }], instances: [], bfdSessions: [{ ...bfd, serverId: phase === "foreign" ? 2 : 1, state: phase === "up" ? "Up" : phase === "unknown" ? "Unknown" : "Down" }], routes: [], failures: [] } }) + return route.fulfill({ json: path === "/api/auth/config" ? { required: false } : {} }) + }) + await page.goto("/ospf?server=1&tab=neighbors&q=253") + const alert = page.getByRole("alert").filter({ hasText: "OSPF Full при недоступном BFD" }) + await expect(alert).toBeVisible() + await expect(alert).toContainText("CHR 1 · gre-own") + await expect(page.locator("tr[data-row-id]").first()).toContainText("Full") + expect(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true) + await alert.getByRole("button", { name: "Проверить BFD" }).click() + await expect.poll(() => new URL(page.url()).searchParams.get("tab")).toBe("bfd") + expect(new URL(page.url()).searchParams.get("server")).toBe("1") + expect(new URL(page.url()).searchParams.has("q")).toBe(false) + await expect(page.locator("tr[data-row-id]").first()).toContainText("Down") + for (const next of ["up", "foreign", "not-used", "unknown"]) { + phase = next + await page.getByRole("button", { name: "Обновить", exact: true }).click() + await expect(alert).toHaveCount(0) + } + expect(errors).toEqual([]) + }) +}