summaryrefslogtreecommitdiffstats
path: root/tests/topotests/isis_sr_flex_algo_topo2
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-09 13:16:35 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-09 13:16:35 +0000
commite2bbf175a2184bd76f6c54ccf8456babeb1a46fc (patch)
treef0b76550d6e6f500ada964a3a4ee933a45e5a6f1 /tests/topotests/isis_sr_flex_algo_topo2
parentInitial commit. (diff)
downloadfrr-e2bbf175a2184bd76f6c54ccf8456babeb1a46fc.tar.xz
frr-e2bbf175a2184bd76f6c54ccf8456babeb1a46fc.zip
Adding upstream version 9.1.upstream/9.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/topotests/isis_sr_flex_algo_topo2')
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/README.md8
-rwxr-xr-xtests/topotests/isis_sr_flex_algo_topo2/configure-te.sh46
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt0/bgpd.conf17
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt0/isisd.conf56
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt0/pathd.conf20
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt0/step1/route.json438
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt0/zebra.conf34
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt1/isisd.conf60
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt1/step1/route.json428
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt1/zebra.conf40
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt2/isisd.conf54
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt2/step1/route.json408
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt2/zebra.conf37
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt3/isisd.conf60
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt3/step1/route.json428
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt3/zebra.conf40
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt4/isisd.conf52
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt4/step1/route.json286
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt4/zebra.conf31
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt5/isisd.conf60
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt5/step1/route.json428
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt5/zebra.conf40
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt6/isisd.conf54
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt6/step1/route.json408
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt6/zebra.conf37
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt7/isisd.conf60
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt7/step1/route.json428
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt7/zebra.conf40
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt8/isisd.conf50
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt8/step1/route.json286
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt8/zebra.conf29
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt9/bgpd.conf17
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt9/isisd.conf56
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt9/pathd.conf20
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt9/step1/route.json438
-rw-r--r--tests/topotests/isis_sr_flex_algo_topo2/rt9/zebra.conf34
-rwxr-xr-xtests/topotests/isis_sr_flex_algo_topo2/test_isis_sr_flex_algo_topo2.py187
37 files changed, 5215 insertions, 0 deletions
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/README.md b/tests/topotests/isis_sr_flex_algo_topo2/README.md
new file mode 100644
index 0000000..20282c4
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/README.md
@@ -0,0 +1,8 @@
+
+## test
+
+```
+fdk-enter rt9.pid iperf3 -s
+fdk-enter rt0.pid iperf3 -B 111.111.111.111 -c 222.222.222.222 -P20 -t 100000
+fdk-enter rt0.pid watch -n0.1 ip -s link show
+```
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/configure-te.sh b/tests/topotests/isis_sr_flex_algo_topo2/configure-te.sh
new file mode 100755
index 0000000..527f05b
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/configure-te.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+if [ $# -ne 1 ]; then
+ echo "invalid command syntax" 1>&2
+ echo "Usage: $0 <0|128|129|130>" 1>&2
+ exit 1
+fi
+
+case "$1" in
+ 0 ) echo ;;
+ 128 ) echo ;;
+ 129 ) echo ;;
+ 130 ) echo ;;
+ * ) echo "error" ; exit ;;
+esac
+
+R0=$(cat /tmp/topotests/isis_sr_flex_algo_topo2.test_isis_sr_flex_algo_topo2/rt0.pid)
+R9=$(cat /tmp/topotests/isis_sr_flex_algo_topo2.test_isis_sr_flex_algo_topo2/rt9.pid)
+
+set -x
+
+cat <<EOF | nsenter -a -t $R0 vtysh
+conf te
+segment-routing
+ traffic-eng
+ policy color 1 endpoint 9.9.9.9
+ name sid-algorithm
+ binding-sid 111
+ candidate-path preference 100 name sid-algorithm explicit segment-list sid-algorithm-$1
+ exit
+ exit
+exit
+EOF
+
+cat <<EOF | nsenter -a -t $R9 vtysh
+conf te
+segment-routing
+ traffic-eng
+ policy color 1 endpoint 10.10.10.10
+ name sid-algorithm
+ binding-sid 222
+ candidate-path preference 100 name sid-algorithm explicit segment-list sid-algorithm-$1
+ exit
+ exit
+exit
+EOF
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt0/bgpd.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt0/bgpd.conf
new file mode 100644
index 0000000..3915bec
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt0/bgpd.conf
@@ -0,0 +1,17 @@
+!
+router bgp 1
+ bgp router-id 10.10.10.10
+ no bgp network import-check
+ neighbor 9.9.9.9 remote-as 1
+ neighbor 9.9.9.9 update-source 10.10.10.10
+ !
+ address-family ipv4 unicast
+ network 10.255.0.0/24
+ neighbor 9.9.9.9 next-hop-self
+ neighbor 9.9.9.9 route-map sr-te in
+ exit-address-family
+!
+route-map sr-te permit 10
+ set sr-te color 1
+exit
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt0/isisd.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt0/isisd.conf
new file mode 100644
index 0000000..c102b1b
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt0/isisd.conf
@@ -0,0 +1,56 @@
+password 1
+hostname rt0
+log file isisd.log
+!
+!debug isis events
+!debug isis spf-events
+!debug isis route-events
+!debug isis sr-events
+!debug isis lsp-gen
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip router isis 1
+ isis passive
+!
+interface eth-rt1
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt5
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+router isis 1
+ lsp-gen-interval 2
+ net 49.0000.0000.0000.1000.00
+ is-type level-1
+ topology ipv6-unicast
+ mpls-te on
+ !
+ flex-algo 128
+ dataplane sr-mpls
+ advertise-definition
+ !
+ flex-algo 129
+ dataplane sr-mpls
+ advertise-definition
+ !
+ flex-algo 130
+ dataplane sr-mpls
+ advertise-definition
+ affinity include-any blue
+ !
+ segment-routing on
+ segment-routing global-block 20000 23999
+ segment-routing node-msd 8
+ segment-routing prefix 10.10.10.10/32 index 0
+ segment-routing prefix 10.10.10.10/32 algorithm 128 index 100
+ segment-routing prefix 10.10.10.10/32 algorithm 129 index 200
+ segment-routing prefix 10.10.10.10/32 algorithm 130 index 300
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt0/pathd.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt0/pathd.conf
new file mode 100644
index 0000000..c51b4e0
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt0/pathd.conf
@@ -0,0 +1,20 @@
+log file pathd.log
+!
+hostname rt0
+!
+segment-routing
+ traffic-eng
+ segment-list sid-algorithm-0
+ index 10 mpls label 20009
+ exit
+ segment-list sid-algorithm-128
+ index 10 mpls label 20109
+ exit
+ segment-list sid-algorithm-129
+ index 10 mpls label 20209
+ exit
+ segment-list sid-algorithm-130
+ index 10 mpls label 20309
+ exit
+ exit
+exit
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt0/step1/route.json b/tests/topotests/isis_sr_flex_algo_topo2/rt0/step1/route.json
new file mode 100644
index 0000000..51a1c25
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt0/step1/route.json
@@ -0,0 +1,438 @@
+{
+ "20001":{
+ "inLabel":20001,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.1"
+ }
+ ]
+ },
+ "20002":{
+ "inLabel":20002,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20002,
+ "outLabelStack":[
+ 20002
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.1"
+ }
+ ]
+ },
+ "20003":{
+ "inLabel":20003,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20003,
+ "outLabelStack":[
+ 20003
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.1"
+ }
+ ]
+ },
+ "20004":{
+ "inLabel":20004,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20004,
+ "outLabelStack":[
+ 20004
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.1"
+ }
+ ]
+ },
+ "20005":{
+ "inLabel":20005,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.5"
+ }
+ ]
+ },
+ "20006":{
+ "inLabel":20006,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20006,
+ "outLabelStack":[
+ 20006
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.5"
+ }
+ ]
+ },
+ "20007":{
+ "inLabel":20007,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20007,
+ "outLabelStack":[
+ 20007
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.5"
+ }
+ ]
+ },
+ "20008":{
+ "inLabel":20008,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20008,
+ "outLabelStack":[
+ 20008
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.5"
+ }
+ ]
+ },
+ "20009":{
+ "inLabel":20009,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20009,
+ "outLabelStack":[
+ 20009
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20009,
+ "outLabelStack":[
+ 20009
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.1"
+ }
+ ]
+ },
+ "20101":{
+ "inLabel":20101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.1"
+ }
+ ]
+ },
+ "20102":{
+ "inLabel":20102,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20102,
+ "outLabelStack":[
+ 20102
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.1"
+ }
+ ]
+ },
+ "20103":{
+ "inLabel":20103,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20103,
+ "outLabelStack":[
+ 20103
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.1"
+ }
+ ]
+ },
+ "20104":{
+ "inLabel":20104,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20104,
+ "outLabelStack":[
+ 20104
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.1"
+ }
+ ]
+ },
+ "20109":{
+ "inLabel":20109,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20109,
+ "outLabelStack":[
+ 20109
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.1"
+ }
+ ]
+ },
+ "20205":{
+ "inLabel":20205,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.5"
+ }
+ ]
+ },
+ "20206":{
+ "inLabel":20206,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20206,
+ "outLabelStack":[
+ 20206
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.5"
+ }
+ ]
+ },
+ "20207":{
+ "inLabel":20207,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20207,
+ "outLabelStack":[
+ 20207
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.5"
+ }
+ ]
+ },
+ "20208":{
+ "inLabel":20208,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20208,
+ "outLabelStack":[
+ 20208
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.5"
+ }
+ ]
+ },
+ "20209":{
+ "inLabel":20209,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20209,
+ "outLabelStack":[
+ 20209
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.5"
+ }
+ ]
+ },
+ "20301":{
+ "inLabel":20301,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.1"
+ }
+ ]
+ },
+ "20302":{
+ "inLabel":20302,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20302,
+ "outLabelStack":[
+ 20302
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.1"
+ }
+ ]
+ },
+ "20303":{
+ "inLabel":20303,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20303,
+ "outLabelStack":[
+ 20303
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.1"
+ }
+ ]
+ },
+ "20305":{
+ "inLabel":20305,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.5"
+ }
+ ]
+ },
+ "20306":{
+ "inLabel":20306,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20306,
+ "outLabelStack":[
+ 20306
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.5"
+ }
+ ]
+ },
+ "20307":{
+ "inLabel":20307,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20307,
+ "outLabelStack":[
+ 20307
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.5"
+ }
+ ]
+ },
+ "20309":{
+ "inLabel":20309,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20309,
+ "outLabelStack":[
+ 20309
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20309,
+ "outLabelStack":[
+ 20309
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.1"
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt0/zebra.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt0/zebra.conf
new file mode 100644
index 0000000..89837d4
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt0/zebra.conf
@@ -0,0 +1,34 @@
+log file zebra.log
+!
+hostname rt0
+!
+!log stdout notifications
+!log monitor notifications
+!log commands
+!
+debug zebra packet
+debug zebra dplane
+debug zebra kernel
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip address 10.10.10.10/32
+!
+interface eth-rt1
+ ip address 10.1.0.10/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+interface eth-rt5
+ ip address 10.5.0.10/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+ip forwarding
+ipv6 forwarding
+!
+line vty
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt1/isisd.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt1/isisd.conf
new file mode 100644
index 0000000..a793388
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt1/isisd.conf
@@ -0,0 +1,60 @@
+password 1
+hostname rt1
+log file isisd.log
+!
+!debug isis events
+!debug isis spf-events
+!debug isis route-events
+!debug isis sr-events
+!debug isis lsp-gen
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip router isis 1
+ isis passive
+!
+interface eth-rt0
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt2
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt4
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt5
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+router isis 1
+ lsp-gen-interval 2
+ net 49.0000.0000.0000.1001.00
+ is-type level-1
+ topology ipv6-unicast
+ mpls-te on
+ !
+ flex-algo 128
+ dataplane sr-mpls
+ flex-algo 130
+ dataplane sr-mpls
+ !
+ segment-routing on
+ segment-routing global-block 20000 23999
+ segment-routing node-msd 8
+ segment-routing prefix 1.1.1.1/32 index 1
+ segment-routing prefix 1.1.1.1/32 algorithm 128 index 101
+ segment-routing prefix 1.1.1.1/32 algorithm 129 index 201
+ segment-routing prefix 1.1.1.1/32 algorithm 130 index 301
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt1/step1/route.json b/tests/topotests/isis_sr_flex_algo_topo2/rt1/step1/route.json
new file mode 100644
index 0000000..5006625
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt1/step1/route.json
@@ -0,0 +1,428 @@
+{
+ "20000":{
+ "inLabel":20000,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.10"
+ }
+ ]
+ },
+ "20002":{
+ "inLabel":20002,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.2"
+ }
+ ]
+ },
+ "20003":{
+ "inLabel":20003,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20003,
+ "outLabelStack":[
+ 20003
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20003,
+ "outLabelStack":[
+ 20003
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.2"
+ }
+ ]
+ },
+ "20004":{
+ "inLabel":20004,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.4"
+ }
+ ]
+ },
+ "20005":{
+ "inLabel":20005,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.15.0.5"
+ }
+ ]
+ },
+ "20006":{
+ "inLabel":20006,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20006,
+ "outLabelStack":[
+ 20006
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.15.0.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20006,
+ "outLabelStack":[
+ 20006
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.2"
+ }
+ ]
+ },
+ "20007":{
+ "inLabel":20007,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20007,
+ "outLabelStack":[
+ 20007
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.15.0.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20007,
+ "outLabelStack":[
+ 20007
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20007,
+ "outLabelStack":[
+ 20007
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.2"
+ }
+ ]
+ },
+ "20008":{
+ "inLabel":20008,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20008,
+ "outLabelStack":[
+ 20008
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.15.0.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20008,
+ "outLabelStack":[
+ 20008
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.4"
+ }
+ ]
+ },
+ "20009":{
+ "inLabel":20009,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20009,
+ "outLabelStack":[
+ 20009
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20009,
+ "outLabelStack":[
+ 20009
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.2"
+ }
+ ]
+ },
+ "20100":{
+ "inLabel":20100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.10"
+ }
+ ]
+ },
+ "20102":{
+ "inLabel":20102,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.2"
+ }
+ ]
+ },
+ "20103":{
+ "inLabel":20103,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20103,
+ "outLabelStack":[
+ 20103
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20103,
+ "outLabelStack":[
+ 20103
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.2"
+ }
+ ]
+ },
+ "20104":{
+ "inLabel":20104,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.4"
+ }
+ ]
+ },
+ "20109":{
+ "inLabel":20109,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20109,
+ "outLabelStack":[
+ 20109
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20109,
+ "outLabelStack":[
+ 20109
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.2"
+ }
+ ]
+ },
+ "20300":{
+ "inLabel":20300,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.10"
+ }
+ ]
+ },
+ "20302":{
+ "inLabel":20302,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.2"
+ }
+ ]
+ },
+ "20303":{
+ "inLabel":20303,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20303,
+ "outLabelStack":[
+ 20303
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.2"
+ }
+ ]
+ },
+ "20305":{
+ "inLabel":20305,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20305,
+ "outLabelStack":[
+ 20305
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.10"
+ }
+ ]
+ },
+ "20306":{
+ "inLabel":20306,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20306,
+ "outLabelStack":[
+ 20306
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.10"
+ }
+ ]
+ },
+ "20307":{
+ "inLabel":20307,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20307,
+ "outLabelStack":[
+ 20307
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20307,
+ "outLabelStack":[
+ 20307
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.1.0.10"
+ }
+ ]
+ },
+ "20309":{
+ "inLabel":20309,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20309,
+ "outLabelStack":[
+ 20309
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.2"
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt1/zebra.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt1/zebra.conf
new file mode 100644
index 0000000..25a9629
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt1/zebra.conf
@@ -0,0 +1,40 @@
+log file zebra.log
+!
+hostname rt1
+!
+log stdout notifications
+log monitor notifications
+log commands
+!
+!debug zebra packet
+!debug zebra dplane
+!debug zebra kernel
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip address 1.1.1.1/32
+!
+interface eth-rt0
+ ip address 10.1.0.1/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+interface eth-rt2
+ ip address 10.12.0.1/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+interface eth-rt4
+ ip address 10.14.0.1/24
+!
+interface eth-rt5
+ ip address 10.15.0.1/24
+!
+ip forwarding
+ipv6 forwarding
+!
+line vty
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt2/isisd.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt2/isisd.conf
new file mode 100644
index 0000000..312a6df
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt2/isisd.conf
@@ -0,0 +1,54 @@
+password 1
+hostname rt2
+log file isisd.log
+!
+!debug isis events
+!debug isis route-events
+!debug isis spf-events
+!debug isis sr-events
+!debug isis lsp-gen
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip router isis 1
+ isis passive
+!
+interface eth-rt1
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt3
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt6
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+router isis 1
+ lsp-gen-interval 2
+ net 49.0000.0000.0000.1002.00
+ is-type level-1
+ topology ipv6-unicast
+ mpls-te on
+ !
+ flex-algo 128
+ dataplane sr-mpls
+ flex-algo 130
+ dataplane sr-mpls
+ !
+ segment-routing on
+ segment-routing global-block 20000 23999
+ segment-routing node-msd 8
+ segment-routing prefix 2.2.2.2/32 index 2
+ segment-routing prefix 2.2.2.2/32 algorithm 128 index 102
+ segment-routing prefix 2.2.2.2/32 algorithm 129 index 202
+ segment-routing prefix 2.2.2.2/32 algorithm 130 index 302
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt2/step1/route.json b/tests/topotests/isis_sr_flex_algo_topo2/rt2/step1/route.json
new file mode 100644
index 0000000..679b41d
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt2/step1/route.json
@@ -0,0 +1,408 @@
+{
+ "20000":{
+ "inLabel":20000,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20000,
+ "outLabelStack":[
+ 20000
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.1"
+ }
+ ]
+ },
+ "20001":{
+ "inLabel":20001,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.1"
+ }
+ ]
+ },
+ "20003":{
+ "inLabel":20003,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.3"
+ }
+ ]
+ },
+ "20004":{
+ "inLabel":20004,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20004,
+ "outLabelStack":[
+ 20004
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.3"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20004,
+ "outLabelStack":[
+ 20004
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.1"
+ }
+ ]
+ },
+ "20005":{
+ "inLabel":20005,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20005,
+ "outLabelStack":[
+ 20005
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.26.0.6"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20005,
+ "outLabelStack":[
+ 20005
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.1"
+ }
+ ]
+ },
+ "20006":{
+ "inLabel":20006,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.26.0.6"
+ }
+ ]
+ },
+ "20007":{
+ "inLabel":20007,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20007,
+ "outLabelStack":[
+ 20007
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.26.0.6"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20007,
+ "outLabelStack":[
+ 20007
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.3"
+ }
+ ]
+ },
+ "20008":{
+ "inLabel":20008,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20008,
+ "outLabelStack":[
+ 20008
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.26.0.6"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20008,
+ "outLabelStack":[
+ 20008
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.3"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20008,
+ "outLabelStack":[
+ 20008
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.1"
+ }
+ ]
+ },
+ "20009":{
+ "inLabel":20009,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20009,
+ "outLabelStack":[
+ 20009
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.3"
+ }
+ ]
+ },
+ "20100":{
+ "inLabel":20100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20100,
+ "outLabelStack":[
+ 20100
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.1"
+ }
+ ]
+ },
+ "20101":{
+ "inLabel":20101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.1"
+ }
+ ]
+ },
+ "20103":{
+ "inLabel":20103,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.3"
+ }
+ ]
+ },
+ "20104":{
+ "inLabel":20104,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20104,
+ "outLabelStack":[
+ 20104
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.3"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20104,
+ "outLabelStack":[
+ 20104
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.1"
+ }
+ ]
+ },
+ "20109":{
+ "inLabel":20109,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20109,
+ "outLabelStack":[
+ 20109
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.3"
+ }
+ ]
+ },
+ "20300":{
+ "inLabel":20300,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20300,
+ "outLabelStack":[
+ 20300
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.1"
+ }
+ ]
+ },
+ "20301":{
+ "inLabel":20301,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.1"
+ }
+ ]
+ },
+ "20303":{
+ "inLabel":20303,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.3"
+ }
+ ]
+ },
+ "20305":{
+ "inLabel":20305,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20305,
+ "outLabelStack":[
+ 20305
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.1"
+ }
+ ]
+ },
+ "20306":{
+ "inLabel":20306,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20306,
+ "outLabelStack":[
+ 20306
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.3"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20306,
+ "outLabelStack":[
+ 20306
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.12.0.1"
+ }
+ ]
+ },
+ "20307":{
+ "inLabel":20307,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20307,
+ "outLabelStack":[
+ 20307
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.3"
+ }
+ ]
+ },
+ "20309":{
+ "inLabel":20309,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20309,
+ "outLabelStack":[
+ 20309
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.3"
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt2/zebra.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt2/zebra.conf
new file mode 100644
index 0000000..d739a73
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt2/zebra.conf
@@ -0,0 +1,37 @@
+log file zebra.log
+!
+hostname rt2
+!
+log stdout notifications
+log monitor notifications
+log commands
+!
+!debug zebra packet
+!debug zebra dplane
+!debug zebra kernel
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip address 2.2.2.2/32
+!
+interface eth-rt1
+ ip address 10.12.0.2/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+interface eth-rt3
+ ip address 10.23.0.2/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+interface eth-rt6
+ ip address 10.26.0.2/24
+!
+ip forwarding
+ipv6 forwarding
+!
+line vty
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt3/isisd.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt3/isisd.conf
new file mode 100644
index 0000000..c287e8a
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt3/isisd.conf
@@ -0,0 +1,60 @@
+password 1
+hostname rt3
+log file isisd.log
+!
+!debug isis events
+!debug isis route-events
+!debug isis spf-events
+!debug isis sr-events
+!debug isis lsp-gen
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip router isis 1
+ isis passive
+!
+interface eth-rt2
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt4
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt7
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt9
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+router isis 1
+ lsp-gen-interval 2
+ net 49.0000.0000.0000.1003.00
+ is-type level-1
+ topology ipv6-unicast
+ mpls-te on
+ !
+ flex-algo 128
+ dataplane sr-mpls
+ flex-algo 130
+ dataplane sr-mpls
+ !
+ segment-routing on
+ segment-routing global-block 20000 23999
+ segment-routing node-msd 8
+ segment-routing prefix 3.3.3.3/32 index 3
+ segment-routing prefix 3.3.3.3/32 algorithm 128 index 103
+ segment-routing prefix 3.3.3.3/32 algorithm 129 index 203
+ segment-routing prefix 3.3.3.3/32 algorithm 130 index 303
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt3/step1/route.json b/tests/topotests/isis_sr_flex_algo_topo2/rt3/step1/route.json
new file mode 100644
index 0000000..f930faa
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt3/step1/route.json
@@ -0,0 +1,428 @@
+{
+ "20000":{
+ "inLabel":20000,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20000,
+ "outLabelStack":[
+ 20000
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20000,
+ "outLabelStack":[
+ 20000
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.2"
+ }
+ ]
+ },
+ "20001":{
+ "inLabel":20001,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20001,
+ "outLabelStack":[
+ 20001
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20001,
+ "outLabelStack":[
+ 20001
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.2"
+ }
+ ]
+ },
+ "20002":{
+ "inLabel":20002,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.2"
+ }
+ ]
+ },
+ "20004":{
+ "inLabel":20004,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.4"
+ }
+ ]
+ },
+ "20005":{
+ "inLabel":20005,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20005,
+ "outLabelStack":[
+ 20005
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.37.0.7"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20005,
+ "outLabelStack":[
+ 20005
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20005,
+ "outLabelStack":[
+ 20005
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.2"
+ }
+ ]
+ },
+ "20006":{
+ "inLabel":20006,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20006,
+ "outLabelStack":[
+ 20006
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.37.0.7"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20006,
+ "outLabelStack":[
+ 20006
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.2"
+ }
+ ]
+ },
+ "20007":{
+ "inLabel":20007,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.37.0.7"
+ }
+ ]
+ },
+ "20008":{
+ "inLabel":20008,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20008,
+ "outLabelStack":[
+ 20008
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.37.0.7"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20008,
+ "outLabelStack":[
+ 20008
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.4"
+ }
+ ]
+ },
+ "20009":{
+ "inLabel":20009,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.9"
+ }
+ ]
+ },
+ "20100":{
+ "inLabel":20100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20100,
+ "outLabelStack":[
+ 20100
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20100,
+ "outLabelStack":[
+ 20100
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.2"
+ }
+ ]
+ },
+ "20101":{
+ "inLabel":20101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20101,
+ "outLabelStack":[
+ 20101
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20101,
+ "outLabelStack":[
+ 20101
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.2"
+ }
+ ]
+ },
+ "20102":{
+ "inLabel":20102,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.2"
+ }
+ ]
+ },
+ "20104":{
+ "inLabel":20104,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.4"
+ }
+ ]
+ },
+ "20109":{
+ "inLabel":20109,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.9"
+ }
+ ]
+ },
+ "20300":{
+ "inLabel":20300,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20300,
+ "outLabelStack":[
+ 20300
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.2"
+ }
+ ]
+ },
+ "20301":{
+ "inLabel":20301,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20301,
+ "outLabelStack":[
+ 20301
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.2"
+ }
+ ]
+ },
+ "20302":{
+ "inLabel":20302,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.2"
+ }
+ ]
+ },
+ "20305":{
+ "inLabel":20305,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20305,
+ "outLabelStack":[
+ 20305
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.9"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20305,
+ "outLabelStack":[
+ 20305
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.23.0.2"
+ }
+ ]
+ },
+ "20306":{
+ "inLabel":20306,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20306,
+ "outLabelStack":[
+ 20306
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.9"
+ }
+ ]
+ },
+ "20307":{
+ "inLabel":20307,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20307,
+ "outLabelStack":[
+ 20307
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.9"
+ }
+ ]
+ },
+ "20309":{
+ "inLabel":20309,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.9"
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt3/zebra.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt3/zebra.conf
new file mode 100644
index 0000000..5c3bed0
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt3/zebra.conf
@@ -0,0 +1,40 @@
+log file zebra.log
+!
+hostname rt3
+!
+log stdout notifications
+log monitor notifications
+log commands
+!
+!debug zebra packet
+!debug zebra dplane
+!debug zebra kernel
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip address 3.3.3.3/32
+!
+interface eth-rt2
+ ip address 10.23.0.3/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+interface eth-rt4
+ ip address 10.34.0.3/24
+!
+interface eth-rt7
+ ip address 10.37.0.3/24
+!
+interface eth-rt9
+ ip address 10.39.0.3/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+ip forwarding
+ipv6 forwarding
+!
+line vty
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt4/isisd.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt4/isisd.conf
new file mode 100644
index 0000000..c040ce2
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt4/isisd.conf
@@ -0,0 +1,52 @@
+password 1
+hostname rt4
+log file isisd.log
+!
+!debug isis events
+!debug isis spf-events
+!debug isis route-events
+!debug isis sr-events
+!debug isis lsp-gen
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip router isis 1
+ isis passive
+!
+interface eth-rt1
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt3
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt8
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+router isis 1
+ lsp-gen-interval 2
+ net 49.0000.0000.0000.1004.00
+ is-type level-1
+ topology ipv6-unicast
+ mpls-te on
+ !
+ flex-algo 128
+ dataplane sr-mpls
+ !
+ segment-routing on
+ segment-routing global-block 20000 23999
+ segment-routing node-msd 8
+ segment-routing prefix 4.4.4.4/32 index 4
+ segment-routing prefix 4.4.4.4/32 algorithm 128 index 104
+ segment-routing prefix 4.4.4.4/32 algorithm 129 index 204
+ segment-routing prefix 4.4.4.4/32 algorithm 130 index 304
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt4/step1/route.json b/tests/topotests/isis_sr_flex_algo_topo2/rt4/step1/route.json
new file mode 100644
index 0000000..141e40d
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt4/step1/route.json
@@ -0,0 +1,286 @@
+{
+ "20000":{
+ "inLabel":20000,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20000,
+ "outLabelStack":[
+ 20000
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.1"
+ }
+ ]
+ },
+ "20001":{
+ "inLabel":20001,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.1"
+ }
+ ]
+ },
+ "20002":{
+ "inLabel":20002,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20002,
+ "outLabelStack":[
+ 20002
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.3"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20002,
+ "outLabelStack":[
+ 20002
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.1"
+ }
+ ]
+ },
+ "20003":{
+ "inLabel":20003,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.3"
+ }
+ ]
+ },
+ "20005":{
+ "inLabel":20005,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20005,
+ "outLabelStack":[
+ 20005
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.48.0.8"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20005,
+ "outLabelStack":[
+ 20005
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.1"
+ }
+ ]
+ },
+ "20006":{
+ "inLabel":20006,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20006,
+ "outLabelStack":[
+ 20006
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.48.0.8"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20006,
+ "outLabelStack":[
+ 20006
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.3"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20006,
+ "outLabelStack":[
+ 20006
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.1"
+ }
+ ]
+ },
+ "20007":{
+ "inLabel":20007,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20007,
+ "outLabelStack":[
+ 20007
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.48.0.8"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20007,
+ "outLabelStack":[
+ 20007
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.3"
+ }
+ ]
+ },
+ "20008":{
+ "inLabel":20008,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.48.0.8"
+ }
+ ]
+ },
+ "20009":{
+ "inLabel":20009,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20009,
+ "outLabelStack":[
+ 20009
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.3"
+ }
+ ]
+ },
+ "20100":{
+ "inLabel":20100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20100,
+ "outLabelStack":[
+ 20100
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.1"
+ }
+ ]
+ },
+ "20101":{
+ "inLabel":20101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.1"
+ }
+ ]
+ },
+ "20102":{
+ "inLabel":20102,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20102,
+ "outLabelStack":[
+ 20102
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.3"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20102,
+ "outLabelStack":[
+ 20102
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.14.0.1"
+ }
+ ]
+ },
+ "20103":{
+ "inLabel":20103,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.3"
+ }
+ ]
+ },
+ "20109":{
+ "inLabel":20109,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20109,
+ "outLabelStack":[
+ 20109
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.34.0.3"
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt4/zebra.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt4/zebra.conf
new file mode 100644
index 0000000..9c00013
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt4/zebra.conf
@@ -0,0 +1,31 @@
+log file zebra.log
+!
+hostname rt4
+!
+log stdout notifications
+log monitor notifications
+log commands
+!
+!debug zebra packet
+!debug zebra dplane
+!debug zebra kernel
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip address 4.4.4.4/32
+!
+interface eth-rt1
+ ip address 10.14.0.4/24
+!
+interface eth-rt3
+ ip address 10.34.0.4/24
+!
+interface eth-rt8
+ ip address 10.48.0.4/24
+!
+ip forwarding
+ipv6 forwarding
+!
+line vty
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt5/isisd.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt5/isisd.conf
new file mode 100644
index 0000000..6cf87d4
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt5/isisd.conf
@@ -0,0 +1,60 @@
+password 1
+hostname rt5
+log file isisd.log
+!
+!debug isis events
+!debug isis spf-events
+!debug isis route-events
+!debug isis sr-events
+!debug isis lsp-gen
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip router isis 1
+ isis passive
+!
+interface eth-rt0
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt1
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt6
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt8
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+router isis 1
+ lsp-gen-interval 2
+ net 49.0000.0000.0000.1005.00
+ is-type level-1
+ topology ipv6-unicast
+ mpls-te on
+ !
+ flex-algo 129
+ dataplane sr-mpls
+ flex-algo 130
+ dataplane sr-mpls
+ !
+ segment-routing on
+ segment-routing global-block 20000 23999
+ segment-routing node-msd 8
+ segment-routing prefix 5.5.5.5/32 index 5
+ segment-routing prefix 5.5.5.5/32 algorithm 128 index 105
+ segment-routing prefix 5.5.5.5/32 algorithm 129 index 205
+ segment-routing prefix 5.5.5.5/32 algorithm 130 index 305
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt5/step1/route.json b/tests/topotests/isis_sr_flex_algo_topo2/rt5/step1/route.json
new file mode 100644
index 0000000..82ebfc0
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt5/step1/route.json
@@ -0,0 +1,428 @@
+{
+ "20000":{
+ "inLabel":20000,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.10"
+ }
+ ]
+ },
+ "20001":{
+ "inLabel":20001,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.15.0.1"
+ }
+ ]
+ },
+ "20002":{
+ "inLabel":20002,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20002,
+ "outLabelStack":[
+ 20002
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.6"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20002,
+ "outLabelStack":[
+ 20002
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.15.0.1"
+ }
+ ]
+ },
+ "20003":{
+ "inLabel":20003,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20003,
+ "outLabelStack":[
+ 20003
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.8"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20003,
+ "outLabelStack":[
+ 20003
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.6"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20003,
+ "outLabelStack":[
+ 20003
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.15.0.1"
+ }
+ ]
+ },
+ "20004":{
+ "inLabel":20004,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20004,
+ "outLabelStack":[
+ 20004
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.8"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20004,
+ "outLabelStack":[
+ 20004
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.15.0.1"
+ }
+ ]
+ },
+ "20006":{
+ "inLabel":20006,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.6"
+ }
+ ]
+ },
+ "20007":{
+ "inLabel":20007,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20007,
+ "outLabelStack":[
+ 20007
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.8"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20007,
+ "outLabelStack":[
+ 20007
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.6"
+ }
+ ]
+ },
+ "20008":{
+ "inLabel":20008,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.8"
+ }
+ ]
+ },
+ "20009":{
+ "inLabel":20009,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20009,
+ "outLabelStack":[
+ 20009
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.8"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20009,
+ "outLabelStack":[
+ 20009
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.6"
+ }
+ ]
+ },
+ "20200":{
+ "inLabel":20200,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.10"
+ }
+ ]
+ },
+ "20206":{
+ "inLabel":20206,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.6"
+ }
+ ]
+ },
+ "20207":{
+ "inLabel":20207,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20207,
+ "outLabelStack":[
+ 20207
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.8"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20207,
+ "outLabelStack":[
+ 20207
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.6"
+ }
+ ]
+ },
+ "20208":{
+ "inLabel":20208,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.8"
+ }
+ ]
+ },
+ "20209":{
+ "inLabel":20209,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20209,
+ "outLabelStack":[
+ 20209
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.8"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20209,
+ "outLabelStack":[
+ 20209
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.6"
+ }
+ ]
+ },
+ "20300":{
+ "inLabel":20300,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.10"
+ }
+ ]
+ },
+ "20301":{
+ "inLabel":20301,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20301,
+ "outLabelStack":[
+ 20301
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.10"
+ }
+ ]
+ },
+ "20302":{
+ "inLabel":20302,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20302,
+ "outLabelStack":[
+ 20302
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.10"
+ }
+ ]
+ },
+ "20303":{
+ "inLabel":20303,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20303,
+ "outLabelStack":[
+ 20303
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.6"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20303,
+ "outLabelStack":[
+ 20303
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.5.0.10"
+ }
+ ]
+ },
+ "20306":{
+ "inLabel":20306,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.6"
+ }
+ ]
+ },
+ "20307":{
+ "inLabel":20307,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20307,
+ "outLabelStack":[
+ 20307
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.6"
+ }
+ ]
+ },
+ "20309":{
+ "inLabel":20309,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20309,
+ "outLabelStack":[
+ 20309
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.6"
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt5/zebra.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt5/zebra.conf
new file mode 100644
index 0000000..61c599d
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt5/zebra.conf
@@ -0,0 +1,40 @@
+log file zebra.log
+!
+hostname rt5
+!
+log stdout notifications
+log monitor notifications
+log commands
+!
+!debug zebra packet
+!debug zebra dplane
+!debug zebra kernel
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip address 5.5.5.5/32
+!
+interface eth-rt0
+ ip address 10.5.0.5/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+interface eth-rt1
+ ip address 10.15.0.5/24
+!
+interface eth-rt6
+ ip address 10.56.0.5/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+interface eth-rt8
+ ip address 10.58.0.5/24
+!
+ip forwarding
+ipv6 forwarding
+!
+line vty
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt6/isisd.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt6/isisd.conf
new file mode 100644
index 0000000..87a2596
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt6/isisd.conf
@@ -0,0 +1,54 @@
+password 1
+hostname rt6
+log file isisd.log
+!
+!debug isis events
+!debug isis spf-events
+!debug isis route-events
+!debug isis sr-events
+!debug isis lsp-gen
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip router isis 1
+ isis passive
+!
+interface eth-rt2
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt5
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt7
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+router isis 1
+ lsp-gen-interval 2
+ net 49.0000.0000.0000.1006.00
+ is-type level-1
+ topology ipv6-unicast
+ mpls-te on
+ !
+ flex-algo 129
+ dataplane sr-mpls
+ flex-algo 130
+ dataplane sr-mpls
+ !
+ segment-routing on
+ segment-routing global-block 20000 23999
+ segment-routing node-msd 8
+ segment-routing prefix 6.6.6.6/32 index 6
+ segment-routing prefix 6.6.6.6/32 algorithm 128 index 106
+ segment-routing prefix 6.6.6.6/32 algorithm 129 index 206
+ segment-routing prefix 6.6.6.6/32 algorithm 130 index 306
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt6/step1/route.json b/tests/topotests/isis_sr_flex_algo_topo2/rt6/step1/route.json
new file mode 100644
index 0000000..2cc7277
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt6/step1/route.json
@@ -0,0 +1,408 @@
+{
+ "20000":{
+ "inLabel":20000,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20000,
+ "outLabelStack":[
+ 20000
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.5"
+ }
+ ]
+ },
+ "20001":{
+ "inLabel":20001,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20001,
+ "outLabelStack":[
+ 20001
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20001,
+ "outLabelStack":[
+ 20001
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.26.0.2"
+ }
+ ]
+ },
+ "20002":{
+ "inLabel":20002,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.26.0.2"
+ }
+ ]
+ },
+ "20003":{
+ "inLabel":20003,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20003,
+ "outLabelStack":[
+ 20003
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.7"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20003,
+ "outLabelStack":[
+ 20003
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.26.0.2"
+ }
+ ]
+ },
+ "20004":{
+ "inLabel":20004,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20004,
+ "outLabelStack":[
+ 20004
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.7"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20004,
+ "outLabelStack":[
+ 20004
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20004,
+ "outLabelStack":[
+ 20004
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.26.0.2"
+ }
+ ]
+ },
+ "20005":{
+ "inLabel":20005,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.5"
+ }
+ ]
+ },
+ "20007":{
+ "inLabel":20007,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.7"
+ }
+ ]
+ },
+ "20008":{
+ "inLabel":20008,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20008,
+ "outLabelStack":[
+ 20008
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.7"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20008,
+ "outLabelStack":[
+ 20008
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.5"
+ }
+ ]
+ },
+ "20009":{
+ "inLabel":20009,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20009,
+ "outLabelStack":[
+ 20009
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.7"
+ }
+ ]
+ },
+ "20200":{
+ "inLabel":20200,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20200,
+ "outLabelStack":[
+ 20200
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.5"
+ }
+ ]
+ },
+ "20205":{
+ "inLabel":20205,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.5"
+ }
+ ]
+ },
+ "20207":{
+ "inLabel":20207,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.7"
+ }
+ ]
+ },
+ "20208":{
+ "inLabel":20208,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20208,
+ "outLabelStack":[
+ 20208
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.7"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20208,
+ "outLabelStack":[
+ 20208
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.5"
+ }
+ ]
+ },
+ "20209":{
+ "inLabel":20209,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20209,
+ "outLabelStack":[
+ 20209
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.7"
+ }
+ ]
+ },
+ "20300":{
+ "inLabel":20300,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20300,
+ "outLabelStack":[
+ 20300
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.5"
+ }
+ ]
+ },
+ "20301":{
+ "inLabel":20301,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20301,
+ "outLabelStack":[
+ 20301
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.5"
+ }
+ ]
+ },
+ "20302":{
+ "inLabel":20302,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20302,
+ "outLabelStack":[
+ 20302
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.7"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20302,
+ "outLabelStack":[
+ 20302
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.5"
+ }
+ ]
+ },
+ "20303":{
+ "inLabel":20303,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20303,
+ "outLabelStack":[
+ 20303
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.7"
+ }
+ ]
+ },
+ "20305":{
+ "inLabel":20305,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.56.0.5"
+ }
+ ]
+ },
+ "20307":{
+ "inLabel":20307,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.7"
+ }
+ ]
+ },
+ "20309":{
+ "inLabel":20309,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20309,
+ "outLabelStack":[
+ 20309
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.7"
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt6/zebra.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt6/zebra.conf
new file mode 100644
index 0000000..b63401e
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt6/zebra.conf
@@ -0,0 +1,37 @@
+log file zebra.log
+!
+hostname rt6
+!
+log stdout notifications
+log monitor notifications
+log commands
+!
+!debug zebra packet
+!debug zebra dplane
+!debug zebra kernel
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip address 6.6.6.6/32
+!
+interface eth-rt2
+ ip address 10.26.0.6/24
+!
+interface eth-rt5
+ ip address 10.56.0.6/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+interface eth-rt7
+ ip address 10.67.0.6/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+ip forwarding
+ipv6 forwarding
+!
+line vty
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt7/isisd.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt7/isisd.conf
new file mode 100644
index 0000000..6645542
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt7/isisd.conf
@@ -0,0 +1,60 @@
+password 1
+hostname rt7
+log file isisd.log
+!
+!debug isis events
+!debug isis spf-events
+!debug isis route-events
+!debug isis sr-events
+!debug isis lsp-gen
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip router isis 1
+ isis passive
+!
+interface eth-rt3
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt6
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt8
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt9
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+router isis 1
+ lsp-gen-interval 2
+ net 49.0000.0000.0000.1007.00
+ is-type level-1
+ topology ipv6-unicast
+ mpls-te on
+ !
+ flex-algo 129
+ dataplane sr-mpls
+ flex-algo 130
+ dataplane sr-mpls
+ !
+ segment-routing on
+ segment-routing global-block 20000 23999
+ segment-routing node-msd 8
+ segment-routing prefix 7.7.7.7/32 index 7
+ segment-routing prefix 7.7.7.7/32 algorithm 128 index 107
+ segment-routing prefix 7.7.7.7/32 algorithm 129 index 207
+ segment-routing prefix 7.7.7.7/32 algorithm 130 index 307
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt7/step1/route.json b/tests/topotests/isis_sr_flex_algo_topo2/rt7/step1/route.json
new file mode 100644
index 0000000..aeaa604
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt7/step1/route.json
@@ -0,0 +1,428 @@
+{
+ "20000":{
+ "inLabel":20000,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20000,
+ "outLabelStack":[
+ 20000
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.8"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20000,
+ "outLabelStack":[
+ 20000
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.6"
+ }
+ ]
+ },
+ "20001":{
+ "inLabel":20001,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20001,
+ "outLabelStack":[
+ 20001
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.8"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20001,
+ "outLabelStack":[
+ 20001
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.6"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20001,
+ "outLabelStack":[
+ 20001
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.37.0.3"
+ }
+ ]
+ },
+ "20002":{
+ "inLabel":20002,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20002,
+ "outLabelStack":[
+ 20002
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.6"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20002,
+ "outLabelStack":[
+ 20002
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.37.0.3"
+ }
+ ]
+ },
+ "20003":{
+ "inLabel":20003,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.37.0.3"
+ }
+ ]
+ },
+ "20004":{
+ "inLabel":20004,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20004,
+ "outLabelStack":[
+ 20004
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.8"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20004,
+ "outLabelStack":[
+ 20004
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.37.0.3"
+ }
+ ]
+ },
+ "20005":{
+ "inLabel":20005,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20005,
+ "outLabelStack":[
+ 20005
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.8"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20005,
+ "outLabelStack":[
+ 20005
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.6"
+ }
+ ]
+ },
+ "20006":{
+ "inLabel":20006,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.6"
+ }
+ ]
+ },
+ "20008":{
+ "inLabel":20008,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.8"
+ }
+ ]
+ },
+ "20009":{
+ "inLabel":20009,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.9"
+ }
+ ]
+ },
+ "20200":{
+ "inLabel":20200,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20200,
+ "outLabelStack":[
+ 20200
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.8"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20200,
+ "outLabelStack":[
+ 20200
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.6"
+ }
+ ]
+ },
+ "20205":{
+ "inLabel":20205,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20205,
+ "outLabelStack":[
+ 20205
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.8"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20205,
+ "outLabelStack":[
+ 20205
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.6"
+ }
+ ]
+ },
+ "20206":{
+ "inLabel":20206,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.6"
+ }
+ ]
+ },
+ "20208":{
+ "inLabel":20208,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.8"
+ }
+ ]
+ },
+ "20209":{
+ "inLabel":20209,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.9"
+ }
+ ]
+ },
+ "20300":{
+ "inLabel":20300,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20300,
+ "outLabelStack":[
+ 20300
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.6"
+ }
+ ]
+ },
+ "20301":{
+ "inLabel":20301,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20301,
+ "outLabelStack":[
+ 20301
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.9"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20301,
+ "outLabelStack":[
+ 20301
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.6"
+ }
+ ]
+ },
+ "20302":{
+ "inLabel":20302,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20302,
+ "outLabelStack":[
+ 20302
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.9"
+ }
+ ]
+ },
+ "20303":{
+ "inLabel":20303,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20303,
+ "outLabelStack":[
+ 20303
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.9"
+ }
+ ]
+ },
+ "20305":{
+ "inLabel":20305,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20305,
+ "outLabelStack":[
+ 20305
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.6"
+ }
+ ]
+ },
+ "20306":{
+ "inLabel":20306,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.67.0.6"
+ }
+ ]
+ },
+ "20309":{
+ "inLabel":20309,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.9"
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt7/zebra.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt7/zebra.conf
new file mode 100644
index 0000000..b5a28c7
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt7/zebra.conf
@@ -0,0 +1,40 @@
+log file zebra.log
+!
+hostname rt7
+!
+log stdout notifications
+log monitor notifications
+log commands
+!
+!debug zebra packet
+!debug zebra dplane
+!debug zebra kernel
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip address 7.7.7.7/32
+!
+interface eth-rt3
+ ip address 10.37.0.7/24
+!
+interface eth-rt6
+ ip address 10.67.0.7/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+interface eth-rt8
+ ip address 10.78.0.7/24
+!
+interface eth-rt9
+ ip address 10.79.0.7/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+ip forwarding
+ipv6 forwarding
+!
+line vty
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt8/isisd.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt8/isisd.conf
new file mode 100644
index 0000000..04e925e
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt8/isisd.conf
@@ -0,0 +1,50 @@
+password 1
+hostname rt8
+log file isisd.log
+!
+!debug isis events
+!debug isis spf-events
+!debug isis route-events
+!debug isis sr-events
+!debug isis lsp-gen
+!
+interface lo
+ ip router isis 1
+ isis passive
+!
+interface eth-rt4
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt5
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt7
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+router isis 1
+ lsp-gen-interval 2
+ net 49.0000.0000.0000.1008.00
+ is-type level-1
+ topology ipv6-unicast
+ mpls-te on
+ !
+ flex-algo 129
+ dataplane sr-mpls
+ !
+ segment-routing on
+ segment-routing global-block 20000 23999
+ segment-routing node-msd 8
+ segment-routing prefix 8.8.8.8/32 index 8
+ segment-routing prefix 8.8.8.8/32 algorithm 128 index 108
+ segment-routing prefix 8.8.8.8/32 algorithm 129 index 208
+ segment-routing prefix 8.8.8.8/32 algorithm 130 index 308
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt8/step1/route.json b/tests/topotests/isis_sr_flex_algo_topo2/rt8/step1/route.json
new file mode 100644
index 0000000..27470b7
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt8/step1/route.json
@@ -0,0 +1,286 @@
+{
+ "20000":{
+ "inLabel":20000,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20000,
+ "outLabelStack":[
+ 20000
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.5"
+ }
+ ]
+ },
+ "20001":{
+ "inLabel":20001,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20001,
+ "outLabelStack":[
+ 20001
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20001,
+ "outLabelStack":[
+ 20001
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.48.0.4"
+ }
+ ]
+ },
+ "20002":{
+ "inLabel":20002,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20002,
+ "outLabelStack":[
+ 20002
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.7"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20002,
+ "outLabelStack":[
+ 20002
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20002,
+ "outLabelStack":[
+ 20002
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.48.0.4"
+ }
+ ]
+ },
+ "20003":{
+ "inLabel":20003,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20003,
+ "outLabelStack":[
+ 20003
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.7"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20003,
+ "outLabelStack":[
+ 20003
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.48.0.4"
+ }
+ ]
+ },
+ "20004":{
+ "inLabel":20004,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.48.0.4"
+ }
+ ]
+ },
+ "20005":{
+ "inLabel":20005,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.5"
+ }
+ ]
+ },
+ "20006":{
+ "inLabel":20006,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20006,
+ "outLabelStack":[
+ 20006
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.7"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20006,
+ "outLabelStack":[
+ 20006
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.5"
+ }
+ ]
+ },
+ "20007":{
+ "inLabel":20007,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.7"
+ }
+ ]
+ },
+ "20009":{
+ "inLabel":20009,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20009,
+ "outLabelStack":[
+ 20009
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.7"
+ }
+ ]
+ },
+ "20200":{
+ "inLabel":20200,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20200,
+ "outLabelStack":[
+ 20200
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.5"
+ }
+ ]
+ },
+ "20205":{
+ "inLabel":20205,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.5"
+ }
+ ]
+ },
+ "20206":{
+ "inLabel":20206,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20206,
+ "outLabelStack":[
+ 20206
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.7"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20206,
+ "outLabelStack":[
+ 20206
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.58.0.5"
+ }
+ ]
+ },
+ "20207":{
+ "inLabel":20207,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.7"
+ }
+ ]
+ },
+ "20209":{
+ "inLabel":20209,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20209,
+ "outLabelStack":[
+ 20209
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.78.0.7"
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt8/zebra.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt8/zebra.conf
new file mode 100644
index 0000000..dd63f8c
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt8/zebra.conf
@@ -0,0 +1,29 @@
+log file zebra.log
+!
+hostname rt8
+!
+log stdout notifications
+log monitor notifications
+log commands
+!
+!debug zebra packet
+!debug zebra dplane
+!debug zebra kernel
+!
+interface lo
+ ip address 8.8.8.8/32
+!
+interface eth-rt4
+ ip address 10.48.0.8/24
+!
+interface eth-rt5
+ ip address 10.58.0.8/24
+!
+interface eth-rt7
+ ip address 10.78.0.8/24
+!
+ip forwarding
+ipv6 forwarding
+!
+line vty
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt9/bgpd.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt9/bgpd.conf
new file mode 100644
index 0000000..386d811
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt9/bgpd.conf
@@ -0,0 +1,17 @@
+!
+router bgp 1
+ bgp router-id 9.9.9.9
+ no bgp network import-check
+ neighbor 10.10.10.10 remote-as 1
+ neighbor 10.10.10.10 update-source 9.9.9.9
+ !
+ address-family ipv4 unicast
+ network 10.255.9.0/24
+ neighbor 10.10.10.10 next-hop-self
+ neighbor 10.10.10.10 route-map sr-te in
+ exit-address-family
+!
+route-map sr-te permit 10
+ set sr-te color 1
+exit
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt9/isisd.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt9/isisd.conf
new file mode 100644
index 0000000..dabb998
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt9/isisd.conf
@@ -0,0 +1,56 @@
+password 1
+hostname rt9
+log file isisd.log
+!
+!debug isis events
+!debug isis spf-events
+!debug isis route-events
+!debug isis sr-events
+!debug isis lsp-gen
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip router isis 1
+ isis passive
+!
+interface eth-rt3
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+interface eth-rt7
+ ip router isis 1
+ isis hello-multiplier 10
+ isis network point-to-point
+ isis circuit-type level-1
+!
+router isis 1
+ lsp-gen-interval 2
+ net 49.0000.0000.0000.1009.00
+ is-type level-1
+ topology ipv6-unicast
+ mpls-te on
+ !
+ flex-algo 128
+ dataplane sr-mpls
+ advertise-definition
+ !
+ flex-algo 129
+ dataplane sr-mpls
+ advertise-definition
+ !
+ flex-algo 130
+ dataplane sr-mpls
+ advertise-definition
+ affinity include-any blue
+ !
+ segment-routing on
+ segment-routing global-block 20000 23999
+ segment-routing node-msd 8
+ segment-routing prefix 9.9.9.9/32 index 9
+ segment-routing prefix 9.9.9.9/32 algorithm 128 index 109
+ segment-routing prefix 9.9.9.9/32 algorithm 129 index 209
+ segment-routing prefix 9.9.9.9/32 algorithm 130 index 309
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt9/pathd.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt9/pathd.conf
new file mode 100644
index 0000000..3f9a8d9
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt9/pathd.conf
@@ -0,0 +1,20 @@
+log file pathd.log
+!
+hostname rt9
+!
+segment-routing
+ traffic-eng
+ segment-list sid-algorithm-0
+ index 10 mpls label 20000
+ exit
+ segment-list sid-algorithm-128
+ index 10 mpls label 20100
+ exit
+ segment-list sid-algorithm-129
+ index 10 mpls label 20200
+ exit
+ segment-list sid-algorithm-130
+ index 10 mpls label 20300
+ exit
+ exit
+exit
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt9/step1/route.json b/tests/topotests/isis_sr_flex_algo_topo2/rt9/step1/route.json
new file mode 100644
index 0000000..e98680c
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt9/step1/route.json
@@ -0,0 +1,438 @@
+{
+ "20000":{
+ "inLabel":20000,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20000,
+ "outLabelStack":[
+ 20000
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.7"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20000,
+ "outLabelStack":[
+ 20000
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.3"
+ }
+ ]
+ },
+ "20001":{
+ "inLabel":20001,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20001,
+ "outLabelStack":[
+ 20001
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.3"
+ }
+ ]
+ },
+ "20002":{
+ "inLabel":20002,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20002,
+ "outLabelStack":[
+ 20002
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.3"
+ }
+ ]
+ },
+ "20003":{
+ "inLabel":20003,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.3"
+ }
+ ]
+ },
+ "20004":{
+ "inLabel":20004,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20004,
+ "outLabelStack":[
+ 20004
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.3"
+ }
+ ]
+ },
+ "20005":{
+ "inLabel":20005,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20005,
+ "outLabelStack":[
+ 20005
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.7"
+ }
+ ]
+ },
+ "20006":{
+ "inLabel":20006,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20006,
+ "outLabelStack":[
+ 20006
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.7"
+ }
+ ]
+ },
+ "20007":{
+ "inLabel":20007,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.7"
+ }
+ ]
+ },
+ "20008":{
+ "inLabel":20008,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20008,
+ "outLabelStack":[
+ 20008
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.7"
+ }
+ ]
+ },
+ "20100":{
+ "inLabel":20100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20100,
+ "outLabelStack":[
+ 20100
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.3"
+ }
+ ]
+ },
+ "20101":{
+ "inLabel":20101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20101,
+ "outLabelStack":[
+ 20101
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.3"
+ }
+ ]
+ },
+ "20102":{
+ "inLabel":20102,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20102,
+ "outLabelStack":[
+ 20102
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.3"
+ }
+ ]
+ },
+ "20103":{
+ "inLabel":20103,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.3"
+ }
+ ]
+ },
+ "20104":{
+ "inLabel":20104,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20104,
+ "outLabelStack":[
+ 20104
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.3"
+ }
+ ]
+ },
+ "20200":{
+ "inLabel":20200,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20200,
+ "outLabelStack":[
+ 20200
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.7"
+ }
+ ]
+ },
+ "20205":{
+ "inLabel":20205,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20205,
+ "outLabelStack":[
+ 20205
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.7"
+ }
+ ]
+ },
+ "20206":{
+ "inLabel":20206,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20206,
+ "outLabelStack":[
+ 20206
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.7"
+ }
+ ]
+ },
+ "20207":{
+ "inLabel":20207,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.7"
+ }
+ ]
+ },
+ "20208":{
+ "inLabel":20208,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20208,
+ "outLabelStack":[
+ 20208
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.7"
+ }
+ ]
+ },
+ "20300":{
+ "inLabel":20300,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20300,
+ "outLabelStack":[
+ 20300
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.7"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20300,
+ "outLabelStack":[
+ 20300
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.3"
+ }
+ ]
+ },
+ "20301":{
+ "inLabel":20301,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20301,
+ "outLabelStack":[
+ 20301
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.3"
+ }
+ ]
+ },
+ "20302":{
+ "inLabel":20302,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20302,
+ "outLabelStack":[
+ 20302
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.3"
+ }
+ ]
+ },
+ "20303":{
+ "inLabel":20303,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.39.0.3"
+ }
+ ]
+ },
+ "20305":{
+ "inLabel":20305,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20305,
+ "outLabelStack":[
+ 20305
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.7"
+ }
+ ]
+ },
+ "20306":{
+ "inLabel":20306,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":20306,
+ "outLabelStack":[
+ 20306
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.7"
+ }
+ ]
+ },
+ "20307":{
+ "inLabel":20307,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "outLabelStack":[
+ 3
+ ],
+ "distance":150,
+ "installed":true,
+ "nexthop":"10.79.0.7"
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/rt9/zebra.conf b/tests/topotests/isis_sr_flex_algo_topo2/rt9/zebra.conf
new file mode 100644
index 0000000..378a196
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/rt9/zebra.conf
@@ -0,0 +1,34 @@
+log file zebra.log
+!
+hostname rt9
+!
+log stdout notifications
+log monitor notifications
+log commands
+!
+!debug zebra packet
+!debug zebra dplane
+!debug zebra kernel
+!
+affinity-map blue bit-position 0
+!
+interface lo
+ ip address 9.9.9.9/32
+!
+interface eth-rt3
+ ip address 10.39.0.9/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+interface eth-rt7
+ ip address 10.79.0.9/24
+ link-params
+ affinity blue
+ exit-link-params
+!
+ip forwarding
+ipv6 forwarding
+!
+line vty
+!
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/test_isis_sr_flex_algo_topo2.py b/tests/topotests/isis_sr_flex_algo_topo2/test_isis_sr_flex_algo_topo2.py
new file mode 100755
index 0000000..6a5f81d
--- /dev/null
+++ b/tests/topotests/isis_sr_flex_algo_topo2/test_isis_sr_flex_algo_topo2.py
@@ -0,0 +1,187 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
+
+#
+# Part of NetDEF Topology Tests
+#
+# Copyright 2021 by LINE Corporation, Hiroki Shirokura <hiroki.shirokura@linecorp.com>
+# Copyright 2023 6WIND S.A.
+
+"""
+test_isis_sr_flex_algo_topo2.py:
+
+[+] Flex-Algos 128
+[+] Flex-Algos 129
+[+] Flex-Algos 130 include-any blue
+
+ +--------+ +--------+
+ | | | |
+ | RT1 |------------------| RT2 |
+ | | | |
+ +--------+ +--------+
+ / | \\ | \\
+ / | \\ | \\
++--------+ | \\ | \\
+| | | +--------+ | +--------+
+| RT0 | | | | | | |
+| | | | RT4 |------------------| RT3 |
++--------+ | | | | | |
+ \\ | +--------+ | +--------+
+ \\ | | | | \\
+ +--------+ | +--------+ | \\
+ | | | | | | +--------+
+ | RT5 |-------|----------| RT6 | | | |
+ | | | | | | | RT9 |
+ +--------+ | +--------+ | | |
+ \\ | \\ | +--------+
+ \\ | \\ | /
+ \\ | \\ | /
+ +--------+ +--------+
+ | | | |
+ | RT8 |------------------| RT7 |
+ | | | |
+ +--------+ +--------+
+"""
+
+import os
+import sys
+import pytest
+import json
+import time
+from functools import partial
+
+# Save the Current Working Directory to find configuration files.
+CWD = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(CWD, "../"))
+
+# pylint: disable=C0413
+# Import topogen and topotest helpers
+from lib import topotest
+from lib.topogen import Topogen, TopoRouter, get_topogen
+from lib.topolog import logger
+
+
+pytestmark = [pytest.mark.isisd]
+
+
+def build_topo(tgen):
+ "Build function"
+
+ routers = []
+ for i in range(0, 10):
+ rt = tgen.add_router("rt{}".format(i))
+ rt.run("sysctl -w net.ipv4.fib_multipath_hash_policy=1")
+
+ def connect_routers(tgen, left_idx, right_idx):
+ left = "rt{}".format(left_idx)
+ right = "rt{}".format(right_idx)
+ switch = tgen.add_switch("s-{}-{}".format(left, right))
+ switch.add_link(tgen.gears[left], nodeif="eth-{}".format(right))
+ switch.add_link(tgen.gears[right], nodeif="eth-{}".format(left))
+ l_addr = "52:54:00:{}:{}:{}".format(left_idx, right_idx, left_idx)
+ tgen.gears[left].run("ip link set eth-{} down".format(right))
+ tgen.gears[left].run("ip link set eth-{} address {}".format(right, l_addr))
+ tgen.gears[left].run("ip link set eth-{} up".format(right))
+ tgen.gears[left].run("sysctl -w net.mpls.conf.eth-{}.input=1".format(right))
+ r_addr = "52:54:00:{}:{}:{}".format(left_idx, right_idx, right_idx)
+ tgen.gears[right].run("ip link set eth-{} down".format(left))
+ tgen.gears[right].run("ip link set eth-{} address {}".format(left, r_addr))
+ tgen.gears[right].run("ip link set eth-{} up".format(left))
+ tgen.gears[right].run("sysctl -w net.mpls.conf.eth-{}.input=1".format(left))
+
+ connect_routers(tgen, 0, 1)
+ connect_routers(tgen, 0, 5)
+ connect_routers(tgen, 1, 2)
+ connect_routers(tgen, 1, 4)
+ connect_routers(tgen, 1, 5)
+ connect_routers(tgen, 2, 3)
+ connect_routers(tgen, 2, 6)
+ connect_routers(tgen, 3, 4)
+ connect_routers(tgen, 3, 7)
+ connect_routers(tgen, 3, 9)
+ connect_routers(tgen, 4, 8)
+ connect_routers(tgen, 5, 6)
+ connect_routers(tgen, 5, 8)
+ connect_routers(tgen, 6, 7)
+ connect_routers(tgen, 7, 8)
+ connect_routers(tgen, 7, 9)
+
+
+def setup_module(mod):
+ "Sets up the pytest environment"
+ tgen = Topogen(build_topo, mod.__name__)
+ frrdir = tgen.config.get(tgen.CONFIG_SECTION, "frrdir")
+ if not os.path.isfile(os.path.join(frrdir, "pathd")):
+ pytest.skip("pathd daemon wasn't built")
+ tgen.start_topology()
+ router_list = tgen.routers()
+
+ # For all registered routers, load the zebra configuration file
+ for rname, router in router_list.items():
+ router.load_config( TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname)))
+ router.load_config( TopoRouter.RD_ISIS, os.path.join(CWD, "{}/isisd.conf".format(rname)))
+ if rname in ["rt0", "rt9"]:
+ router.load_config( TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname)))
+ router.load_config( TopoRouter.RD_PATH, os.path.join(CWD, "{}/pathd.conf".format(rname)))
+ router.run("ip link add dum0 type dummy")
+ router.run("ip link set dum0 up")
+ if rname == "rt0":
+ router.run("ip addr add 10.255.0.1/24 dev dum0")
+ elif rname == "rt9":
+ router.run("ip addr add 10.255.9.1/24 dev dum0")
+ tgen.start_router()
+
+
+def teardown_module(mod):
+ "Teardown the pytest environment"
+ tgen = get_topogen()
+ tgen.stop_topology()
+
+
+def setup_testcase(msg):
+ logger.info(msg)
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+ return tgen
+
+def open_json_file(filename):
+ try:
+ with open(filename, "r") as f:
+ return json.load(f)
+ except IOError:
+ assert False, "Could not read file {}".format(filename)
+
+
+def check_rib(name, cmd, expected_file):
+ def _check(name, cmd, expected_file):
+ logger.info("polling")
+ tgen = get_topogen()
+ router = tgen.gears[name]
+ output = json.loads(router.vtysh_cmd(cmd))
+ expected = open_json_file("{}/{}".format(CWD, expected_file))
+ return topotest.json_cmp(output, expected)
+
+ logger.info("[+] check {} \"{}\" {}".format(name, cmd, expected_file))
+ tgen = get_topogen()
+ func = partial(_check, name, cmd, expected_file)
+ success, result = topotest.run_and_expect(func, None, count=120, wait=0.5)
+ assert result is None, "Failed"
+
+
+def test_rib():
+ check_rib("rt0", "show mpls table json", "rt0/step1/route.json")
+ check_rib("rt1", "show mpls table json", "rt1/step1/route.json")
+ check_rib("rt2", "show mpls table json", "rt2/step1/route.json")
+ check_rib("rt3", "show mpls table json", "rt3/step1/route.json")
+ check_rib("rt4", "show mpls table json", "rt4/step1/route.json")
+ check_rib("rt5", "show mpls table json", "rt5/step1/route.json")
+ check_rib("rt6", "show mpls table json", "rt6/step1/route.json")
+ check_rib("rt7", "show mpls table json", "rt7/step1/route.json")
+ check_rib("rt8", "show mpls table json", "rt8/step1/route.json")
+ check_rib("rt9", "show mpls table json", "rt9/step1/route.json")
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))