Segment Routing with IS-IS Control Plane

This chapter provides information about Segment Routing (SR) with Intermediate System to Intermediate System (IS-IS) control plane.

Topics in this chapter include:

Applicability

This configuration in this chapter corresponds to SRL Release 25.10.R1.

Overview

Segment Routing (SR) is a technology for IP/Multi-Protocol Label Switching (MPLS) networks that enables source routing. With source routing, operators can specify a forwarding path, from ingress to egress, that is independent of the shortest path determined by the Interior Gateway Protocol (IGP).

The main benefit of SR compared to other source routing protocols is that, from a control plane perspective, no signaling protocol is required. SR provides a path or tunnel, encoded as a sequential list of sub-paths or segments that are advertised within the SR domain, using extensions to well-known link state routing protocols, such as Intermediate System to Intermediate System (IS-IS) or Open Shortest Path First (OSPF).

Implementation

An SR tunnel can contain a single segment that represents the destination node, or it can contain a list of segments that the tunnel must traverse. The tunnel can be established over an IPv4/IPv6 MPLS or IPv6 data plane, encoded as a stack of MPLS labels or as a number of IPv6 addresses contained in an IPv6 extension header.

Network elements are modeled as segments. For each segment, the IGP advertises an identifier referred to as a segment ID (SID).

The two segment types are:

  • Prefix segment — A prefix segment is the Equal Cost Multi-Path ECMP-aware shortest path IGP route to a related prefix. A typical example of a prefix segment is a node segment. Prefix SIDs are globally unique and allocated from a Segment Routing Global Block (SRGB), typically multi-hop. The IGP signals the prefix SIDs. Within the SRL implementation, a node segment is either the system address or another interface address of type loopback in the Global Routing Table (GRT). IS-IS advertises node SIDs using a prefix SID sub-TLV (Type Length Value).

  • Adjacency segment — An adjacency segment represents a link between two routers. Adjacency SIDs are locally unique and allocated from a Segment Routing Local Block (SRLB), so that other routers in the SR domain can use the same label space. The IGP signals the adjacency SIDs. The SRL implementation allocates (dynamically or statically by configuration) adjacency SIDs and advertises them when the SR context within the IGP instance is enabled. IS-IS advertises adjacency SIDs in an adjacency SID sub-TLV.

To make prefix SIDs globally unique within the SR domain, an indexing mechanism is required, because production networks consist of multiple vendors and multiple products. As a result, it is often difficult to agree on a common SRGB for the prefix SIDs.

All routers within the SR domain are expected to configure and advertise the same prefix SID range for an IGP instance. The label value used by each router to represent a prefix can be local to that router by the use of an offset label, referred to as a start label: Local label (for a prefix) = (local) start label + {prefix SID index}

Within the SRL implementation, prefix Loop-Free Alternate (LFA) is supported for SR to improve the Fast Reroute (FRR) coverage. Remote LFA (RLFA) and topology-independent LFA (TI-LFA) are also supported. With RLFA, SR shortest path tunnels are used as a virtual LFA or repair tunnel toward a PQ node. TI-LFA is beyond the scope of this chapter.

The following example uses IS-IS as an IGP protocol, with an MPLS data plane and a network instance enabled using LFA and RLFA. Example topology shows the example topology with seven PEs.

Figure 1. Example topology

Configuration

Initial configuration

Configure the interface and the system sub interface IP addresses according to Example topology.

Select IS-IS level 2 as the IGP to distribute routing information between all PEs. All IS-IS interfaces are of type point-to-point to avoid running the Designated Router/Backup Designated Router (DR/BDR) election process.

SR configuration

Define MPLS label ranges for node and adjacency SIDs

Before enabling SR, define a static SRGB. This SRGB is required on each individual router in the SR domain and is used to allocate the prefix SIDs from.

An SRGB is not instantiated by default. For simplicity, configure the same SRGB in this example for all SR domain routers. Within the command, a start value and an end value define the size of the SRGB. The following command configures an SRGB of 100 MPLS labels, from label 20000 to label 20099. Repeat this for all other nodes. The allocated MPLS labels are only for the prefix SIDs.

