ISIS SR-MPLS

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

Leave a comment