Add ExaBGP route injector, Grafana dashboards, and full documentation
- Add exabgp/ container: ExaBGP 5.x + Flask REST API for on-demand BGP
route injection into CML IOS-XR lab (AS 65020 via eBGP from AS 65100)
- Add 6 injection scenarios: internet_sample, churn, blackhole, anycast,
full_table, lab_prefixes
- Add inject.py CLI wrapper for the ExaBGP API
- Add iosxr_bgp_config.md with IOS-XR neighbor config and NETCONF script
- Add obmp-grafana/ dashboards and provisioning (17 dashboards)
- Update docker-compose.yml: add exabgp service, fix Kafka external
listener IP, extend log retention from 90min to 720min
- Add DOCS.md: full project documentation including architecture, setup,
user guide, sanity checks, troubleshooting, and command reference
- Update .gitignore: exclude .env and .claude/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 14:46:37 -07:00
|
|
|
apiVersion: 1
|
|
|
|
|
|
|
|
|
|
providers:
|
|
|
|
|
# <string> an unique provider name. Required
|
|
|
|
|
- name: 'OpenBMP'
|
|
|
|
|
# <int> Org id. Default to 1
|
|
|
|
|
orgId: 1
|
|
|
|
|
# <string> name of the dashboard folder.
|
|
|
|
|
folder: ''
|
|
|
|
|
# <string> folder UID. will be automatically generated if not specified
|
|
|
|
|
folderUid: ''
|
|
|
|
|
# <string> provider type. Default to 'file'
|
|
|
|
|
type: file
|
|
|
|
|
# <bool> disable dashboard deletion
|
|
|
|
|
disableDeletion: false
|
|
|
|
|
# <int> how often Grafana will scan for changed dashboards
|
|
|
|
|
updateIntervalSeconds: 30
|
|
|
|
|
# <bool> allow updating provisioned dashboards from the UI
|
|
|
|
|
allowUiUpdates: true
|
|
|
|
|
options:
|
|
|
|
|
# <string, required> path to dashboard files on disk. Required when using the 'file' type
|
|
|
|
|
path: /var/lib/grafana/dashboards/General
|
|
|
|
|
# <bool> use folder names from filesystem to create folders in Grafana
|
|
|
|
|
foldersFromFilesStructure: false
|
|
|
|
|
# <string> an unique provider name. Required
|
|
|
|
|
- name: 'OpenBMP-Base'
|
|
|
|
|
# <int> Org id. Default to 1
|
|
|
|
|
orgId: 1
|
|
|
|
|
# <string> name of the dashboard folder.
|
2026-05-18 20:55:03 -07:00
|
|
|
folder: 'OBMP-Operations'
|
Add ExaBGP route injector, Grafana dashboards, and full documentation
- Add exabgp/ container: ExaBGP 5.x + Flask REST API for on-demand BGP
route injection into CML IOS-XR lab (AS 65020 via eBGP from AS 65100)
- Add 6 injection scenarios: internet_sample, churn, blackhole, anycast,
full_table, lab_prefixes
- Add inject.py CLI wrapper for the ExaBGP API
- Add iosxr_bgp_config.md with IOS-XR neighbor config and NETCONF script
- Add obmp-grafana/ dashboards and provisioning (17 dashboards)
- Update docker-compose.yml: add exabgp service, fix Kafka external
listener IP, extend log retention from 90min to 720min
- Add DOCS.md: full project documentation including architecture, setup,
user guide, sanity checks, troubleshooting, and command reference
- Update .gitignore: exclude .env and .claude/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 14:46:37 -07:00
|
|
|
# <string> folder UID. will be automatically generated if not specified
|
|
|
|
|
folderUid: '1001'
|
|
|
|
|
# <string> provider type. Default to 'file'
|
|
|
|
|
type: file
|
|
|
|
|
# <bool> disable dashboard deletion
|
|
|
|
|
disableDeletion: false
|
|
|
|
|
# <int> how often Grafana will scan for changed dashboards
|
|
|
|
|
updateIntervalSeconds: 30
|
|
|
|
|
# <bool> allow updating provisioned dashboards from the UI
|
|
|
|
|
allowUiUpdates: true
|
|
|
|
|
options:
|
|
|
|
|
# <string, required> path to dashboard files on disk. Required when using the 'file' type
|
|
|
|
|
path: /var/lib/grafana/dashboards/obmp/Base-1001
|
|
|
|
|
# <bool> use folder names from filesystem to create folders in Grafana
|
|
|
|
|
foldersFromFilesStructure: false
|
|
|
|
|
- name: 'OpenBMP-History'
|
|
|
|
|
# <int> Org id. Default to 1
|
|
|
|
|
orgId: 1
|
|
|
|
|
# <string> name of the dashboard folder.
|
2026-05-18 20:55:03 -07:00
|
|
|
folder: 'OBMP-Routing'
|
Add ExaBGP route injector, Grafana dashboards, and full documentation
- Add exabgp/ container: ExaBGP 5.x + Flask REST API for on-demand BGP
route injection into CML IOS-XR lab (AS 65020 via eBGP from AS 65100)
- Add 6 injection scenarios: internet_sample, churn, blackhole, anycast,
full_table, lab_prefixes
- Add inject.py CLI wrapper for the ExaBGP API
- Add iosxr_bgp_config.md with IOS-XR neighbor config and NETCONF script
- Add obmp-grafana/ dashboards and provisioning (17 dashboards)
- Update docker-compose.yml: add exabgp service, fix Kafka external
listener IP, extend log retention from 90min to 720min
- Add DOCS.md: full project documentation including architecture, setup,
user guide, sanity checks, troubleshooting, and command reference
- Update .gitignore: exclude .env and .claude/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 14:46:37 -07:00
|
|
|
# <string> folder UID. will be automatically generated if not specified
|
|
|
|
|
folderUid: '1002'
|
|
|
|
|
# <string> provider type. Default to 'file'
|
|
|
|
|
type: file
|
|
|
|
|
# <bool> disable dashboard deletion
|
|
|
|
|
disableDeletion: false
|
|
|
|
|
# <int> how often Grafana will scan for changed dashboards
|
|
|
|
|
updateIntervalSeconds: 30
|
|
|
|
|
# <bool> allow updating provisioned dashboards from the UI
|
|
|
|
|
allowUiUpdates: true
|
|
|
|
|
options:
|
|
|
|
|
# <string, required> path to dashboard files on disk. Required when using the 'file' type
|
|
|
|
|
path: /var/lib/grafana/dashboards/obmp/History-1002
|
|
|
|
|
# <bool> use folder names from filesystem to create folders in Grafana
|
|
|
|
|
foldersFromFilesStructure: false
|
|
|
|
|
- name: 'OpenBMP-LinkState'
|
|
|
|
|
# <int> Org id. Default to 1
|
|
|
|
|
orgId: 1
|
|
|
|
|
# <string> name of the dashboard folder.
|
|
|
|
|
folder: 'OBMP-LinkState'
|
|
|
|
|
# <string> folder UID. will be automatically generated if not specified
|
|
|
|
|
folderUid: '1004'
|
|
|
|
|
# <string> provider type. Default to 'file'
|
|
|
|
|
type: file
|
|
|
|
|
# <bool> disable dashboard deletion
|
|
|
|
|
disableDeletion: false
|
|
|
|
|
# <int> how often Grafana will scan for changed dashboards
|
|
|
|
|
updateIntervalSeconds: 30
|
|
|
|
|
# <bool> allow updating provisioned dashboards from the UI
|
|
|
|
|
allowUiUpdates: true
|
|
|
|
|
options:
|
|
|
|
|
# <string, required> path to dashboard files on disk. Required when using the 'file' type
|
|
|
|
|
path: /var/lib/grafana/dashboards/obmp/LinkState-1004
|
|
|
|
|
# <bool> use folder names from filesystem to create folders in Grafana
|
|
|
|
|
foldersFromFilesStructure: false
|
|
|
|
|
- name: 'OpenBMP-L3VPN'
|
|
|
|
|
# <int> Org id. Default to 1
|
|
|
|
|
orgId: 1
|
|
|
|
|
# <string> name of the dashboard folder.
|
|
|
|
|
folder: 'OBMP-L3VPN'
|
|
|
|
|
# <string> folder UID. will be automatically generated if not specified
|
|
|
|
|
folderUid: '1005'
|
|
|
|
|
# <string> provider type. Default to 'file'
|
|
|
|
|
type: file
|
|
|
|
|
# <bool> disable dashboard deletion
|
|
|
|
|
disableDeletion: false
|
|
|
|
|
# <int> how often Grafana will scan for changed dashboards
|
|
|
|
|
updateIntervalSeconds: 30
|
|
|
|
|
# <bool> allow updating provisioned dashboards from the UI
|
|
|
|
|
allowUiUpdates: true
|
|
|
|
|
options:
|
|
|
|
|
# <string, required> path to dashboard files on disk. Required when using the 'file' type
|
|
|
|
|
path: /var/lib/grafana/dashboards/obmp/L3VPN-1005
|
|
|
|
|
# <bool> use folder names from filesystem to create folders in Grafana
|
Add Phase 2: Vue 3 control panel, 6 learning dashboards, new BGP scenarios
- exabgp-ui/: Vue 3 + Vite SPA served by NGINX on :5001; proxies /api/ to
ExaBGP Flask on :5050; includes StatusBar, ScenarioPanel, RouteTable,
AnnounceForm, PeerStatus, ChurnControl components
- docker-compose.yml: add obmp-exabgp-ui service (host network, port 5001)
- exabgp/scenarios/__init__.py: add convergence_test, route_leak,
hijack_simulation scenarios for structured BGP learning exercises
- exabgp/inject.py: add 'peers' and 'monitor' subcommands; live-refresh
terminal status view with ANSI cursor repositioning
- obmp-grafana/dashboards/Learning/: 6 new OBMP-Learning dashboards
(update rate, peer health, AS path, RPKI, churn, attributes)
- obmp-grafana/provisioning/dashboards/openbmp-dashboards.yml: add
OpenBMP-Learning folder provider pointing to dashboards/Learning/
- DOCS.md: document Web UI, 3 new scenarios, 6 learning dashboards;
fix section numbering (10-14) and architecture diagram (23 dashboards)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 15:37:16 -07:00
|
|
|
foldersFromFilesStructure: false
|
|
|
|
|
- name: 'OpenBMP-Learning'
|
|
|
|
|
orgId: 1
|
2026-05-18 20:55:03 -07:00
|
|
|
folder: 'OBMP-Reference'
|
Add Phase 2: Vue 3 control panel, 6 learning dashboards, new BGP scenarios
- exabgp-ui/: Vue 3 + Vite SPA served by NGINX on :5001; proxies /api/ to
ExaBGP Flask on :5050; includes StatusBar, ScenarioPanel, RouteTable,
AnnounceForm, PeerStatus, ChurnControl components
- docker-compose.yml: add obmp-exabgp-ui service (host network, port 5001)
- exabgp/scenarios/__init__.py: add convergence_test, route_leak,
hijack_simulation scenarios for structured BGP learning exercises
- exabgp/inject.py: add 'peers' and 'monitor' subcommands; live-refresh
terminal status view with ANSI cursor repositioning
- obmp-grafana/dashboards/Learning/: 6 new OBMP-Learning dashboards
(update rate, peer health, AS path, RPKI, churn, attributes)
- obmp-grafana/provisioning/dashboards/openbmp-dashboards.yml: add
OpenBMP-Learning folder provider pointing to dashboards/Learning/
- DOCS.md: document Web UI, 3 new scenarios, 6 learning dashboards;
fix section numbering (10-14) and architecture diagram (23 dashboards)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 15:37:16 -07:00
|
|
|
folderUid: '2001'
|
|
|
|
|
type: file
|
|
|
|
|
disableDeletion: false
|
|
|
|
|
updateIntervalSeconds: 30
|
|
|
|
|
allowUiUpdates: true
|
|
|
|
|
options:
|
|
|
|
|
path: /var/lib/grafana/dashboards/Learning
|
Add Phase 4: gNMI streaming telemetry and traffic generator
- gNMI integration: NETCONF script to enable gRPC on all 9 routers,
Telegraf container with gnmi input plugin, InfluxDB for time-series
storage, 3 Grafana telemetry dashboards (utilization, errors, combined)
- Traffic generator: Scapy-based dual-mode container (sender/responder)
with Flask API, RFC 2544 test suite (throughput, latency, frame-loss,
back-to-back), Vue 3 web UI with flow builder, test runner, real-time
stats monitor, and results export
- docker-compose.yml updated with influxdb, telegraf, traffic-gen,
traffic-gen-ui services
- Full documentation in DOCS.md sections 15-16
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 15:29:44 -07:00
|
|
|
foldersFromFilesStructure: false
|
|
|
|
|
- name: 'OpenBMP-Telemetry'
|
|
|
|
|
orgId: 1
|
|
|
|
|
folder: 'OBMP-Telemetry'
|
|
|
|
|
folderUid: '3001'
|
|
|
|
|
type: file
|
|
|
|
|
disableDeletion: false
|
|
|
|
|
updateIntervalSeconds: 30
|
|
|
|
|
allowUiUpdates: true
|
|
|
|
|
options:
|
|
|
|
|
path: /var/lib/grafana/dashboards/Telemetry-3001
|
2026-05-19 00:07:41 -07:00
|
|
|
foldersFromFilesStructure: false
|
|
|
|
|
- name: 'OpenBMP-Maps'
|
|
|
|
|
orgId: 1
|
|
|
|
|
folder: 'OBMP-Maps'
|
|
|
|
|
folderUid: '1006'
|
|
|
|
|
type: file
|
|
|
|
|
disableDeletion: false
|
|
|
|
|
updateIntervalSeconds: 30
|
|
|
|
|
allowUiUpdates: true
|
|
|
|
|
options:
|
|
|
|
|
path: /var/lib/grafana/dashboards/obmp/Maps-1006
|
Add ExaBGP route injector, Grafana dashboards, and full documentation
- Add exabgp/ container: ExaBGP 5.x + Flask REST API for on-demand BGP
route injection into CML IOS-XR lab (AS 65020 via eBGP from AS 65100)
- Add 6 injection scenarios: internet_sample, churn, blackhole, anycast,
full_table, lab_prefixes
- Add inject.py CLI wrapper for the ExaBGP API
- Add iosxr_bgp_config.md with IOS-XR neighbor config and NETCONF script
- Add obmp-grafana/ dashboards and provisioning (17 dashboards)
- Update docker-compose.yml: add exabgp service, fix Kafka external
listener IP, extend log retention from 90min to 720min
- Add DOCS.md: full project documentation including architecture, setup,
user guide, sanity checks, troubleshooting, and command reference
- Update .gitignore: exclude .env and .claude/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 14:46:37 -07:00
|
|
|
foldersFromFilesStructure: false
|