This page shows the configuration and confirmation of ISIS SR-MPLS in IOS-XR.
It’s worth noting that SR (Segment Routing) is still MPLS (Multiprotocol Label Switching), we are still label switching however, SR removes the additional MPLS requirement of LDP (Label Distribution Protocol). LDP is replaced with new “Opaque” LSAs within the IGP (Interior Gateway Protocol) which enable SR-MPLS to advertise Labels. We could delve into the theory however I’m keen to share configuration and confirmation, I may try and delve into the theory of SR-MPLS in another post.
When looking at ISIS we can really get into the weeds with TLVs and flags, the IETF page has always helped with this when looking at ISIS SR.
RFC 8667 – IS-IS Extensions for Segment Routing
To start with, here is an overview of the topology I have used. I am using EVE-NG with XRv images (IOS-XR)

I started the lab by configuring the IOS-XR routers with Loopbacks, Interface IPs and ISIS. This is basic configuration and leaves ISIS as L1L2 with default costs.
router isis 1
net 49.0001.1010.1010.1010.00
log adjacency changes
address-family ipv4 unicast
metric-style wide
router-id Loopback0
!
interface Loopback0
passive
address-family ipv4 unicast
!
!
interface GigabitEthernet0/0/0/1
address-family ipv4 unicast
!
!
interface GigabitEthernet0/0/0/2
address-family ipv4 unicast
!
!
!
Once configured we can confirm our ISIS neighbourships and confirm a ping between PE1 and PE2.
RP/0/0/CPU0:PE1#sh route isis
i L1 10.2.2.2/32 [115/30] via 172.20.0.1, 00:01:59, GigabitEthernet0/0/0/1
RP/0/0/CPU0:PE1#ping 10.2.2.2
Fri Jan 31 13:28:41.885 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.2.2.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 9/55/229 ms
Next step is to enable Segment Routing (SR) at the ISIS ipv4 address-family level, we also add a prefix-sid index to the loopback, this will aid us in fault finding the LFIB (Label Forwarding Information Based) which will become clear. To add we enable MPLS OAM for troubleshooting.
router isis 1
net 49.0001.1010.1010.1010.00
log adjacency changes
address-family ipv4 unicast
metric-style wide
router-id Loopback0
segment-routing mpls
!
interface Loopback0
passive
address-family ipv4 unicast
prefix-sid index 10
mpls oam
!
Now we can confirm Segment Routing is working as expected by running Ping MPLS and Traceroute MPLS. For this to work MPLS OAM must be configured on each node in the LSP (Label-switched Path).
RP/0/0/CPU0:PE1#ping mpls ipv4 10.2.2.2/32
Sending 5, 100-byte MPLS Echos to 10.2.2.2/32,
timeout is 2 seconds, send interval is 0 msec:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 10/42/120 ms
RP/0/0/CPU0:PE1#traceroute mpls ipv4 10.2.2.2/32
Tracing MPLS Label Switched Path to 10.2.2.2/32, timeout is 2 seconds
0 172.20.0.0 MRU 1500 [Labels: 16020 Exp: 0]
L 1 172.20.0.1 MRU 1500 [Labels: 16020 Exp: 0] 100 ms
L 2 172.20.0.3 MRU 1500 [Labels: implicit-null Exp: 0] 70 ms
! 3 172.20.0.5 50 ms
Next we can show the MPLS forwarding database. This shows the prefix and adjacency SIDs. Here we can see 24000 and 24001 are the adjacency SIDs for PE1 connected to P1 and P2. With ISIS unlike OSPF we see additional Adj-SIDs for all connections within the topology which show our L1L2 Adj. Two Per link, one for each ISIS level. We can reduce this by setting a specific Level in the ISIS configuration.
Here we can also see the prefix-sid index we configured on each of the loopback addresses. 16001 (idx 1), this is P1 loopback0 10.255.255.1. We can also see 16001 and 16002 Label as Pop because P1 and P2 are the next-hops so PHP (Penultimate Hop Popping) does it’s thing, as it would do with traditional LDP MPLS.
RP/0/0/CPU0:PE1#show mpls forwarding
Local Outgoing Prefix Outgoing Next Hop Bytes
Label Label or ID Interface Switched
------ ----------- ------------------ ------------ --------------- ------------
16001 Pop SR Pfx (idx 1) Gi0/0/0/2 172.10.0.1 0
16002 Pop SR Pfx (idx 2) Gi0/0/0/1 172.20.0.1 0
16003 16003 SR Pfx (idx 3) Gi0/0/0/2 172.10.0.1 0
16004 16004 SR Pfx (idx 4) Gi0/0/0/1 172.20.0.1 0
16020 16020 SR Pfx (idx 20) Gi0/0/0/1 172.20.0.1 0
24000 Pop SR Adj (idx 1) Gi0/0/0/1 172.20.0.1 0
24001 Pop SR Adj (idx 3) Gi0/0/0/1 172.20.0.1 0
24002 Pop SR Adj (idx 1) Gi0/0/0/2 172.10.0.1 0
24003 Pop SR Adj (idx 3) Gi0/0/0/2 172.10.0.1 0
24004 Pop SR Adj (idx 0) Gi0/0/0/1 172.20.0.1 0
24005 Pop SR Adj (idx 2) Gi0/0/0/1 172.20.0.1 0
24006 Pop SR Adj (idx 0) Gi0/0/0/2 172.10.0.1 0
24007 Pop SR Adj (idx 2) Gi0/0/0/2 172.10.0.1 0
RP/0/0/CPU0:PE1#show isis topology
Fri Jan 31 13:41:52.931 UTC
IS-IS 1 paths to IPv4 Unicast (Level-1) routers
System Id Metric Next-Hop Interface SNPA
PE1 --
P1 10 P1 Gi0/0/0/2 5000.0002.0003
PE2 30 P2 Gi0/0/0/1 5000.0003.0002
P2 10 P2 Gi0/0/0/1 5000.0003.0002
P3 20 P1 Gi0/0/0/2 5000.0002.0003
P4 20 P2 Gi0/0/0/1 5000.0003.0002
IS-IS 1 paths to IPv4 Unicast (Level-2) routers
System Id Metric Next-Hop Interface SNPA
PE1 --
P1 10 P1 Gi0/0/0/2 5000.0002.0003
PE2 30 P2 Gi0/0/0/1 5000.0003.0002
P2 10 P2 Gi0/0/0/1 5000.0003.0002
P3 20 P1 Gi0/0/0/2 5000.0002.0003
P4 20 P2 Gi0/0/0/1 5000.0003.0002
Unlike OSPF we’re unable to find any SR related information when looking at neighbors in detail. We can however look at the label table which shows us our Prefix-SIDs, we can see here that all of our Loopback prefixes across our topology have been populated.
RP/0/0/CPU0:PE1#show isis segment-routing label table
IS-IS 1 IS Label Table
Label Prefix/Interface
---------- ----------------
16001 10.255.255.1/32
16002 10.255.255.2/32
16003 10.255.255.3/32
16004 10.255.255.4/32
16010 Loopback0
16020 10.2.2.2/32
The main bulk of the database information for ISIS is in one big verbose output, level dependent that we can reduce down further to LSPID. For the sake of readability I have split the full output into different code snips.
We can see Router Capabilities Sub-TLV Type 2, this shows I:1 IPV4 address-family is ON and V:0 IPV6 address-family is OFF. This is then followed by the default SRGB (Segment Routing Global Block) range 16000 – 23,999 (Range 8000).
RP/0/0/CPU0:PE1#show isis database verbose PE1 level 2
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
PE1.00-00 * 0x0000000a 0xed62 1197 0/0/0
Area Address: 49.0001
Router Cap: 10.1.1.1, D:0, S:0
Segment Routing: I:1 V:0, SRGB Base: 16000 Range: 8000
SR Algorithm:
Algorithm: 0
Algorithm: 1
Node Maximum SID Depth:
Subtype: 1, Value: 10
Next we can look at the Prefix-SID advertisements. This shows the IPv4 IP Reachability Sub-TLV Type 3. If we dive into the TLV we can see the following flags.
R:0 Means the TLV is not propagated
N:1 Node SID
P:0 PHP on
E:0 No Explicit-Null Label
Metric: 0 IP-Extended 10.1.1.1/32
Prefix-SID Index: 10, Algorithm:0, R:0 N:1 P:0 E:0 V:0 L:0
Prefix Attribute Flags: X:0 R:0 N:1
Source Router ID: 10.1.1.1
Metric: 10 IP-Extended 10.255.255.2/32
Prefix-SID Index: 2, Algorithm:0, R:1 N:1 P:1 E:0 V:0 L:0
Prefix Attribute Flags: X:0 R:1 N:1
Source Router ID: 10.255.255.2
Next we can look at the Adj-SID advertisements. This again shows the IPv4 IP Adj-SID Sub-TLV Type 31, depending on whether we need to advertise adjacencies to a DIS then we would be using the Lan-Adj-SID Sub-TLV Type 32. Within this TLV we can see the following flags.
F:0 address-family ipv4
B:0 Unprotected
V:1 Label Value
L:1 Local Segment
S:0 Not a Set of Adjacencies
We can also see the Adj-SID and System ID:
Metric: 10 IS-Extended P1.01
Interface IP Address: 172.10.0.0
Link Maximum SID Depth:
Subtype: 1, Value: 10
LAN-ADJ-SID: F:0 B:0 V:1 L:1 S:0 P:0 weight:0 Adjacency-sid: 24003 System ID:P1
Metric: 10 IS-Extended P2.0b
Interface IP Address: 172.20.0.0
Link Maximum SID Depth:
Subtype: 1, Value: 10
LAN-ADJ-SID: F:0 B:0 V:1 L:1 S:0 P:0 weight:0 Adjacency-sid: 24001 System ID:P2
Metric: 20 IP-Extended 10.255.255.4/32
Prefix-SID Index: 4, Algorithm:0, R:1 N:1 P:1 E:0 V:0 L:0
Prefix Attribute Flags: X:0 R:1 N:1
Source Router ID: 10.255.255.4
Total Level-2 LSP count: 1 Local Level-2 LSP count: 1
That’s all for the ISIS SR configuration and confirmation. Next i’ll be looking at TI-LFA and FRR, some of the major perks of Segment Routing.

Leave a comment