NetOps Workbench Design
A sober, safety‑first workbench that correlates RIB routes, recursion graphs, and FIB install status before any automated change touches the network.
Core Requirements
- Visibility – real‑time, unified view of RIB, recursion graphs, and FIB state across all devices.
- Determinism – identical input yields identical correlation; no nondeterministic heuristics in safety‑critical paths.
- Blast‑radius control – remediation scoped to a well‑defined set of devices/prefixes with an explicit rollback path.
- Approval gating – automated fixes require explicit human‑in‑the‑loop approval (or policy‑based auto‑approve for low‑risk, pre‑validated actions).
- Auditability – immutable logs of every correlation, decision, and action with timestamps and operator identity.
- Extensibility – ingest data from NETCONF/gNMI, SNMP, syslog, BGP monitoring without proprietary agents.
Logical Blocks
| Block | Function | Typical Technology |
|---|---|---|
| Data Ingestion Layer | Pull routing tables, link‑state DBs, FIB state | gNMI collectors, NETCONF agents, SNMP pollers, BGP monitoring (BMP/Stream) |
| Normalization & Storage | Vendor‑specific → canonical model (prefix, next‑hop, metric, admin‑state) | Time‑series DB (Prometheus/Timescale), graph DB (Neo4j/TigerGraph), object store for raw snapshots |
| Correlation Engine | Join RIB entries with recursion paths; verify FIB install status | Stream processing (Flink/Kafka Streams) or batch (Spark) |
| Remediation Planner | Generate candidate fixes; score by safety, impact, rollback complexity | Rule‑based engine (Drools) or deterministic Python/planner scripts |
| Approval Gate | Present planned fix to operator or automated policy for sign‑off | Web UI (Grafana plugin, Open WebUI), ticketing (ServiceNow/Jira), ChatOps bot |
| Execution Engine | Apply approved change via safe, idempotent APIs; verify post‑condition | NETCONF/gNMI set, RESTCONF, CLI over SSH with expect‑like verification |
| Observability & Audit | Metrics, logs, traces, immutable audit records | Prometheus, Loki/Grafana, OpenTelemetry, WORM storage |
| Rollback Manager | Store pre‑change state; revert on failure or manual trigger | Snapshot DB, version‑controlled config repo (Git), on‑device rollback |
Interfaces between blocks are versioned (protobuf over gRPC or JSON over HTTP). LLMs may appear only as an advisory UI layer; they never generate configuration directly.
Correlating Routes and Recursion Graphs
Route Correlation
For each destination prefix P, collect all candidate paths from OSPF, IS‑IS, BGP, static, etc. Each path record includes:
- Protocol & process ID
- Administrative distance / metric
- Next‑hop IP (or interface)
- Path attributes (AS‑path, communities, tag)
- Install state (candidate vs. selected)
Group by prefix and apply a deterministic best‑path algorithm that mirrors the device’s own rule (longest match → lowest admin distance → lowest metric → tie‑breaker). Implemented as a pure function; unit tests validate against show ip route on lab devices.
Recursion Graph Analysis
A recursion graph maps a prefix’s next‑hop dependencies until reaching a directly connected interface or a drop.
Construction
- Extract the selected next‑hop NH for each prefix P.
- Look up the RIB entry for NH (treated as a host prefix /32 or /128).
- Repeat until the next‑hop resolves to a directly connected interface (via ARP/ND or interface address) or a null0/discard.
- Record each hop as a node; edges represent “depends‑on”. Edge weight = hop metric (IGP cost, BGP MED, etc.).
- Detect cycles with depth‑first search; any cycle triggers a recursion‑loop alert.
Stored in a graph database for fast traversal and UI visualisation. For scale, keep a prefix‑level summary (resolved outgoing interface, total path cost); materialise the full graph on demand.
Integrating Route and Recursion Data
In the Correlation Engine, for each prefix P:
- Retrieve the selected RIB path and its next‑hop NH.
- Query the recursion graph store for resolved outgoing interface IF and total cost C.
- Compare IF with the interface implied by the FIB entry for P (see FIB section). A mismatch = FIB‑RIB inconsistency.
- Emit a correlation record, e.g.:
{
"prefix": "10.0.0.0/24",
"selected_protocol": "BGP",
"selected_metric": 100,
"next_hop": "198.51.100.5",
"resolved_if": "eth3",
"resolved_cost": 100,
"fib_installed": true,
"fib_if": "eth3",
"recursion_loop": false
}
Records are written to a time‑series table keyed by timestamp and device, enabling trend analysis and alerts on sudden increases in unresolved next‑hops.
FIB Install Status Monitoring
Overview
The FIB is the kernel/ASIC structure used for forwarding. A route is installed when the kernel/ASIC has programmed the entry; otherwise it resides only in the RIB. Discrepancies stem from:
- TCAM/FIB resource exhaustion
- RIB→FIB sync bugs
- Manual overrides bypassing the routing daemon
- Asynchronous updates during high churn
Monitoring Mechanisms
-
Push‑based telemetry – devices stream FIB entries via gNMI
Subscribeor NETCONFnotification. Example gNMI path:openconfig-routing:routing-instance/ribs/rib/fib openconfig-routing-policy:routing-policy/defined-sets/prefix-sets/prefix-setCollector normalises each entry to
{prefix, next-hop, interface, metric, source-protocol}. -
Pull‑based polling – lightweight script runs
show ip fib(platform‑specific) via NETCONFgetor CLI over SSH every 5‑15 s, depending on device capability and CPU budget.
Both streams feed the normalization layer; push is preferred for low latency, pull provides a safety net.
Alerting & Notification
An alert fires for prefix P on device D when any of the following hold:
- Missing FIB entry while RIB marks the route as selected.
- Mismatched next‑hop/interface between RIB and FIB.
- FIB entry present but marked inactive (hardware‑drop, TCAM miss).
- Sudden rise in FIB‑miss rate (> X % of total prefixes over a rolling window).
Alerts are emitted as Prometheus metrics (fib_missing_total, fib_mismatch_total) and forwarded to Alertmanager. Notification channels: email, Slack, ticketing webhook (creates a read‑only Jira issue with the correlation record attached). Payload includes:
- Device hostname
- Prefix
- RIB next‑hop & metric
- FIB state (missing/mismatched)
- Timestamp
- Link to the recursion‑graph snapshot for that prefix
Remediation Options and Automated Fixing
Manual Remediation Options
When an inconsistency is detected, the UI presents documented actions with impact and rollback steps.
| Action | Description | Example CLI | Rollback |
|---|---|---|---|
| Static override | Install a static route to a known good next‑hop or discard. | ip route add 10.0.0.0/24 via 203.0.113.1 | ip route del 10.0.0.0/24 via 203.0.113.1 |
| Prefix‑list / filter adjustment | Modify inbound/outbound filter to withdraw problematic advertisement. | ip prefix-list PL-SEQ 5 deny 10.0.0.0/24 le 32 | Remove deny or change to permit |
| Route‑map metric adjustment | Increase metric of a learned route to deprioritise it. | route-map RM-PREF deny 10 set metric +50 | Restore original metric or delete clause |
| BGP soft‑reset / re‑advertise | Trigger BGP refresh to withdraw/re‑advertise with updated attributes. | clear ip bgp <neighbor> soft out | No explicit rollback; original advertisement returns after next update cycle |
| Interface shutdown / no‑shutdown | If next‑hop unreachable due to downed interface, bring up or shut down to force reconvergence. | interface eth3shutdown | no shutdown |
Each action includes a pre‑filled change request template: exact command, expected state change, verification step (e.g., show ip route 10.0.0.0/24).
Automated Remediation Options
Automated fixes are limited to low‑risk, idempotent operations validated in a lab. The workbench proposes an automated fix only after:
- Inconsistency persists for a configurable stabilisation window (default 2 min) to avoid reacting to transient flaps.
- Recursion graph shows no loops and the next‑hop resolves to a directly connected interface or known stable transit.
- Blast‑radius limits: ≤ N prefixes (default = 100) and ≤ M devices (default = 5).
- A rollback snapshot exists and can be applied within R seconds (default = 30 s).
Allowed automated actions
- Static route injection for a missing FIB entry when the next‑hop is directly connected and the interface is up.
- Prefix‑list permit addition to restore a withdrawn advertisement caused by a mis‑configured filter.
- Metric adjustment (increase/decrease by a fixed value) to influence best‑path selection without altering policy.
- BGP community rewrite to influence upstream path selection (only if the device honors the community).
All actions are generated by a deterministic planner that outputs a vendor‑neutral change set (e.g., OpenConfig JSON). An adapter layer translates the set to device‑specific CLI or gNMI set payloads.
Approval Process for Automated Fixes
Before any automated change reaches the network, a two‑stage gate is enforced:
-
Policy‑based pre‑check – an automated policy engine evaluates the change set against rules (e.g., “never modify routes with community 65000:100”, “never install a static route pointing to RFC1918 on an external‑facing interface”). Rejection blocks the change and raises an alert.
-
Human‑in‑the‑loop (HITL) gate – if the policy passes, the UI shows:
- Diff of intended configuration.
- Estimated impact (prefix count, device count, expected traffic shift).
- Rollback button that reverts to the stored snapshot.
- Comment field for operator justification or modification request.
The operator clicks Approve or Reject. Approval triggers the Execution Engine; rejection logs the reason and may create a follow‑up ticket.
All approval actions are immutably logged (user, timestamp, change‑set hash, decision) to satisfy audit requirements.
Troubleshooting and Debugging
| Symptom | Likely Cause | Diagnostic Steps |
|---|---|---|
| FIB missing despite RIB selected | TCAM exhaustion, sync bug | 1. Check show platform tcam utilization 2. Verify RIB→FIB sync logs 3. Correlate with recent configuration changes |
| FIB‑RIB next‑hop mismatch | Asynchronous update, manual override | 1. Compare show ip route vs show ip fib 2. Review recent ip route or netconf edits 3. Examine interface state ( show interfaces) |
| Recursion loop detected | Mis‑configured static/default route, routing loop | 1. Trace next‑hop chain with traceroute or show ip route <next-hop> 2. Look for static routes pointing to themselves or to unresolved prefixes 3. Check BGP/IGP redistribution policies |
| High FIB‑miss rate | Sudden churn, TCAM fragmentation | 1. Monitor fib_miss_total trend 2. Check for flaps in BGP peers or link‑state advertisements 3. Consider increasing TCAM allocation or summarising prefixes |
Use the workbench UI to pull the relevant correlation record, recursion‑graph snapshot, and FIB state for the affected prefix and device, then follow the steps above to isolate and remediate the issue.