ISIS Segment Routing IPv6

Segment routing for IPv6 (SRv6) is used by the IGP protocols to interconnect network devices. This chapter explains how to configure SRv6 in IS-IS protocol, by using an IPv6 dataplane. Also, SRv6 static routes are used to illustrate how to steer traffic thanks to the learned SIDs.

IS-IS SRv6 basic configuration

The below configuration shows how to enable SRv6 service on the IS-IS instance of the main VRF. The :rfc:9252 leverages the ability for the IS-IS protocol to receive incoming SRv6 traffic for forwarding or for local processing.

ISIS SRv6 locator configuration

The below configuration adds a loc1 locator to the 1 IS-IS instance.

vsr running config# vrf main
vsr running vrf main# routing segment-routing ipv6
vsr running ipv6# locator loc1 prefix 2001:db8:1::/48 block-len 24
vsr running ipv6# .. .. interface loop1
vsr running interface loop1# isis area-tag 1
vsr running interface loop1# isis ipv6-routing true
vsr running interface loop1# .. interface eth3
vsr running interface eth3# isis area-tag 1
vsr running interface eth3# isis ipv6-routing true
vsr running interface eth3# .. isis instance 1
vsr running isis# area-address 49.0002.0000.1979.00
vsr running isis# is-type level-1
vsr running isis# segment-routing ipv6
vsr running ipv6#! locator loc1
vsr running ipv6# /  vrf main interface physical eth3
vsr running physical eth3#! ipv6 address fd00:125::1/64
vsr running physical eth3#! port pci-b0s6
vsr running physical eth3# .. ..
vsr running vrf main# interface loopback loop1
vsr running loopback loop1# ipv6 address 1:1::1:1/128
vsr running loopback loop1# ipv4 address 1.1.1.1/32
vsr running loopback loop1#

The locator chunk is distributed by the IS-IS packets to inform the IPv6 reachability of the 2001:db8:1::/48 sub-network.

IS-IS will pick up SIDs values from that chunk, to provision its global SID. That value will be transmitted along with the router capabilities to signify that the IS-IS instance supports the End behavior associated with that SID. The below show command displays the End SID value chosen by the vsr device:

vsr> show isis database detail
Area 1:
IS-IS Level-1 link-state database:
LSP ID                  PduLen  SeqNumber   Chksum  Holdtime  ATT/P/OL
vsr.00-00            *    158   0x00000003  0x1fe5    1129    0/0/0
  Protocols Supported: IPv6
  Area Address: 49
  Hostname: vsr
  TE Router ID: 1.1.1.1
  Router Capability: 1.1.1.1 , D:0, S:0
    SRv6: O:0
  IPv6 Reachability: 2001:db8:1::/48 (Metric: 0)
  IPv6 Reachability: 1:1::1:1/128 (Metric: 10)
    Subtlvs:
  SRv6 Locator: 2001:db8:1::/48 (Metric: 0) ipv4-unicast
    Sub-TLVs:
      SRv6 End SID Endpoint Behavior: End, SID value: 2001:db8:1::
        Sub-Sub-TLVs:
          SRv6 SID Structure Locator Block length: 24, Locator Node length: 24, Function length: 16, Argument length: 0,

    1 LSPs

Other SIDs values are allocated from from that chunk and associated to the End.X behavior.

The following output displays the segment routing nodes, along with the defined MSDs capabilities for SRv6.

vsr> show isis segment-routing ipv6
Area 1:
 IS-IS L1 SRv6-Nodes:

 System ID       Algorithm  SRH Max SL  SRH Max End Pop  SRH Max H.encaps  SRH Max End D
 -----------------------------------------------------------------------------------------
 0002.0000.1979  S-SPF      3           3                2                 5
 0002.0000.1974  S-SPF      3           3                2                 5

Note

Virtual Service Router default MSD values for SRv6 are not configurable, and have no impact on the dataplane behaviour.

Handling SRv6 traffic for forwarding

As for MPLS networks, an SRv6 device may act as an LSR device. For SRv6, this implies that the SRH of IPv6 packets is modified to process the SID in the proposed segment list.

