Multivendor SR-MPLS
Summer is almost over, and it’s time to resume regular programming with the next example from the Segment Routing workshop I had at ITNOG10: multi-vendor SR-MPLS. I used the same lab topology as in the previous examples but deployed Arista EOS on PE1, FRRouting on P, and SR Linux on PE21
Lab Topology
I had to change two details in the initial lab topology:
- The definition of nodes: I had to tell netlab which device type to use for each node.
- I also had to specify the default license file and device model (type) for the SR Linux node.
The full lab topology file is here.
defaults.devices.srlinux.clab.node:license: ~/.netlab/license_srlinux.txttype: ixr6nodes:pe1:device: eosp:device: frrpe2:device: srlinux
Exploring Multi-Vendor SR-MPLS
After setting up netlab, changing into the 1-intro/6-multivendor directory, and executing netlab up, you’ll have an SR-MPLS network across three vendors. You can do the same checks we did for the original IS-IS lab and should get (mostly) the same results.
The only significant difference is the Segment Routing Global Block (SRGB) advertised by the three devices. The lab topology does not specify the SRGB values; each device is thus using vendor2 defaults:
pe1#show isis segment-routing global-blocksc - conflicting SR capability TLV, processed first advertisementSystem ID: pe1 Instance: GandalfSR supported Data-plane: MPLS SR Router ID: 10.0.0.1SR Global Block( SRGB ) Size: 65536Number of IS-IS segment routing capable nodes excluding self: 2SystemId Base Size------- -------------- ------------ -----* pe1 900000 65536p 24000 8000pe2 16000 10000
Likewise, the prefix segments (displayed as SID + SRGB start) reflect different SRGB ranges:
pe1#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 24002 Node R:0 N:1 P:0 E:0 V:0 L:0 p L2 unprotected SPF10.0.0.3/32 3 16003 Node R:0 N:1 P:1 E:0 V:0 L:0 pe2 L2 unprotected SPF
As expected, the device-specific SRGB ranges are reflected in the MPLS LFIB. For example, PE1 (Arista EOS) expects to receive label 900003 to forward traffic to 10.0.0.3/32 (SID 3 advertised by PE2), while P (FRRouting) expects label 24003. The MPLS LFIB entry for 900003 on Arista EOS thus swaps the label with 24003:
pe1#show mpls lfib route 900003 | begin 900003IP 900003 [1], 10.0.0.3/32via M, 10.1.0.1, swap 24003payload autoDecide, ttlMode uniform, apply egress-aclinterface Ethernet1
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)
- Import the SR Linux license file into the GitHub Codespace
- Change directory to
1-intro/6-multivendor - Edit the location of the SR Linux license file in
topology.yml - Execute netlab up
- Have fun