diff options
Diffstat (limited to 'tests/topotests/ospf_tilfa_topo1')
17 files changed, 1332 insertions, 0 deletions
diff --git a/tests/topotests/ospf_tilfa_topo1/__init__.py b/tests/topotests/ospf_tilfa_topo1/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/__init__.py diff --git a/tests/topotests/ospf_tilfa_topo1/rt1/ospfd.conf b/tests/topotests/ospf_tilfa_topo1/rt1/ospfd.conf new file mode 100644 index 0000000..04b2c38 --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/rt1/ospfd.conf @@ -0,0 +1,27 @@ +! debug ospf sr +! debug ospf ti-lfa +! +interface lo +! +interface eth-rt2 + ip ospf network point-to-point +! +interface eth-rt3 + ip ospf network point-to-point +! +router ospf + ospf router-id 1.1.1.1 + network 1.1.1.0/24 area 0.0.0.0 + network 10.0.0.0/16 area 0.0.0.0 + area 0.0.0.0 range 10.0.0.0/16 + area 0.0.0.0 range 1.1.1.0/24 + capability opaque + mpls-te on + mpls-te router-address 1.1.1.1 + router-info area 0.0.0.0 + passive-interface lo + segment-routing on + segment-routing global-block 16000 23999 + segment-routing node-msd 8 + segment-routing prefix 1.1.1.1/32 index 10 +! diff --git a/tests/topotests/ospf_tilfa_topo1/rt1/step1/show_ip_route_initial.ref b/tests/topotests/ospf_tilfa_topo1/rt1/step1/show_ip_route_initial.ref new file mode 100644 index 0000000..0ad2aae --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/rt1/step1/show_ip_route_initial.ref @@ -0,0 +1,156 @@ +{ + "1.1.1.1\/32":[ + { + "prefix":"1.1.1.1\/32", + "protocol":"ospf", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"lo" + } + ] + }, + { + "prefix":"1.1.1.1\/32", + "protocol":"connected", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"lo" + } + ] + } + ], + "1.1.1.2\/32":[ + { + "prefix":"1.1.1.2\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + } + ] + } + ], + "1.1.1.3\/32":[ + { + "prefix":"1.1.1.3\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ] + } + ], + "1.1.1.4\/32":[ + { + "prefix":"1.1.1.4\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + } + ] + } + ], + "1.1.1.5\/32":[ + { + "prefix":"1.1.1.5\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ] + } + ], + "10.0.1.0\/24":[ + { + "prefix":"10.0.1.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt2" + } + ] + }, + { + "prefix":"10.0.1.0\/24", + "protocol":"connected", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt2" + } + ] + } + ], + "10.0.2.0\/24":[ + { + "prefix":"10.0.2.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt3" + } + ] + }, + { + "prefix":"10.0.2.0\/24", + "protocol":"connected", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt3" + } + ] + } + ], + "10.0.3.0\/24":[ + { + "prefix":"10.0.3.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + } + ] + } + ], + "10.0.4.0\/24":[ + { + "prefix":"10.0.4.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ] + } + ], + "10.0.5.0\/24":[ + { + "prefix":"10.0.5.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + }, + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ] + } + ] +} diff --git a/tests/topotests/ospf_tilfa_topo1/rt1/step2/show_ip_route_initial.ref b/tests/topotests/ospf_tilfa_topo1/rt1/step2/show_ip_route_initial.ref new file mode 100644 index 0000000..0ad2aae --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/rt1/step2/show_ip_route_initial.ref @@ -0,0 +1,156 @@ +{ + "1.1.1.1\/32":[ + { + "prefix":"1.1.1.1\/32", + "protocol":"ospf", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"lo" + } + ] + }, + { + "prefix":"1.1.1.1\/32", + "protocol":"connected", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"lo" + } + ] + } + ], + "1.1.1.2\/32":[ + { + "prefix":"1.1.1.2\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + } + ] + } + ], + "1.1.1.3\/32":[ + { + "prefix":"1.1.1.3\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ] + } + ], + "1.1.1.4\/32":[ + { + "prefix":"1.1.1.4\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + } + ] + } + ], + "1.1.1.5\/32":[ + { + "prefix":"1.1.1.5\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ] + } + ], + "10.0.1.0\/24":[ + { + "prefix":"10.0.1.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt2" + } + ] + }, + { + "prefix":"10.0.1.0\/24", + "protocol":"connected", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt2" + } + ] + } + ], + "10.0.2.0\/24":[ + { + "prefix":"10.0.2.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt3" + } + ] + }, + { + "prefix":"10.0.2.0\/24", + "protocol":"connected", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt3" + } + ] + } + ], + "10.0.3.0\/24":[ + { + "prefix":"10.0.3.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + } + ] + } + ], + "10.0.4.0\/24":[ + { + "prefix":"10.0.4.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ] + } + ], + "10.0.5.0\/24":[ + { + "prefix":"10.0.5.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + }, + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ] + } + ] +} diff --git a/tests/topotests/ospf_tilfa_topo1/rt1/step2/show_ip_route_link_protection.ref b/tests/topotests/ospf_tilfa_topo1/rt1/step2/show_ip_route_link_protection.ref new file mode 100644 index 0000000..968570e --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/rt1/step2/show_ip_route_link_protection.ref @@ -0,0 +1,226 @@ +{ + "1.1.1.1\/32":[ + { + "prefix":"1.1.1.1\/32", + "protocol":"ospf", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"lo" + } + ] + }, + { + "prefix":"1.1.1.1\/32", + "protocol":"connected", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"lo" + } + ] + } + ], + "1.1.1.2\/32":[ + { + "prefix":"1.1.1.2\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + } + ], + "backupNexthops":[ + { + "ip":"10.0.2.2", + "labels":[ + 16050 + ] + } + ] + } + ], + "1.1.1.3\/32":[ + { + "prefix":"1.1.1.3\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ], + "backupNexthops":[ + { + "ip":"10.0.1.2", + "labels":[ + 16040 + ] + } + ] + } + ], + "1.1.1.4\/32":[ + { + "prefix":"1.1.1.4\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2", + "labels":[ + 16040 + ] + } + ], + "backupNexthops":[ + { + "ip":"10.0.2.2", + "labels":[ + 16050, + 16040 + ] + } + ] + } + ], + "1.1.1.5\/32":[ + { + "prefix":"1.1.1.5\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3", + "labels":[ + 16050 + ] + } + ], + "backupNexthops":[ + { + "ip":"10.0.1.2", + "labels":[ + 16040, + 16050 + ] + } + ] + } + ], + "10.0.1.0\/24":[ + { + "prefix":"10.0.1.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt2" + } + ] + }, + { + "prefix":"10.0.1.0\/24", + "protocol":"connected", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt2" + } + ] + } + ], + "10.0.2.0\/24":[ + { + "prefix":"10.0.2.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt3" + } + ] + }, + { + "prefix":"10.0.2.0\/24", + "protocol":"connected", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt3" + } + ] + } + ], + "10.0.3.0\/24":[ + { + "prefix":"10.0.3.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + } + ], + "backupNexthops":[ + { + "ip":"10.0.2.2", + "labels":[ + 16050 + ] + } + ] + } + ], + "10.0.4.0\/24":[ + { + "prefix":"10.0.4.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ], + "backupNexthops":[ + { + "ip":"10.0.1.2", + "labels":[ + 16040 + ] + } + ] + } + ], + "10.0.5.0\/24":[ + { + "prefix":"10.0.5.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + }, + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ], + "backupNexthops":[ + { + "ip":"10.0.1.2", + "labels":[ + 16040 + ] + }, + { + "ip":"10.0.2.2", + "labels":[ + 16050 + ] + } + ] + } + ] +} diff --git a/tests/topotests/ospf_tilfa_topo1/rt1/step3/show_ip_route_initial.ref b/tests/topotests/ospf_tilfa_topo1/rt1/step3/show_ip_route_initial.ref new file mode 100644 index 0000000..0ad2aae --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/rt1/step3/show_ip_route_initial.ref @@ -0,0 +1,156 @@ +{ + "1.1.1.1\/32":[ + { + "prefix":"1.1.1.1\/32", + "protocol":"ospf", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"lo" + } + ] + }, + { + "prefix":"1.1.1.1\/32", + "protocol":"connected", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"lo" + } + ] + } + ], + "1.1.1.2\/32":[ + { + "prefix":"1.1.1.2\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + } + ] + } + ], + "1.1.1.3\/32":[ + { + "prefix":"1.1.1.3\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ] + } + ], + "1.1.1.4\/32":[ + { + "prefix":"1.1.1.4\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + } + ] + } + ], + "1.1.1.5\/32":[ + { + "prefix":"1.1.1.5\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ] + } + ], + "10.0.1.0\/24":[ + { + "prefix":"10.0.1.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt2" + } + ] + }, + { + "prefix":"10.0.1.0\/24", + "protocol":"connected", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt2" + } + ] + } + ], + "10.0.2.0\/24":[ + { + "prefix":"10.0.2.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt3" + } + ] + }, + { + "prefix":"10.0.2.0\/24", + "protocol":"connected", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt3" + } + ] + } + ], + "10.0.3.0\/24":[ + { + "prefix":"10.0.3.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + } + ] + } + ], + "10.0.4.0\/24":[ + { + "prefix":"10.0.4.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ] + } + ], + "10.0.5.0\/24":[ + { + "prefix":"10.0.5.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + }, + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ] + } + ] +} diff --git a/tests/topotests/ospf_tilfa_topo1/rt1/step3/show_ip_route_node_protection.ref b/tests/topotests/ospf_tilfa_topo1/rt1/step3/show_ip_route_node_protection.ref new file mode 100644 index 0000000..46a80d2 --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/rt1/step3/show_ip_route_node_protection.ref @@ -0,0 +1,192 @@ +{ + "1.1.1.1\/32":[ + { + "prefix":"1.1.1.1\/32", + "protocol":"ospf", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"lo" + } + ] + }, + { + "prefix":"1.1.1.1\/32", + "protocol":"connected", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"lo" + } + ] + } + ], + "1.1.1.2\/32":[ + { + "prefix":"1.1.1.2\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + } + ] + } + ], + "1.1.1.3\/32":[ + { + "prefix":"1.1.1.3\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ] + } + ], + "1.1.1.4\/32":[ + { + "prefix":"1.1.1.4\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2", + "labels":[ + 16040 + ] + } + ], + "backupNexthops":[ + { + "ip":"10.0.2.2", + "labels":[ + 16050 + ] + } + ] + } + ], + "1.1.1.5\/32":[ + { + "prefix":"1.1.1.5\/32", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3", + "labels":[ + 16050 + ] + } + ], + "backupNexthops":[ + { + "ip":"10.0.1.2", + "labels":[ + 16040 + ] + } + ] + } + ], + "10.0.1.0\/24":[ + { + "prefix":"10.0.1.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt2" + } + ] + }, + { + "prefix":"10.0.1.0\/24", + "protocol":"connected", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt2" + } + ] + } + ], + "10.0.2.0\/24":[ + { + "prefix":"10.0.2.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt3" + } + ] + }, + { + "prefix":"10.0.2.0\/24", + "protocol":"connected", + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"eth-rt3" + } + ] + } + ], + "10.0.3.0\/24":[ + { + "prefix":"10.0.3.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + } + ] + } + ], + "10.0.4.0\/24":[ + { + "prefix":"10.0.4.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ] + } + ], + "10.0.5.0\/24":[ + { + "prefix":"10.0.5.0\/24", + "protocol":"ospf", + "nexthops":[ + { + "ip":"10.0.1.2", + "interfaceName":"eth-rt2" + }, + { + "ip":"10.0.2.2", + "interfaceName":"eth-rt3" + } + ], + "backupNexthops":[ + { + "ip":"10.0.2.2", + "labels":[ + 16050 + ] + }, + { + "ip":"10.0.1.2", + "labels":[ + 16040 + ] + } + ] + } + ] +} diff --git a/tests/topotests/ospf_tilfa_topo1/rt1/zebra.conf b/tests/topotests/ospf_tilfa_topo1/rt1/zebra.conf new file mode 100644 index 0000000..bf0e77a --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/rt1/zebra.conf @@ -0,0 +1,17 @@ +log file zebra.log +! +hostname rt1 +! +interface lo + ip address 1.1.1.1/32 +! +interface eth-rt2 + ip address 10.0.1.1/24 +! +interface eth-rt3 + ip address 10.0.2.1/24 +! +ip forwarding +! +line vty +! diff --git a/tests/topotests/ospf_tilfa_topo1/rt2/ospfd.conf b/tests/topotests/ospf_tilfa_topo1/rt2/ospfd.conf new file mode 100644 index 0000000..e6e4847 --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/rt2/ospfd.conf @@ -0,0 +1,27 @@ +! debug ospf sr +! debug ospf ti-lfa +! +interface lo +! +interface eth-rt1 + ip ospf network point-to-point +! +interface eth-rt4 + ip ospf network point-to-point +! +router ospf + ospf router-id 1.1.1.2 + network 1.1.1.0/24 area 0.0.0.0 + network 10.0.0.0/16 area 0.0.0.0 + area 0.0.0.0 range 10.0.0.0/16 + area 0.0.0.0 range 1.1.1.0/24 + capability opaque + mpls-te on + mpls-te router-address 1.1.1.2 + router-info area 0.0.0.0 + passive-interface lo + segment-routing on + segment-routing global-block 16000 23999 + segment-routing node-msd 8 + segment-routing prefix 1.1.1.2/32 index 20 +! diff --git a/tests/topotests/ospf_tilfa_topo1/rt2/zebra.conf b/tests/topotests/ospf_tilfa_topo1/rt2/zebra.conf new file mode 100644 index 0000000..add2933 --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/rt2/zebra.conf @@ -0,0 +1,17 @@ +log file zebra.log +! +hostname rt2 +! +interface lo + ip address 1.1.1.2/32 +! +interface eth-rt1 + ip address 10.0.1.2/24 +! +interface eth-rt4 + ip address 10.0.3.1/24 +! +ip forwarding +! +line vty +! diff --git a/tests/topotests/ospf_tilfa_topo1/rt3/ospfd.conf b/tests/topotests/ospf_tilfa_topo1/rt3/ospfd.conf new file mode 100644 index 0000000..472cdc6 --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/rt3/ospfd.conf @@ -0,0 +1,27 @@ +! debug ospf sr +! debug ospf ti-lfa +! +interface lo +! +interface eth-rt1 + ip ospf network point-to-point +! +interface eth-rt5 + ip ospf network point-to-point +! +router ospf + ospf router-id 1.1.1.3 + network 1.1.1.0/24 area 0.0.0.0 + network 10.0.0.0/16 area 0.0.0.0 + area 0.0.0.0 range 10.0.0.0/16 + area 0.0.0.0 range 1.1.1.0/24 + capability opaque + mpls-te on + mpls-te router-address 1.1.1.3 + router-info area 0.0.0.0 + passive-interface lo + segment-routing on + segment-routing global-block 16000 23999 + segment-routing node-msd 8 + segment-routing prefix 1.1.1.3/32 index 30 +! diff --git a/tests/topotests/ospf_tilfa_topo1/rt3/zebra.conf b/tests/topotests/ospf_tilfa_topo1/rt3/zebra.conf new file mode 100644 index 0000000..1bb64bc --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/rt3/zebra.conf @@ -0,0 +1,17 @@ +log file zebra.log +! +hostname rt3 +! +interface lo + ip address 1.1.1.3/32 +! +interface eth-rt1 + ip address 10.0.2.2/24 +! +interface eth-rt5 + ip address 10.0.4.1/24 +! +ip forwarding +! +line vty +! diff --git a/tests/topotests/ospf_tilfa_topo1/rt4/ospfd.conf b/tests/topotests/ospf_tilfa_topo1/rt4/ospfd.conf new file mode 100644 index 0000000..75770dc --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/rt4/ospfd.conf @@ -0,0 +1,27 @@ +! debug ospf sr +! debug ospf ti-lfa +! +interface lo +! +interface eth-rt2 + ip ospf network point-to-point +! +interface eth-rt5 + ip ospf network point-to-point +! +router ospf + ospf router-id 1.1.1.4 + network 1.1.1.0/24 area 0.0.0.0 + network 10.0.0.0/16 area 0.0.0.0 + area 0.0.0.0 range 10.0.0.0/16 + area 0.0.0.0 range 1.1.1.0/24 + capability opaque + mpls-te on + mpls-te router-address 1.1.1.4 + router-info area 0.0.0.0 + passive-interface lo + segment-routing on + segment-routing global-block 16000 23999 + segment-routing node-msd 8 + segment-routing prefix 1.1.1.4/32 index 40 +! diff --git a/tests/topotests/ospf_tilfa_topo1/rt4/zebra.conf b/tests/topotests/ospf_tilfa_topo1/rt4/zebra.conf new file mode 100644 index 0000000..306f0d4 --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/rt4/zebra.conf @@ -0,0 +1,17 @@ +log file zebra.log +! +hostname rt4 +! +interface lo + ip address 1.1.1.4/32 +! +interface eth-rt2 + ip address 10.0.3.2/24 +! +interface eth-rt5 + ip address 10.0.5.1/24 +! +ip forwarding +! +line vty +! diff --git a/tests/topotests/ospf_tilfa_topo1/rt5/ospfd.conf b/tests/topotests/ospf_tilfa_topo1/rt5/ospfd.conf new file mode 100644 index 0000000..ef9d583 --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/rt5/ospfd.conf @@ -0,0 +1,27 @@ +! debug ospf sr +! debug ospf ti-lfa +! +interface lo +! +interface eth-rt3 + ip ospf network point-to-point +! +interface eth-rt4 + ip ospf network point-to-point +! +router ospf + ospf router-id 1.1.1.5 + network 1.1.1.0/24 area 0.0.0.0 + network 10.0.0.0/16 area 0.0.0.0 + area 0.0.0.0 range 10.0.0.0/16 + area 0.0.0.0 range 1.1.1.0/24 + capability opaque + mpls-te on + mpls-te router-address 1.1.1.5 + router-info area 0.0.0.0 + passive-interface lo + segment-routing on + segment-routing global-block 16000 23999 + segment-routing node-msd 8 + segment-routing prefix 1.1.1.5/32 index 50 +! diff --git a/tests/topotests/ospf_tilfa_topo1/rt5/zebra.conf b/tests/topotests/ospf_tilfa_topo1/rt5/zebra.conf new file mode 100644 index 0000000..46f7595 --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/rt5/zebra.conf @@ -0,0 +1,17 @@ +log file zebra.log +! +hostname rt5 +! +interface lo + ip address 1.1.1.5/32 +! +interface eth-rt3 + ip address 10.0.4.2/24 +! +interface eth-rt4 + ip address 10.0.5.2/24 +! +ip forwarding +! +line vty +! diff --git a/tests/topotests/ospf_tilfa_topo1/test_ospf_tilfa_topo1.py b/tests/topotests/ospf_tilfa_topo1/test_ospf_tilfa_topo1.py new file mode 100644 index 0000000..f939f3f --- /dev/null +++ b/tests/topotests/ospf_tilfa_topo1/test_ospf_tilfa_topo1.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python +# SPDX-License-Identifier: ISC + +# +# test_ospf_tilfa_topo1.py +# Part of NetDEF Topology Tests +# +# Copyright (c) 2020 by +# Network Device Education Foundation, Inc. ("NetDEF") +# + +""" +test_ospf_tilfa_topo1.py: + +This topology is intentionally kept simple, its main purpose is to verify that +generated backup label stacks are inserted correctly into the RIB. For fancy +topologies please use the unit test framework provided in `/tests/ospfd`. + + + +---------+ +---------+ + | | | | + 10.0.1.0/24 eth+rt1| RT2 |eth+rt4 eth+rt2| RT2 | + +---------------------+ 2.2.2.2 +---------------------+ 4.4.4.4 | + | | | 10.0.3.0/24 | | + |eth+rt2 +---------+ +---------+ + +---------+ eth+rt5| + | | | + | RT1 | 10.0.5.0/24| + | 1.1.1.1 | | + | | | + +---------+ eth+rt4| + |eth+rt3 +---------+ +---------+ + | | | 10.0.4.0/24 | | + +---------------------+ RT3 +---------------------+ RT5 | + 10.0.2.0/24 eth+rt1| 3.3.3.3 |eth+rt5 eth-rt3| 5.5.5.5 | + | | | | + +---------+ +---------+ +""" + +import os +import sys +import pytest +import json +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 + +# Required to instantiate the topology builder class. + +pytestmark = [pytest.mark.ospfd] + + +def build_topo(tgen): + "Build function" + + # + # Define FRR Routers + # + for router in ["rt1", "rt2", "rt3", "rt4", "rt5"]: + tgen.add_router(router) + + # + # Define connections + # + switch = tgen.add_switch("s1") + switch.add_link(tgen.gears["rt1"], nodeif="eth-rt2") + switch.add_link(tgen.gears["rt2"], nodeif="eth-rt1") + + switch = tgen.add_switch("s2") + switch.add_link(tgen.gears["rt1"], nodeif="eth-rt3") + switch.add_link(tgen.gears["rt3"], nodeif="eth-rt1") + + switch = tgen.add_switch("s3") + switch.add_link(tgen.gears["rt2"], nodeif="eth-rt4") + switch.add_link(tgen.gears["rt4"], nodeif="eth-rt2") + + switch = tgen.add_switch("s4") + switch.add_link(tgen.gears["rt3"], nodeif="eth-rt5") + switch.add_link(tgen.gears["rt5"], nodeif="eth-rt3") + + switch = tgen.add_switch("s5") + switch.add_link(tgen.gears["rt4"], nodeif="eth-rt5") + switch.add_link(tgen.gears["rt5"], nodeif="eth-rt4") + + +def setup_module(mod): + "Sets up the pytest environment" + tgen = Topogen(build_topo, mod.__name__) + 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_OSPF, os.path.join(CWD, "{}/ospfd.conf".format(rname)) + ) + + tgen.start_router() + + +def teardown_module(mod): + "Teardown the pytest environment" + tgen = get_topogen() + + # This function tears down the whole topology. + tgen.stop_topology() + + +def router_compare_json_output(rname, command, reference): + "Compare router JSON output" + + logger.info('Comparing router "%s" "%s" output', rname, command) + + tgen = get_topogen() + filename = "{}/{}/{}".format(CWD, rname, reference) + expected = json.loads(open(filename).read()) + + # Run test function until we get an result. Wait at most 60 seconds. + test_func = partial(topotest.router_json_cmp, tgen.gears[rname], command, expected) + _, diff = topotest.run_and_expect(test_func, None, count=120, wait=0.5) + assertmsg = '"{}" JSON output mismatches the expected result'.format(rname) + assert diff is None, assertmsg + + +def test_ospf_initial_convergence_step1(): + logger.info("Test (step 1): check initial convergence") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + router_compare_json_output( + "rt1", + "show ip route json", + "step1/show_ip_route_initial.ref", + ) + + +def test_ospf_link_protection_step2(): + logger.info("Test (step 2): check OSPF link protection") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + # enable TI-LFA link protection on all interfaces + tgen.net["rt1"].cmd('vtysh -c "conf t" -c "router ospf" -c "fast-reroute ti-lfa"') + + router_compare_json_output( + "rt1", + "show ip route json", + "step2/show_ip_route_link_protection.ref", + ) + + # disable TI-LFA link protection on all interfaces + tgen.net["rt1"].cmd( + 'vtysh -c "conf t" -c "router ospf" -c "no fast-reroute ti-lfa"' + ) + + # check if we got back to the initial route table + router_compare_json_output( + "rt1", + "show ip route json", + "step2/show_ip_route_initial.ref", + ) + + +def test_ospf_node_protection_step3(): + logger.info("Test (step 3): check OSPF node protection") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + # enable TI-LFA node protection on all interfaces + tgen.net["rt1"].cmd( + 'vtysh -c "conf t" -c "router ospf" -c "fast-reroute ti-lfa node-protection"' + ) + + router_compare_json_output( + "rt1", + "show ip route json", + "step3/show_ip_route_node_protection.ref", + ) + + # disable TI-LFA node protection on all interfaces + tgen.net["rt1"].cmd( + 'vtysh -c "conf t" -c "router ospf" -c "no fast-reroute ti-lfa node-protection"' + ) + + # check if we got back to the initial route table + router_compare_json_output( + "rt1", + "show ip route json", + "step3/show_ip_route_initial.ref", + ) + + +# Memory leak test template +def test_memory_leak(): + "Run the memory leak test and report results." + tgen = get_topogen() + if not tgen.is_memleak_enabled(): + pytest.skip("Memory leak test/report is disabled") + + tgen.report_memory_leaks() + + +if __name__ == "__main__": + args = ["-s"] + sys.argv[1:] + sys.exit(pytest.main(args)) |