An incoming packet is received, the srh is modified and the packet’s destination address is changed to reflect the new SID referenced in the srh. The packet is then forwarded to the next address.

In order to handle incoming SRv6 traffic for forwarding, the same configuration as before can be used. The show command below displays the routing entry that SRv6 packets with a SRH that has sid 2001:db8:1:: selected, follow.

vsr> show ipv6 route protocol isis
Codes: K - kernel route, C - connected, S - static, R - RIPng,
       O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table,
       A - Babel, D - SHARP, F - PBR, f - OpenFabric,
       t - Table-Direct,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

I>* 2001:db8:1::/128 [115/0] is directly connected, sr0, seg6local End USP, weight 1, 00:06:20

Note

That route uses a local sr0 interface, which is automatically created for hosting seg6local routes.

Handling SRv6 traffic for local processing

As for MPLS networks, an SRv6 device may act as an LER device. For SRv6, this implies that the SRH of IPv6 packets is popped to process the inner packet.

In order to handle incoming SRv6 traffic for local processing, the destination address SID value must be configured on a local interface. Also, the accept-segment-routing flag must be enabled on the interface where SRv6 traffic is received.

vsr running config# vrf main interface loopback loop2
vsr running loopback loop1# ipv6 address 2001:db8:1::/48
vsr running loopback loop1# .. ..
vsr running vrf main# interface physical eth3
vsr running physical eth3# network-stack
vsr running network-stack# ipv6
vsr running ipv6# accept-segment-routing true
vsr running ipv6#

Segment routing setup example

The below topology will be used to illustrate segment routing setup made up of 4 devices, and where traffic entering the core network on rt1 will be appended by an SRH header, which will have the respective End SIDs of rt2, rt3 and rt4. The setup focuses on sending only one-way SRv6 traffic: rt1 will handle the SRv6 packets emission, while rt4 will handle the local reception of SRv6 traffic.

../../../../_images/segment_routing_ipv6_basic_setup.svg

Usage of srv6 traffic with ISIS

The RFC 9252 does only define the handling of incoming SRv6 traffic, and does not explain how and when to forge SRv6 traffic. IS-IS follows the recommendations, and this is the reason why, contrary to SR with MPLS, IS-IS does not natively encapsulate IPv6 traffic with SRHs. To benefit from this support, a specific static route that uses the SRv6 headers must be used, and is highlighted in the below rt1 configuration.

rt1

rt1 running config# vrf main
rt1 running vrf main# interface
rt1 running interface# physical eth1
rt1 running physical eth1#! port pci-b0s4
rt1 running physical eth1# ipv6 address fd00:100::1/64
rt1 running physical eth1# .. physical eth3
rt1 running physical eth3#! port pci-b0s6
rt1 running physical eth3# ipv6 address fd00:125::1/64
rt1 running physical eth3# .. loopback loop1
rt1 running loopback loop1# ipv6 address 1:1::1:1/128
rt1 running loopback loop1# ipv4 address 1.1.1.1/32
rt1 running physical eth3# .. loopback loop2
rt1 running loopback loop1# ipv6 address 2001:db8:1::/48
rt1 running loopback loop1# .. ..
rt1 running vrf main# routing static
rt1 running static# ipv6-route fd00:200::/64
rt1 running ipv6-route fd00:200::/64#! next-hop eth3 ipv6-sid 2001:db8:4:: ipv6-sid 2001:db8:3:: ipv6-sid 2001:db8:2::
rt1 running ipv6-route fd00:200::/64# .. ..
rt1 running routing# interface loop1
rt1 running interface loop1# isis
rt1 running isis#! area-tag 1
rt1 running isis#! ipv6-routing true
rt1 running isis#! hello interval level-1 1
rt1 running isis#! hello multiplier level-1 3
rt1 running isis#! .. ..
rt1 running routing#! interface eth3
rt1 running interface eth3#! isis
rt1 running isis#! area-tag 1
rt1 running isis#! ipv6-routing true
rt1 running isis#! hello interval level-1 1
rt1 running isis#! hello multiplier level-1 3
rt1 running isis#! .. ..
rt1 running routing#! isis instance 1
rt1 running instance 1# is-type level-1
rt1 running instance 1# area-address 49.0000.0007.e901.1111.00
rt1 running instance 1# redistribute ipv6 connected level-1
rt1 running ipv6 connected level-1# .. ..
rt1 running instance 1# multi-topology ipv6-unicast
rt1 running ipv6-unicast# .. ..
rt1 running instance 1# segment-routing ipv6
rt1 running ipv6#! locator loc1
rt1 running ipv6# / vrf main routing segment-routing ipv6
rt1 running ipv6# locator loc1
rt1 running locator loc1#! prefix 2001:db8:1::/48
rt1 running locator loc1# block-length 24
rt1 running locator loc1#

The rt2 and rt3 configurations below do not require local SRv6 traffic management, and do not require the locator address to be configured on a loopback interface.

rt2

rt2 running config# vrf main
rt2 running vrf main# interface physical eth1
rt2 running physical eth1#! port pci-b0s4
rt2 running physical eth1# ipv6 address fd00:125::2/64
rt2 running physical eth1# .. physical eth2
rt2 running physical eth2#! port pci-b0s5
rt2 running physical eth2# ipv6 address fd00:126::2/64
rt2 running physical eth2# .. loopback loop1
rt2 running loopback loop1# ipv6 address 2:2::2:2/128
rt2 running loopback loop1# ipv4 address 2.2.2.2/32
rt2 running loopback loop1# .. .. routing
rt2 running routing# interface loop1
rt2 running interface loop1# isis
rt2 running isis#! area-tag 1
rt2 running isis#! ipv6-routing true
rt2 running isis#! hello interval level-1 1
rt2 running isis#! hello multiplier level-1 3
rt2 running isis#! .. .. interface eth1
rt2 running interface eth1#! isis
rt2 running isis#! area-tag 1
rt2 running isis#! ipv6-routing true
rt2 running isis#! hello interval level-1 1
rt2 running isis#! hello multiplier level-1 3
rt2 running isis#! .. .. interface eth2
rt2 running interface eth3#! isis
rt2 running isis#! area-tag 1
rt2 running isis#! ipv6-routing true
rt2 running isis#! hello interval level-1 1
rt2 running isis#! hello multiplier level-1 3
rt2 running isis#! .. ..
rt2 running routing#! isis instance 1
rt2 running instance 1# is-type level-1
rt2 running instance 1# area-address 49.0000.0007.e901.2222.00
rt2 running instance 1# redistribute ipv6 connected level-1
rt2 running ipv6 connected level-1# .. ..
rt2 running instance 1# multi-topology ipv6-unicast
rt2 running ipv6-unicast# .. ..
rt2 running instance 1# segment-routing ipv6
rt2 running ipv6#! locator loc1
rt2 running ipv6# / vrf main routing segment-routing ipv6
rt2 running ipv6# locator loc1
rt2 running locator loc1#! prefix 2001:db8:2::/48
rt2 running locator loc1# block-length 24
rt2 running locator loc1#

rt3

rt3 running config# vrf main
rt3 running vrf main# interface physical eth2
rt3 running physical eth2#! port pci-b0s5
rt3 running physical eth2# ipv6 address fd00:126::3/64
rt3 running physical eth2# .. physical eth3
rt3 running physical eth3#! port pci-b0s6
rt3 running physical eth3# ipv6 address fd00:127::3/64
rt3 running physical eth3# .. loopback loop1
rt3 running loopback loop1# ipv6 address 3:3::3:3/128
rt3 running loopback loop1# ipv4 address 3.3.3.3/32
rt3 running loopback loop1# .. .. routing
rt3 running routing# interface loop1
rt3 running interface loop1# isis
rt3 running isis#! area-tag 1
rt3 running isis#! ipv6-routing true
rt3 running isis#! hello interval level-1 1
rt3 running isis#! hello multiplier level-1 3
rt3 running isis#! .. .. interface eth2
rt3 running interface eth2#! isis
rt3 running isis#! area-tag 1
rt3 running isis#! ipv6-routing true
rt3 running isis#! hello interval level-1 1
rt3 running isis#! hello multiplier level-1 3
rt3 running isis#! .. .. interface eth3
rt3 running interface eth3#! isis
rt3 running isis#! area-tag 1
rt3 running isis#! ipv6-routing true
rt3 running isis#! hello interval level-1 1
rt3 running isis#! hello multiplier level-1 3
rt3 running isis#! .. ..
rt3 running routing#! isis instance 1
rt3 running instance 1# is-type level-1
rt3 running instance 1# area-address 49.0000.0007.e901.3333.00
rt3 running instance 1# redistribute ipv6 connected level-1
rt3 running ipv6 connected level-1# .. ..
rt3 running instance 1# multi-topology ipv6-unicast
rt3 running ipv6-unicast# .. ..
rt3 running instance 1# segment-routing ipv6
rt3 running ipv6#! locator loc1
rt3 running ipv6# / vrf main routing segment-routing ipv6
rt3 running ipv6# locator loc1
rt3 running locator loc1#! prefix 2001:db8:3::/48
rt3 running locator loc1# block-length 24
rt3 running locator loc1#

