chore(test): подтвердить обмен и отзыв собственного BGP-префикса

This commit is contained in:
Denozordec committed 2026-10-09 22:40:30 +07:00
1 parent c9bf5abe55
commit f319eb947a
10 files changed
+690 -3

No files matched your search

+23
View File
@@ -847,3 +847,26 @@ Production image не содержит dev-only jose: первый fixture impor
**Контроль/runtime.** Свои objects удалены по exact IDs/атрибутам, baseline7 коллекций×2 совпал, оба CHR доступны, default/public/195.195.195.195/32 и credentials сохранены. Нормализованные SHA source/deployed DataGrid renderer и OSPF consumer совпадали до изменения, поэтому проблема не была вызвана отставшим компонентом стенда. Один frontend Docker build, production TypeScript/build, entry/node --check/compose --wait passed. mmapp-test/frontend:ux-ospf91/version1.0.0-test.ospf91, image sha256:b4bade515234115b3cad257ceb87ef7beb347e754ca92d6a97a25adc2199fd33. Context optimizer87 frontend +один consumer file, override SHA27a27569335c377bf8662fb5b39d200ce98d52925cafdf51dee165464c1532078, label не Git SHA. .env backup приватный, backend/migrations не менялись, полная регрессия/failover не повторялись. Один локальный commit без push.
Следующий92 — BGP propagation собственных private prefixes, withdrawal/re-advertisement и UI counters; только собственные GRE/instances/filter chains. Квота84% использовано после блока, этап12.5 и внешние границы остаются открытыми.
## 12.5.92 — BGP: собственный префикс, отзыв и повторное объявление (2026-10-09)
**Сценарий.** Свой GRE/link198.18.92.0/30 и bridge loopbacks198.18.192.1/32↔2/32, private AS65092/65093, explicit BGP instances/router IDs и direct eBGP connections. Address list output.network содержит только собственный loopback /32. Отдельные input/output chains принимают только соответствующий exact /32 по dst/dst-len и отклоняют остальное. Default-originate=never, network-blackhole=no, public/default/metadata prefixes не экспортировались.
| Проверка | Результат |
| --- | --- |
| Established / маршрут | Обе сессии Established; ровно1 learned BGP route на узле, active |
| Data plane | Собственные loopbacks Ping3/3 в обе стороны |
| Production API | Selected/catalog Established, prefixesRx1; неизвестные counters не заменены нулём |
| Отзыв | Отключение своей connection наCHR1 убрало active private route наCHR2 |
| Повторное объявление | Включение connection вернуло Established/active own prefix/API Rx1 |
| UI | 4/4 два CHR×1280/320: received1, Router ID, details/reload, document fits/pageerror0 |
**Доказательства.** [Native/API протокол](ux-ui/acceptance/bgp-prefix-2026-10-09.json). Withdrawal впервые наблюдался340,8ms после acknowledgement административного disable. Это не hold-timer/BFD detection или loss-based failover/SLA. Public routing не менялся; peer TCP179 проходит только через собственный GRE. Input принимает только remote loopback, output только local loopback, что проверено также отсутствием других BGP routes.
[Browser отчёт](ux-ui/acceptance/browser-bgp-prefix-2026-10-09.json), [ПК](ux-ui/screens/bgp-real-prefix-server1-1280-2026-10-09.png), [320px](ux-ui/screens/bgp-real-prefix-server1-320-2026-10-09.png) просмотрен: received1, Router ID198.18.192.2, unknown transmitted/active counters не выдуманы. Настоящие deployed API, без mocks. В URL сохранены server/state=Established/q собственного имени/session. RouterOS readonly session cache может сохранять старые строки, поэтому UI fixture отфильтрована по текущему имени и Established.
**Оснастка/границы.** Native lifecycle прошёл с первой попытки. Observer90s завершился до начала browser; первая браузерная попытка получила ECONNRESET до страницы. Уже принятые native операции не повторялись: для UI создана отдельная такая же пара, ожидание180s, после4 cases cleanup. Это две отдельно обозначенные фазы, не один общий snapshot. Правила подтверждены [BGP](https://help.mikrotik.com/docs/spaces/ROS/pages/331612228/routing%2Bbgp) и [Routing Filters](https://help.mikrotik.com/docs/spaces/ROS/pages/74678285/Route%2BSelection%2Band%2BFilters).
**Контроль/фиксация.** На каждой фазе exact ID/name/comment/chain/list/address/interface preflight; свои connections→instances→filter rules→address list/IP/bridge/GRE удалены. Исходные IDs8 коллекций×2 совпали, default/public/195.195.195.195/32 сохранены, оба CHR доступны, пароли не менялись. Product/source/dependencies не менялись, build/миграций/широких регрессий нет. Runtime backend diagnostics89/PG healthy, frontend ospf91; временных контейнеров не осталось. Один локальный commit без push.
Квота95% использовано после блока. Следующий93 — отдельный BGP loss/alternate-path сценарий и сведение остаточных внешних ограничений; начать со свежего лимита. Не приняты multi-peer/WAN policy failover, IPv6/scale/maximum throughput/Portal SSO/physical disconnect/durable retry и ранее перечисленные внешние границы IPsec. Этап12.5 целиком не закрыт.
+1 -1
View File
@@ -1,6 +1,6 @@
# План реализации UX/UI по пятичасовым окнам
Актуальное продолжение 2026-10-09: 12.5.91 устранил неоднозначное отображение IPv4 CIDR в OSPF: /32 больше не разбивается на /3 и2. Column180px/nowrap/title, red-before/green-after geometry test,7 E2E и4 live UI cases. Baseline7 коллекций×2 восстановлен. Backend ux-diagnostics89/frontend ux-ospf91. Следующий12.5.92 — обмен только собственным BGP prefix через GRE, отзыв и повторное объявление, API/UI контекст. Квота84% использовано; этап12.5 открыт.
Актуальное продолжение 2026-10-09: 12.5.92 принял eBGP exchange одного собственного /32 на каждом CHR через свой GRE, Ping3/3×2, административный withdrawal/re-advertisement, API prefixesRx1 и4 live UI cases. Baseline8 коллекций×2 восстановлен. Runtime backend ux-diagnostics89/frontend ux-ospf91. Следующий12.5.93 — профильный BGP loss/alternate-path сценарий и окончательная матрица внешних ограничений; не начинать его без свежей квоты. Квота95% использовано после блока; этап12.5 открыт.
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-09. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
+25 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-09: 12.5.91 устранил неоднозначное отображение IPv4 CIDR в OSPF: /32 больше не разбивается на /3 и2. Column180px/nowrap/title, red-before/green-after geometry test,7 E2E и4 live UI cases. Baseline7 коллекций×2 восстановлен. Backend ux-diagnostics89/frontend ux-ospf91. Следующий12.5.92 — обмен только собственным BGP prefix через GRE, отзыв и повторное объявление, API/UI контекст. Квота84% использовано; этап12.5 открыт.
Актуальное продолжение 2026-10-09: 12.5.92 принял eBGP exchange одного собственного /32 на каждом CHR через свой GRE, Ping3/3×2, административный withdrawal/re-advertisement, API prefixesRx1 и4 live UI cases. Baseline8 коллекций×2 восстановлен. Runtime backend ux-diagnostics89/frontend ux-ospf91. Следующий12.5.93 — профильный BGP loss/alternate-path сценарий и окончательная матрица внешних ограничений; не начинать его без свежей квоты. Квота95% использовано после блока; этап12.5 открыт.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -36,7 +36,30 @@
| 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–91 и ограничения ниже. Runtime backend ux-diagnostics89/frontend ux-ospf91. |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–92 и ограничения ниже. Runtime backend ux-diagnostics89/frontend ux-ospf91. |
## 12.5.92 — BGP: собственный префикс, отзыв и повторное объявление (2026-10-09)
**Сценарий.** Свой GRE/link198.18.92.0/30 и bridge loopbacks198.18.192.1/32↔2/32, private AS65092/65093, explicit BGP instances/router IDs и direct eBGP connections. Address list output.network содержит только собственный loopback /32. Отдельные input/output chains принимают только соответствующий exact /32 по dst/dst-len и отклоняют остальное. Default-originate=never, network-blackhole=no, public/default/metadata prefixes не экспортировались.
| Проверка | Результат |
| --- | --- |
| Established / маршрут | Обе сессии Established; ровно1 learned BGP route на узле, active |
| Data plane | Собственные loopbacks Ping3/3 в обе стороны |
| Production API | Selected/catalog Established, prefixesRx1; неизвестные counters не заменены нулём |
| Отзыв | Отключение своей connection наCHR1 убрало active private route наCHR2 |
| Повторное объявление | Включение connection вернуло Established/active own prefix/API Rx1 |
| UI | 4/4 два CHR×1280/320: received1, Router ID, details/reload, document fits/pageerror0 |
**Доказательства.** [Native/API протокол](ux-ui/acceptance/bgp-prefix-2026-10-09.json). Withdrawal впервые наблюдался340,8ms после acknowledgement административного disable. Это не hold-timer/BFD detection или loss-based failover/SLA. Public routing не менялся; peer TCP179 проходит только через собственный GRE. Input принимает только remote loopback, output только local loopback, что проверено также отсутствием других BGP routes.
[Browser отчёт](ux-ui/acceptance/browser-bgp-prefix-2026-10-09.json), [ПК](ux-ui/screens/bgp-real-prefix-server1-1280-2026-10-09.png), [320px](ux-ui/screens/bgp-real-prefix-server1-320-2026-10-09.png) просмотрен: received1, Router ID198.18.192.2, unknown transmitted/active counters не выдуманы. Настоящие deployed API, без mocks. В URL сохранены server/state=Established/q собственного имени/session. RouterOS readonly session cache может сохранять старые строки, поэтому UI fixture отфильтрована по текущему имени и Established.
**Оснастка/границы.** Native lifecycle прошёл с первой попытки. Observer90s завершился до начала browser; первая браузерная попытка получила ECONNRESET до страницы. Уже принятые native операции не повторялись: для UI создана отдельная такая же пара, ожидание180s, после4 cases cleanup. Это две отдельно обозначенные фазы, не один общий snapshot. Правила подтверждены [BGP](https://help.mikrotik.com/docs/spaces/ROS/pages/331612228/routing%2Bbgp) и [Routing Filters](https://help.mikrotik.com/docs/spaces/ROS/pages/74678285/Route%2BSelection%2Band%2BFilters).
**Контроль/фиксация.** На каждой фазе exact ID/name/comment/chain/list/address/interface preflight; свои connections→instances→filter rules→address list/IP/bridge/GRE удалены. Исходные IDs8 коллекций×2 совпали, default/public/195.195.195.195/32 сохранены, оба CHR доступны, пароли не менялись. Product/source/dependencies не менялись, build/миграций/широких регрессий нет. Runtime backend diagnostics89/PG healthy, frontend ospf91; временных контейнеров не осталось. Один локальный commit без push.
Квота95% использовано после блока. Следующий93 — отдельный BGP loss/alternate-path сценарий и сведение остаточных внешних ограничений; начать со свежего лимита. Не приняты multi-peer/WAN policy failover, IPv6/scale/maximum throughput/Portal SSO/physical disconnect/durable retry и ранее перечисленные внешние границы IPsec. Этап12.5 целиком не закрыт.
## 12.5.91 — OSPF Data Grid: целый IPv4 CIDR (2026-10-09)
+23
View File
@@ -2156,3 +2156,26 @@ Production image не содержит dev-only jose: первый fixture impor
**Контроль/runtime.** Свои objects удалены по exact IDs/атрибутам, baseline7 коллекций×2 совпал, оба CHR доступны, default/public/195.195.195.195/32 и credentials сохранены. Нормализованные SHA source/deployed DataGrid renderer и OSPF consumer совпадали до изменения, поэтому проблема не была вызвана отставшим компонентом стенда. Один frontend Docker build, production TypeScript/build, entry/node --check/compose --wait passed. mmapp-test/frontend:ux-ospf91/version1.0.0-test.ospf91, image sha256:b4bade515234115b3cad257ceb87ef7beb347e754ca92d6a97a25adc2199fd33. Context optimizer87 frontend +один consumer file, override SHA27a27569335c377bf8662fb5b39d200ce98d52925cafdf51dee165464c1532078, label не Git SHA. .env backup приватный, backend/migrations не менялись, полная регрессия/failover не повторялись. Один локальный commit без push.
Следующий92 — BGP propagation собственных private prefixes, withdrawal/re-advertisement и UI counters; только собственные GRE/instances/filter chains. Квота84% использовано после блока, этап12.5 и внешние границы остаются открытыми.
## 12.5.92 — BGP: собственный префикс, отзыв и повторное объявление (2026-10-09)
**Сценарий.** Свой GRE/link198.18.92.0/30 и bridge loopbacks198.18.192.1/32↔2/32, private AS65092/65093, explicit BGP instances/router IDs и direct eBGP connections. Address list output.network содержит только собственный loopback /32. Отдельные input/output chains принимают только соответствующий exact /32 по dst/dst-len и отклоняют остальное. Default-originate=never, network-blackhole=no, public/default/metadata prefixes не экспортировались.
| Проверка | Результат |
| --- | --- |
| Established / маршрут | Обе сессии Established; ровно1 learned BGP route на узле, active |
| Data plane | Собственные loopbacks Ping3/3 в обе стороны |
| Production API | Selected/catalog Established, prefixesRx1; неизвестные counters не заменены нулём |
| Отзыв | Отключение своей connection наCHR1 убрало active private route наCHR2 |
| Повторное объявление | Включение connection вернуло Established/active own prefix/API Rx1 |
| UI | 4/4 два CHR×1280/320: received1, Router ID, details/reload, document fits/pageerror0 |
**Доказательства.** [Native/API протокол](ux-ui/acceptance/bgp-prefix-2026-10-09.json). Withdrawal впервые наблюдался340,8ms после acknowledgement административного disable. Это не hold-timer/BFD detection или loss-based failover/SLA. Public routing не менялся; peer TCP179 проходит только через собственный GRE. Input принимает только remote loopback, output только local loopback, что проверено также отсутствием других BGP routes.
[Browser отчёт](ux-ui/acceptance/browser-bgp-prefix-2026-10-09.json), [ПК](ux-ui/screens/bgp-real-prefix-server1-1280-2026-10-09.png), [320px](ux-ui/screens/bgp-real-prefix-server1-320-2026-10-09.png) просмотрен: received1, Router ID198.18.192.2, unknown transmitted/active counters не выдуманы. Настоящие deployed API, без mocks. В URL сохранены server/state=Established/q собственного имени/session. RouterOS readonly session cache может сохранять старые строки, поэтому UI fixture отфильтрована по текущему имени и Established.
**Оснастка/границы.** Native lifecycle прошёл с первой попытки. Observer90s завершился до начала browser; первая браузерная попытка получила ECONNRESET до страницы. Уже принятые native операции не повторялись: для UI создана отдельная такая же пара, ожидание180s, после4 cases cleanup. Это две отдельно обозначенные фазы, не один общий snapshot. Правила подтверждены [BGP](https://help.mikrotik.com/docs/spaces/ROS/pages/331612228/routing%2Bbgp) и [Routing Filters](https://help.mikrotik.com/docs/spaces/ROS/pages/74678285/Route%2BSelection%2Band%2BFilters).
**Контроль/фиксация.** На каждой фазе exact ID/name/comment/chain/list/address/interface preflight; свои connections→instances→filter rules→address list/IP/bridge/GRE удалены. Исходные IDs8 коллекций×2 совпали, default/public/195.195.195.195/32 сохранены, оба CHR доступны, пароли не менялись. Product/source/dependencies не менялись, build/миграций/широких регрессий нет. Runtime backend diagnostics89/PG healthy, frontend ospf91; временных контейнеров не осталось. Один локальный commit без push.
Квота95% использовано после блока. Следующий93 — отдельный BGP loss/alternate-path сценарий и сведение остаточных внешних ограничений; начать со свежего лимита. Не приняты multi-peer/WAN policy failover, IPv6/scale/maximum throughput/Portal SSO/physical disconnect/durable retry и ранее перечисленные внешние границы IPsec. Этап12.5 целиком не закрыт.
@@ -0,0 +1,579 @@
{
"date": "2026-10-09",
"nativeLifecycle": {
"date": "2026-10-09",
"name": "mm-bgp92-1791559769092",
"devices": [
{
"serverId": 1,
"catalog": {
"id": "*2800002",
"serverId": 1,
"serverName": "CHR",
"serverSite": "",
"serverCountry": "",
"name": "mm-bgp92-1791559769092-1",
"peerIp": "198.18.92.2",
"remoteAs": 65093,
"localAs": 65092,
"localId": "198.18.192.1",
"remoteId": "198.18.192.2",
"state": "Established",
"type": "eBGP",
"uptime": "280ms",
"holdTime": 180,
"keepalive": 60,
"prefixesRx": 1,
"prefixesTx": null,
"inputMessages": 2,
"outputMessages": 2,
"capabilities": [
"MP-BGP",
"Route Refresh",
"Extended Next-Hop",
"Graceful Restart",
"4-byte-AS"
],
"lastError": null,
"afi": "ip"
},
"nativeRoute": {
".id": "*2014D000",
"active": "true",
"bgp": "true",
"distance": "20",
"dst-address": "198.18.192.2/32",
"dynamic": "true",
"gateway": "198.18.92.2",
"immediate-gw": "198.18.92.2%mm-bgp92-1791559769092",
"inactive": "false",
"routing-table": "main",
"scope": "40",
"target-scope": "10"
},
"pingReceived": 3,
"pingAttempts": [
3
],
"exactOwnPrefixOnly": true
},
{
"serverId": 2,
"catalog": {
"id": "*2800002",
"serverId": 2,
"serverName": "CHR",
"serverSite": "",
"serverCountry": "",
"name": "mm-bgp92-1791559769092-1",
"peerIp": "198.18.92.1",
"remoteAs": 65092,
"localAs": 65093,
"localId": "198.18.192.2",
"remoteId": "198.18.192.1",
"state": "Established",
"type": "eBGP",
"uptime": "110ms",
"holdTime": 180,
"keepalive": 60,
"prefixesRx": 1,
"prefixesTx": null,
"inputMessages": 2,
"outputMessages": 2,
"capabilities": [
"MP-BGP",
"Route Refresh",
"Extended Next-Hop",
"Graceful Restart",
"4-byte-AS"
],
"lastError": null,
"afi": "ip"
},
"nativeRoute": {
".id": "*2014D000",
"active": "true",
"bgp": "true",
"distance": "20",
"dst-address": "198.18.192.1/32",
"dynamic": "true",
"gateway": "198.18.92.1",
"immediate-gw": "198.18.92.1%mm-bgp92-1791559769092",
"inactive": "false",
"routing-table": "main",
"scope": "40",
"target-scope": "10"
},
"pingReceived": 3,
"pingAttempts": [
3
],
"exactOwnPrefixOnly": true
}
],
"cleanup": [
{
"serverId": 1,
"/routing/bgp/connection": true,
"/routing/bgp/instance": true,
"/routing/filter/rule": true,
"/ip/firewall/address-list": true,
"/interface/gre": true,
"/interface/bridge": true,
"/ip/address": true,
"/ip/route": true
},
{
"serverId": 2,
"/routing/bgp/connection": true,
"/routing/bgp/instance": true,
"/routing/filter/rule": true,
"/ip/firewall/address-list": true,
"/interface/gre": true,
"/interface/bridge": true,
"/ip/address": true,
"/ip/route": true
}
],
"initial": [
{
"sessions": [
{
".id": "*2800002",
"ebgp": "",
"established": "true",
"hold-time": "3m",
"input.filter": "mm-bgp92-1791559769092-in",
"input.procid": "20",
"instance": "mm-bgp92-1791559769092",
"keepalive-time": "1m",
"last-started": "2026-10-09 18:29:32",
"local.address": "198.18.92.1",
"local.afi": "ip",
"local.as": "65092",
"local.bytes": "68",
"local.capabilities": "mp,rr,enhe,gr,as4",
"local.cluster-id": "198.18.192.1",
"local.eor": "",
"local.id": "198.18.192.1",
"local.messages": "2",
"name": "mm-bgp92-1791559769092-1",
"output.filter-chain": "mm-bgp92-1791559769092-out",
"output.network": "mm-bgp92-1791559769092",
"output.procid": "20",
"prefix-count": "1",
"remote.address": "198.18.92.2",
"remote.afi": "ip",
"remote.as": "65093",
"remote.bytes": "68",
"remote.capabilities": "mp,rr,enhe,gr,as4",
"remote.eor": "",
"remote.id": "198.18.192.2",
"remote.messages": "2",
"uptime": "280ms"
}
],
"routes": [
{
".id": "*2014D000",
"active": "true",
"bgp": "true",
"distance": "20",
"dst-address": "198.18.192.2/32",
"dynamic": "true",
"gateway": "198.18.92.2",
"immediate-gw": "198.18.92.2%mm-bgp92-1791559769092",
"inactive": "false",
"routing-table": "main",
"scope": "40",
"target-scope": "10"
}
]
},
{
"sessions": [
{
".id": "*2800002",
"ebgp": "",
"established": "true",
"hold-time": "3m",
"input.filter": "mm-bgp92-1791559769092-in",
"input.procid": "20",
"instance": "mm-bgp92-1791559769092",
"keepalive-time": "1m",
"last-started": "2026-10-09 17:29:33",
"local.address": "198.18.92.2",
"local.afi": "ip",
"local.as": "65093",
"local.bytes": "68",
"local.capabilities": "mp,rr,enhe,gr,as4",
"local.cluster-id": "198.18.192.2",
"local.eor": "",
"local.id": "198.18.192.2",
"local.messages": "2",
"name": "mm-bgp92-1791559769092-1",
"output.filter-chain": "mm-bgp92-1791559769092-out",
"output.network": "mm-bgp92-1791559769092",
"output.procid": "20",
"prefix-count": "1",
"remote.address": "198.18.92.1",
"remote.afi": "ip",
"remote.as": "65092",
"remote.bytes": "68",
"remote.capabilities": "mp,rr,enhe,gr,as4",
"remote.eor": "",
"remote.id": "198.18.192.1",
"remote.messages": "2",
"uptime": "110ms"
}
],
"routes": [
{
".id": "*2014D000",
"active": "true",
"bgp": "true",
"distance": "20",
"dst-address": "198.18.192.1/32",
"dynamic": "true",
"gateway": "198.18.92.1",
"immediate-gw": "198.18.92.1%mm-bgp92-1791559769092",
"inactive": "false",
"routing-table": "main",
"scope": "40",
"target-scope": "10"
}
]
}
],
"withdrawal": {
"ownConnectionDisabled": true,
"activePrivateRouteGone": true,
"firstObservedMs": 340.8078349999996
},
"recovered": [
{
"sessions": [
{
".id": "*2800003",
"ebgp": "",
"established": "true",
"hold-time": "3m",
"input.filter": "mm-bgp92-1791559769092-in",
"input.procid": "20",
"instance": "mm-bgp92-1791559769092",
"keepalive-time": "1m",
"last-started": "2026-10-09 18:29:34",
"local.address": "198.18.92.1",
"local.afi": "ip",
"local.as": "65092",
"local.bytes": "68",
"local.capabilities": "mp,rr,enhe,gr,as4",
"local.cluster-id": "198.18.192.1",
"local.eor": "",
"local.id": "198.18.192.1",
"local.messages": "2",
"name": "mm-bgp92-1791559769092-1",
"output.filter-chain": "mm-bgp92-1791559769092-out",
"output.network": "mm-bgp92-1791559769092",
"output.procid": "20",
"prefix-count": "0",
"remote.address": "198.18.92.2",
"remote.afi": "ip",
"remote.as": "65093",
"remote.bytes": "68",
"remote.capabilities": "mp,rr,enhe,gr,as4",
"remote.eor": "",
"remote.id": "198.18.192.2",
"remote.messages": "2",
"uptime": "330ms"
}
],
"routes": [
{
".id": "*2014D000",
"active": "true",
"bgp": "true",
"distance": "20",
"dst-address": "198.18.192.2/32",
"dynamic": "true",
"gateway": "198.18.92.2",
"immediate-gw": "198.18.92.2%mm-bgp92-1791559769092",
"inactive": "false",
"routing-table": "main",
"scope": "40",
"target-scope": "10"
}
]
},
{
"sessions": [
{
".id": "*2800002",
"ebgp": "",
"established": "true",
"hold-time": "3m",
"input.filter": "mm-bgp92-1791559769092-in",
"input.procid": "20",
"instance": "mm-bgp92-1791559769092",
"keepalive-time": "1m",
"last-started": "2026-10-09 17:29:35",
"last-stopped": "2026-10-09 17:29:34",
"local.address": "198.18.92.2",
"local.afi": "ip",
"local.as": "65093",
"local.bytes": "68",
"local.capabilities": "mp,rr,enhe,gr,as4",
"local.cluster-id": "198.18.192.2",
"local.eor": "",
"local.id": "198.18.192.2",
"local.messages": "2",
"name": "mm-bgp92-1791559769092-1",
"output.filter-chain": "mm-bgp92-1791559769092-out",
"output.network": "mm-bgp92-1791559769092",
"output.procid": "20",
"prefix-count": "1",
"remote.address": "198.18.92.1",
"remote.afi": "ip",
"remote.as": "65092",
"remote.bytes": "68",
"remote.capabilities": "mp,rr,enhe,gr,as4",
"remote.eor": "",
"remote.id": "198.18.192.1",
"remote.messages": "2",
"uptime": "160ms"
}
],
"routes": [
{
".id": "*2014D000",
"active": "true",
"bgp": "true",
"distance": "20",
"dst-address": "198.18.192.1/32",
"dynamic": "true",
"gateway": "198.18.92.1",
"immediate-gw": "198.18.92.1%mm-bgp92-1791559769092",
"inactive": "false",
"routing-table": "main",
"scope": "40",
"target-scope": "10"
}
]
}
],
"recoveryCatalog": [
{
"id": "*2800003",
"serverId": 1,
"serverName": "CHR",
"serverSite": "",
"serverCountry": "",
"name": "mm-bgp92-1791559769092-1",
"peerIp": "198.18.92.2",
"remoteAs": 65093,
"localAs": 65092,
"localId": "198.18.192.1",
"remoteId": "198.18.192.2",
"state": "Established",
"type": "eBGP",
"uptime": "330ms",
"holdTime": 180,
"keepalive": 60,
"prefixesRx": 1,
"prefixesTx": null,
"inputMessages": 2,
"outputMessages": 2,
"capabilities": [
"MP-BGP",
"Route Refresh",
"Extended Next-Hop",
"Graceful Restart",
"4-byte-AS"
],
"lastError": null,
"afi": "ip"
},
{
"id": "*2800002",
"serverId": 2,
"serverName": "CHR",
"serverSite": "",
"serverCountry": "",
"name": "mm-bgp92-1791559769092-1",
"peerIp": "198.18.92.1",
"remoteAs": 65092,
"localAs": 65093,
"localId": "198.18.192.2",
"remoteId": "198.18.192.1",
"state": "Established",
"type": "eBGP",
"uptime": "160ms",
"holdTime": 180,
"keepalive": 60,
"prefixesRx": 1,
"prefixesTx": null,
"inputMessages": 2,
"outputMessages": 2,
"capabilities": [
"MP-BGP",
"Route Refresh",
"Extended Next-Hop",
"Graceful Restart",
"4-byte-AS"
],
"lastError": null,
"afi": "ip"
}
]
},
"uiFixture": {
"date": "2026-10-09",
"name": "mm-bgp92-1791560069532",
"devices": [],
"cleanup": [
{
"serverId": 1,
"/routing/bgp/connection": true,
"/routing/bgp/instance": true,
"/routing/filter/rule": true,
"/ip/firewall/address-list": true,
"/interface/gre": true,
"/interface/bridge": true,
"/ip/address": true,
"/ip/route": true
},
{
"serverId": 2,
"/routing/bgp/connection": true,
"/routing/bgp/instance": true,
"/routing/filter/rule": true,
"/ip/firewall/address-list": true,
"/interface/gre": true,
"/interface/bridge": true,
"/ip/address": true,
"/ip/route": true
}
],
"initial": [
{
"sessions": [
{
".id": "*2800004",
"ebgp": "",
"established": "true",
"hold-time": "3m",
"input.filter": "mm-bgp92-1791560069532-in",
"input.procid": "20",
"instance": "mm-bgp92-1791560069532",
"keepalive-time": "1m",
"last-started": "2026-10-09 18:34:33",
"local.address": "198.18.92.1",
"local.afi": "ip",
"local.as": "65092",
"local.bytes": "68",
"local.capabilities": "mp,rr,enhe,gr,as4",
"local.cluster-id": "198.18.192.1",
"local.eor": "",
"local.id": "198.18.192.1",
"local.messages": "2",
"name": "mm-bgp92-1791560069532-1",
"output.filter-chain": "mm-bgp92-1791560069532-out",
"output.network": "mm-bgp92-1791560069532",
"output.procid": "20",
"prefix-count": "1",
"remote.address": "198.18.92.2",
"remote.afi": "ip",
"remote.as": "65093",
"remote.bytes": "68",
"remote.capabilities": "mp,rr,enhe,gr,as4",
"remote.eor": "",
"remote.id": "198.18.192.2",
"remote.messages": "2",
"uptime": "0ms"
}
],
"routes": [
{
".id": "*2014D000",
"active": "true",
"bgp": "true",
"distance": "20",
"dst-address": "198.18.192.2/32",
"dynamic": "true",
"gateway": "198.18.92.2",
"immediate-gw": "198.18.92.2%mm-bgp92-1791560069532",
"inactive": "false",
"routing-table": "main",
"scope": "40",
"target-scope": "10"
}
]
},
{
"sessions": [
{
".id": "*2800003",
"ebgp": "",
"established": "true",
"hold-time": "3m",
"input.filter": "mm-bgp92-1791560069532-in",
"input.procid": "20",
"instance": "mm-bgp92-1791560069532",
"keepalive-time": "1m",
"last-started": "2026-10-09 17:34:33",
"local.address": "198.18.92.2",
"local.afi": "ip",
"local.as": "65093",
"local.bytes": "68",
"local.capabilities": "mp,rr,enhe,gr,as4",
"local.cluster-id": "198.18.192.2",
"local.eor": "",
"local.id": "198.18.192.2",
"local.messages": "2",
"name": "mm-bgp92-1791560069532-1",
"output.filter-chain": "mm-bgp92-1791560069532-out",
"output.network": "mm-bgp92-1791560069532",
"output.procid": "20",
"prefix-count": "0",
"remote.address": "198.18.92.1",
"remote.afi": "ip",
"remote.as": "65092",
"remote.bytes": "68",
"remote.capabilities": "mp,rr,enhe,gr,as4",
"remote.eor": "",
"remote.id": "198.18.192.1",
"remote.messages": "2",
"uptime": "170ms"
}
],
"routes": [
{
".id": "*2014D000",
"active": "true",
"bgp": "true",
"distance": "20",
"dst-address": "198.18.192.1/32",
"dynamic": "true",
"gateway": "198.18.92.1",
"immediate-gw": "198.18.92.1%mm-bgp92-1791560069532",
"inactive": "false",
"routing-table": "main",
"scope": "40",
"target-scope": "10"
}
]
}
]
},
"runtime": {
"backend": "ux-diagnostics89",
"frontend": "ux-ospf91",
"buildsPerformed": 0
},
"notes": [
"Only own /32 is originated through address list and both-direction filter chains; default origination never, network-blackhole no.",
"Withdrawal observed after administrative disable acknowledgement; not loss-based failover or hold-timer performance.",
"First observer expired before browser start; native lifecycle was preserved and only UI fixture recreated.",
"Read-only RouterOS session cache can retain old rows; UI filters Established and current fixture name."
]
}
@@ -0,0 +1,39 @@
{
"date": "2026-10-09",
"phase": "2 320",
"cases": [
{
"serverId": 1,
"width": 1280,
"receivedPrefixCount": 1,
"peerRouterIdVisible": true,
"detailReload": true,
"documentFits": true
},
{
"serverId": 1,
"width": 320,
"receivedPrefixCount": 1,
"peerRouterIdVisible": true,
"detailReload": true,
"documentFits": true
},
{
"serverId": 2,
"width": 1280,
"receivedPrefixCount": 1,
"peerRouterIdVisible": true,
"detailReload": true,
"documentFits": true
},
{
"serverId": 2,
"width": 320,
"receivedPrefixCount": 1,
"peerRouterIdVisible": true,
"detailReload": true,
"documentFits": true
}
],
"errors": []
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB