MPLS-TE Tunnels
Discovered MPLS-TE tunnels (RFC 3812), walked from the MPLS-TE-STD-MIB mplsTunnelTable by the SNMP poller and written directly to the store. Read-only — there is no create/update/delete surface. Scoped per network.
Auth: All roles (admin, engineer, operator). Read-only observed topology state; license state never gates reads.
List MPLS-TE Tunnels
GET /api/v1/networks/{networkID}/mpls-tunnels
Returns discovered tunnels for a network. The default view collapses instance and observer rows to one row per logical tunnel, preferring the headend observation.
Query parameters:
device_id -- Tunnels touching this device: headend, tailend, or observer (a transit router is the observer, not an endpoint) -- a three-way OR
status -- up (oper=1) | down (oper<>1)
role -- head | transit | tail. transit/tail implicitly force include=transit, since the default one-row-per-logical-tunnel collapse prefers the head observation and would otherwise hide the very rows the filter asks for.
include=transit -- Return the raw per-observer observation rows instead of the default one-row-per-logical-tunnel collapse
limit / offset -- Pagination
Response: 200 OK (paginated envelope)
{
"data": [
{
"id": "uuid",
"network_id": "uuid",
"area_id": "uuid",
"tunnel_index": 65437,
"active_instance": 34,
"ingress_lsr_id": "192.0.2.1",
"egress_lsr_id": "192.0.2.11",
"headend_device_id": "uuid",
"tailend_device_id": "uuid",
"observed_by_device_id": "uuid",
"tunnel_role": 1,
"name": "Tunnel65437",
"admin_status": 1,
"oper_status": 1,
"signalling_proto": 2,
"bandwidth_bps": 0,
"first_seen": "2026-07-04T12:00:00Z",
"last_seen": "2026-07-04T12:05:00Z",
"updated_at": "2026-07-04T12:05:00Z"
}
],
"total": 1,
"limit": 50,
"offset": 0
}
tunnel_role = mplsTunnelRole {head=1, transit=2, tail=3, headTail=4}; admin_status / oper_status per RFC 3812; signalling_proto {none=1, rsvp=2, crldp=3, other=4} (0 = not yet enriched). area_id, headend_device_id, tailend_device_id are omitted when unresolved. Data is [] (not null) when empty.
Error responses:
400 Bad Request -- status not up/down, or role not head/transit/tail
Get MPLS-TE Tunnel
GET /api/v1/mpls-tunnels/{id}
Returns a single tunnel row by ID (same schema as a List data entry).
Error responses:
404 Not Found -- Tunnel does not exist