rt4

The rt4 configuration below must handle local reception of SRv6 traffic, and so the IP address corresponding to the End SID of rt4 should be configured on a loopback interface. In addition, the accept-segment-routing flag must be set on the eth2 interface facing the IGP topology.

rt4 running config# vrf main
rt4 running vrf main# interface physical eth1
rt4 running physical eth1#! port pci-b0s4
rt4 running physical eth1# ipv6 address fd00:200::4/64
rt4 running physical eth1# .. physical eth2
rt4 running physical eth2#! port pci-b0s5
rt4 running physical eth2# ipv6 address fd00:127::4/64
rt4 running physical eth2# network-stack
rt4 running network-stack# ipv6
rt4 running ipv6# accept-segment-routing true
rt4 running ipv6# .. ..
rt4 running physical eth2# .. loopback loop1
rt4 running loopback loop1# ipv6 address 4:4::4:4/128
rt4 running loopback loop1# ipv4 address 4.4.4.4/32
rt4 running loopback loop1# .. loopback loop2
rt4 running loopback loop2# ipv6 address 2001:db8:4::/48
rt4 running loopback loop2# .. .. routing
rt4 running routing# interface loop1
rt4 running interface loop1# isis
rt4 running isis#! area-tag 1
rt4 running isis#! ipv6-routing true
rt4 running isis#! hello interval level-1 1
rt4 running isis#! hello multiplier level-1 3
rt4 running isis#! .. .. interface eth2
rt4 running interface eth2#! isis
rt4 running isis#! area-tag 1
rt4 running isis#! ipv6-routing true
rt4 running isis#! hello interval level-1 1
rt4 running isis#! hello multiplier level-1 3
rt4 running isis#! .. ..
rt4 running routing#! isis instance 1
rt4 running instance 1# is-type level-1
rt4 running instance 1# area-address 49.0000.0007.e901.4444.00
rt4 running instance 1# multi-topology ipv6-unicast
rt4 running ipv6-unicast# .. ..
rt4 running instance 1# segment-routing ipv6
rt4 running ipv6#! locator loc1
rt4 running ipv6# / vrf main routing segment-routing ipv6
rt4 running ipv6# locator loc1
rt4 running locator loc1#! prefix 2001:db8:4::/48
rt4 running locator loc1# block-length 24
rt4 running locator loc1#

With the above configurations, on rt1, traffic coming from the subnet fd00:100::/64 and going to the subnet fd00:200::/64 is encapsulated with a SRH header thanks to the static routing command. This SRv6 traffic is forwarded to each node participating in the IGP network. Then, on rt4, the SRH header of the SRv6 will be removed, and the original traffic is decapsulated and sent to the fd00:200::/64 subnet.

The below command dumps the devices that participate in the SRv6 topology:

rt4

rt1> show isis segment-routing srv6
Area 1:
 IS-IS L1 SRv6-Nodes:

 System ID       Algorithm  SRH Max SL  SRH Max End Pop  SRH Max H.encaps  SRH Max End D
 -----------------------------------------------------------------------------------------
 0007.e901.1111  S-SPF      3           3                2                 5
 0007.e901.2222  SPF        3           3                2                 5
 0007.e901.3333  SPF        3           3                2                 5
 0007.e901.4444  SPF        3           3                2                 5

The show command below on rt1 displays the static IPv6 route that forges the new SRH header for traffic entering the IGP topology. The SID values retrieved are obtained from the locator chunks configured on each device. Address 2001:db8:2:: is the first SID of the SRH. The address can be routed using IS-IS. Subsequently, the forged SRv6 packet can be sent.

rt1

rt1> show ipv6-routes protocol static
Codes: K - kernel route, C - connected, S - static, R - RIPng,
       O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table,
       A - Babel, D - SHARP, F - PBR, f - OpenFabric,
       t - Table-Direct,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

S>* fd00:200::/64 [1/0] is directly connected, eth3, seg6 2001:db8:4::,2001:db8:3::,2001:db8:2::, weight 1, 00:30:42

The below show command on rt4 dumps the isis routes that handle the incoming SRv6 traffic.

rt4

rt4> show ipv6-routes protocol isis
Codes: K - kernel route, C - connected, S - static, R - RIPng,
       O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table,
       A - Babel, D - SHARP, F - PBR, f - OpenFabric,
       t - Table-Direct,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

I>* 1:1::1:1/128 [115/30] via fe80::dced:3ff:fe06:ff28, eth2, weight 1, 00:17:01
I>* 2:2::2:2/128 [115/20] via fe80::dced:3ff:fe06:ff28, eth2, weight 1, 00:17:01
I>* 3:3::3:3/128 [115/10] via fe80::dced:3ff:fe06:ff28, eth2, weight 1, 00:17:01
I>* 2001:db8:1::/48 [115/30] via fe80::dced:3ff:fe06:ff28, eth2, weight 1, 00:17:01
I>* 2001:db8:2::/48 [115/20] via fe80::dced:3ff:fe06:ff28, eth2, weight 1, 00:17:01
I>* 2001:db8:3::/48 [115/10] via fe80::dced:3ff:fe06:ff28, eth2, weight 1, 00:17:01
I>* 2001:db8:4::/128 [115/0] is directly connected, sr0, seg6local End USP, weight 1, 00:17:31
I>* 2001:db8:4:1::/128 [115/0] is directly connected, eth2, seg6local End.X nh6 fe80::dced:3ff:fe06:ff28, weight 1, 00:17:31
I>* fd00:100::/64 [115/30] via fe80::dced:3ff:fe06:ff28, eth2, weight 1, 00:17:01
I>* fd00:125::/64 [115/20] via fe80::dced:3ff:fe06:ff28, eth2, weight 1, 00:17:01
I>* fd00:126::/64 [115/10] via fe80::dced:3ff:fe06:ff28, eth2, weight 1, 00:17:01
I   fec0::/64 [115/10] via fe80::dced:3ff:fe06:ff28, eth2, weight 1, 00:17:01

Segment routing ipv6 basic traffic engineering

The below figure illustrates how to divert traffic from the fd00:100::/64 sub-network to the fd00:200::/64 sub-network by using the rt3 device as the next-hop instead of the rt2 device. That traffic will not follow the routing decisions taken by the SPF algorithm used by the IGP instances, and the static route will be used for that.

../../../../_images/srte_ipv6_basic.svg

Usage of traffic engineering in segment routing ipv6 networks

The configuration is given below for each device. Compared with the previous configurations, all devices are connected with each other, except for rt1 and rt4 devices. By following the SPF algorithm, if the fd00:200::/64 network was redistributed, then the 2001:db8:4::/128 nexthop would be used, and would be reachable from rt1 by using the rt2 device. However, by creating a static SRv6 route, the expectation is that the path taken would use the rt3 device instead.

The configuration of the rt1, rt2, rt3 and rt4 devices is given below.

rt1

rt1 running config# vrf main
rt1 running vrf main# interface
rt1 running interface# physical eth1
rt1 running physical eth1#! port pci-b0s4
rt1 running physical eth1# ipv6 address fd00:100::1/64
rt1 running physical eth1# .. physical eth2
rt1 running physical eth2#! port pci-b0s5
rt1 running physical eth2# ipv6 address fd00:130::1/64
rt1 running physical eth2# .. physical eth3
rt1 running physical eth3#! port pci-b0s6
rt1 running physical eth3# ipv6 address fd00:125::1/64
rt1 running physical eth3# .. loopback loop1
rt1 running loopback loop1# ipv6 address 1:1::1:1/128
rt1 running loopback loop1# ipv4 address 1.1.1.1/32
rt1 running physical eth3# .. loopback loop2
rt1 running loopback loop1# ipv6 address 2001:db8:1::/48
rt1 running loopback loop1# .. .. routing
rt1 running routing# interface loop1
rt1 running interface loop1# isis
rt1 running isis#! area-tag 1
rt1 running isis#! ipv6-routing true
rt1 running isis#! hello interval level-1 1
rt1 running isis#! hello multiplier level-1 3
rt1 running isis#! .. ..
rt1 running routing#! interface eth2
rt1 running interface eth2#! isis
rt1 running isis#! area-tag 1
rt1 running isis#! ipv6-routing true
rt1 running isis#! hello interval level-1 1
rt1 running isis#! hello multiplier level-1 3
rt1 running isis#! metric level-1 5
rt1 running isis#! .. ..
rt1 running routing#! interface eth3
rt1 running interface eth3#! isis
rt1 running isis#! area-tag 1
rt1 running isis#! ipv6-routing true
rt1 running isis#! hello interval level-1 1
rt1 running isis#! hello multiplier level-1 3
rt1 running isis#! .. ..
rt1 running routing#! isis instance 1
rt1 running instance 1# is-type level-1
rt1 running instance 1# area-address 49.0000.0007.e901.1111.00
rt1 running instance 1# redistribute ipv6 connected level-1
rt1 running ipv6 connected level-1# .. ..
rt1 running instance 1# multi-topology ipv6-unicast
rt1 running ipv6-unicast# .. ..
rt1 running instance 1# segment-routing ipv6
rt1 running ipv6#! locator loc1
rt1 running ipv6# / vrf main routing segment-routing ipv6
rt1 running ipv6# locator loc1
rt1 running locator loc1#! prefix 2001:db8:1::/48
rt1 running locator loc1# block-length 24
rt1 running locator loc1#

rt2

rt2 running config# vrf main
rt2 running vrf main# interface physical eth1
rt2 running physical eth1#! port pci-b0s4
rt2 running physical eth1# ipv6 address fd00:125::2/64
rt2 running physical eth1# .. physical eth2
rt2 running physical eth2#! port pci-b0s5
rt2 running physical eth2# ipv6 address fd00:126::2/64
rt2 running physical eth2# .. physical eth3
rt2 running physical eth3#! port pci-b0s6
rt2 running physical eth3# ipv6 address fd00:131::2/64
rt2 running physical eth3# .. loopback loop1
rt2 running loopback loop1# ipv6 address 2:2::2:2/128
rt2 running loopback loop1# ipv4 address 2.2.2.2/32
rt2 running loopback loop1# .. .. routing
rt2 running routing# interface loop1
rt2 running interface loop1# isis
rt2 running isis#! area-tag 1
rt2 running isis#! ipv6-routing true
rt2 running isis#! hello interval level-1 1
rt2 running isis#! hello multiplier level-1 3
rt2 running isis#! .. .. interface eth1
rt2 running interface eth1#! isis
rt2 running isis#! area-tag 1
rt2 running isis#! ipv6-routing true
rt2 running isis#! hello interval level-1 1
rt2 running isis#! hello multiplier level-1 3
rt2 running isis#! .. .. interface eth2
rt2 running interface eth2#! isis
rt2 running isis#! area-tag 1
rt2 running isis#! ipv6-routing true
rt2 running isis#! hello interval level-1 1
rt2 running isis#! hello multiplier level-1 3
rt2 running isis#! .. .. interface eth3
rt2 running interface eth3#! isis
rt2 running isis#! area-tag 1
rt2 running isis#! ipv6-routing true
rt2 running isis#! hello interval level-1 1
rt2 running isis#! hello multiplier level-1 3
rt2 running isis#! .. ..
rt2 running routing#! isis instance 1
rt2 running instance 1# is-type level-1
rt2 running instance 1# area-address 49.0000.0007.e901.2222.00
rt2 running instance 1# redistribute ipv6 connected level-1
rt2 running ipv6 connected level-1# .. ..
rt2 running instance 1# multi-topology ipv6-unicast
rt2 running ipv6-unicast# .. ..
rt2 running instance 1# segment-routing ipv6
rt2 running ipv6#! locator loc1
rt2 running ipv6# / vrf main routing segment-routing ipv6
rt2 running ipv6# locator loc1
rt2 running locator loc1#! prefix 2001:db8:2::/48
rt2 running locator loc1# block-length 24
rt2 running locator loc1#

