SR-MPLS over Unnumbered Interfaces
After the simple SR-MPLS demo and the dual-stack SR-MPLS setup, it was time for the next obvious question: Does SR-MPLS work over unnumbered IPv4 interfaces1, assuming the implementation of the underlying routing protocol supports them? Of course it does; let’s go through the details, using the same topology I used throughout the Segment Routing workshop @ ITNOG10.
Lab Topology
The unnumbered IPv4 setup required a single change to the initial lab topology – I had to tell netlab to use unnumbered IPv4 on point-to-point links (the full lab topology file is here):
addressing.p2p.ipv4: True
Exploring the SR-MPLS Setup
After setting up netlab, changing into the 1-intro/4-unnumbered directory, and executing netlab up, you’ll have an SR-MPLS network using unnumbered IPv4 P2P interfaces. Let’s do the usual checks:
Do we get SR-MPLS TLVs advertised in IS-IS LSPs?
pe2#show isis database detail pe1.00-00Legend:H - hostname conflictU - node unreachableIS-IS Instance: Gandalf VRF: defaultIS-IS Level 2 Link State DatabaseLSPID Seq Num Cksum Life Length IS Received LSPID Flagspe1.00-00 3 58379 1185 136 L2 0000.0000.0001.00-00 <>LSP generation remaining wait time: 0 msTime remaining until refresh: 885 sNLPID: 0xCC(IPv4)Hostname: pe1Area addresses: 49.0001Interface address: 10.0.0.1IS Neighbor : p.00 Metric: 10IPv4 Neighbor Address: 10.0.0.2IPv4 Interface Address: 10.0.0.1Adj-sid: 100000 flags: [L V] weight: 0x0Reachability : 10.0.0.1/32 Metric: 10 Type: 1 UpSR Prefix-SID: 1 Flags: [N] Algorithm: 0Router Capabilities: Router Id: 10.0.0.1 Flags: []SR Local Block:SRLB Base: 965536 Range: 65536Area leader priority: 250 algorithm: 0Maximum SID depth:Base MPLS imposition (MSD type 1): 6SR Capability: Flags: [I]SRGB Base: 900000 Range: 65536
Compared to the previous examples (numbered IPv4, dual-stack), the IS-IS TLV is somewhat smaller; it has the IS Neighbor TLV, but not the Reachability TLVs for the P2P subnets (obviously). The adjacency SID is attached to the IS Neighbor TLV, so we can still use it for the segment-by-segment traffic engineering.
Because the loopback interfaces and associated SIDs are in the IS-IS TLVs, we should see the prefix segments of all nodes (and we do):
pe2#show isis segment-routing prefix-segmentsSystem ID: pe1 Instance: 'Gandalf'SR supported Data-plane: MPLS SR Router ID: 10.0.0.1Node: 3 Proxy-Node: 0 Prefix: 0 Total Segments: 3Flag Descriptions: R: Re-advertised, N: Node Segment, P: no-PHPE: Explicit-NULL, V: Value, L: Local, A: Proxy-Node attachedSegment status codes: * - Self originated Prefix, L1 - level 1, L2 - level 2, ! - SR-unreachable,# - Some IS-IS next-hops are SR-unreachablePrefix SID Label Type Flags System ID Level Protection Algorithm------------------------- ----- ------- ---------- ---------------------------- --------------- ----- -------------------- -------------* 10.0.0.1/32 1 900001 Node R:0 N:1 P:0 E:0 V:0 L:0 pe1 L2 unprotected SPF10.0.0.2/32 2 900002 Node R:0 N:1 P:0 E:0 V:0 L:0 p L2 unprotected SPF10.0.0.3/32 3 900003 Node R:0 N:1 P:0 E:0 V:0 L:0 pe2 L2 unprotected SPF
Not surprisingly, the MPLS forwarding table is identical to the simple SR-MPLS example:
pe2#show mpls route...100000 A[1]via M, 10.0.0.2, popEgressACL: applydirectly connected, Ethernet1ca:f0:00:02:00:01, vlan 1006900002 A[1]via M, 10.0.0.2, popEgressACL: applydirectly connected, Ethernet1ca:f0:00:02:00:01, vlan 1006900003 A[1]via M, 10.0.0.2, swap 900003EgressACL: applydirectly connected, Ethernet1ca:f0:00:02:00:01, vlan 1006
Try It Out
The workshop GitHub repository includes the installation guidelines; you might want to read them first. After that, you can:
- Start a GitHub Codespace
- Import an Arista cEOS container into it (alternate step-by-step instructions)
- Change directory to
1-intro/4-unnumbered - Execute netlab up
- Have fun
-
Unnumbered IPv6 interfaces (more precisely, IPv6 interfaces using only link-local IPv6 addresses) are boring; most IGP routing protocols use them as next hops anyway. ↩︎