From e7aaec926dd1057bbad8c7c463d184b06bdbc074 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Sat, 10 Oct 2026 08:59:20 +0700 Subject: [PATCH] =?UTF-8?q?chore(test):=20=D0=BF=D0=BE=D0=B4=D1=82=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=B4=D0=B8=D1=82=D1=8C=20=D0=BC=D0=BE=D1=81=D1=82?= =?UTF-8?q?=20=D0=B8=20=D0=BE=D0=B1=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?MAC=20=D0=B2=20VXLAN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ux-ui-external-acceptance.md | 12 +- docs/ux-ui-plan.md | 4 +- docs/ux-ui-progress.md | 14 +- docs/ux-ui-remaining-acceptance.md | 8 +- docs/ux-ui-stage-12.md | 12 +- .../vxlan-bridge-fdb-2026-10-10.json | 1218 +++++++++++++++++ 6 files changed, 1258 insertions(+), 10 deletions(-) create mode 100644 docs/ux-ui/acceptance/vxlan-bridge-fdb-2026-10-10.json diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index 572d7e24..fe184939 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-10: завершены12.5.93–106,14 local commits безpush. Backend ux-patch102/frontend ux-a11y101; source904/compiled984 matches, обаCHR доступны/own fixtures0. Portal auth disabled/hostname localhost; Telegram bot/chat не настроены, messages0. Следующий107 — реальные Portal/Telegram при предоставленных тестовых доступах, отправка только после отдельного explicit разрешения. Матрица docs/ux-ui-remaining-acceptance.md,12.5 открыт;94% пятичасовой квоты использовано перед final записью. +Актуальное продолжение 2026-10-10: завершён12.5.107 — VXLAN bridge/FDB, потеря связности при отключении собственного bridge-порта и восстановление. Steady/recovery Ping10/10 в обе стороны, FDB MAC→VTEP совпадает; cleanup9 коллекций×2 и собственных динамических таблиц passed. Backend ux-patch102/frontend ux-a11y101 прежние. Следующий108 — IPv6 внутри собственного VXLAN по IPv4 transport; реальные Portal/Telegram ожидают настройки и отдельного разрешения на сообщение. Этап12.5 открыт, матрица docs/ux-ui-remaining-acceptance.md. 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). @@ -1030,3 +1030,13 @@ Runtime backend ux-patch102/version1.0.0-test.patch102/image34fca84b8721…; fro Вопрос о наличии тестовых Portal/Telegram задан пользователю; ответа/разрешения на сообщение пока нет. Реальная приёмка этих веток не заменяется локальными fake sender/JWT checks35–49/89. Следующий107 требует тестовую Portal-конфигурацию/аккаунт и отдельный bot/chat; перед отправкой подготовить конкретное сообщение и получить прямое разрешение. Доступы кCHR/SSH этого разрешения не дают. Остальные clientOS/IPv6/WAN policy/scale/multi-instance/physical failure/durable retry bounds остаются в [матрице](ux-ui-remaining-acceptance.md). За окно сохранены14 local commits93–106, push0. Backend patch102/frontend a11y101, source904/compiled984 matches, main1207/1208+geometry delta5/5/context221/221/backend171+parser8 profiles/accessibility24local20live вточных границах99–105. ОбаCHR доступны, свои конфиги/DB fixtures очищены, credentials не менялись. Квота94% использовано перед записью; этап12.5 целиком открыт. Один локальный commit без push. + +## 12.5.107 — VXLAN: мост, обучение MAC и восстановление bridge-порта (2026-10-10) + +[Native отчёт](ux-ui/acceptance/vxlan-bridge-fdb-2026-10-10.json). На обоих CHR7.24.5 создана собственная пара VXLAN VNI160107/UDP51907/MTU1400 с отдельными bridge, фиксированными locally administered MAC и IP198.18.107.1/30↔198.18.107.2/30. Публичный ether1 не добавлялся в мост, исходные routes/firewall не менялись. Все collision/preflight reads завершены на двух устройствах перед записью. Каталог production GET /api/vxlan совпал с native VNI/port/learning/VTEP и без failures. + +Initial Ping3/3 и steady Ping10/10 в обе стороны; сохранены реальные packet rows. Удалённый bridge MAC изучен на собственном VXLAN-порту, VXLAN FDB связывает его с правильным удалённым публичным VTEP на каждой стороне. После native PATCH disabled=yes только собственного bridge-порта CHR1 Ping0/3 в обе стороны; интерфейс VXLAN и каталог остаются UP. Это операционный флаг интерфейса, который не доказывает end-to-end связность через bridge. После disabled=no и2s паузы Ping10/10 в обе стороны и FDB подтверждены снова. Нет утверждения о физической аварии, SLA или бесшовности перехода. + +Перед удалением сверены exact IDs, comment/name и interface/bridge/address/remote-ip всех собственных объектов. После удаления обеих сторон baseline projection9 коллекций×2 совпала, own bridge hosts/VXLAN FDB отсутствуют. Пароли не менялись, оба CHR доступны. Исходники продукта, DB, Docker runtime и UI не менялись; build/общая регрессия не повторялись. App API остаётся read-only; bridge/FDB/IP не входят в экспорт fragment. Client OS, IPv6 outer, scale, throughput и hardware offload ещё не приняты. Следующий108 — отдельный собственный IPv6 inner сценарий. Квота после проверки: использовано4% пятичасового и62% недельного. + +Референс семантики FDB: [официальная документация MikroTik VXLAN](https://help.mikrotik.com/docs/spaces/ROS/pages/100007937/VXLAN). Доказательством данного сценария служат независимые native таблицы и Ping, а не только статус каталога. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index de9575a6..725dbbab 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,12 +1,12 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-10: завершены12.5.93–106,14 local commits безpush. Backend ux-patch102/frontend ux-a11y101; source904/compiled984 matches, обаCHR доступны/own fixtures0. Portal auth disabled/hostname localhost; Telegram bot/chat не настроены, messages0. Следующий107 — реальные Portal/Telegram при предоставленных тестовых доступах, отправка только после отдельного explicit разрешения. Матрица docs/ux-ui-remaining-acceptance.md,12.5 открыт;94% пятичасовой квоты использовано перед final записью. +Актуальное продолжение 2026-10-10: завершён12.5.107 — VXLAN bridge/FDB, потеря связности при отключении собственного bridge-порта и восстановление. Steady/recovery Ping10/10 в обе стороны, FDB MAC→VTEP совпадает; cleanup9 коллекций×2 и собственных динамических таблиц passed. Backend ux-patch102/frontend ux-a11y101 прежние. Следующий108 — IPv6 внутри собственного VXLAN по IPv4 transport; реальные Portal/Telegram ожидают настройки и отдельного разрешения на сообщение. Этап12.5 открыт, матрица docs/ux-ui-remaining-acceptance.md. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-10. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. ## Актуальная точка продолжения — 2026-10-10 -Актуальное продолжение 2026-10-10: завершены12.5.93–106,14 local commits безpush. Backend ux-patch102/frontend ux-a11y101; source904/compiled984 matches, обаCHR доступны/own fixtures0. Portal auth disabled/hostname localhost; Telegram bot/chat не настроены, messages0. Следующий107 — реальные Portal/Telegram при предоставленных тестовых доступах, отправка только после отдельного explicit разрешения. Матрица docs/ux-ui-remaining-acceptance.md,12.5 открыт;94% пятичасовой квоты использовано перед final записью. +Актуальное продолжение 2026-10-10: завершён12.5.107 — VXLAN bridge/FDB, потеря связности при отключении собственного bridge-порта и восстановление. Steady/recovery Ping10/10 в обе стороны, FDB MAC→VTEP совпадает; cleanup9 коллекций×2 и собственных динамических таблиц passed. Backend ux-patch102/frontend ux-a11y101 прежние. Следующий108 — IPv6 внутри собственного VXLAN по IPv4 transport; реальные Portal/Telegram ожидают настройки и отдельного разрешения на сообщение. Этап12.5 открыт, матрица docs/ux-ui-remaining-acceptance.md. Этапы0–11 завершены в локальных границах журнала. История выполненных внешних блоков и доказательства сохранены в [журнале](ux-ui-stage-12.md) и [протоколе](ux-ui-external-acceptance.md). Реальная Telegram доставка, Portal SSO, multi-instance и оставшиеся профильные сетевые ограничения открыты. diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index 2f8b9c61..9168efcd 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-10: завершены12.5.93–106,14 local commits безpush. Backend ux-patch102/frontend ux-a11y101; source904/compiled984 matches, обаCHR доступны/own fixtures0. Portal auth disabled/hostname localhost; Telegram bot/chat не настроены, messages0. Следующий107 — реальные Portal/Telegram при предоставленных тестовых доступах, отправка только после отдельного explicit разрешения. Матрица docs/ux-ui-remaining-acceptance.md,12.5 открыт;94% пятичасовой квоты использовано перед final записью. +Актуальное продолжение 2026-10-10: завершён12.5.107 — VXLAN bridge/FDB, потеря связности при отключении собственного bridge-порта и восстановление. Steady/recovery Ping10/10 в обе стороны, FDB MAC→VTEP совпадает; cleanup9 коллекций×2 и собственных динамических таблиц passed. Backend ux-patch102/frontend ux-a11y101 прежние. Следующий108 — IPv6 внутри собственного VXLAN по IPv4 transport; реальные Portal/Telegram ожидают настройки и отдельного разрешения на сообщение. Этап12.5 открыт, матрица docs/ux-ui-remaining-acceptance.md. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -36,7 +36,17 @@ | 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–106 и ограничения ниже. Runtime backend ux-diagnostics89/frontend ux-ospf91. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–107 и ограничения ниже. Runtime backend ux-patch102/frontend ux-a11y101. | + +## 12.5.107 — VXLAN: мост, обучение MAC и восстановление bridge-порта (2026-10-10) + +[Native отчёт](ux-ui/acceptance/vxlan-bridge-fdb-2026-10-10.json). На обоих CHR7.24.5 создана собственная пара VXLAN VNI160107/UDP51907/MTU1400 с отдельными bridge, фиксированными locally administered MAC и IP198.18.107.1/30↔198.18.107.2/30. Публичный ether1 не добавлялся в мост, исходные routes/firewall не менялись. Все collision/preflight reads завершены на двух устройствах перед записью. Каталог production GET /api/vxlan совпал с native VNI/port/learning/VTEP и без failures. + +Initial Ping3/3 и steady Ping10/10 в обе стороны; сохранены реальные packet rows. Удалённый bridge MAC изучен на собственном VXLAN-порту, VXLAN FDB связывает его с правильным удалённым публичным VTEP на каждой стороне. После native PATCH disabled=yes только собственного bridge-порта CHR1 Ping0/3 в обе стороны; интерфейс VXLAN и каталог остаются UP. Это операционный флаг интерфейса, который не доказывает end-to-end связность через bridge. После disabled=no и2s паузы Ping10/10 в обе стороны и FDB подтверждены снова. Нет утверждения о физической аварии, SLA или бесшовности перехода. + +Перед удалением сверены exact IDs, comment/name и interface/bridge/address/remote-ip всех собственных объектов. После удаления обеих сторон baseline projection9 коллекций×2 совпала, own bridge hosts/VXLAN FDB отсутствуют. Пароли не менялись, оба CHR доступны. Исходники продукта, DB, Docker runtime и UI не менялись; build/общая регрессия не повторялись. App API остаётся read-only; bridge/FDB/IP не входят в экспорт fragment. Client OS, IPv6 outer, scale, throughput и hardware offload ещё не приняты. Следующий108 — отдельный собственный IPv6 inner сценарий. Квота после проверки: использовано4% пятичасового и62% недельного. + +Референс семантики FDB: [официальная документация MikroTik VXLAN](https://help.mikrotik.com/docs/spaces/ROS/pages/100007937/VXLAN). Доказательством данного сценария служат независимые native таблицы и Ping, а не только статус каталога. ## 12.5.106 — готовность Portal/Telegram без внешних сообщений (2026-10-10) diff --git a/docs/ux-ui-remaining-acceptance.md b/docs/ux-ui-remaining-acceptance.md index 191ceb23..a58414cf 100644 --- a/docs/ux-ui-remaining-acceptance.md +++ b/docs/ux-ui-remaining-acceptance.md @@ -1,8 +1,8 @@ # Оставшаяся внешняя приёмка — 2026-10-10 -Это актуальная матрица после 12.5.106. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии. +Это актуальная матрица после 12.5.107. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии. -Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-patch102`, frontend `ux-a11y101`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты последнего сценария удалены, исходные11 коллекций×2 восстановлены; пароли не менялись. +Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-patch102`, frontend `ux-a11y101`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты107 удалены, исходные9 коллекций×2 и отсутствие собственных bridge hosts/VXLAN FDB проверены; пароли не менялись. | Раздел | Подтверждено | Осталось / условие завершения | | --- | --- | --- | @@ -11,7 +11,7 @@ | Outbox | Production PG claim/dedupe/settlement/retry/JWT/browser checkpoint/a11y35–49 | Настоящий Telegram API/чат, физический timeout после возможной отправки, несколько sender процессов. Нужны тестовый бот/чат и прямое разрешение на конкретное сообщение; подменённый ответ не доказывает доставку | | GRE | Native lifecycle, metadata, live формы/меню/URL/Ping53–57; GRE используется в OSPF/BGP/IPsec последующих блоков | IPv6, независимые WAN, масштаб и длительное восстановление; принятие GRE не означает приёмку всех сценариев автоматического расписания | | WireGuard | Native handshake/data plane58, deletion60, live create/peer/disable/enable/delete62, mobile64, export/import67–74 | Клиентские ОС и произвольные конфигурации, IPv6/scale, физический lost ACK и устойчивое восстановление; `.conf` с placeholders — шаблон, не принятый клиентский tunnel | -| VXLAN | Собственная пара/private Ping/catalog/URL/export75–76 | API приложения read-only: create/delete проверены native. IPv6, bridge/FDB/масштаб/производительность, профильные mutation RBAC/concurrency отдельно не приняты | +| VXLAN | Собственная пара/private Ping/catalog/URL/export75–76; bridge/FDB/port loss/recovery107 | API приложения read-only: create/delete проверены native. IPv6, масштаб/производительность, профильные mutation RBAC/concurrency отдельно не приняты | | IPsec | PSK и сертификатное шифрование77–82, active peer/online/mode-config, scoped NAT/group, partial/unknown/applied receipts, restore conflicts, JWT | Клиентские Windows/macOS/iOS/Android, сложные/escaped DN, полная 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 открыты | | 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 не принята | @@ -25,7 +25,7 @@ ## Следующая последовательность 1. **12.5.95 завершён:** [source/context/compiled audit](ux-ui/acceptance/deployment-source-audit-2026-10-10.json), production source drift не выявлен; нормализация и исключения явно указаны. -2. **12.5.96 timezone завершён:** [6 live UI cases](ux-ui/acceptance/browser-speed-timezone-2026-10-10.json). 97 HTTP receipt disconnect принят: [протокол](ux-ui/acceptance/speed-disconnect-2026-10-10.json). 98 сообщение неизвестного native результата исправлено/развёрнуто. 99 main/context завершён с точной записью одного failure/delta;100 transport и101 accessibility исправлены/развёрнуты.102 malformed PATCH исправлен/принят.103 packet rows/public/GRE приняты в границах коротких samples; initial loss/root cause остаётся открытым.104 hold/TCP loss/recovery принят.105 source/runtime/evidence сверка passed.106 read-only readiness: auth disabled/Portal localhost/bot and chat unconfigured.107 — реальные тестовые интеграции при предоставленных доступах и separate message authorization. +2. **12.5.96 timezone завершён:** [6 live UI cases](ux-ui/acceptance/browser-speed-timezone-2026-10-10.json). 97 HTTP receipt disconnect принят: [протокол](ux-ui/acceptance/speed-disconnect-2026-10-10.json). 98 сообщение неизвестного native результата исправлено/развёрнуто. 99 main/context завершён с точной записью одного failure/delta;100 transport и101 accessibility исправлены/развёрнуты.102 malformed PATCH исправлен/принят.103 packet rows/public/GRE приняты в границах коротких samples; initial loss/root cause остаётся открытым.104 hold/TCP loss/recovery принят.105 source/runtime/evidence сверка passed.106 read-only readiness: auth disabled/Portal localhost/bot and chat unconfigured.107 — native bridge/FDB/loss/recovery принят.108 — IPv6 inner VXLAN по IPv4 outer. Реальные интеграции требуют тестовых доступов и отдельного разрешения на сообщение. 3. **Заключительный профильный контроль:** после последнего исправления собрать только затронутую часть, проверить её live и обновить матрицу. Общую регрессию выполнить один раз на согласованном runtime. 4. **Внешние зависимости:** Telegram/Portal/client OS/multi-WAN/scale проходят отдельную приёмку при наличии нужных аккаунтов, устройств и разрешений. Лабораторный результат двух CHR не закрывает их автоматически. diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index a5d43247..e3129681 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -1,6 +1,6 @@ # Этап 12: итоговая приёмка UX/UI -Актуальное продолжение 2026-10-09: 12.5.77 завершил укрупнённый основной блок IPsec: достоверное чтение, запрет опроса выключенных устройств, совместимый RouterOS7 мастер, раздельные ID клиентов, безопаснее удаление, URL устройства/вкладки, Docker обеих частей и реальная приёмка. Local30/30 + context6/6 + backend67, live browser4/4, PSK и сертификатный защищённый GRE/Ping3/3 на двух CHR; cleanup/DB controls passed. Runtime backend/frontend ux-ipsec77, version1.0.0-test.ipsec77. Следующий12.5.78 — остаточная профильная приёмка IPsec: сопоставление active-peer/online, выдача mode-config, поздние ошибки операций и история восстановления; затем маршрутизация. Этап12.5 открыт. +Актуальное продолжение 2026-10-10: завершён12.5.107 — VXLAN bridge/FDB, потеря связности при отключении собственного bridge-порта и восстановление. Steady/recovery Ping10/10 в обе стороны, FDB MAC→VTEP совпадает; cleanup9 коллекций×2 и собственных динамических таблиц passed. Backend ux-patch102/frontend ux-a11y101 прежние. Следующий108 — IPv6 внутри собственного VXLAN по IPv4 transport; реальные Portal/Telegram ожидают настройки и отдельного разрешения на сообщение. Этап12.5 открыт, матрица docs/ux-ui-remaining-acceptance.md. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -2335,3 +2335,13 @@ Runtime backend ux-patch102/version1.0.0-test.patch102/image34fca84b8721…; fro Вопрос о наличии тестовых Portal/Telegram задан пользователю; ответа/разрешения на сообщение пока нет. Реальная приёмка этих веток не заменяется локальными fake sender/JWT checks35–49/89. Следующий107 требует тестовую Portal-конфигурацию/аккаунт и отдельный bot/chat; перед отправкой подготовить конкретное сообщение и получить прямое разрешение. Доступы кCHR/SSH этого разрешения не дают. Остальные clientOS/IPv6/WAN policy/scale/multi-instance/physical failure/durable retry bounds остаются в [матрице](ux-ui-remaining-acceptance.md). За окно сохранены14 local commits93–106, push0. Backend patch102/frontend a11y101, source904/compiled984 matches, main1207/1208+geometry delta5/5/context221/221/backend171+parser8 profiles/accessibility24local20live вточных границах99–105. ОбаCHR доступны, свои конфиги/DB fixtures очищены, credentials не менялись. Квота94% использовано перед записью; этап12.5 целиком открыт. Один локальный commit без push. + +## 12.5.107 — VXLAN: мост, обучение MAC и восстановление bridge-порта (2026-10-10) + +[Native отчёт](ux-ui/acceptance/vxlan-bridge-fdb-2026-10-10.json). На обоих CHR7.24.5 создана собственная пара VXLAN VNI160107/UDP51907/MTU1400 с отдельными bridge, фиксированными locally administered MAC и IP198.18.107.1/30↔198.18.107.2/30. Публичный ether1 не добавлялся в мост, исходные routes/firewall не менялись. Все collision/preflight reads завершены на двух устройствах перед записью. Каталог production GET /api/vxlan совпал с native VNI/port/learning/VTEP и без failures. + +Initial Ping3/3 и steady Ping10/10 в обе стороны; сохранены реальные packet rows. Удалённый bridge MAC изучен на собственном VXLAN-порту, VXLAN FDB связывает его с правильным удалённым публичным VTEP на каждой стороне. После native PATCH disabled=yes только собственного bridge-порта CHR1 Ping0/3 в обе стороны; интерфейс VXLAN и каталог остаются UP. Это операционный флаг интерфейса, который не доказывает end-to-end связность через bridge. После disabled=no и2s паузы Ping10/10 в обе стороны и FDB подтверждены снова. Нет утверждения о физической аварии, SLA или бесшовности перехода. + +Перед удалением сверены exact IDs, comment/name и interface/bridge/address/remote-ip всех собственных объектов. После удаления обеих сторон baseline projection9 коллекций×2 совпала, own bridge hosts/VXLAN FDB отсутствуют. Пароли не менялись, оба CHR доступны. Исходники продукта, DB, Docker runtime и UI не менялись; build/общая регрессия не повторялись. App API остаётся read-only; bridge/FDB/IP не входят в экспорт fragment. Client OS, IPv6 outer, scale, throughput и hardware offload ещё не приняты. Следующий108 — отдельный собственный IPv6 inner сценарий. Квота после проверки: использовано4% пятичасового и62% недельного. + +Референс семантики FDB: [официальная документация MikroTik VXLAN](https://help.mikrotik.com/docs/spaces/ROS/pages/100007937/VXLAN). Доказательством данного сценария служат независимые native таблицы и Ping, а не только статус каталога. diff --git a/docs/ux-ui/acceptance/vxlan-bridge-fdb-2026-10-10.json b/docs/ux-ui/acceptance/vxlan-bridge-fdb-2026-10-10.json new file mode 100644 index 00000000..66fcf5fa --- /dev/null +++ b/docs/ux-ui/acceptance/vxlan-bridge-fdb-2026-10-10.json @@ -0,0 +1,1218 @@ +{ + "date": "2026-10-10", + "block": "12.5.107", + "name": "mm-vx107-1791597446722", + "vni": 160107, + "port": 51907, + "creation": "Native REST; application VXLAN API read-only", + "runtime": { + "backend": "ux-patch102", + "frontend": "ux-a11y101" + }, + "devices": [ + { + "serverId": 1, + "host": "194.226.121.150", + "version": "7.24.5 (stable)", + "reachable": true + }, + { + "serverId": 2, + "host": "104.165.244.7", + "version": "7.24.5 (stable)", + "reachable": true + } + ], + "cleanup": [ + { + "serverId": 1, + "/interface/vxlan": true, + "/interface/vxlan/vteps": true, + "/interface/bridge": true, + "/interface/bridge/port": true, + "/ip/address": true, + "/ip/route": true, + "/ip/firewall/filter": true, + "/ip/firewall/nat": true, + "/ip/firewall/mangle": true, + "ownBridgeHostsGone": true, + "ownVxlanFdbGone": true + }, + { + "serverId": 2, + "/interface/vxlan": true, + "/interface/vxlan/vteps": true, + "/interface/bridge": true, + "/interface/bridge/port": true, + "/ip/address": true, + "/ip/route": true, + "/ip/firewall/filter": true, + "/ip/firewall/nat": true, + "/ip/firewall/mangle": true, + "ownBridgeHostsGone": true, + "ownVxlanFdbGone": true + } + ], + "limits": [ + "Two CHR only; IPv4 outer transport on existing public WAN", + "No attached client OS, physical switch/offload, scale or throughput claim", + "Bridge/FDB/IP settings are not included in application VXLAN fragment export" + ], + "beforeTraffic": [ + { + "hosts": [ + { + ".id": "*2", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722-br", + "invalid": "false", + "local": "true", + "mac-address": "02:00:00:01:07:01", + "on-interface": "mm-vx107-1791597446722-br" + }, + { + ".id": "*4", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722", + "invalid": "false", + "local": "true", + "mac-address": "1A:0F:F9:49:63:39", + "on-interface": "mm-vx107-1791597446722" + } + ], + "fdb": [] + }, + { + "hosts": [ + { + ".id": "*5", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722", + "invalid": "false", + "local": "false", + "mac-address": "02:00:00:01:07:01", + "on-interface": "mm-vx107-1791597446722" + }, + { + ".id": "*2", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722-br", + "invalid": "false", + "local": "true", + "mac-address": "02:00:00:01:07:02", + "on-interface": "mm-vx107-1791597446722-br" + }, + { + ".id": "*4", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722", + "invalid": "false", + "local": "true", + "mac-address": "EA:6B:A3:AA:5F:BC", + "on-interface": "mm-vx107-1791597446722" + } + ], + "fdb": [ + { + ".id": "*1", + "interface": "mm-vx107-1791597446722", + "mac-address": "02:00:00:01:07:01", + "remote-ip": "194.226.121.150" + } + ] + } + ], + "initial": [ + { + "serverId": 1, + "sent": 3, + "received": 3, + "rows": [ + { + "avg-rtt": "111ms779us", + "host": "198.18.107.2", + "max-rtt": "111ms779us", + "min-rtt": "111ms779us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "time": "111ms779us", + "ttl": "64" + }, + { + "avg-rtt": "83ms140us", + "host": "198.18.107.2", + "max-rtt": "111ms779us", + "min-rtt": "54ms502us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "time": "54ms502us", + "ttl": "64" + }, + { + "avg-rtt": "73ms569us", + "host": "198.18.107.2", + "max-rtt": "111ms779us", + "min-rtt": "54ms428us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "time": "54ms428us", + "ttl": "64" + } + ] + }, + { + "serverId": 2, + "sent": 3, + "received": 3, + "rows": [ + { + "avg-rtt": "54ms577us", + "host": "198.18.107.1", + "max-rtt": "54ms577us", + "min-rtt": "54ms577us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "time": "54ms577us", + "ttl": "64" + }, + { + "avg-rtt": "54ms516us", + "host": "198.18.107.1", + "max-rtt": "54ms577us", + "min-rtt": "54ms456us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "time": "54ms456us", + "ttl": "64" + }, + { + "avg-rtt": "54ms549us", + "host": "198.18.107.1", + "max-rtt": "54ms616us", + "min-rtt": "54ms456us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "time": "54ms616us", + "ttl": "64" + } + ] + } + ], + "steady": [ + { + "serverId": 1, + "sent": 10, + "received": 10, + "rows": [ + { + "avg-rtt": "54ms487us", + "host": "198.18.107.2", + "max-rtt": "54ms487us", + "min-rtt": "54ms487us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "time": "54ms487us", + "ttl": "64" + }, + { + "avg-rtt": "54ms526us", + "host": "198.18.107.2", + "max-rtt": "54ms565us", + "min-rtt": "54ms487us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "time": "54ms565us", + "ttl": "64" + }, + { + "avg-rtt": "54ms522us", + "host": "198.18.107.2", + "max-rtt": "54ms565us", + "min-rtt": "54ms487us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "time": "54ms514us", + "ttl": "64" + }, + { + "avg-rtt": "54ms540us", + "host": "198.18.107.2", + "max-rtt": "54ms595us", + "min-rtt": "54ms487us", + "packet-loss": "0", + "received": "4", + "sent": "4", + "seq": "3", + "size": "56", + "time": "54ms595us", + "ttl": "64" + }, + { + "avg-rtt": "54ms525us", + "host": "198.18.107.2", + "max-rtt": "54ms595us", + "min-rtt": "54ms468us", + "packet-loss": "0", + "received": "5", + "sent": "5", + "seq": "4", + "size": "56", + "time": "54ms468us", + "ttl": "64" + }, + { + "avg-rtt": "54ms509us", + "host": "198.18.107.2", + "max-rtt": "54ms595us", + "min-rtt": "54ms427us", + "packet-loss": "0", + "received": "6", + "sent": "6", + "seq": "5", + "size": "56", + "time": "54ms427us", + "ttl": "64" + }, + { + "avg-rtt": "54ms501us", + "host": "198.18.107.2", + "max-rtt": "54ms595us", + "min-rtt": "54ms427us", + "packet-loss": "0", + "received": "7", + "sent": "7", + "seq": "6", + "size": "56", + "time": "54ms454us", + "ttl": "64" + }, + { + "avg-rtt": "54ms504us", + "host": "198.18.107.2", + "max-rtt": "54ms595us", + "min-rtt": "54ms427us", + "packet-loss": "0", + "received": "8", + "sent": "8", + "seq": "7", + "size": "56", + "time": "54ms528us", + "ttl": "64" + }, + { + "avg-rtt": "54ms517us", + "host": "198.18.107.2", + "max-rtt": "54ms617us", + "min-rtt": "54ms427us", + "packet-loss": "0", + "received": "9", + "sent": "9", + "seq": "8", + "size": "56", + "time": "54ms617us", + "ttl": "64" + }, + { + "avg-rtt": "54ms517us", + "host": "198.18.107.2", + "max-rtt": "54ms617us", + "min-rtt": "54ms427us", + "packet-loss": "0", + "received": "10", + "sent": "10", + "seq": "9", + "size": "56", + "time": "54ms522us", + "ttl": "64" + } + ] + }, + { + "serverId": 2, + "sent": 10, + "received": 10, + "rows": [ + { + "avg-rtt": "54ms504us", + "host": "198.18.107.1", + "max-rtt": "54ms504us", + "min-rtt": "54ms504us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "time": "54ms504us", + "ttl": "64" + }, + { + "avg-rtt": "54ms545us", + "host": "198.18.107.1", + "max-rtt": "54ms586us", + "min-rtt": "54ms504us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "time": "54ms586us", + "ttl": "64" + }, + { + "avg-rtt": "54ms526us", + "host": "198.18.107.1", + "max-rtt": "54ms586us", + "min-rtt": "54ms488us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "time": "54ms488us", + "ttl": "64" + }, + { + "avg-rtt": "54ms482us", + "host": "198.18.107.1", + "max-rtt": "54ms586us", + "min-rtt": "54ms350us", + "packet-loss": "0", + "received": "4", + "sent": "4", + "seq": "3", + "size": "56", + "time": "54ms350us", + "ttl": "64" + }, + { + "avg-rtt": "54ms461us", + "host": "198.18.107.1", + "max-rtt": "54ms586us", + "min-rtt": "54ms350us", + "packet-loss": "0", + "received": "5", + "sent": "5", + "seq": "4", + "size": "56", + "time": "54ms379us", + "ttl": "64" + }, + { + "avg-rtt": "54ms477us", + "host": "198.18.107.1", + "max-rtt": "54ms586us", + "min-rtt": "54ms350us", + "packet-loss": "0", + "received": "6", + "sent": "6", + "seq": "5", + "size": "56", + "time": "54ms557us", + "ttl": "64" + }, + { + "avg-rtt": "54ms470us", + "host": "198.18.107.1", + "max-rtt": "54ms586us", + "min-rtt": "54ms350us", + "packet-loss": "0", + "received": "7", + "sent": "7", + "seq": "6", + "size": "56", + "time": "54ms428us", + "ttl": "64" + }, + { + "avg-rtt": "54ms479us", + "host": "198.18.107.1", + "max-rtt": "54ms586us", + "min-rtt": "54ms350us", + "packet-loss": "0", + "received": "8", + "sent": "8", + "seq": "7", + "size": "56", + "time": "54ms540us", + "ttl": "64" + }, + { + "avg-rtt": "54ms476us", + "host": "198.18.107.1", + "max-rtt": "54ms586us", + "min-rtt": "54ms350us", + "packet-loss": "0", + "received": "9", + "sent": "9", + "seq": "8", + "size": "56", + "time": "54ms457us", + "ttl": "64" + }, + { + "avg-rtt": "54ms475us", + "host": "198.18.107.1", + "max-rtt": "54ms586us", + "min-rtt": "54ms350us", + "packet-loss": "0", + "received": "10", + "sent": "10", + "seq": "9", + "size": "56", + "time": "54ms461us", + "ttl": "64" + } + ] + } + ], + "learned": [ + { + "hosts": [ + { + ".id": "*2", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722-br", + "invalid": "false", + "local": "true", + "mac-address": "02:00:00:01:07:01", + "on-interface": "mm-vx107-1791597446722-br" + }, + { + ".id": "*6", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722", + "invalid": "false", + "local": "false", + "mac-address": "02:00:00:01:07:02", + "on-interface": "mm-vx107-1791597446722" + }, + { + ".id": "*4", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722", + "invalid": "false", + "local": "true", + "mac-address": "1A:0F:F9:49:63:39", + "on-interface": "mm-vx107-1791597446722" + }, + { + ".id": "*5", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722", + "invalid": "false", + "local": "false", + "mac-address": "02:00:00:01:07:02", + "on-interface": "mm-vx107-1791597446722", + "remote-ip": "104.165.244.7", + "vid": "1" + } + ], + "fdb": [ + { + ".id": "*1", + "interface": "mm-vx107-1791597446722", + "mac-address": "02:00:00:01:07:02", + "remote-ip": "104.165.244.7" + } + ] + }, + { + "hosts": [ + { + ".id": "*5", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722", + "invalid": "false", + "local": "false", + "mac-address": "02:00:00:01:07:01", + "on-interface": "mm-vx107-1791597446722" + }, + { + ".id": "*2", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722-br", + "invalid": "false", + "local": "true", + "mac-address": "02:00:00:01:07:02", + "on-interface": "mm-vx107-1791597446722-br" + }, + { + ".id": "*4", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722", + "invalid": "false", + "local": "true", + "mac-address": "EA:6B:A3:AA:5F:BC", + "on-interface": "mm-vx107-1791597446722" + } + ], + "fdb": [ + { + ".id": "*1", + "interface": "mm-vx107-1791597446722", + "mac-address": "02:00:00:01:07:01", + "remote-ip": "194.226.121.150" + } + ] + } + ], + "catalogWithBridge": [ + { + "id": "1-*72", + "rosId": "*72", + "name": "mm-vx107-1791597446722", + "vni": 160107, + "port": 0, + "dstPort": 51907, + "serverId": "1", + "vtepIp": "194.226.121.150", + "remoteVteps": [ + "104.165.244.7" + ], + "l2mtu": 65535, + "mtu": 1400, + "arpProxy": false, + "arpMode": "enabled", + "macLearning": true, + "comment": "mm-vx107-1791597446722", + "enabled": true, + "status": "up" + }, + { + "id": "2-*67", + "rosId": "*67", + "name": "mm-vx107-1791597446722", + "vni": 160107, + "port": 0, + "dstPort": 51907, + "serverId": "2", + "vtepIp": "104.165.244.7", + "remoteVteps": [ + "194.226.121.150" + ], + "l2mtu": 65535, + "mtu": 1400, + "arpProxy": false, + "arpMode": "enabled", + "macLearning": true, + "comment": "mm-vx107-1791597446722", + "enabled": true, + "status": "up" + } + ], + "portDisabled": { + "nativeReceipt": true, + "bridgePort": { + ".id": "*0", + ".nextid": "*FFFFFFFF", + "auto-isolate": "false", + "bpdu-guard": "false", + "bridge": "mm-vx107-1791597446722-br", + "broadcast-flood": "true", + "comment": "mm-vx107-1791597446722", + "disabled": "true", + "dynamic": "false", + "edge": "auto", + "fast-leave": "false", + "frame-types": "admit-all", + "horizon": "none", + "inactive": "true", + "ingress-filtering": "true", + "interface": "mm-vx107-1791597446722", + "learn": "auto", + "managed": "false", + "multicast-router": "temporary-query", + "mvrp-applicant-state": "normal-participant", + "mvrp-registrar-state": "normal", + "point-to-point": "auto", + "priority": "0x80", + "pvid": "1", + "restricted-role": "false", + "restricted-tcn": "false", + "status": "disabled", + "tag-stacking": "false", + "trusted": "false", + "trusted-dhcpv6": "false", + "trusted-ra": "false", + "unknown-multicast-flood": "true", + "unknown-unicast-flood": "true" + }, + "pings": [ + { + "serverId": 1, + "sent": 3, + "received": 0, + "rows": [ + { + "host": "198.18.107.2", + "packet-loss": "100", + "received": "0", + "sent": "1", + "seq": "0", + "status": "timeout" + }, + { + "host": "198.18.107.2", + "packet-loss": "100", + "received": "0", + "sent": "2", + "seq": "1", + "status": "timeout" + }, + { + "host": "198.18.107.2", + "packet-loss": "100", + "received": "0", + "sent": "3", + "seq": "2", + "status": "timeout" + } + ] + }, + { + "serverId": 2, + "sent": 3, + "received": 0, + "rows": [ + { + "host": "198.18.107.1", + "packet-loss": "100", + "received": "0", + "sent": "1", + "seq": "0", + "status": "timeout" + }, + { + "host": "198.18.107.1", + "packet-loss": "100", + "received": "0", + "sent": "2", + "seq": "1", + "status": "timeout" + }, + { + "host": "198.18.107.1", + "packet-loss": "100", + "received": "0", + "sent": "3", + "seq": "2", + "status": "timeout" + } + ] + } + ] + }, + "catalogWhilePortDisabled": [ + { + "id": "1-*72", + "rosId": "*72", + "name": "mm-vx107-1791597446722", + "vni": 160107, + "port": 0, + "dstPort": 51907, + "serverId": "1", + "vtepIp": "194.226.121.150", + "remoteVteps": [ + "104.165.244.7" + ], + "l2mtu": 65535, + "mtu": 1400, + "arpProxy": false, + "arpMode": "enabled", + "macLearning": true, + "comment": "mm-vx107-1791597446722", + "enabled": true, + "status": "up" + }, + { + "id": "2-*67", + "rosId": "*67", + "name": "mm-vx107-1791597446722", + "vni": 160107, + "port": 0, + "dstPort": 51907, + "serverId": "2", + "vtepIp": "104.165.244.7", + "remoteVteps": [ + "194.226.121.150" + ], + "l2mtu": 65535, + "mtu": 1400, + "arpProxy": false, + "arpMode": "enabled", + "macLearning": true, + "comment": "mm-vx107-1791597446722", + "enabled": true, + "status": "up" + } + ], + "recovered": [ + { + "serverId": 1, + "sent": 10, + "received": 10, + "rows": [ + { + "avg-rtt": "54ms490us", + "host": "198.18.107.2", + "max-rtt": "54ms490us", + "min-rtt": "54ms490us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "time": "54ms490us", + "ttl": "64" + }, + { + "avg-rtt": "54ms616us", + "host": "198.18.107.2", + "max-rtt": "54ms742us", + "min-rtt": "54ms490us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "time": "54ms742us", + "ttl": "64" + }, + { + "avg-rtt": "54ms533us", + "host": "198.18.107.2", + "max-rtt": "54ms742us", + "min-rtt": "54ms368us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "time": "54ms368us", + "ttl": "64" + }, + { + "avg-rtt": "54ms536us", + "host": "198.18.107.2", + "max-rtt": "54ms742us", + "min-rtt": "54ms368us", + "packet-loss": "0", + "received": "4", + "sent": "4", + "seq": "3", + "size": "56", + "time": "54ms547us", + "ttl": "64" + }, + { + "avg-rtt": "54ms503us", + "host": "198.18.107.2", + "max-rtt": "54ms742us", + "min-rtt": "54ms368us", + "packet-loss": "0", + "received": "5", + "sent": "5", + "seq": "4", + "size": "56", + "time": "54ms370us", + "ttl": "64" + }, + { + "avg-rtt": "54ms491us", + "host": "198.18.107.2", + "max-rtt": "54ms742us", + "min-rtt": "54ms368us", + "packet-loss": "0", + "received": "6", + "sent": "6", + "seq": "5", + "size": "56", + "time": "54ms432us", + "ttl": "64" + }, + { + "avg-rtt": "54ms473us", + "host": "198.18.107.2", + "max-rtt": "54ms742us", + "min-rtt": "54ms368us", + "packet-loss": "0", + "received": "7", + "sent": "7", + "seq": "6", + "size": "56", + "time": "54ms368us", + "ttl": "64" + }, + { + "avg-rtt": "54ms518us", + "host": "198.18.107.2", + "max-rtt": "54ms832us", + "min-rtt": "54ms368us", + "packet-loss": "0", + "received": "8", + "sent": "8", + "seq": "7", + "size": "56", + "time": "54ms832us", + "ttl": "64" + }, + { + "avg-rtt": "54ms513us", + "host": "198.18.107.2", + "max-rtt": "54ms832us", + "min-rtt": "54ms368us", + "packet-loss": "0", + "received": "9", + "sent": "9", + "seq": "8", + "size": "56", + "time": "54ms470us", + "ttl": "64" + }, + { + "avg-rtt": "54ms521us", + "host": "198.18.107.2", + "max-rtt": "54ms832us", + "min-rtt": "54ms368us", + "packet-loss": "0", + "received": "10", + "sent": "10", + "seq": "9", + "size": "56", + "time": "54ms600us", + "ttl": "64" + } + ] + }, + { + "serverId": 2, + "sent": 10, + "received": 10, + "rows": [ + { + "avg-rtt": "54ms578us", + "host": "198.18.107.1", + "max-rtt": "54ms578us", + "min-rtt": "54ms578us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "time": "54ms578us", + "ttl": "64" + }, + { + "avg-rtt": "54ms514us", + "host": "198.18.107.1", + "max-rtt": "54ms578us", + "min-rtt": "54ms450us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "time": "54ms450us", + "ttl": "64" + }, + { + "avg-rtt": "54ms497us", + "host": "198.18.107.1", + "max-rtt": "54ms578us", + "min-rtt": "54ms450us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "time": "54ms464us", + "ttl": "64" + }, + { + "avg-rtt": "54ms505us", + "host": "198.18.107.1", + "max-rtt": "54ms578us", + "min-rtt": "54ms450us", + "packet-loss": "0", + "received": "4", + "sent": "4", + "seq": "3", + "size": "56", + "time": "54ms528us", + "ttl": "64" + }, + { + "avg-rtt": "54ms500us", + "host": "198.18.107.1", + "max-rtt": "54ms578us", + "min-rtt": "54ms450us", + "packet-loss": "0", + "received": "5", + "sent": "5", + "seq": "4", + "size": "56", + "time": "54ms482us", + "ttl": "64" + }, + { + "avg-rtt": "54ms512us", + "host": "198.18.107.1", + "max-rtt": "54ms578us", + "min-rtt": "54ms450us", + "packet-loss": "0", + "received": "6", + "sent": "6", + "seq": "5", + "size": "56", + "time": "54ms573us", + "ttl": "64" + }, + { + "avg-rtt": "54ms558us", + "host": "198.18.107.1", + "max-rtt": "54ms833us", + "min-rtt": "54ms450us", + "packet-loss": "0", + "received": "7", + "sent": "7", + "seq": "6", + "size": "56", + "time": "54ms833us", + "ttl": "64" + }, + { + "avg-rtt": "54ms544us", + "host": "198.18.107.1", + "max-rtt": "54ms833us", + "min-rtt": "54ms450us", + "packet-loss": "0", + "received": "8", + "sent": "8", + "seq": "7", + "size": "56", + "time": "54ms450us", + "ttl": "64" + }, + { + "avg-rtt": "54ms531us", + "host": "198.18.107.1", + "max-rtt": "54ms833us", + "min-rtt": "54ms428us", + "packet-loss": "0", + "received": "9", + "sent": "9", + "seq": "8", + "size": "56", + "time": "54ms428us", + "ttl": "64" + }, + { + "avg-rtt": "54ms517us", + "host": "198.18.107.1", + "max-rtt": "54ms833us", + "min-rtt": "54ms386us", + "packet-loss": "0", + "received": "10", + "sent": "10", + "seq": "9", + "size": "56", + "time": "54ms386us", + "ttl": "64" + } + ] + } + ], + "relearned": [ + { + "hosts": [ + { + ".id": "*2", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722-br", + "invalid": "false", + "local": "true", + "mac-address": "02:00:00:01:07:01", + "on-interface": "mm-vx107-1791597446722-br" + }, + { + ".id": "*8", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722", + "invalid": "false", + "local": "false", + "mac-address": "02:00:00:01:07:02", + "on-interface": "mm-vx107-1791597446722" + }, + { + ".id": "*7", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722", + "invalid": "false", + "local": "true", + "mac-address": "1A:0F:F9:49:63:39", + "on-interface": "mm-vx107-1791597446722" + } + ], + "fdb": [ + { + ".id": "*1", + "interface": "mm-vx107-1791597446722", + "mac-address": "02:00:00:01:07:02", + "remote-ip": "104.165.244.7" + } + ] + }, + { + "hosts": [ + { + ".id": "*5", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722", + "invalid": "false", + "local": "false", + "mac-address": "02:00:00:01:07:01", + "on-interface": "mm-vx107-1791597446722" + }, + { + ".id": "*2", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722-br", + "invalid": "false", + "local": "true", + "mac-address": "02:00:00:01:07:02", + "on-interface": "mm-vx107-1791597446722-br" + }, + { + ".id": "*7", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722", + "invalid": "false", + "local": "false", + "mac-address": "1A:0F:F9:49:63:39", + "on-interface": "mm-vx107-1791597446722" + }, + { + ".id": "*4", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722", + "invalid": "false", + "local": "true", + "mac-address": "EA:6B:A3:AA:5F:BC", + "on-interface": "mm-vx107-1791597446722" + }, + { + ".id": "*6", + "bridge": "mm-vx107-1791597446722-br", + "disabled": "false", + "dynamic": "true", + "external": "false", + "interface": "mm-vx107-1791597446722", + "invalid": "false", + "local": "false", + "mac-address": "1A:0F:F9:49:63:39", + "on-interface": "mm-vx107-1791597446722", + "remote-ip": "194.226.121.150", + "vid": "1" + } + ], + "fdb": [ + { + ".id": "*1", + "interface": "mm-vx107-1791597446722", + "mac-address": "02:00:00:01:07:01", + "remote-ip": "194.226.121.150" + }, + { + ".id": "*2", + "interface": "mm-vx107-1791597446722", + "mac-address": "1A:0F:F9:49:63:39", + "remote-ip": "194.226.121.150" + } + ] + } + ] +} \ No newline at end of file