rt3

rt3 running config# vrf main
rt3 running vrf main# interface physical eth1
rt3 running physical eth1#! port pci-b0s4
rt3 running physical eth1# ipv6 address fd00:130::3/64
rt3 running physical eth1# .. physical eth2
rt3 running physical eth2#! port pci-b0s5
rt3 running physical eth2# ipv6 address fd00:126::3/64
rt3 running physical eth2# .. physical eth3
rt3 running physical eth3#! port pci-b0s6
rt3 running physical eth3# ipv6 address fd00:127::3/64
rt3 running physical eth3# .. loopback loop1
rt3 running loopback loop1# ipv6 address 3:3::3:3/128
rt3 running loopback loop1# ipv4 address 3.3.3.3/32
rt3 running loopback loop1# .. .. routing
rt3 running routing# interface loop1
rt3 running interface loop1# isis
rt3 running isis#! area-tag 1
rt3 running isis#! ipv6-routing true
rt3 running isis#! hello interval level-1 1
rt3 running isis#! hello multiplier level-1 3
rt3 running isis#! .. .. interface eth1
rt3 running interface eth1#! isis
rt3 running isis#! area-tag 1
rt3 running isis#! ipv6-routing true
rt3 running isis#! hello interval level-1 1
rt3 running isis#! hello multiplier level-1 3
rt3 running isis#! metric level-1 5
rt3 running isis#! .. .. interface eth2
rt3 running interface eth2#! isis
rt3 running isis#! area-tag 1
rt3 running isis#! ipv6-routing true
rt3 running isis#! hello interval level-1 1
rt3 running isis#! hello multiplier level-1 3
rt3 running isis#! .. .. interface eth3
rt3 running interface eth3#! isis
rt3 running isis#! area-tag 1
rt3 running isis#! ipv6-routing true
rt3 running isis#! hello interval level-1 1
rt3 running isis#! hello multiplier level-1 3
rt3 running isis#! metric level-1 20
rt3 running isis#! .. ..
rt3 running routing#! isis instance 1
rt3 running instance 1# is-type level-1
rt3 running instance 1# area-address 49.0000.0007.e901.3333.00
rt3 running instance 1# redistribute ipv6 connected level-1
rt3 running ipv6 connected level-1# .. ..
rt3 running instance 1# multi-topology ipv6-unicast
rt3 running ipv6-unicast# .. ..
rt3 running instance 1# segment-routing ipv6
rt3 running ipv6#! locator loc1
rt3 running ipv6# / vrf main routing segment-routing ipv6
rt3 running ipv6# locator loc1
rt3 running locator loc1#! prefix 2001:db8:3::/48
rt3 running locator loc1# block-length 24
rt3 running locator loc1#

rt4