# on all PEs:
enter candidate
    system mpls label-ranges {
                static srgb-static-nsid {    # for SR node SIDs
                    shared true
                    start-label 20000
                    end-label 20099
                }

Define a dedicated SRLB. This SRLB is required on each individual router in the SR domain and is used to allocate the adjacency SIDs from.

An SRLB is not instantiated by default. When configured by the operator, it is taken from the system dynamic label range (for dynamically allocated adjacency SIDs) or from the system static label range (for statically allocated adjacency SIDs). For simplicity, the same dynamic SRLB is used in this example for all SR domain routers. Within the command, a start value and an end value define the size of the SRLB. The adjacency SIDs, which are only locally unique, are taken from the SRLB.

The following command configures an SRLB of 100 MPLS labels for dynamically allocated adjacency SIDs, from label 30000 to label 30099:

# on all PEs:
enter candidate
    system mpls label-ranges {
                dynamic srlb-dynamic-asid {  # for SR dynamic adjacency SIDs
                    start-label 30000
                    end-label 30099
                }

The following command configures an SRLB of 100 MPLS labels for statically allocated adjacency SIDs, from label 37000 to label 37099:

# on all PEs:
enter candidate
    system mpls label-ranges {
                static srlb-static-asid {  # for SR static adjacency SIDs
                    shared false
                    start-label 37000
                    end-label 37099
                }

Assign the label range for node SIDs

Assign the MPLS label range for the SRGB (srgb-static-nsid) to the SR MPLS global block on the default network instance, as follows:

# on all PEs: 
enter candidate
    network-instance default segment-routing mpls {
                global-block {
                    label-range srgb-static-nsid

Enable SR

Enable the SR context within the IS-IS instance, as follows:

# on all PEs:
enter candidate
    network-instance default protocols isis instance 0 {
                    segment-routing {
                        mpls { }

Assign the label range for adjacency SIDs

Assign the MPLS label range for the SRLB for dynamically allocated adjacency SIDs to the dynamic label block in the isis context.

# on all PEs:
enter candidate
    network-instance default protocols isis {
                dynamic-label-block srlb-dynamic-asid

As an example, on PE-7 only, adjacency SIDs are allocated statically. Assign the MPLS label range for the SRLB for statically allocated adjacency SIDs to the static label block in the isis instance 0 segment-routing mpls context.

# on PE-7:
enter candidate
    network-instance default protocols isis {
                instance 0 {
                    segment-routing {
                        mpls {
                            static-label-block srlb-static-asid

Allocate node SIDs

Allocate a prefix SID to the prefix representing a node.

To be able to set up SR shortest path tunnels to all routers of the SR domain, each router needs to be uniquely defined within the SR domain. Therefore, allocate a node SID that is unique within the SR domain to the system address or other loopback interface in the GRT. Both an IPv4 and an IPv6 node SID can be configured, using an index. An IPv4 node SID has a label that is equal to the sum of the start label (20000), which is the first label of the SRGB on all nodes, and the index on the node.

It is possible to configure node SIDs that are protocol independent, or node SIDs that are specific for an IS-IS instance, or both. Protocol independent node SIDs can be used across multiple IGP instances. When both a protocol independent node SID and an IS-IS instance specific node SID are configured on the same node, the IS-IS instance specific node SID takes precedence and IS-IS advertises only the IS-IS instance specific node SID, not the protocol independent node SID.

Allocate a protocol independent node SID to the system address as follows:

# on all PEs:
enter candidate
    network-instance default segment-routing {
            mpls {
                local-prefix-sid 1 {
                    interface system0.0
                    ipv4-label-index x    # index x for PE-x
                    node-sid true
                }

As an example, on PE-7 only, allocate an IS-IS instance specific node SID to the system address as follows:

# on PE-7:
enter candidate
    network-instance default protocols isis instance 0 {
                    interface system0.0 {
                        segment-routing {
                            mpls {
                                ipv4-node-sid {
                                    index 77
                                }

Allocate adjacency SIDs

Enable dynamic adjacency SID allocation for all interfaces (labels from srlb-dynamic-asid) on all PEs, as follows:
# on all PEs:
enter candidate
    network-instance default protocols isis instance 0 {
                    segment-routing {
                        mpls {
                            dynamic-adjacency-sids {
                                all-interfaces true

As an example, only on PE-7, manually allocate static adjacency SIDs for all interfaces (labels from srlb-static-asid) as follows:

# on PE-7:
enter candidate
    network-instance default protocols isis instance 0 {
                    interface ethernet-1/1.1 {
                        segment-routing {
                            mpls {
                                ipv4-adjacency-sid {
                                    assignment static
                                    static 37001
                                }
                            }
                        }
                    }
                    interface ethernet-1/2.1 {
                        segment-routing {
                            mpls {
                                ipv4-adjacency-sid {
                                    assignment static
                                    static 37002
                                }
                            }
                        }
                    }

Outcome

The allocation of the node SIDs from srgb-static-nsid and of the adjacency SIDs from srlb-dynamic-asid or srlb-static-asid can be verified as follows. On all PEs, a protocol independent node SID is allocated from srgb-static-nsid. On PE-7, an additional IS-IS instance specific node SID is allocated from srgb-static-nsid. On all PEs except PE-7, srlb-static-asid is not used. On PE-7, the static adjacency SID allocation overrides the dynamic adjacency SID allocation, so that srlb-dynamic-asid is not used.
A:admin@PE-1# info from state with-context / system mpls label-ranges static * | as table | filter fields *
+----------------------------------------------------------------+--------+-------------+-----------+------------------+-------------+----------------+
|                              Name                              | Shared | Start-label | End-label | Allocated-labels | Free-labels |     Status     |
+================================================================+========+=============+===========+==================+=============+================+
| srgb-static-nsid                                               | true   |       20000 |     20099 |                7 |          93 | ready          |
| srlb-static-asid                                               | false  |       37000 |     37099 |                0 |         100 | ready          |
+----------------------------------------------------------------+--------+-------------+-----------+------------------+-------------+----------------+

A:admin@PE-1# info from state with-context / system mpls label-ranges dynamic * | as table | filter fields *
+-------------------------------------------------------------------------+-------------+-----------+------------------+-------------+----------------+
|                                  Name                                   | Start-label | End-label | Allocated-labels | Free-labels |     Status     |
+=========================================================================+=============+===========+==================+=============+================+
| srlb-dynamic-asid                                                       |       30000 |     30099 |                2 |          98 | ready          |
+-------------------------------------------------------------------------+-------------+-----------+------------------+-------------+----------------+
A:admin@PE-7# info from state with-context / system mpls label-ranges static * | as table | filter fields *
+----------------------------------------------------------------+--------+-------------+-----------+------------------+-------------+----------------+
|                              Name                              | Shared | Start-label | End-label | Allocated-labels | Free-labels |     Status     |
+================================================================+========+=============+===========+==================+=============+================+
| srgb-static-nsid                                               | true   |       20000 |     20099 |                8 |          92 | ready          |
| srlb-static-asid                                               | false  |       37000 |     37099 |                2 |          98 | ready          |
+----------------------------------------------------------------+--------+-------------+-----------+------------------+-------------+----------------+

A:admin@PE-7# info from state with-context / system mpls label-ranges dynamic * | as table | filter fields *
+-------------------------------------------------------------------------+-------------+-----------+------------------+-------------+----------------+
|                                  Name                                   | Start-label | End-label | Allocated-labels | Free-labels |     Status     |
+=========================================================================+=============+===========+==================+=============+================+
| srlb-dynamic-asid                                                       |       30000 |     30099 |                0 |         100 | ready          |
+-------------------------------------------------------------------------+-------------+-----------+------------------+-------------+----------------+

On SR enabled PEs, the SR module resolves received prefixes with prefix SID sub TLVs present. As a result, MPLS data plane resources are consumed. The ILM is programmed with a swap operation and the label-to-next-hop-label-forwarding-entry (LTN) with a push operation, both pointing to the primary and/or LFA next-hop label forwarding entry (NHLFE). Also, an SR tunnel is added in the Tunnel Table Manager (TTM). As a result, an SR shortest path tunnel is set up to each other router that is part of the SR domain. Now, SR shortest path tunnels can be used for all users of TTM.

Each SR enabled PE advertises the locally allocated prefix SID. After the advertisement of prefix SIDs, the PE's MPLS data plane Ingress Label Mapping (ILM) is programmed with a pop operation.

Each SR enabled PE also advertises, for each formed adjacency over an IP interface, the locally allocated adjacency SID. From a data plane perspective, one local adjacency SID consumes one ILM entry, programming a pop operation (swap to IMPLICIT_NULL).

Because, in the chosen configuration, the SRGB is the same on all nodes, each node in the network can be reached using the same MPLS label. For example, the node SID for PE-5 has label 20005 on all nodes: a start label (first label of the SRGB (= 20000) + ipv4-label-index value on node PE-5 (= 5)). The node SID for PE-7 has label 20077 on all nodes: a start label (first label of the SRGB (= 20000) + ipv4-node-sid index value on node PE-7 (= 77). The statically allocated adjacency SIDs (label range starting with 37000) are used on PE-7, while the dynamically allocated adjacency SIDs (label range starting with 30000) are used on all other PEs.

A:admin@PE-1# show / network-instance default route-table mpls
+---------+-----------+-------------+-----------------+------------------------+----------------------+------------------+
| Label   | Operation | Type        | Next Net-Inst   | Next-hop IP (Type)     | Next-hop             | Next-hop MPLS    |
|         |           |             |                 |                        | Subinterface         | labels           |
+=========+===========+=============+=================+========================+======================+==================+
| 20001   | POP       | sr-mpls     | default         |                        |                      |                  |
| 20002   | SWAP      | sr-mpls     | N/A             | 192.168.12.2 (mpls)    | ethernet-1/1.1       | 20002            |
| 20003   | SWAP      | sr-mpls     | N/A             | 192.168.12.2 (mpls)    | ethernet-1/1.1       | 20003            |
| 20004   | SWAP      | sr-mpls     | N/A             | 192.168.12.2 (mpls)    | ethernet-1/1.1       | 20004            |
| 20005   | SWAP      | sr-mpls     | N/A             | 192.168.17.2 (mpls)    | ethernet-1/2.1       | 20005            |
| 20006   | SWAP      | sr-mpls     | N/A             | 192.168.17.2 (mpls)    | ethernet-1/2.1       | 20006            |
| 20077   | SWAP      | sr-mpls     | N/A             | 192.168.17.2 (mpls)    | ethernet-1/2.1       | 20077            |
| 30000   | SWAP      | sr-mpls     | N/A             | 192.168.12.2 (mpls)    | ethernet-1/1.1       | IMPLICIT_NULL    |
| 30001   | SWAP      | sr-mpls     | N/A             | 192.168.17.2 (mpls)    | ethernet-1/2.1       | IMPLICIT_NULL    |
+---------+-----------+-------------+-----------------+------------------------+----------------------+------------------+
A:admin@PE-1# info from state with-context / network-instance default route-table next-hop *
 | as table | filter fields type ip-address subinterface mpls-encapsulation/pushed-mpls-label-stack
+-------------------------+----------------------+--------------------+-------------------------+-------------------------+-------------------------+
|    Network-instance     |        Index         |        Type        |       Ip-address        |      Subinterface       |   Mpls-encapsulation    |
|                         |                      |                    |                         |                         | pushed-mpls-label-stack |
+=========================+======================+====================+=========================+=========================+=========================+
| ---snip---                                                                                                                                        |
| default                 |             31593955 | mpls               | 192.168.12.2            | ethernet-1/1.1          | 20002                   |
| default                 |             31593956 | mpls               | 192.168.12.2            | ethernet-1/1.1          | 20003                   |
| default                 |             31593957 | mpls               | 192.168.12.2            | ethernet-1/1.1          | 20004                   |
| default                 |             31593958 | mpls               | 192.168.17.2            | ethernet-1/2.1          | 20005                   |
| default                 |             31593959 | mpls               | 192.168.17.2            | ethernet-1/2.1          | 20006                   |
| default                 |             31593961 | mpls               | 192.168.17.2            | ethernet-1/2.1          | 20077                   |
| default                 |             31593962 | mpls               | 192.168.12.2            | ethernet-1/1.1          | IMPLICIT_NULL           |
| default                 |             31593963 | mpls               | 192.168.17.2            | ethernet-1/2.1          | IMPLICIT_NULL           |
+-------------------------+----------------------+--------------------+-------------------------+-------------------------+-------------------------+
A:admin@PE-7# show / network-instance default route-table mpls
+---------+-----------+-------------+-----------------+------------------------+----------------------+------------------+
| Label   | Operation | Type        | Next Net-Inst   | Next-hop IP (Type)     | Next-hop             | Next-hop MPLS    |
|         |           |             |                 |                        | Subinterface         | labels           |
+=========+===========+=============+=================+========================+======================+==================+
| 20001   | SWAP      | sr-mpls     | N/A             | 192.168.17.1 (mpls)    | ethernet-1/1.1       | 20001            |
| 20002   | SWAP      | sr-mpls     | N/A             | 192.168.17.1 (mpls)    | ethernet-1/1.1       | 20002            |
| 20003   | SWAP      | sr-mpls     | N/A             | 192.168.17.1 (mpls)    | ethernet-1/1.1       | 20003            |
| 20004   | SWAP      | sr-mpls     | N/A             | 192.168.67.1 (mpls)    | ethernet-1/2.1       | 20004            |
| 20005   | SWAP      | sr-mpls     | N/A             | 192.168.67.1 (mpls)    | ethernet-1/2.1       | 20005            |
| 20006   | SWAP      | sr-mpls     | N/A             | 192.168.67.1 (mpls)    | ethernet-1/2.1       | 20006            |
| 20007   | POP       | sr-mpls     | default         |                        |                      |                  |
| 20077   | POP       | sr-mpls     | default         |                        |                      |                  |
| 37001   | SWAP      | sr-mpls     | N/A             | 192.168.17.1 (mpls)    | ethernet-1/1.1       | IMPLICIT_NULL    |
| 37006   | SWAP      | sr-mpls     | N/A             | 192.168.67.1 (mpls)    | ethernet-1/2.1       | IMPLICIT_NULL    |
+---------+-----------+-------------+-----------------+------------------------+----------------------+------------------+
A:admin@PE-7# info from state with-context / network-instance default route-table next-hop *
 | as table | filter fields type ip-address subinterface mpls-encapsulation/pushed-mpls-label-stack
+-------------------------+----------------------+--------------------+-------------------------+-------------------------+-------------------------+
|    Network-instance     |        Index         |        Type        |       Ip-address        |      Subinterface       |   Mpls-encapsulation    |
|                         |                      |                    |                         |                         | pushed-mpls-label-stack |
+=========================+======================+====================+=========================+=========================+=========================+
| ---snip---                                                                                                                                        |
| default                 |             32810855 | mpls               | 192.168.17.1            | ethernet-1/1.1          | 20001                   |
| default                 |             32810856 | mpls               | 192.168.17.1            | ethernet-1/1.1          | 20002                   |
| default                 |             32810857 | mpls               | 192.168.17.1            | ethernet-1/1.1          | 20003                   |
| default                 |             32810858 | mpls               | 192.168.67.1            | ethernet-1/2.1          | 20004                   |
| default                 |             32810859 | mpls               | 192.168.67.1            | ethernet-1/2.1          | 20005                   |
| default                 |             32810860 | mpls               | 192.168.67.1            | ethernet-1/2.1          | 20006                   |
| default                 |             32810861 | mpls               | 192.168.17.1            | ethernet-1/1.1          | IMPLICIT_NULL           |
| default                 |             32810862 | mpls               | 192.168.67.1            | ethernet-1/2.1          | IMPLICIT_NULL           |
+-------------------------+----------------------+--------------------+-------------------------+-------------------------+-------------------------+

The tunnel table displays the prefix SIDs and adjacency SIDs, in order, within the SR domain. A tunnel with a label from srgb-static-nsid is used on each PE, to reach remote nodes. A tunnel with a label from srlb-dynamic-asid is used on each PE, except PE-7, to reach remote interfaces on the local network, while a tunnel with a label from srlb-static-asid is used on PE-7 to reach remote interfaces on the local network.

A:admin@PE-1# show / network-instance default tunnel-table all
-------------------------------------------------------------------------------------------------------------------------------------------------------
IPv4 tunnel table of network-instance "default"
-------------------------------------------------------------------------------------------------------------------------------------------------------
+-----------------------+----------------+----------+-----+----------+---------+--------------------------+---------------+---------------+
|      IPv4 Prefix      |  Tunnel Type   |  Tunnel  | FIB |  Metric  | Prefere |       Last Update        |   Next-hop    |   Next-hop    |
|                       |                |    ID    |     |          |   nce   |                          |    (Type)     |               |
+=======================+================+==========+=====+==========+=========+==========================+===============+===============+
| 192.0.2.2/32          | sr-isis        | 20002    | Y   | 10       | 11      | 2025-12-16T16:41:09.867Z | 192.168.12.2  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/1.1         |
| 192.0.2.3/32          | sr-isis        | 20003    | Y   | 20       | 11      | 2025-12-16T16:41:19.386Z | 192.168.12.2  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/1.1         |
| 192.0.2.4/32          | sr-isis        | 20004    | Y   | 30       | 11      | 2025-12-16T16:41:28.520Z | 192.168.12.2  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/1.1         |
| 192.0.2.5/32          | sr-isis        | 20005    | Y   | 30       | 11      | 2025-12-16T16:41:40.688Z | 192.168.17.2  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/2.1         |
| 192.0.2.6/32          | sr-isis        | 20006    | Y   | 20       | 11      | 2025-12-16T16:41:50.668Z | 192.168.17.2  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/2.1         |
| 192.0.2.7/32          | sr-isis        | 20077    | Y   | 10       | 11      | 2025-12-16T16:42:27.960Z | 192.168.17.2  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/2.1         |
| 192.168.12.2/32       | sr-isis        | 30000    | Y   | 0        | 11      | 2025-12-16T16:51:36.258Z | 192.168.12.2  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/1.1         |
| 192.168.17.2/32       | sr-isis        | 30001    | Y   | 0        | 11      | 2025-12-16T16:51:36.258Z | 192.168.17.2  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/2.1         |
+-----------------------+----------------+----------+-----+----------+---------+--------------------------+---------------+---------------+
-------------------------------------------------------------------------------------------------------------------------------------------------------
8 SR-ISIS tunnels, 8 active, 0 inactive
-------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------
IPv6 tunnel table of network-instance "default"
-------------------------------------------------------------------------------------------------------------------------------------------------------
<no_entries>
-------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------

The tunnel table on PE-1 also indicates that when traffic destined for PE-7 arrives on PE-1, PE-1 pushes the MPLS label 20077 to reach destination PE-7, via the SR IS-IS tunnel with tunnel ID 20077.

PE-1 can reach destination PE-7 (with node SID 20077) via only one SR path: via PE-7.

A:admin@PE-1# show / network-instance default tunnel-table ipv4 192.0.2.7/32 detail
-------------------------------------------------------------------------------------------------------------------------------------------------------
Show report for network instance "default" tunnel table
-------------------------------------------------------------------------------------------------------------------------------------------------------
=======================================================================================================================================================
Destination        : 192.0.2.7/32
Tunnel Type        : sr-isis
Tunnel ID          : 20077
Metric             : 10
Preference         : 11
Last Update        : 2025-12-16T16:42:27.960Z
FIB Status         : active
Next-hops
  192.168.17.2 (mpls) via [ethernet-1/2.1]
      pushed MPLS labels : [20077]
=======================================================================================================================================================
A:admin@PE-7# show / network-instance default tunnel-table all
-------------------------------------------------------------------------------------------------------------------------------------------------------
IPv4 tunnel table of network-instance "default"
-------------------------------------------------------------------------------------------------------------------------------------------------------
+-----------------------+----------------+----------+-----+----------+---------+--------------------------+---------------+---------------+
|      IPv4 Prefix      |  Tunnel Type   |  Tunnel  | FIB |  Metric  | Prefere |       Last Update        |   Next-hop    |   Next-hop    |
|                       |                |    ID    |     |          |   nce   |                          |    (Type)     |               |
+=======================+================+==========+=====+==========+=========+==========================+===============+===============+
| 192.0.2.1/32          | sr-isis        | 20001    | Y   | 10       | 11      | 2025-12-16T16:40:58.793Z | 192.168.17.1  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/1.1         |
| 192.0.2.2/32          | sr-isis        | 20002    | Y   | 20       | 11      | 2025-12-16T16:41:09.899Z | 192.168.17.1  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/1.1         |
| 192.0.2.3/32          | sr-isis        | 20003    | Y   | 30       | 11      | 2025-12-16T16:41:19.385Z | 192.168.17.1  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/1.1         |
| 192.0.2.4/32          | sr-isis        | 20004    | Y   | 30       | 11      | 2025-12-16T16:41:28.540Z | 192.168.67.1  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/2.1         |
| 192.0.2.5/32          | sr-isis        | 20005    | Y   | 20       | 11      | 2025-12-16T16:41:40.680Z | 192.168.67.1  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/2.1         |
| 192.0.2.6/32          | sr-isis        | 20006    | Y   | 10       | 11      | 2025-12-16T16:41:50.666Z | 192.168.67.1  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/2.1         |
| 192.168.17.1/32       | sr-isis        | 37001    | Y   | 0        | 11      | 2025-12-16T16:52:18.838Z | 192.168.17.1  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/1.1         |
| 192.168.67.1/32       | sr-isis        | 37006    | Y   | 0        | 11      | 2025-12-16T16:52:18.838Z | 192.168.67.1  | ethernet-     |
|                       |                |          |     |          |         |                          | (mpls)        | 1/2.1         |
+-----------------------+----------------+----------+-----+----------+---------+--------------------------+---------------+---------------+
-------------------------------------------------------------------------------------------------------------------------------------------------------
8 SR-ISIS tunnels, 8 active, 0 inactive
-------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------
IPv6 tunnel table of network-instance "default"
-------------------------------------------------------------------------------------------------------------------------------------------------------
<no_entries>
-------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------

The tunnel table on PE-7 also indicates that when traffic destined for PE-1 arrives on PE-7, PE-7 pushes the MPLS label 20001 to reach destination PE-1, via the SR IS-IS tunnel with tunnel ID 20001.

After enabling the SR context within an IS-IS instance, the IS-IS instance advertises SR support among the IS-IS adjacencies. It propagates the router-capability-sr-capability sub TLV of the router-capability TLV, which is used to indicate the index range and the start label. It also propagates the router-capability-sr-algorithm sub TLV of the router-capability TLV, which is used to indicate the algorithm used for path calculations. Only Shortest Path First (SPF) (value 0) is defined.

Verify this as follows:

A:admin@PE-1# info from state with-context / network-instance default protocols isis instance 0 level 2
    network-instance default {
        protocols {
            isis {
                instance 0 {
                    level 2 {
                        --snip---
                        link-state-database {
                            lsp 1920.0000.2001.00-00 {
                                ---snip---
                                tlvs {
                                    ---snip---
                                    tlv router-capability {
                                        router-capabilities {
                                            capability 0 {
                                                router-id 0.0.0.0
                                                subtlvs {
                                                    ---snip---
                                                    subtlv router-capability-sr-algorithm {
                                                        segment-routing-algorithms {
                                                            standard-algorithm [
                                                                spf
                                                            ]
                                                        }
                                                    }
                                                    subtlv router-capability-sr-capability {
                                                        segment-routing-capability {
                                                            flags [
                                                                ipv4-mpls
                                                                ipv6-mpls
                                                            ]
                                                            srgb-descriptors {
                                                                srgb-descriptor 100 {
                                                                    label 20000
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            lsp 1920.0000.2002.00-00 {
                                ---snip---
                            }
                            lsp 1920.0000.2003.00-00 {
                                ---snip---
                            }
                            lsp 1920.0000.2004.00-00 {
                                ---snip---
                            }
                            lsp 1920.0000.2005.00-00 {
                                ---snip---
                            }
                            lsp 1920.0000.2006.00-00 {
                                ---snip---
                            }
                            lsp 1920.0000.2007.00-00 {
                                ---snip---
                            }

A similar output occurs for each router in the SR domain.

For prefix SIDs, by default, the SRL implementation sets the node flag and the no-php flag inside the ip-reachability-prefix-sid sub TLV of the extended-ipv4-reachability TLV.

A:admin@PE-1# info from state with-context / network-instance default protocols isis instance 0 level 2
    network-instance default {
        protocols {
            isis {
                instance 0 {
                    level 2 {
                        ---snip---
                        link-state-database {
                            lsp 1920.0000.2001.00-00 {
                                ---snip---
                                tlvs {
                                    ---snip---
                                    tlv extended-ipv4-reachability {
                                        extended-ipv4-reachability {
                                            prefixes {
                                                prefix 192.0.2.1/32 {
                                                    ---snip---
                                                    subtlvs {
                                                        ---snip---
                                                        subtlv ip-reachability-prefix-sid {
                                                            prefix-sids {
                                                                prefix-sid 1 {
                                                                    algorithm 0
                                                                    flags [
                                                                        node
                                                                        no-php
                                                                    ]
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                                ---snip---

Another useful flag that can be set is the re-advertised flag. This is set when a prefix SID is propagated between levels or areas, or redistribution is in place (from another protocol).

For adjacency SIDs, by default, the SRL implementation sets the value flag in the is-reachability-adj-sid sub TLV of the extended-is-reachability TLV, meaning that the adjacency SID carries a value (as opposed to an index). Also, the local flag is set by default in the is-reachability-adj-sid sub TLV of the extended-is-reachability TLV, meaning that the adjacency SID has only local significance.

A:admin@PE-1# info from state with-context / network-instance default protocols isis instance 0 level 2
    network-instance default {
        protocols {
            isis {
                instance 0 {
                    level 2 {
                        ---snip---
                        link-state-database {
                            lsp 1920.0000.2001.00-00 {
                                ---snip---
                                tlvs {
                                    ---snip---
                                    tlv extended-is-reachability {
                                        extended-is-reachability {
                                            neighbors {
                                                neighbor 1920.0000.2002 {
                                                    instances {
                                                        instance 0 {
                                                            metric 10
                                                            subtlvs {
                                                                subtlv is-reachability-adj-sid {
                                                                    adjacency-sids {
                                                                        adjacency-sid 30000 {
                                                                            weight 0
                                                                            flags [
                                                                                value
                                                                                local
                                                                            ]
                                                                        }
                                                                    }
                                                                }
                                                                subtlv is-reachability-ipv4-interface-address {
                                                                    ipv4-interface-address {
                                                                        address [
                                                                            192.168.12.1
                                                                        ]
                                                                    }
                                                                }
                                                                subtlv is-reachability-ipv4-neighbor-address {
                                                                    ipv4-neighbor-address {
                                                                        address [
                                                                            192.168.12.2
                                                                        ]
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                                neighbor 1920.0000.2007 {
                                                    ---snip---
                                                                subtlv is-reachability-adj-sid {
                                                                    adjacency-sids {
                                                                        adjacency-sid 30001 {
                                                                            weight 0
                                                                            flags [
                                                                                value
                                                                                local
                                                                            ]
                                                                        }
                                                                    }
                                                                }
                                                                ---snip---
                                                }

Configuration of an IP VRF

In the network topology of Example topology, each router of the SR domain has a full mesh of SR shortest path tunnels to the other routers.

The objective is to configure an IP VRF between PE-1 and PE-7, using the SR shortest path tunnels or LDP LSPs as transport mechanism. Four scenarios are treated:

Configuration with SR only

Configure BGP on PE-1 and PE-7:

# on PE-1 and PE-7:
enter candidate
    network-instance default protocols {
            bgp {
                admin-state enable
                autonomous-system 64496
                router-id 192.0.2.1    # 192.0.2.7 on PE-7
                afi-safi l3vpn-ipv4-unicast {
                    admin-state enable
                }
                group grp-IP-VRF-peers {
                    admin-state enable
                    peer-as 64496
                }
                neighbor 192.0.2.7 {    # 192.0.2.1 on PE-7
                    admin-state enable
                    peer-group grp-IP-VRF-peers
                }

Configure a loopback interface on PE-1 and PE-7:

# on PE-1 and PE-7:
enter candidate
    interface lo0 {
        admin-state enable
        subinterface 0 {
            admin-state enable
            description "loopback interface in IP-VRF"
            ipv4 {
                admin-state enable
                address 10.10.1.1/32 {    # 10.10.7.1/32 on PE-7
                    primary
                }
            }
        }

Define a dedicated dynamic MPLS label range for VRFs on all PEs that belong to IP-VRF (here PE-1 and PE-7):

# on PE-1 and PE-7:
enter candidate
    system mpls label-ranges {
                dynamic dynamic-vrfs {
                    start-label 40000
                    end-label 40099
                }

Assign the MPLS label range for VRFs to the network instance's dynamic label block:

# on PE-1 and PE-7:
enter candidate
    system mpls {
            services {
                network-instance {
                    dynamic-label-block dynamic-vrfs

Configure network instance IP-VRF on PE-1 and PE-7 that makes use of the loopback interface lo0.0 and SR IS-IS tunnels as next hop:

# on PE-1 and PE-7:
enter candidate
    network-instance IP-VRF {
        type ip-vrf
        admin-state enable
        interface lo0.0 {
            interface-ref {
                interface lo0
                subinterface 0
            }
        }
        protocols {
            bgp-ipvpn {
                bgp-instance 1 {
                    admin-state enable
                    ecmp 2
                    mpls {
                        next-hop-resolution {
                            allowed-tunnel-types [
                                sr-isis
                            ]
                        }
                    }
                }
            }
            bgp-vpn {
                bgp-instance 1 { }
            }
        }

Because, in the example, there is no explicit configuration for bgp-vpn bgp-instance 1, SR Linux automatically derives the necessary parameters (with EVI = 0). These parameters can also be configured manually.

A:admin@PE-1# show / network-instance IP-VRF protocols bgp-vpn bgp-instance 1
=======================================================================================================================================================
Net Instance   : IP-VRF
    bgp Instance 1
-------------------------------------------------------------------------------------------------------------------------------------------------------
        route-distinguisher: 192.0.2.1:0, auto-derived-from-evi    # 192.0.2.7:0 on PE-7
        export-route-target: target:64496:0, auto-derived-from-evi
        import-route-target: target:64496:0, auto-derived-from-evi
=======================================================================================================================================================
A:admin@PE-1# info from state with-context / network-instance IP-VRF protocols bgp-vpn bgp-instance 1 | as table |filter fields *
+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
|  Network-  |     Id     | Oper-down- |  Export-   |  Import-   | Route-dist | Route-dist |   Route-   |   Route-   |   Route-   |   Route-   |
|  instance  |            |   reason   |   policy   |   policy   | inguisher  | inguisher  |   target   |   target   |   target   |   target   |
|            |            |            |            |            |     rd     | route-dist | export-rt  |  export-   | import-rt  |  import-   |
|            |            |            |            |            |            | inguisher- |            |   route-   |            |   route-   |
|            |            |            |            |            |            |   origin   |            |  target-   |            |  target-   |
|            |            |            |            |            |            |            |            |   origin   |            |   origin   |
+============+============+============+============+============+============+============+============+============+============+============+
| IP-VRF     |          1 |            |            |            | 192.0.2.1: | auto-      | target:644 | auto-      | target:644 | auto-      |
|            |            |            |            |            | 0          | derived-   | 96:0       | derived-   | 96:0       | derived-   |
|            |            |            |            |            |            | from-evi   |            | from-evi   |            | from-evi   |
+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+

IP-VRF uses an MPLS label from dynamic-vrfs.

A:admin@PE-1# show / network-instance default route-table mpls
+---------+-----------+-------------+-----------------+------------------------+----------------------+------------------+
| Label   | Operation | Type        | Next Net-Inst   | Next-hop IP (Type)     | Next-hop             | Next-hop MPLS    |
|         |           |             |                 |                        | Subinterface         | labels           |
+=========+===========+=============+=================+========================+======================+==================+
| ---snip---                                                                                                             |
| 40000   |           | network-    | IP-VRF          |                        |                      |                  |
|         |           | instance    |                 |                        |                      |                  |
+---------+-----------+-------------+-----------------+------------------------+----------------------+------------------+

Verify the IP connectivity in IP-VRF as follows:

# on PE-1:
ping 10.10.7.1 -4 -I 10.10.1.1 -c 5 network-instance IP-VRF

Using network instance IP-VRF
PING 10.10.7.1 (10.10.7.1) from 10.10.1.1 : 56(84) bytes of data.
64 bytes from 10.10.7.1: icmp_seq=1 ttl=64 time=87.0 ms
---snip---

--- 10.10.7.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 3.962/36.385/87.000/30.876 ms
# on PE-1:
traceroute 10.10.7.1 -n -s 10.10.1.1 network-instance IP-VRF

Using network instance IP-VRF
traceroute to 10.10.7.1 (10.10.7.1), 30 hops max, 60 byte packets
 1  10.10.7.1  89.527 ms  89.496 ms  89.483 ms

The route table in IP-VRF indicates that traffic destined for 10.10.7.1/32 (connected to PE-7) runs via the SR IS-IS tunnel to PE-7.

A:admin@PE-1# show / network-instance IP-VRF route-table all
-------------------------------------------------------------------------------------------------------------------------------------------------------
IPv4 unicast route table of network instance IP-VRF
-------------------------------------------------------------------------------------------------------------------------------------------------------
+-----------------+------+-----------+---------------------+---------+---------+--------+-----------+----------+----------+----------+----------+
|     Prefix      |  ID  |   Route   |     Route Owner     | Active  | Origin  | Metric |   Pref    | Next-hop | Next-hop |  Backup  |  Backup  |
|                 |      |   Type    |                     |         | Network |        |           |  (Type)  | Interfac | Next-hop | Next-hop |
|                 |      |           |                     |         | Instanc |        |           |          |    e     |  (Type)  | Interfac |
|                 |      |           |                     |         |    e    |        |           |          |          |          |    e     |
+=================+======+===========+=====================+=========+=========+========+===========+==========+==========+==========+==========+
| 10.10.1.1/32    | 11   | host      | net_inst_mgr        | True    | IP-VRF  | 0      | 0         | None     | None     |          |          |
| 10.10.7.1/32    | 0    | bgp-ipvpn | bgp_ipvpn_mgr       | True    | IP-VRF  | 10     | 170       | 192.0.2. |          |          |          |
|                 |      |           |                     |         |         |        |           | 7/32 (in |          |          |          |
|                 |      |           |                     |         |         |        |           | direct/s |          |          |          |
|                 |      |           |                     |         |         |        |           | r-isis)  |          |          |          |
+-----------------+------+-----------+---------------------+---------+---------+--------+-----------+----------+----------+----------+----------+
-------------------------------------------------------------------------------------------------------------------------------------------------------
IPv4 routes total                    : 2
IPv4 prefixes with active routes     : 2
IPv4 prefixes with active ECMP routes: 0
-------------------------------------------------------------------------------------------------------------------------------------------------------

The detail of the route table in IP-VRF indicates the tunnel ID.

A:admin@PE-1# show / network-instance IP-VRF route-table ipv4-unicast prefix 10.10.7.1/32 detail
-------------------------------------------------------------------------------------------------------------------------------------------------------
IPv4 unicast route table of network instance IP-VRF
-------------------------------------------------------------------------------------------------------------------------------------------------------
Destination            : 10.10.7.1/32
ID                     : 0
Route Type             : bgp-ipvpn
Route Owner            : bgp_ipvpn_mgr
Origin Network Instance: IP-VRF
Metric                 : 10
Preference             : 170
Active                 : true
Last change            : 2025-12-16T17:05:06.303Z
Resilient hash         : false
-------------------------------------------------------------------------------------------------------------------------------------------------------
Next hops: 1 entries
192.0.2.7 (indirect) resolved by tunnel to 192.0.2.7/32 (sr-isis/tunnel-id: 20077)
Backup Next hops: 0 entries
---snip---

The route in IP-VRF indicates the network instance label.

A:admin@PE-1# show / network-instance IP-VRF ipv4 route all
=======================================================================================================================================================
IPv4-unicast route table for ip-vrf network-instance: IP-VRF
-------------------------------------------------------------------------------------------------------------------------------------------------------
Flags: > (best), * (unviable), ! (failed)
     : L (leaked route from another network-instance)
     : B (backup NHG active and displayed)
     : S (statistics supported)
     : D (dynamic LB), R (resilient LB)
-------------------------------------------------------------------------------------------------------------------------------------------------------
Prefix               Route Type   Metric   Pref    Flags    Next-Hop(s)
-------------------------------------------------------------------------------------------------------------------------------------------------------
10.10.7.1/32         bgp-ipvpn    10       170     >        192.0.2.7(tunnel:sr-isis, label:40000)

Configuration with SR and LFA

Enable prefix LFA within the IS-IS context to enable LFA FRR protection. Extend the remote LFA next-hop resolution path entry to RTM so that the tunnel can be used in SPF decisions.

# on all PEs:
enter candidate
    network-instance default protocols isis instance 0 {
                    loopfree-alternate {
                        admin-state enable
                        augment-route-table true
                    }

On PE-1, next-hop LFA protection is present for node PE-4, node PE-5, and the link between PE-4 and PE-5, as follows. Similar next-hop LFA protection is present on the other PEs (for other nodes or links).

A:admin@PE-1# show / network-instance default route-table all
-------------------------------------------------------------------------------------------------------------------------------------------------------
IPv4 unicast route table of network instance default
-------------------------------------------------------------------------------------------------------------------------------------------------------
+-----------------+------+-----------+---------------------+---------+---------+--------+-----------+----------+----------+----------+----------+
|     Prefix      |  ID  |   Route   |     Route Owner     | Active  | Origin  | Metric |   Pref    | Next-hop | Next-hop |  Backup  |  Backup  |
|                 |      |   Type    |                     |         | Network |        |           |  (Type)  | Interfac | Next-hop | Next-hop |
|                 |      |           |                     |         | Instanc |        |           |          |    e     |  (Type)  | Interfac |
|                 |      |           |                     |         |    e    |        |           |          |          |          |    e     |
+=================+======+===========+=====================+=========+=========+========+===========+==========+==========+==========+==========+
| 192.0.2.1/32    | 10   | host      | net_inst_mgr        | True    | default | 0      | 0         | None     | None     |          |          |
| 192.0.2.2/32    | 0    | isis      | isis_mgr            | True    | default | 10     | 18        | 192.168. | ethernet |          |          |
|                 |      |           |                     |         |         |        |           | 12.2     | -1/1.1   |          |          |
|                 |      |           |                     |         |         |        |           | (direct) |          |          |          |
| 192.0.2.3/32    | 0    | isis      | isis_mgr            | True    | default | 20     | 18        | 192.168. | ethernet |          |          |
|                 |      |           |                     |         |         |        |           | 12.2     | -1/1.1   |          |          |
|                 |      |           |                     |         |         |        |           | (direct) |          |          |          |
| 192.0.2.4/32    | 0    | isis      | isis_mgr            | True    | default | 30     | 18        | 192.168. | ethernet | 192.168. | ethernet |
|                 |      |           |                     |         |         |        |           | 12.2     | -1/1.1   | 17.2     | -1/2.1   |
|                 |      |           |                     |         |         |        |           | (direct) |          | (direct) |          |
| 192.0.2.5/32    | 0    | isis      | isis_mgr            | True    | default | 30     | 18        | 192.168. | ethernet | 192.168. | ethernet |
|                 |      |           |                     |         |         |        |           | 17.2     | -1/2.1   | 12.2     | -1/1.1   |
|                 |      |           |                     |         |         |        |           | (direct) |          | (direct) |          |
| 192.0.2.6/32    | 0    | isis      | isis_mgr            | True    | default | 20     | 18        | 192.168. | ethernet |          |          |
|                 |      |           |                     |         |         |        |           | 17.2     | -1/2.1   |          |          |
|                 |      |           |                     |         |         |        |           | (direct) |          |          |          |
| 192.0.2.7/32    | 0    | isis      | isis_mgr            | True    | default | 10     | 18        | 192.168. | ethernet |          |          |
|                 |      |           |                     |         |         |        |           | 17.2     | -1/2.1   |          |          |
|                 |      |           |                     |         |         |        |           | (direct) |          |          |          |
| 192.168.12.0/30 | 8    | local     | net_inst_mgr        | True    | default | 0      | 0         | 192.168. | ethernet |          |          |
|                 |      |           |                     |         |         |        |           | 12.1     | -1/1.1   |          |          |
|                 |      |           |                     |         |         |        |           | (direct) |          |          |          |
| ---snip---                                                                                                                                    |
| 192.168.23.0/30 | 0    | isis      | isis_mgr            | True    | default | 20     | 18        | 192.168. | ethernet |          |          |
|                 |      |           |                     |         |         |        |           | 12.2     | -1/1.1   |          |          |
|                 |      |           |                     |         |         |        |           | (direct) |          |          |          |
| 192.168.34.0/30 | 0    | isis      | isis_mgr            | True    | default | 30     | 18        | 192.168. | ethernet |          |          |
|                 |      |           |                     |         |         |        |           | 12.2     | -1/1.1   |          |          |
|                 |      |           |                     |         |         |        |           | (direct) |          |          |          |
| 192.168.45.0/30 | 0    | isis      | isis_mgr            | True    | default | 40     | 18        | 192.168. | ethernet | 192.168. | ethernet |
|                 |      |           |                     |         |         |        |           | 12.2     | -1/1.1   | 17.2     | -1/2.1   |
|                 |      |           |                     |         |         |        |           | (direct) |          | (direct) |          |
| 192.168.56.0/30 | 0    | isis      | isis_mgr            | True    | default | 30     | 18        | 192.168. | ethernet |          |          |
|                 |      |           |                     |         |         |        |           | 17.2     | -1/2.1   |          |          |
|                 |      |           |                     |         |         |        |           | (direct) |          |          |          |
| 192.168.67.0/30 | 0    | isis      | isis_mgr            | True    | default | 20     | 18        | 192.168. | ethernet |          |          |
|                 |      |           |                     |         |         |        |           | 17.2     | -1/2.1   |          |          |
|                 |      |           |                     |         |         |        |           | (direct) |          |          |          |
+-----------------+------+-----------+---------------------+---------+---------+--------+-----------+----------+----------+----------+----------+
-------------------------------------------------------------------------------------------------------------------------------------------------------
IPv4 routes total                    : 18
IPv4 prefixes with active routes     : 18
IPv4 prefixes with active ECMP routes: 0
-------------------------------------------------------------------------------------------------------------------------------------------------------

PE-1 can reach destination PE-4 (with node SID 20004) via two different SR paths: one via PE-7 and one via PE-2. Similar for destination PE-5.

A:admin@PE-1# show / network-instance default tunnel-table ipv4 192.0.2.4/32 detail
-------------------------------------------------------------------------------------------------------------------------------------------------------
Show report for network instance "default" tunnel table
-------------------------------------------------------------------------------------------------------------------------------------------------------
=======================================================================================================================================================
Destination        : 192.0.2.4/32
Tunnel Type        : sr-isis
Tunnel ID          : 20004
Metric             : 30
Preference         : 11
Last Update        : 2025-12-16T17:16:53.330Z
FIB Status         : active
Next-hops
  192.168.12.2 (mpls) via [ethernet-1/1.1]
      pushed MPLS labels : [20004]
Backup Next-hops
192.168.17.2 (mpls) via [ethernet-1/2.1]
      pushed MPLS labels : [20004]
=======================================================================================================================================================
A:admin@PE-1# info from state with-context / network-instance default route-table next-hop *
 | as table | filter fields type ip-address subinterface mpls-encapsulation/pushed-mpls-label-stack
+-------------------------+----------------------+--------------------+-------------------------+-------------------------+-------------------------+
|    Network-instance     |        Index         |        Type        |       Ip-address        |      Subinterface       |   Mpls-encapsulation    |
|                         |                      |                    |                         |                         | pushed-mpls-label-stack |
+=========================+======================+====================+=========================+=========================+=========================+
| ---snip---                                                                                                                                        |
| default                 |             31593955 | mpls               | 192.168.12.2            | ethernet-1/1.1          | 20002                   |
| default                 |             31593956 | mpls               | 192.168.12.2            | ethernet-1/1.1          | 20003                   |
| default                 |             31593959 | mpls               | 192.168.17.2            | ethernet-1/2.1          | 20006                   |
| default                 |             31593961 | mpls               | 192.168.17.2            | ethernet-1/2.1          | 20077                   |
| default                 |             31593962 | mpls               | 192.168.12.2            | ethernet-1/1.1          | IMPLICIT_NULL           |
| default                 |             31593963 | mpls               | 192.168.17.2            | ethernet-1/2.1          | IMPLICIT_NULL           |
| ---snip---                                                                                                                                        |
| default                 |             31593969 | mpls               | 192.168.17.2            | ethernet-1/2.1          | 20004                   |
| default                 |             31593970 | mpls               | 192.168.12.2            | ethernet-1/1.1          | 20004                   |
| default                 |             31593971 | mpls               | 192.168.12.2            | ethernet-1/1.1          | 20005                   |
| default                 |             31593972 | mpls               | 192.168.17.2            | ethernet-1/2.1          | 20005                   |
+-------------------------+----------------------+--------------------+-------------------------+-------------------------+-------------------------+

When a failure occurs on the primary SR path (only applicable for prefix PE-4/PE-5 and the link between PE-4 and PE-5), the traffic takes the LFA backup SR path to the destination using the same MPLS label value.

Configuration with SR, LFA, and RLFA

To extend the LFA FRR coverage, for example, to find an LFA protection for node PE-7, which is one of the IP-VRF endpoints, RLFA can be enabled. RLFA creates a virtual LFA by using a repair tunnel to carry packets to a point in the network from where they are not looped back to the source, but forwarded (SPF-based) toward the destination prefix.

The RLFA implementation uses the PQ algorithm. The node where RLFA is configured (PE-1 in this example) computes an extended P-space and a Q-space. The intersection of both spaces contains the PQ-nodes. This PQ node is the destination node of the repair tunnel using an SR shortest path tunnel. To compute both spaces, SPF is used.

In this example, IS-IS is used as the IGP, using a default metric value of 10 for all links. With the assumption that the link between PE-1 and PE-7 is broken, the calculation of both the extended P-space and the Q-space at PE-1 is as follows:

  • extended P-space — An SPF computed from node PE-1 and rooted at PE-2. It is used to calculate the set of routers that are reachable without any path transiting the protected link between PE-1 and PE-7. The following nodes belong to the extended P-space: PE-2, PE-3, PE-4, and PE-5.

  • Q-space — A reverse SPF computed from PE-1 and rooted from PE-7 (acting as destination proxy). It is used to calculate the set of routers that can reach PE-7 without transiting the protected link between PE-1 and PE-7. The nodes PE-4, PE-5, and PE-6 belong to the Q-space.

Possible PQ-nodes are PE-4 or PE-5, because they are in the intersection of both spaces.

RLFA is configured as follows:

# on all PEs:
enter candidate
    network-instance default protocols isis instance 0 {
                    loopfree-alternate {
                        admin-state enable
                        augment-route-table true
                        remote-lfa {
                            admin-state enable
                            node-protect {
                                admin-state enable
                            }
                        }
                    }

On PE-1, the nodes PE-2, PE-3, PE-6, and PE-7 now have RLFA protection, whereas PE-4 and PE-5 have LFA protection. Similar next-hop LFA or RLFA protection is present on the other PEs (for other nodes or links).

A:admin@PE-1# info from state with-context / network-instance default route-table next-hop *
 | as table | filter fields type ip-address subinterface mpls-encapsulation/pushed-mpls-label-stack
+----------------------+----------------------+--------------------+----------------------+----------------------+----------------------+
|   Network-instance   |        Index         |        Type        |      Ip-address      |     Subinterface     |  Mpls-encapsulation  |
|                      |                      |                    |                      |                      |  pushed-mpls-label-  |
|                      |                      |                    |                      |                      |        stack         |
+======================+======================+====================+======================+======================+======================+
| ---snip---                                                                                                                            |
| default              |             31593969 | mpls               | 192.168.17.2         | ethernet-1/2.1       | 20004                |
| default              |             31593970 | mpls               | 192.168.12.2         | ethernet-1/1.1       | 20004                |
| default              |             31593971 | mpls               | 192.168.12.2         | ethernet-1/1.1       | 20005                |
| default              |             31593972 | mpls               | 192.168.17.2         | ethernet-1/2.1       | 20005                |
| ---snip---                                                                                                                            |
| default              |             31593973 | mpls               | 192.168.17.2         | ethernet-1/2.1       | 20002 20005          |
| default              |             31593974 | mpls               | 192.168.12.2         | ethernet-1/1.1       | 20002                |
| default              |             31593975 | mpls               | 192.168.17.2         | ethernet-1/2.1       | 20003 20005          |
| default              |             31593976 | mpls               | 192.168.12.2         | ethernet-1/1.1       | 20003                |
| default              |             31593977 | mpls               | 192.168.12.2         | ethernet-1/1.1       | 20006 20004          |
| default              |             31593978 | mpls               | 192.168.17.2         | ethernet-1/2.1       | 20006                |
| default              |             31593979 | mpls               | 192.168.12.2         | ethernet-1/1.1       | 20077 20004          |
| default              |             31593980 | mpls               | 192.168.17.2         | ethernet-1/2.1       | 20077                |
| default              |             31593981 | mpls               | 192.168.12.2         | ethernet-1/1.1       | IMPLICIT_NULL        |
| default              |             31593982 | mpls               | 192.168.17.2         | ethernet-1/2.1       | IMPLICIT_NULL        |
+----------------------+----------------------+--------------------+----------------------+----------------------+----------------------+

PE-1 can reach destination PE-7 (with node SID 20077) via two different SR paths: one via PE-7 and one via PE-2, which excludes the link between PE-1 and PE-7. Similar for destination PE-6. PE-1 can reach destination PE-2 (with node SID 20002) via two different SR paths: one via PE-2 and one via PE-7, which excludes the link between PE-1 and PE-2. Similar for destination PE-3.

A:admin@PE-1# show / network-instance default tunnel-table ipv4 192.0.2.7/32 detail
-------------------------------------------------------------------------------------------------------------------------------------------------------
Show report for network instance "default" tunnel table
-------------------------------------------------------------------------------------------------------------------------------------------------------
=======================================================================================================================================================
Destination        : 192.0.2.7/32
Tunnel Type        : sr-isis
Tunnel ID          : 20077
Metric             : 10
Preference         : 11
Last Update        : 2025-12-16T17:25:28.218Z
FIB Status         : active
Next-hops
  192.168.17.2 (mpls) via [ethernet-1/2.1]
      pushed MPLS labels : [20077]
Backup Next-hops
192.168.12.2 (mpls) via [ethernet-1/1.1]
      pushed MPLS labels : [20077, 20004]
=======================================================================================================================================================

The main difference between normal prefix LFA and RLFA is that for RLFA a two-MPLS label stack is pushed by the head-end node (PE-1). The top label is the SR-label to reach the PQ node (for example, 20004 for the PQ node PE-4) and the bottom label is the SR-label to reach the destination node (for example, 20077 for destination node PE-7). The notation inside the show command output is [ bottom-label, top-label. ].

RLFA traffic path during protection illustrates the RLFA traffic path protecting the link between PE-1 and PE-7 for traffic from PE-1 to PE-7:

Figure 2. RLFA traffic path during protection

Configuration with SR and LDP, without LFA and RLFA

To show the impact of protocol preference within TTM, configure LDP on PE-1 and PE-7, next to SR. This can be useful in case of migration scenarios from a non-SR environment toward a hybrid environment having LDP and SR enabled.

In the following, disable LFA and RLFA (to simplify the scenario):

# on all PEs:
enter candidate
    network-instance default protocols {
            isis {
                instance 0 {
                    loopfree-alternate {
                        remote-lfa {
                            admin-state disable
                            node-protect {
                                admin-state disable
                            }
                        }
                        admin-state disable
                        augment-route-table false
                    }

Define a dedicated dynamic MPLS label range for LDP on all PEs:

# on all PEs:
enter candidate
    system mpls label-ranges {
                dynamic dynamic-ldp {
                    start-label 10000
                    end-label 10099
                }

Assign the MPLS label range for LDP to the LDP dynamic label block and configure LDP discovery of interfaces on all PEs.

# on all PEs:
enter candidate
    network-instance default protocols {
            ldp {
                admin-state enable
                dynamic-label-block dynamic-ldp
                discovery {
                    interfaces {
                        interface ethernet-1/1.1 {
                            ipv4 {
                                admin-state enable
                            }
                        }
                        interface ethernet-1/2.1 {
                            ipv4 {
                                admin-state enable
                            }
                        }
                    }
                }

By enabling LDP, the MPLS label mapping includes entries for LDP, with labels from dynamic-ldp.

A:admin@PE-1# show / network-instance default route-table mpls
+---------+-----------+-------------+-----------------+------------------------+----------------------+------------------+
| Label   | Operation | Type        | Next Net-Inst   | Next-hop IP (Type)     | Next-hop             | Next-hop MPLS    |
|         |           |             |                 |                        | Subinterface         | labels           |
+=========+===========+=============+=================+========================+======================+==================+
| 10000   | POP       | ldp         | default         |                        |                      |                  |
| 10001   | SWAP      | ldp         | N/A             | 192.168.12.2 (mpls)    | ethernet-1/1.1       | 10000            |
| 10002   | SWAP      | ldp         | N/A             | 192.168.12.2 (mpls)    | ethernet-1/1.1       | 10002            |
| 10003   | SWAP      | ldp         | N/A             | 192.168.12.2 (mpls)    | ethernet-1/1.1       | 10003            |
| 10004   | SWAP      | ldp         | N/A             | 192.168.17.2 (mpls)    | ethernet-1/2.1       | 10004            |
| 10005   | SWAP      | ldp         | N/A             | 192.168.17.2 (mpls)    | ethernet-1/2.1       | 10000            |
| 10006   | SWAP      | ldp         | N/A             | 192.168.17.2 (mpls)    | ethernet-1/2.1       | 10001            |
| 20001   | POP       | sr-mpls     | default         |                        |                      |                  |
| 20002   | SWAP      | sr-mpls     | N/A             | 192.168.12.2 (mpls)    | ethernet-1/1.1       | 20002            |
| 20003   | SWAP      | sr-mpls     | N/A             | 192.168.12.2 (mpls)    | ethernet-1/1.1       | 20003            |
| 20004   | SWAP      | sr-mpls     | N/A             | 192.168.12.2 (mpls)    | ethernet-1/1.1       | 20004            |
| 20005   | SWAP      | sr-mpls     | N/A             | 192.168.17.2 (mpls)    | ethernet-1/2.1       | 20005            |
| 20006   | SWAP      | sr-mpls     | N/A             | 192.168.17.2 (mpls)    | ethernet-1/2.1       | 20006            |
| 20077   | SWAP      | sr-mpls     | N/A             | 192.168.17.2 (mpls)    | ethernet-1/2.1       | 20077            |
| 30000   | SWAP      | sr-mpls     | N/A             | 192.168.12.2 (mpls)    | ethernet-1/1.1       | IMPLICIT_NULL    |
| 30001   | SWAP      | sr-mpls     | N/A             | 192.168.17.2 (mpls)    | ethernet-1/2.1       | IMPLICIT_NULL    |
| 40000   |           | network-    | IP-VRF          |                        |                      |                  |
|         |           | instance    |                 |                        |                      |                  |
+---------+-----------+-------------+-----------------+------------------------+----------------------+------------------+

Also the TTM changes. With IP-VRF between PE-1 and PE-7 as an example, only those two specific network instance endpoints are displayed.

An LDP LSP and an SR shortest path tunnel (using IS-IS) are present and active for the same destination.

A:admin@PE-1# show / network-instance default tunnel-table ipv4 192.0.2.7/32
-------------------------------------------------------------------------------------------------------------------------------------------------------
IPv4 tunnel table of network-instance "default"
-------------------------------------------------------------------------------------------------------------------------------------------------------
+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+
| IPv4 Prefix  | Tunnel Type  |  Tunnel ID   |     FIB      |    Metric    |  Preference  | Last Update  |    Backup    |   Next-hop   |   Next-hop   |
|              |              |              |              |              |              |              |   Nexthops   |    (Type)    |              |
+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+
| 192.0.2.7/32 | ldp          | 65540        | Y            | 10           | 9            | 2025-12-     |              | 192.168.17.2 | ethernet-    |
|              |              |              |              |              |              | 16T17:41:02. |              | (mpls)       | 1/2.1        |
|              |              |              |              |              |              | 260Z         |              |              |              |
| 192.0.2.7/32 | sr-isis      | 20077        | Y            | 10           | 11           | 2025-12-     |              | 192.168.17.2 | ethernet-    |
|              |              |              |              |              |              | 16T17:33:28. |              | (mpls)       | 1/2.1        |
|              |              |              |              |              |              | 195Z         |              |              |              |
+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+
-------------------------------------------------------------------------------------------------------------------------------------------------------
1 LDP tunnels, 1 active, 0 inactive
1 SR-ISIS tunnels, 1 active, 0 inactive
-------------------------------------------------------------------------------------------------------------------------------------------------------
A:admin@PE-7# show / network-instance default tunnel-table ipv4 192.0.2.1/32
-------------------------------------------------------------------------------------------------------------------------------------------------------
IPv4 tunnel table of network-instance "default"
-------------------------------------------------------------------------------------------------------------------------------------------------------
+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+
| IPv4 Prefix  | Tunnel Type  |  Tunnel ID   |     FIB      |    Metric    |  Preference  | Last Update  |    Backup    |   Next-hop   |   Next-hop   |
|              |              |              |              |              |              |              |   Nexthops   |    (Type)    |              |
+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+
| 192.0.2.1/32 | ldp          | 65540        | Y            | 10           | 9            | 2025-12-     |              | 192.168.17.1 | ethernet-    |
|              |              |              |              |              |              | 16T17:41:02. |              | (mpls)       | 1/1.1        |
|              |              |              |              |              |              | 659Z         |              |              |              |
| 192.0.2.1/32 | sr-isis      | 20001        | Y            | 10           | 11           | 2025-12-     |              | 192.168.17.1 | ethernet-    |
|              |              |              |              |              |              | 16T17:33:36. |              | (mpls)       | 1/1.1        |
|              |              |              |              |              |              | 602Z         |              |              |              |
+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+
-------------------------------------------------------------------------------------------------------------------------------------------------------
1 LDP tunnels, 1 active, 0 inactive
1 SR-ISIS tunnels, 1 active, 0 inactive
-------------------------------------------------------------------------------------------------------------------------------------------------------

The LDP LSP is preferred by default (lower preference value), but as long as the allowed-tunnel-types does not include ldp, it is not chosen.

A:admin@PE-1# show / network-instance IP-VRF route-table ipv4-unicast prefix 10.10.7.1/32 detail
-------------------------------------------------------------------------------------------------------------------------------------------------------
IPv4 unicast route table of network instance IP-VRF
-------------------------------------------------------------------------------------------------------------------------------------------------------
Destination            : 10.10.7.1/32
ID                     : 0
Route Type             : bgp-ipvpn
Route Owner            : bgp_ipvpn_mgr
Origin Network Instance: IP-VRF
Metric                 : 10
Preference             : 170
Active                 : true
Last change            : 2025-12-16T17:05:06.303Z
Resilient hash         : false
-------------------------------------------------------------------------------------------------------------------------------------------------------
Next hops: 1 entries
192.0.2.7 (indirect) resolved by tunnel to 192.0.2.7/32 (sr-isis/tunnel-id: 20077)
Backup Next hops: 0 entries
---snip---
A:admin@PE-1# show / network-instance IP-VRF ipv4 route all
=======================================================================================================================================================
IPv4-unicast route table for ip-vrf network-instance: IP-VRF
-------------------------------------------------------------------------------------------------------------------------------------------------------
---snip---
-------------------------------------------------------------------------------------------------------------------------------------------------------
Prefix               Route Type   Metric   Pref    Flags    Next-Hop(s)
-------------------------------------------------------------------------------------------------------------------------------------------------------
10.10.7.1/32         bgp-ipvpn    10       170     >        192.0.2.7(tunnel:sr-isis, label:40000)
A:admin@PE-7# show / network-instance IP-VRF route-table ipv4-unicast prefix 10.10.1.1/32 detail
-------------------------------------------------------------------------------------------------------------------------------------------------------
IPv4 unicast route table of network instance IP-VRF
-------------------------------------------------------------------------------------------------------------------------------------------------------
Destination            : 10.10.1.1/32
ID                     : 0
Route Type             : bgp-ipvpn
Route Owner            : bgp_ipvpn_mgr
Origin Network Instance: IP-VRF
Metric                 : 10
Preference             : 170
Active                 : true
Last change            : 2025-12-16T17:05:07.395Z
Resilient hash         : false
-------------------------------------------------------------------------------------------------------------------------------------------------------
Next hops: 1 entries
192.0.2.1 (indirect) resolved by tunnel to 192.0.2.1/32 (sr-isis/tunnel-id: 20001)
Backup Next hops: 0 entries
---snip---
A:admin@PE-7# show / network-instance IP-VRF ipv4 route all
=======================================================================================================================================================
IPv4-unicast route table for ip-vrf network-instance: IP-VRF
-------------------------------------------------------------------------------------------------------------------------------------------------------
---snip---
-------------------------------------------------------------------------------------------------------------------------------------------------------
Prefix               Route Type   Metric   Pref    Flags    Next-Hop(s)
-------------------------------------------------------------------------------------------------------------------------------------------------------
10.10.1.1/32         bgp-ipvpn    10       170     >        192.0.2.1(tunnel:sr-isis, label:40000)

The LDP LSP is chosen, when allowed-tunnel-types also includes ldp. Because this is an IP VRF specific parameter, the operator has the choice to only configure this on one specific IP VRF endpoint. From a migration point of view, a smooth and easy SR migration is possible, not affecting any other deployed network instances on this node.

# only on PE-7:
enter candidate
    network-instance IP-VRF protocols bgp-ipvpn bgp-instance 1 mpls {
                        next-hop-resolution {
                            allowed-tunnel-types [
                                sr-isis
                                ldp
                            ]

Because the change is only configured within IP-VRF on PE-7, only the direction from PE-7 to PE-1 is affected. IP-VRF on node PE-7 now uses the LDP LSP to reach node PE-1. IP-VRF on node PE-1 still uses the SR IS-IS tunnel to reach node PE-7.

A:admin@PE-7# show / network-instance IP-VRF route-table ipv4-unicast prefix 10.10.1.1/32 detail
-------------------------------------------------------------------------------------------------------------------------------------------------------
IPv4 unicast route table of network instance IP-VRF
-------------------------------------------------------------------------------------------------------------------------------------------------------
Destination            : 10.10.1.1/32
ID                     : 0
Route Type             : bgp-ipvpn
Route Owner            : bgp_ipvpn_mgr
Origin Network Instance: IP-VRF
Metric                 : 10
Preference             : 170
Active                 : true
Last change            : 2025-12-16T18:01:06.327Z
Resilient hash         : false
-------------------------------------------------------------------------------------------------------------------------------------------------------
Next hops: 1 entries
192.0.2.1 (indirect) resolved by tunnel to 192.0.2.1/32 (ldp/tunnel-id: 65540)
Backup Next hops: 0 entries
A:admin@PE-7# show / network-instance IP-VRF ipv4 route all
=======================================================================================================================================================
IPv4-unicast route table for ip-vrf network-instance: IP-VRF
-------------------------------------------------------------------------------------------------------------------------------------------------------
---snip---
-------------------------------------------------------------------------------------------------------------------------------------------------------
Prefix               Route Type   Metric   Pref    Flags    Next-Hop(s)
-------------------------------------------------------------------------------------------------------------------------------------------------------
10.10.1.1/32         bgp-ipvpn    10       170     >        192.0.2.1(tunnel:ldp, label:40000)

Conclusion

SR is a technique using extensions of the existing link state protocols, and using existing MPLS or IPv6 infrastructure as the data plane. It is a source routing technique without the need to run an extra signaling protocol. SR also avoids other scaling restrictions, such as midpoint state. SR is simple to control and operate because the intelligence and state are part of the packet, not held by the network. Other benefits are that SR can be introduced in an incremental way using different migration scenarios to assure a smooth transition.