-
Notifications
You must be signed in to change notification settings - Fork 2
isis
Pre-Alpha. This page describes behavior that may change.
Ze implements IS-IS (Intermediate System to Intermediate System, ISO/IEC 10589 as updated by RFC 1195 / RFC 5305 / RFC 5308 / RFC 5301) as a native link-state interior gateway protocol that runs directly over Layer 2. It builds adjacencies, floods a link-state database, runs SPF, and installs the resulting routes into the kernel FIB through the same Loc-RIB path as every other protocol (AdminDistance 115, tagged RTPROT_ze).
IS-IS runs as the isis plugin. It needs a raw AF_PACKET socket (CAP_NET_RAW); without it the engine forms no adjacencies.
IS-IS routers belong to an area and operate at Level 1 (intra-area), Level 2 (inter-area / backbone), or both. The router's identity comes from its Network Entity Title (net): at least one NET is required, and the System ID is derived from the 6 octets before the NSEL of the first NET unless an explicit system-id is given.
| Leaf | Meaning |
|---|---|
net |
Network Entity Title, e.g. 49.0001.0000.0000.0001.00. Area address + System ID + NSEL. |
level |
l1, l2, or l1-l2 (operate at both levels). |
system-id |
Optional explicit 6-octet System ID; must match the System ID embedded in the first NET. |
hostname |
Dynamic hostname advertised in TLV 137 (RFC 5301). |
lsp-lifetime |
Maximum LSP age in seconds (default 1200). |
Interfaces are configured under a single interfaces { } container holding a keyed interface <name> list. The name is the Ze logical interface name, which equals the kernel device by default but can be bound to a different kernel device through an os-name selector; IS-IS resolves the logical name to its kernel device through the shared iface resolver.
isis {
net 49.0001.0000.0000.0001.00
level l1-l2
lsp-lifetime 1200
hostname r1
interfaces {
interface eth0 {
circuit-type point-to-point
metric 10
hello-interval 10
hold-multiplier 3
priority 64
address-family ipv4-unicast { }
}
interface eth1 {
passive true
}
}
}
| Leaf | Meaning |
|---|---|
circuit-type |
broadcast (LAN) or point-to-point. |
metric |
Link cost advertised in the wide-metric IS Reachability TLV. |
hello-interval |
Seconds between Hellos. |
hold-multiplier |
Hold time = hello-interval * hold-multiplier. |
priority |
DIS election priority on broadcast circuits (0..127, default 64). |
passive |
Form no adjacency, but still advertise the interface prefix. |
address-family |
Enable ipv4-unicast and/or ipv6-unicast on the circuit. |
Per-interface level-1 { } / level-2 { } containers override metric, timers, and DIS priority per level, and carry the per-circuit auth-key-chain used for Hellos.
A point-to-point circuit forms a single adjacency with the neighbour directly: no DIS, no pseudo-node. It uses the P2P IIH PDU and three-way handshake (RFC 5303, TLV 240).
A broadcast (Ethernet, multi-access) circuit does not form a full mesh. Routers exchange LAN IIH PDUs, elect a Designated IS (DIS) per level, and represent the segment as a single pseudo-node.
DIS election. Every router advertises a DIS priority (0..127, default 64) in its LAN Hello. The highest priority wins; an equal priority breaks to the higher interface MAC. Priority 0 is allowed (it lowers preference but does not stop a MAC-tiebreak win). Election runs independently for Level 1 and Level 2, so one router can be the L1 DIS and another the L2 DIS on the same segment.
Pseudo-node. The elected DIS originates a pseudo-node LSP that lists every router on the segment as a neighbour at metric 0. Every router then advertises the LAN as a single link to the pseudo-node, so a LAN with N routers appears as one node with N spokes instead of an N*(N-1) mesh. This is automatic; nothing to configure beyond the priority. If the DIS leaves, the survivors elect a new DIS and a router that loses the role purges its pseudo-node before yielding, so the topology never shows a stale LAN node. Election is damped against flaps.
Routers discover each other by exchanging Hellos (IIH). When the holding time on a circuit elapses without a Hello, the adjacency times out and is torn down. Inspect adjacencies with show isis neighbor (system-id, interface, level, state, hold time).
clear isis adjacency tears down every adjacency without closing the circuit; each neighbour re-learns from the next Hello, driving a full LSP re-origination and SPF re-run.
Each router floods Link State PDUs (LSPs) describing its own links and reachable prefixes; the union of every router's LSPs forms the link-state database (LSDB). LSPs are stored verbatim (a single owned copy of the PDU bytes) with parsed freshness metadata, and re-flood byte-for-byte even when they carry TLVs Ze does not understand. Sequence numbers, Fletcher checksums, aging, purges, and 256-fragment fragmentation follow ISO/IEC 10589.
From the synchronised LSDB, Ze runs a Dijkstra SPF over the topology and extracts routes. Inspect the database with show isis database (one row per LSP) or show isis database detail (each LSP's TLVs decoded), and recent SPF runs with show isis spf-log (time, level, trigger, duration, node count).
When SPF finds several equal-cost paths to a prefix, all of them are installed as next-hops, so traffic load-shares across equal-cost links. The installed routes appear (with their next-hops) in show isis route.
Ze originates wide metrics only (RFC 5305 / RFC 5308). The Extended IS Reachability TLV (22) carries a 24-bit metric; the Extended IP Reachability (TLV 135, IPv4) and IPv6 Reachability (TLV 236) TLVs carry a full 32-bit metric. Narrow IS Reachability (TLV 2) is decoded for interop but never originated. An IPv6 prefix advertised with a metric above MAX_V6_PATH_METRIC (0xFE000000) is decoded but excluded from SPF (RFC 5308 sec 2).
Ze runs IPv6 over the same IS-IS instance as IPv4 (RFC 5308, single-topology). Enable address-family ipv6-unicast on a circuit and both families ride a single shared shortest-path tree, so one adjacency carries IPv4 and IPv6 reachability.
isis {
net 49.0001.0000.0000.0001.00
level l1-l2
interfaces {
interface eth0 {
address-family ipv4-unicast { }
address-family ipv6-unicast { }
}
}
}
With IPv6 enabled, the node advertises the IPv6 NLPID 0x8E in the Protocols Supported TLV (129), carries its link-local address in the Hello TLV 232 and its non-link-local addresses in the LSP TLV 232, advertises IPv6 prefixes as TLV 236 (link-local prefixes are never advertised), and extracts IPv6 routes from the same Dijkstra tree (no second SPF). Inspect them with show isis route ipv6.
Single-topology assumes the IPv4 and IPv6 topologies are congruent. On a non-congruent topology (an IPv4-only or IPv6-only link, or per-family metric differences) an IPv6 route may resolve to a next-hop with no IPv6 reachability. RFC 5120 Multi-Topology is not implemented; for the common congruent dual-stack deployment, single-topology is correct and simpler.
IS-IS PDUs can be authenticated so a router accepts adjacencies and link-state information only from peers that share a key. Three types are carried in the Authentication TLV (type 10):
| Type | Wire code | Standard | Use |
|---|---|---|---|
cleartext |
1 | ISO/IEC 10589 | Sanity check only; the password rides the wire in clear. |
hmac-md5 |
54 | RFC 5304 | HMAC-MD5 integrity protection. |
hmac-sha-256 (and -1/224/384/512) |
3 | RFC 5310 | Generic cryptographic authentication; SHA-256 recommended. |
Keys are configured as named key-chains, each holding one or more keys with a key-id, algorithm, $9$-encoded secret, and optional send-lifetime / accept-lifetime windows for hitless rotation. The secret is stored with the reversible $9$ encoding (like PPPoE and WireGuard keys) so it never appears as plaintext in show configuration, logs, or backups.
isis {
net 49.0001.0000.0000.0001.00
key-chains area-key {
key 1 {
algorithm hmac-sha-256
secret $9$.... # entered plaintext, $9$-encoded on commit
}
}
key-chains iih-key {
key 1 { algorithm hmac-sha-256 secret ... }
}
level-1 { auth-key-chain area-key } # L1 LSP/CSNP/PSNP
interfaces {
interface eth0 {
level-1 { auth-key-chain iih-key } # L1 Hellos on this circuit
}
}
}
Hellos (IIH) authenticate with the per-interface chain; LSPs and the CSNP/PSNP sequence-number PDUs authenticate with the per-level chain (the area key for Level 1, the domain key for Level 2). The two are independent. A PDU that arrives with no Authentication TLV, with the TLV not first, or with a digest no current key matches is rejected before it can form an adjacency or enter the database, and ze_isis_auth_failures_total{level,interface} is incremented. Authenticated purges are enforced per RFC 5304.
IS-IS plugs into Ze's protocol-agnostic redistribution framework in both directions, using the same redistribute { } block as every other protocol.
Export IS-IS into BGP. IS-IS registers a single redistribution source named isis. Both levels (L1 and L2) export under it; the single name is what lets loop prevention auto-reject IS-IS self-import.
redistribute {
destination bgp {
import isis
}
}
Import other protocols into IS-IS. An isis consumer turns connected, static, and BGP routes into Extended IP Reachability (TLV 135, IPv4) or IPv6 Reachability (TLV 236) entries in the node's own LSPs, which flood like any other prefix.
redistribute {
destination isis {
import connected
import static
import bgp
}
}
Each redistributed prefix gets a fixed default metric. TLV 135 carries no external bit (a redistributed IPv4 route is an ordinary reachability entry); TLV 236 sets the external (X) bit for IPv6. destination isis { import isis } is accepted by the schema but is a no-op (loop prevention rejects redistributing IS-IS into itself). IS-IS also advertises its own enabled and passive interface prefixes as internal reachability, so loopbacks and edge networks are reachable without running the protocol on them.
show isis neighbor # adjacencies: system-id, interface, level, state, hold time
show isis database # LSDB summary (one row per LSP)
show isis database detail # LSDB with each LSP's TLVs decoded
show isis route # IS-IS-computed IPv4 routes
show isis route ipv6 # IS-IS-computed IPv6 routes (RFC 5308)
show isis interface # circuits: type, metric, hello/hold, passive, DIS, adjacency count
show isis hostname # system-id -> dynamic hostname (TLV 137, RFC 5301)
show isis spf-log # recent SPF runs: time, level, trigger, duration, node count
clear isis adjacency # tear down all adjacencies; they re-form from the next Hello
clear isis counters # reset the SPF-run log
Every show isis ... command routes its JSON through the pipe machinery, so you can append | json, | table, | text, | count, | match <pat>, | resolve, or | origin. clear isis counters clears only the observational SPF-run history; the monotonic Prometheus series are process counters and are intentionally not reset.
The neighbour and database views are also available in the web UI at /isis and /isis/database, refreshing live over Server-Sent Events. Metrics are exported under the ze_isis_* prefix (adjacencies, LSDB, flooding/SNP, DIS, SPF, authentication, redistribution, and the raw L2 transport). ze doctor reports readiness problems (doctor-isis-raw-socket, doctor-isis-net-missing, doctor-isis-system-id-mismatch) before the engine starts; each is explainable with ze explain <code>.
ze isis-decode reads one IS-IS PDU from stdin (ASCII hex or raw bytes) and prints a JSON view, without a daemon. Add --pretty for indented output.
echo 831b0100... | ze isis-decode --pretty
- OSPF for the other native link-state IGP.
- Redistribution for the protocol-agnostic redistribute framework.
- FIB for how IS-IS routes reach the kernel.
- MPLS / LDP / RSVP-TE for label distribution over the IGP.
- BFD for sub-second failure detection.
- Plugins for the plugin list.
Adapted from docs/guide/isis.md.
Unreviewed draft. This wiki was authored in bulk and has not been reviewed. File corrections on the issue tracker.
- Overview
- YANG Model
- Editor Workflow
- Archive and Rollback
- System
- Interfaces
- VRRP
- BFD
- FIB
- OSPF
- IS-IS
- MPLS / LDP / RSVP-TE
- RSVP-TE
- SRv6
- Static Routes
- Policy Routing
- Firewall
- Traffic Control
- Class of Service
- L2TP/PPP
- PPPoE
- VPP Data Plane
- RPKI
- IPsec VPN
- TACACS+ AAA
- RADIUS AAA
- AS112 DNS
- Authorization
- Fleet
- BGP
- Starting and Stopping
- Show Commands
- Monitoring
- Flow Export
- DDoS Mitigation
- Anomaly Detection
- Health Checks
- Audit Trail
- Production Diagnostics
- Logging
- Operational Reports
- Healthcheck
- Self-Update
- Zero-Touch Provisioning
- MRT Analysis
- Upgrade and Restart
- Storage
- Policy
- Core
- Resilience
- Validation
- Capabilities
- Address Families
- Protocol
- Subsystems
- Infrastructure
- Route Server at an IXP
- Transit Edge with RPKI
- Public Looking Glass
- ExaBGP Migration Walkthrough
- FlowSpec Injection
- Chaos-Tested Peering
- AS Path Topology