rt4 running config# vrf main
rt4 running vrf main# interface physical eth1
rt4 running physical eth1#! port pci-b0s4
rt4 running physical eth1# ipv6 address fd00:200::4/64
rt4 running physical eth1# .. physical eth2
rt4 running physical eth2#! port pci-b0s5
rt4 running physical eth2# ipv6 address fd00:127::4/64
rt4 running physical eth2# network-stack
rt4 running network-stack# ipv6
rt4 running ipv6# accept-segment-routing true
rt4 running ipv6# .. ..
rt4 running physical eth2# .. physical eth3
rt4 running physical eth3#! port pci-b0s6
rt4 running physical eth3# ipv6 address fd00:131::4/64
rt4 running physical eth3# network-stack
rt4 running network-stack# ipv6
rt4 running ipv6# accept-segment-routing true
rt4 running ipv6# .. ..
rt4 running physical eth3# .. loopback loop1
rt4 running loopback loop1# ipv6 address 4:4::4:4/128
rt4 running loopback loop1# ipv4 address 4.4.4.4/32
rt4 running loopback loop1# .. loopback loop2
rt4 running loopback loop2# ipv6 address 2001:db8:4::/48
rt4 running loopback loop2# .. .. routing
rt4 running routing# interface loop1
rt4 running interface loop1# isis
rt4 running isis#! area-tag 1
rt4 running isis#! ipv6-routing true
rt4 running isis#! hello interval level-1 1
rt4 running isis#! hello multiplier level-1 3
rt4 running isis#! .. .. interface eth2
rt4 running interface eth2#! isis
rt4 running isis#! area-tag 1
rt4 running isis#! ipv6-routing true
rt4 running isis#! hello interval level-1 1
rt4 running isis#! hello multiplier level-1 3
rt3 running isis#! metric level-1 20
rt4 running isis#! .. .. interface eth3
rt4 running interface eth3#! isis
rt4 running isis#! area-tag 1
rt4 running isis#! ipv6-routing true
rt4 running isis#! hello interval level-1 1
rt4 running isis#! hello multiplier level-1 3
rt4 running isis#! .. ..
rt4 running routing#! isis instance 1
rt4 running instance 1# is-type level-1
rt4 running instance 1# area-address 49.0000.0007.e901.4444.00
rt4 running instance 1# multi-topology ipv6-unicast
rt4 running ipv6-unicast# .. ..
rt4 running instance 1# segment-routing ipv6
rt4 running ipv6#! locator loc1
rt4 running ipv6# / vrf main routing segment-routing ipv6
rt4 running ipv6# locator loc1
rt4 running locator loc1#! prefix 2001:db8:4::/48
rt4 running locator loc1# block-length 24
rt4 running locator loc1#

The below display shows that the SRv6 path to the rt4 endpoint uses the eth3 interface. However, to reach the rt3 endpoint, the 2001:db8:3::/48 uses the eth2 interface.

rt1> show ipv6-routes
Codes: K - kernel route, C - connected, S - static, R - RIPng,
       O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table,
       A - Babel, D - SHARP, F - PBR, f - OpenFabric,
       t - Table-Direct,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

[..]
I>* 4:4::4:4/128 [115/40] via fe80::dced:1ff:febf:40eb, eth3, weight 1, 02:06:12
I>* 2001:db8:4::/48 [115/30] via fe80::dced:1ff:febf:40eb, eth3, weight 1, 02:06:12
I>* 3:3::3:3/128 [115/5] via fe80::dced:1ff:fee0:586d, eth2, weight 1, 00:11:35
I>* 2001:db8:3::/48 [115/5] via fe80::dced:1ff:fee0:586d, eth2, weight 1, 00:11:35
[..]

A static route to reach the fd00:200::/64 is performed to force the traffic to use the eth2 interface.

rt1 running vrf main# routing static
rt1 running static# ipv6-route fd00:200::/64
rt1 running ipv6-route fd00:200::/64#! next-hop eth3 ipv6-sid 2001:db8:4:: ipv6-sid 2001:db8:3::
rt1 running ipv6-route fd00:200::/64# .. ..

The resulting route entry is selected from the RIB and applied to traffic entering the SR topology.

rt1> show ipv6-routes protocol static
Codes: K - kernel route, C - connected, S - static, R - RIPng,
       O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table,
       A - Babel, D - SHARP, F - PBR, f - OpenFabric,
       t - Table-Direct,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

>* fd00:200::/64 [1/0] is directly connected, eth2, seg6 2001:db8:4::,2001:db8:3::, weight 1, 02:41:17

It is possible to perform up to 4 SIDs stacking when the SRv6 networks become bigger.