diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-09 13:16:35 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-09 13:16:35 +0000 |
commit | e2bbf175a2184bd76f6c54ccf8456babeb1a46fc (patch) | |
tree | f0b76550d6e6f500ada964a3a4ee933a45e5a6f1 /tests/topotests/ldp_sync_ospf_topo1 | |
parent | Initial commit. (diff) | |
download | frr-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/ldp_sync_ospf_topo1')
60 files changed, 1920 insertions, 0 deletions
diff --git a/tests/topotests/ldp_sync_ospf_topo1/ce1/zebra.conf b/tests/topotests/ldp_sync_ospf_topo1/ce1/zebra.conf new file mode 100644 index 0000000..6f165e2 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/ce1/zebra.conf @@ -0,0 +1,12 @@ +log file zebra.log +! +hostname ce1 +! +interface ce1-eth0 + ip address 172.16.1.1/24 + no link-detect +! +ip forwarding +! +line vty +! diff --git a/tests/topotests/ldp_sync_ospf_topo1/ce2/zebra.conf b/tests/topotests/ldp_sync_ospf_topo1/ce2/zebra.conf new file mode 100644 index 0000000..ac02d0f --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/ce2/zebra.conf @@ -0,0 +1,12 @@ +log file zebra.log +! +hostname ce2 +! +interface ce2-eth0 + ip address 172.16.1.2/24 + no link-detect +! +ip forwarding +! +line vty +! diff --git a/tests/topotests/ldp_sync_ospf_topo1/ce3/zebra.conf b/tests/topotests/ldp_sync_ospf_topo1/ce3/zebra.conf new file mode 100644 index 0000000..c6a5824 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/ce3/zebra.conf @@ -0,0 +1,12 @@ +log file zebra.log +! +hostname ce3 +! +interface ce3-eth0 + ip address 172.16.1.3/24 + no link-detect +! +ip forwarding +! +line vty +! diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/ldpd.conf b/tests/topotests/ldp_sync_ospf_topo1/r1/ldpd.conf new file mode 100644 index 0000000..973acf4 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/ldpd.conf @@ -0,0 +1,33 @@ +hostname r1 +log file ldpd.log +! +! debug mpls ldp zebra +! debug mpls ldp event +! debug mpls ldp errors +! debug mpls ldp sync +! +mpls ldp + router-id 1.1.1.1 + ! + address-family ipv4 + discovery transport-address 1.1.1.1 + label local allocate host-routes + ! + ttl-security disable + ! + interface r1-eth1 + ! + interface r1-eth2 + ! + ! +! +l2vpn CUST_A type vpls + member interface r1-eth0 + ! + member pseudowire r1-mpw0 + neighbor lsr-id 2.2.2.2 + pw-id 100 + ! +! +line vty +! diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/ospf-nbrs.txt b/tests/topotests/ldp_sync_ospf_topo1/r1/ospf-nbrs.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/ospf-nbrs.txt diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/ospfd.conf b/tests/topotests/ldp_sync_ospf_topo1/r1/ospfd.conf new file mode 100644 index 0000000..dc20169 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/ospfd.conf @@ -0,0 +1,20 @@ +hostname r1 +log file ospfd.log +! debug ospf zebra interface +! debug ospf ldp-sync +! +router ospf + router-id 1.1.1.1 + network 10.0.1.1/24 area 0 + network 10.0.2.1/24 area 0 + network 1.1.1.1/32 area 0 + mpls ldp-sync + ! mpls ldp-sync holddown 50 +! +interface r1-eth1 + ip ospf network point-to-point + ! ip ospf mpls ldp-sync holddown 40 +! +interface r1-eth2 + ip ospf network point-to-point +! diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface.ref new file mode 100644 index 0000000..8b28847 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface.ref @@ -0,0 +1,11 @@ +{ + "interfaces":{ + "r1-eth1":{ + "cost":10 + }, + "r1-eth2":{ + "cost":10 + } + } +} + diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface_r1_eth1_shutdown.ref new file mode 100644 index 0000000..b1a263e --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface_r1_eth1_shutdown.ref @@ -0,0 +1,8 @@ +{ + "interfaces":{ + "r1-eth2":{ + "cost":10 + } + } +} + diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface_r2_eth1_shutdown.ref new file mode 100644 index 0000000..0c14733 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface_r2_eth1_shutdown.ref @@ -0,0 +1,11 @@ +{ + "interfaces":{ + "r1-eth1":{ + "cost":65535 + }, + "r1-eth2":{ + "cost":10 + } + } +} + diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_neighbor.json b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_neighbor.json new file mode 100644 index 0000000..e25523d --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_neighbor.json @@ -0,0 +1,26 @@ +{ + "neighbors": { + "2.2.2.2": [ + { + "databaseSummaryListCounter": 0, + "linkStateRetransmissionListCounter": 0, + "nbrPriority": 1, + "converged": "Full", + "ifaceAddress": "10.0.1.2", + "ifaceName": "r1-eth1:10.0.1.1", + "linkStateRequestListCounter": 0 + } + ], + "3.3.3.3": [ + { + "databaseSummaryListCounter": 0, + "linkStateRetransmissionListCounter": 0, + "nbrPriority": 1, + "converged": "Full", + "ifaceAddress": "10.0.2.3", + "ifaceName": "r1-eth2:10.0.2.1", + "linkStateRequestListCounter": 0 + } + ] + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_route.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_route.ref new file mode 100644 index 0000000..fdb81f2 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_route.ref @@ -0,0 +1,147 @@ +{ + "1.1.1.1/32":[ + { + "prefix":"1.1.1.1/32", + "protocol":"ospf", + "distance":110, + "metric":0, + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"lo", + "active":true + } + ] + }, + { + "prefix":"1.1.1.1/32", + "protocol":"connected", + "selected":true, + "nexthops":[ + { + "fib":true, + "directlyConnected":true, + "interfaceName":"lo", + "active":true + } + ] + } + ], + "2.2.2.2/32":[ + { + "prefix":"2.2.2.2/32", + "protocol":"ospf", + "selected":true, + "distance":110, + "metric":10, + "nexthops":[ + { + "fib":true, + "ip":"10.0.1.2", + "afi":"ipv4", + "interfaceName":"r1-eth1", + "active":true + } + ] + } + ], + "3.3.3.3/32":[ + { + "prefix":"3.3.3.3/32", + "protocol":"ospf", + "selected":true, + "distance":110, + "metric":10, + "nexthops":[ + { + "fib":true, + "ip":"10.0.2.3", + "afi":"ipv4", + "interfaceName":"r1-eth2", + "active":true + } + ] + } + ], + "10.0.1.0/24":[ + { + "prefix":"10.0.1.0/24", + "protocol":"ospf", + "distance":110, + "metric":10, + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"r1-eth1", + "active":true + } + ] + }, + { + "prefix":"10.0.1.0/24", + "protocol":"connected", + "selected":true, + "nexthops":[ + { + "fib":true, + "directlyConnected":true, + "interfaceName":"r1-eth1", + "active":true + } + ] + } + ], + "10.0.2.0/24":[ + { + "prefix":"10.0.2.0/24", + "protocol":"ospf", + "distance":110, + "metric":10, + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"r1-eth2", + "active":true + } + ] + }, + { + "prefix":"10.0.2.0/24", + "protocol":"connected", + "selected":true, + "nexthops":[ + { + "fib":true, + "directlyConnected":true, + "interfaceName":"r1-eth2", + "active":true + } + ] + } + ], + "10.0.3.0/24":[ + { + "prefix":"10.0.3.0/24", + "protocol":"ospf", + "selected":true, + "distance":110, + "metric":20, + "nexthops":[ + { + "fib":true, + "ip":"10.0.1.2", + "afi":"ipv4", + "interfaceName":"r1-eth1", + "active":true + }, + { + "fib":true, + "ip":"10.0.2.3", + "afi":"ipv4", + "interfaceName":"r1-eth2", + "active":true + } + ] + } + ] +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/show_l2vpn_binding.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_l2vpn_binding.ref new file mode 100644 index 0000000..b3de7e2 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_l2vpn_binding.ref @@ -0,0 +1,16 @@ +{ + "2.2.2.2: 100":{ + "destination":"2.2.2.2", + "vcId":100, + "localLabel":16, + "localControlWord":1, + "localVcType":"Ethernet", + "localGroupID":0, + "localIfMtu":1500, + "remoteLabel":16, + "remoteControlWord":1, + "remoteVcType":"Ethernet", + "remoteGroupID":0, + "remoteIfMtu":1500 + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/show_l2vpn_vc.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_l2vpn_vc.ref new file mode 100644 index 0000000..675af4d --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_l2vpn_vc.ref @@ -0,0 +1,8 @@ +{ + "r1-mpw0":{ + "peerId":"2.2.2.2", + "vcId":100, + "vpnName":"CUST_A", + "status":"up" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_binding.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_binding.ref new file mode 100644 index 0000000..b3a12ec --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_binding.ref @@ -0,0 +1,44 @@ +{ + "bindings":[ + { + "addressFamily":"ipv4", + "prefix":"1.1.1.1/32", + "neighborId":"2.2.2.2", + "localLabel":"imp-null", + "inUse":0 + }, + { + "addressFamily":"ipv4", + "prefix":"1.1.1.1/32", + "neighborId":"3.3.3.3", + "localLabel":"imp-null", + "inUse":0 + }, + { + "addressFamily":"ipv4", + "prefix":"2.2.2.2/32", + "neighborId":"2.2.2.2", + "remoteLabel":"imp-null", + "inUse":1 + }, + { + "addressFamily":"ipv4", + "prefix":"2.2.2.2/32", + "neighborId":"3.3.3.3", + "inUse":0 + }, + { + "addressFamily":"ipv4", + "prefix":"3.3.3.3/32", + "neighborId":"2.2.2.2", + "inUse":0 + }, + { + "addressFamily":"ipv4", + "prefix":"3.3.3.3/32", + "neighborId":"3.3.3.3", + "remoteLabel":"imp-null", + "inUse":1 + } + ] +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_discovery.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_discovery.ref new file mode 100644 index 0000000..9301e60 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_discovery.ref @@ -0,0 +1,25 @@ +{ + "adjacencies":[ + { + "addressFamily":"ipv4", + "neighborId":"2.2.2.2", + "type":"link", + "interface":"r1-eth1", + "helloHoldtime":15 + }, + { + "addressFamily":"ipv4", + "neighborId":"2.2.2.2", + "type":"targeted", + "peer":"2.2.2.2", + "helloHoldtime":45 + }, + { + "addressFamily":"ipv4", + "neighborId":"3.3.3.3", + "type":"link", + "interface":"r1-eth2", + "helloHoldtime":15 + } + ] +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_igp_sync.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_igp_sync.ref new file mode 100644 index 0000000..54d015f --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_igp_sync.ref @@ -0,0 +1,16 @@ +{ + "r1-eth1":{ + "state":"labelExchangeComplete", + "waitTime":10, + "waitTimeRemaining":0, + "timerRunning":false, + "peerLdpId":"2.2.2.2" + }, + "r1-eth2":{ + "state":"labelExchangeComplete", + "waitTime":10, + "waitTimeRemaining":0, + "timerRunning":false, + "peerLdpId":"3.3.3.3" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref new file mode 100644 index 0000000..2232069 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref @@ -0,0 +1,16 @@ +{ + "r1-eth1":{ + "state":"labelExchangeNotComplete", + "waitTime":10, + "waitTimeRemaining":0, + "timerRunning":false, + "peerLdpId":"" + }, + "r1-eth2":{ + "state":"labelExchangeComplete", + "waitTime":10, + "waitTimeRemaining":0, + "timerRunning":false, + "peerLdpId":"3.3.3.3" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_neighbor.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_neighbor.ref new file mode 100644 index 0000000..40d8ebe --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_neighbor.ref @@ -0,0 +1,16 @@ +{ + "neighbors":[ + { + "addressFamily":"ipv4", + "neighborId":"2.2.2.2", + "state":"OPERATIONAL", + "transportAddress":"2.2.2.2" + }, + { + "addressFamily":"ipv4", + "neighborId":"3.3.3.3", + "state":"OPERATIONAL", + "transportAddress":"3.3.3.3" + } + ] +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync.ref new file mode 100644 index 0000000..3782071 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync.ref @@ -0,0 +1,12 @@ +{ + "r1-eth1":{ + "ldpIgpSyncEnabled":true, + "holdDownTimeInSec":0, + "ldpIgpSyncState":"Sync achieved" + }, + "r1-eth2":{ + "ldpIgpSyncEnabled":true, + "holdDownTimeInSec":0, + "ldpIgpSyncState":"Sync achieved" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync_r1_eth1_shutdown.ref new file mode 100644 index 0000000..c2642c6 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync_r1_eth1_shutdown.ref @@ -0,0 +1,7 @@ +{ + "r1-eth2":{ + "ldpIgpSyncEnabled":true, + "holdDownTimeInSec":0, + "ldpIgpSyncState":"Sync achieved" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync_r2_eth1_shutdown.ref new file mode 100644 index 0000000..6f180b0 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync_r2_eth1_shutdown.ref @@ -0,0 +1,12 @@ +{ + "r1-eth1":{ + "ldpIgpSyncEnabled":true, + "holdDownTimeInSec":0, + "ldpIgpSyncState":"Sync not achieved" + }, + "r1-eth2":{ + "ldpIgpSyncEnabled":true, + "holdDownTimeInSec":0, + "ldpIgpSyncState":"Sync achieved" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r1/zebra.conf b/tests/topotests/ldp_sync_ospf_topo1/r1/zebra.conf new file mode 100644 index 0000000..bbb98d2 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r1/zebra.conf @@ -0,0 +1,29 @@ +log file zebra.log +! +hostname r1 +! +! debug zebra kernel +! debug zebra rib detailed +! debug zebra dplane detailed +! debug zebra nht +! debug zebra pseudowires +! debug zebra mpls +! +interface lo + ip address 1.1.1.1/32 +! +interface r1-eth0 + description to s1 +! +interface r1-eth1 + description to s4 + ip address 10.0.1.1/24 +! +interface r1-eth2 + description to s5 + ip address 10.0.2.1/24 +! +ip forwarding +! +line vty +! diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/ldpd.conf b/tests/topotests/ldp_sync_ospf_topo1/r2/ldpd.conf new file mode 100644 index 0000000..e738ff9 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/ldpd.conf @@ -0,0 +1,33 @@ +hostname r2 +log file ldpd.log +! +! debug mpls ldp zebra +! debug mpls ldp event +! debug mpls ldp errors +! debug mpls ldp sync +! +mpls ldp + router-id 2.2.2.2 + ! + address-family ipv4 + discovery transport-address 2.2.2.2 + label local allocate host-routes + ! + ttl-security disable + ! + interface r2-eth1 + ! + interface r2-eth2 + ! + ! +! +l2vpn CUST_A type vpls + member interface r2-eth0 + ! + member pseudowire r2-mpw0 + neighbor lsr-id 1.1.1.1 + pw-id 100 + ! +! +line vty +! diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/ospfd.conf b/tests/topotests/ldp_sync_ospf_topo1/r2/ospfd.conf new file mode 100644 index 0000000..50c593c --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/ospfd.conf @@ -0,0 +1,19 @@ +hostname r2 +log file ospfd.log +! debug ospf zebra interface +! debug ospf ldp-sync +! +router ospf + router-id 2.2.2.2 + network 0.0.0.0/0 area 0 + mpls ldp-sync + mpls ldp-sync holddown 50 +! +interface r2-eth1 + ip ospf network point-to-point + ip ospf mpls ldp-sync holddown 300 +! +interface r2-eth2 + ip ospf network point-to-point + no ip ospf mpls ldp-sync +! diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface.ref new file mode 100644 index 0000000..8280672 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface.ref @@ -0,0 +1,11 @@ +{ + "interfaces":{ + "r2-eth1":{ + "cost":10 + }, + "r2-eth2":{ + "cost":10 + } + } +} + diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface_r1_eth1_shutdown.ref new file mode 100644 index 0000000..71e8af1 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface_r1_eth1_shutdown.ref @@ -0,0 +1,11 @@ +{ + "interfaces":{ + "r2-eth1":{ + "cost":65535 + }, + "r2-eth2":{ + "cost":10 + } + } +} + diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface_r2_eth1_shutdown.ref new file mode 100644 index 0000000..af9a9c8 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface_r2_eth1_shutdown.ref @@ -0,0 +1,8 @@ +{ + "interfaces":{ + "r2-eth2":{ + "cost":10 + } + } +} + diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_neighbor.json b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_neighbor.json new file mode 100644 index 0000000..fa2ea86 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_neighbor.json @@ -0,0 +1,26 @@ +{ + "neighbors": { + "1.1.1.1": [ + { + "nbrPriority":1, + "converged":"Full", + "ifaceAddress":"10.0.1.1", + "ifaceName":"r2-eth1:10.0.1.2", + "linkStateRetransmissionListCounter":0, + "linkStateRequestListCounter":0, + "databaseSummaryListCounter":0 + } + ], + "3.3.3.3": [ + { + "nbrPriority":1, + "converged":"Full", + "ifaceAddress":"10.0.3.3", + "ifaceName":"r2-eth2:10.0.3.2", + "linkStateRetransmissionListCounter":0, + "linkStateRequestListCounter":0, + "databaseSummaryListCounter":0 + } + ] + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_route.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_route.ref new file mode 100644 index 0000000..6056fef --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_route.ref @@ -0,0 +1,147 @@ +{ + "1.1.1.1/32":[ + { + "prefix":"1.1.1.1/32", + "protocol":"ospf", + "selected":true, + "distance":110, + "metric":10, + "nexthops":[ + { + "fib":true, + "ip":"10.0.1.1", + "afi":"ipv4", + "interfaceName":"r2-eth1", + "active":true + } + ] + } + ], + "2.2.2.2/32":[ + { + "prefix":"2.2.2.2/32", + "protocol":"ospf", + "distance":110, + "metric":0, + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"lo", + "active":true + } + ] + }, + { + "prefix":"2.2.2.2/32", + "protocol":"connected", + "selected":true, + "nexthops":[ + { + "fib":true, + "directlyConnected":true, + "interfaceName":"lo", + "active":true + } + ] + } + ], + "3.3.3.3/32":[ + { + "prefix":"3.3.3.3/32", + "protocol":"ospf", + "selected":true, + "distance":110, + "metric":10, + "nexthops":[ + { + "fib":true, + "ip":"10.0.3.3", + "afi":"ipv4", + "interfaceName":"r2-eth2", + "active":true + } + ] + } + ], + "10.0.1.0/24":[ + { + "prefix":"10.0.1.0/24", + "protocol":"ospf", + "distance":110, + "metric":10, + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"r2-eth1", + "active":true + } + ] + }, + { + "prefix":"10.0.1.0/24", + "protocol":"connected", + "selected":true, + "nexthops":[ + { + "fib":true, + "directlyConnected":true, + "interfaceName":"r2-eth1", + "active":true + } + ] + } + ], + "10.0.2.0/24":[ + { + "prefix":"10.0.2.0/24", + "protocol":"ospf", + "selected":true, + "distance":110, + "metric":20, + "nexthops":[ + { + "fib":true, + "ip":"10.0.1.1", + "afi":"ipv4", + "interfaceName":"r2-eth1", + "active":true + }, + { + "fib":true, + "ip":"10.0.3.3", + "afi":"ipv4", + "interfaceName":"r2-eth2", + "active":true + } + ] + } + ], + "10.0.3.0/24":[ + { + "prefix":"10.0.3.0/24", + "protocol":"ospf", + "distance":110, + "metric":10, + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"r2-eth2", + "active":true + } + ] + }, + { + "prefix":"10.0.3.0/24", + "protocol":"connected", + "selected":true, + "nexthops":[ + { + "fib":true, + "directlyConnected":true, + "interfaceName":"r2-eth2", + "active":true + } + ] + } + ] +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/show_l2vpn_binding.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_l2vpn_binding.ref new file mode 100644 index 0000000..42c5a1c --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_l2vpn_binding.ref @@ -0,0 +1,16 @@ +{ + "1.1.1.1: 100":{ + "destination":"1.1.1.1", + "vcId":100, + "localLabel":16, + "localControlWord":1, + "localVcType":"Ethernet", + "localGroupID":0, + "localIfMtu":1500, + "remoteLabel":16, + "remoteControlWord":1, + "remoteVcType":"Ethernet", + "remoteGroupID":0, + "remoteIfMtu":1500 + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/show_l2vpn_vc.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_l2vpn_vc.ref new file mode 100644 index 0000000..045a8cf --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_l2vpn_vc.ref @@ -0,0 +1,8 @@ +{ + "r2-mpw0":{ + "peerId":"1.1.1.1", + "vcId":100, + "vpnName":"CUST_A", + "status":"up" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_binding.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_binding.ref new file mode 100644 index 0000000..c641fb4 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_binding.ref @@ -0,0 +1,44 @@ +{ + "bindings":[ + { + "addressFamily":"ipv4", + "prefix":"1.1.1.1/32", + "neighborId":"1.1.1.1", + "remoteLabel":"imp-null", + "inUse":1 + }, + { + "addressFamily":"ipv4", + "prefix":"1.1.1.1/32", + "neighborId":"3.3.3.3", + "inUse":0 + }, + { + "addressFamily":"ipv4", + "prefix":"2.2.2.2/32", + "neighborId":"1.1.1.1", + "localLabel":"imp-null", + "inUse":0 + }, + { + "addressFamily":"ipv4", + "prefix":"2.2.2.2/32", + "neighborId":"3.3.3.3", + "localLabel":"imp-null", + "inUse":0 + }, + { + "addressFamily":"ipv4", + "prefix":"3.3.3.3/32", + "neighborId":"1.1.1.1", + "inUse":0 + }, + { + "addressFamily":"ipv4", + "prefix":"3.3.3.3/32", + "neighborId":"3.3.3.3", + "remoteLabel":"imp-null", + "inUse":1 + } + ] +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_discovery.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_discovery.ref new file mode 100644 index 0000000..26801ac --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_discovery.ref @@ -0,0 +1,25 @@ +{ + "adjacencies":[ + { + "addressFamily":"ipv4", + "neighborId":"1.1.1.1", + "type":"link", + "interface":"r2-eth1", + "helloHoldtime":15 + }, + { + "addressFamily":"ipv4", + "neighborId":"1.1.1.1", + "type":"targeted", + "peer":"1.1.1.1", + "helloHoldtime":45 + }, + { + "addressFamily":"ipv4", + "neighborId":"3.3.3.3", + "type":"link", + "interface":"r2-eth2", + "helloHoldtime":15 + } + ] +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_igp_sync.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_igp_sync.ref new file mode 100644 index 0000000..f2b24d7 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_igp_sync.ref @@ -0,0 +1,16 @@ +{ + "r2-eth1":{ + "state":"labelExchangeComplete", + "waitTime":10, + "waitTimeRemaining":0, + "timerRunning":false, + "peerLdpId":"1.1.1.1" + }, + "r2-eth2":{ + "state":"labelExchangeComplete", + "waitTime":10, + "waitTimeRemaining":0, + "timerRunning":false, + "peerLdpId":"3.3.3.3" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref new file mode 100644 index 0000000..b5508dd --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref @@ -0,0 +1,16 @@ +{ + "r2-eth1":{ + "state":"labelExchangeNotComplete", + "waitTime":10, + "waitTimeRemaining":0, + "timerRunning":false, + "peerLdpId":"" + }, + "r2-eth2":{ + "state":"labelExchangeComplete", + "waitTime":10, + "waitTimeRemaining":0, + "timerRunning":false, + "peerLdpId":"3.3.3.3" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_neighbor.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_neighbor.ref new file mode 100644 index 0000000..eed3528 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_neighbor.ref @@ -0,0 +1,16 @@ +{ + "neighbors":[ + { + "addressFamily":"ipv4", + "neighborId":"1.1.1.1", + "state":"OPERATIONAL", + "transportAddress":"1.1.1.1" + }, + { + "addressFamily":"ipv4", + "neighborId":"3.3.3.3", + "state":"OPERATIONAL", + "transportAddress":"3.3.3.3" + } + ] +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync.ref new file mode 100644 index 0000000..6c27a10 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync.ref @@ -0,0 +1,12 @@ +{ + "r2-eth1":{ + "ldpIgpSyncEnabled":true, + "holdDownTimeInSec":300, + "ldpIgpSyncState":"Sync achieved" + }, + "r2-eth2":{ + "ldpIgpSyncEnabled":false, + "holdDownTimeInSec":50, + "ldpIgpSyncState":"Sync not required" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync_r1_eth1_shutdown.ref new file mode 100644 index 0000000..889f69e --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync_r1_eth1_shutdown.ref @@ -0,0 +1,12 @@ +{ + "r2-eth1":{ + "ldpIgpSyncEnabled":true, + "holdDownTimeInSec":300, + "ldpIgpSyncState":"Holding down until Sync" + }, + "r2-eth2":{ + "ldpIgpSyncEnabled":false, + "holdDownTimeInSec":50, + "ldpIgpSyncState":"Sync not required" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync_r2_eth1_shutdown.ref new file mode 100644 index 0000000..d9036e1 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync_r2_eth1_shutdown.ref @@ -0,0 +1,7 @@ +{ + "r2-eth2":{ + "ldpIgpSyncEnabled":false, + "holdDownTimeInSec":50, + "ldpIgpSyncState":"Sync not required" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r2/zebra.conf b/tests/topotests/ldp_sync_ospf_topo1/r2/zebra.conf new file mode 100644 index 0000000..c79b210 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r2/zebra.conf @@ -0,0 +1,28 @@ +log file zebra.log +! +hostname r2 +! +! debug zebra rib detailed +! debug zebra dplane detailed +! debug zebra kernel +! debug zebra nht +! debug zebra pseudowires +! +interface lo + ip address 2.2.2.2/32 +! +interface r2-eth0 + description to s2 +! +interface r2-eth1 + description to s4 + ip address 10.0.1.2/24 +! +interface r2-eth2 + description to s6 + ip address 10.0.3.2/24 +! +ip forwarding +! +line vty +! diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/ldpd.conf b/tests/topotests/ldp_sync_ospf_topo1/r3/ldpd.conf new file mode 100644 index 0000000..fae25e0 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/ldpd.conf @@ -0,0 +1,25 @@ +hostname r3 +log file ldpd.log +! +! debug mpls ldp zebra +! debug mpls ldp event +! debug mpls ldp errors +! debug mpls ldp sync +! +mpls ldp + router-id 3.3.3.3 + ! + address-family ipv4 + discovery transport-address 3.3.3.3 + label local allocate host-routes + ! + ttl-security disable + ! + interface r3-eth1 + ! + interface r3-eth2 + ! + ! +! +line vty +! diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/ospfd.conf b/tests/topotests/ldp_sync_ospf_topo1/r3/ospfd.conf new file mode 100644 index 0000000..b641fd8 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/ospfd.conf @@ -0,0 +1,18 @@ +hostname r3 +log file ospfd.log +! debug ospf zebra interface +! debug ospf ldp-sync +! +router ospf + router-id 3.3.3.3 + network 0.0.0.0/0 area 0 + mpls ldp-sync + mpls ldp-sync holddown 50 +! +interface r3-eth1 + ip ospf network point-to-point + no ip ospf mpls ldp-sync +! +interface r3-eth2 + ip ospf network point-to-point +! diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface.ref new file mode 100644 index 0000000..aec97b3 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface.ref @@ -0,0 +1,11 @@ +{ + "interfaces":{ + "r3-eth1":{ + "cost":10 + }, + "r3-eth2":{ + "cost":10 + } + } +} + diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface_r1_eth1_shutdown.ref new file mode 100644 index 0000000..aec97b3 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface_r1_eth1_shutdown.ref @@ -0,0 +1,11 @@ +{ + "interfaces":{ + "r3-eth1":{ + "cost":10 + }, + "r3-eth2":{ + "cost":10 + } + } +} + diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface_r2_eth1_shutdown.ref new file mode 100644 index 0000000..aec97b3 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface_r2_eth1_shutdown.ref @@ -0,0 +1,11 @@ +{ + "interfaces":{ + "r3-eth1":{ + "cost":10 + }, + "r3-eth2":{ + "cost":10 + } + } +} + diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_neighbor.json b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_neighbor.json new file mode 100644 index 0000000..bf77e08 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_neighbor.json @@ -0,0 +1,26 @@ +{ + "neighbors": { + "1.1.1.1": [ + { + "nbrPriority":1, + "converged":"Full", + "ifaceAddress":"10.0.2.1", + "ifaceName":"r3-eth1:10.0.2.3", + "linkStateRetransmissionListCounter":0, + "linkStateRequestListCounter":0, + "databaseSummaryListCounter":0 + } + ], + "2.2.2.2": [ + { + "nbrPriority":1, + "converged":"Full", + "ifaceAddress":"10.0.3.2", + "ifaceName":"r3-eth2:10.0.3.3", + "linkStateRetransmissionListCounter":0, + "linkStateRequestListCounter":0, + "databaseSummaryListCounter":0 + } + ] + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_route.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_route.ref new file mode 100644 index 0000000..fc96ada --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_route.ref @@ -0,0 +1,147 @@ +{ + "1.1.1.1/32":[ + { + "prefix":"1.1.1.1/32", + "protocol":"ospf", + "selected":true, + "distance":110, + "metric":10, + "nexthops":[ + { + "fib":true, + "ip":"10.0.2.1", + "afi":"ipv4", + "interfaceName":"r3-eth1", + "active":true + } + ] + } + ], + "2.2.2.2/32":[ + { + "prefix":"2.2.2.2/32", + "protocol":"ospf", + "selected":true, + "distance":110, + "metric":10, + "nexthops":[ + { + "fib":true, + "ip":"10.0.3.2", + "afi":"ipv4", + "interfaceName":"r3-eth2", + "active":true + } + ] + } + ], + "3.3.3.3/32":[ + { + "prefix":"3.3.3.3/32", + "protocol":"ospf", + "distance":110, + "metric":0, + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"lo", + "active":true + } + ] + }, + { + "prefix":"3.3.3.3/32", + "protocol":"connected", + "selected":true, + "nexthops":[ + { + "fib":true, + "directlyConnected":true, + "interfaceName":"lo", + "active":true + } + ] + } + ], + "10.0.1.0/24":[ + { + "prefix":"10.0.1.0/24", + "protocol":"ospf", + "selected":true, + "distance":110, + "metric":20, + "nexthops":[ + { + "fib":true, + "ip":"10.0.2.1", + "afi":"ipv4", + "interfaceName":"r3-eth1", + "active":true + }, + { + "fib":true, + "ip":"10.0.3.2", + "afi":"ipv4", + "interfaceName":"r3-eth2", + "active":true + } + ] + } + ], + "10.0.2.0/24":[ + { + "prefix":"10.0.2.0/24", + "protocol":"ospf", + "distance":110, + "metric":10, + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"r3-eth1", + "active":true + } + ] + }, + { + "prefix":"10.0.2.0/24", + "protocol":"connected", + "selected":true, + "nexthops":[ + { + "fib":true, + "directlyConnected":true, + "interfaceName":"r3-eth1", + "active":true + } + ] + } + ], + "10.0.3.0/24":[ + { + "prefix":"10.0.3.0/24", + "protocol":"ospf", + "distance":110, + "metric":10, + "nexthops":[ + { + "directlyConnected":true, + "interfaceName":"r3-eth2", + "active":true + } + ] + }, + { + "prefix":"10.0.3.0/24", + "protocol":"connected", + "selected":true, + "nexthops":[ + { + "fib":true, + "directlyConnected":true, + "interfaceName":"r3-eth2", + "active":true + } + ] + } + ] +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/show_l2vpn_binding.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_l2vpn_binding.ref new file mode 100644 index 0000000..2c63c08 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_l2vpn_binding.ref @@ -0,0 +1,2 @@ +{ +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/show_l2vpn_vc.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_l2vpn_vc.ref new file mode 100644 index 0000000..2c63c08 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_l2vpn_vc.ref @@ -0,0 +1,2 @@ +{ +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_binding.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_binding.ref new file mode 100644 index 0000000..e54bd6e --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_binding.ref @@ -0,0 +1,44 @@ +{ + "bindings":[ + { + "addressFamily":"ipv4", + "prefix":"1.1.1.1/32", + "neighborId":"1.1.1.1", + "remoteLabel":"imp-null", + "inUse":1 + }, + { + "addressFamily":"ipv4", + "prefix":"1.1.1.1/32", + "neighborId":"2.2.2.2", + "inUse":0 + }, + { + "addressFamily":"ipv4", + "prefix":"2.2.2.2/32", + "neighborId":"1.1.1.1", + "inUse":0 + }, + { + "addressFamily":"ipv4", + "prefix":"2.2.2.2/32", + "neighborId":"2.2.2.2", + "remoteLabel":"imp-null", + "inUse":1 + }, + { + "addressFamily":"ipv4", + "prefix":"3.3.3.3/32", + "neighborId":"1.1.1.1", + "localLabel":"imp-null", + "inUse":0 + }, + { + "addressFamily":"ipv4", + "prefix":"3.3.3.3/32", + "neighborId":"2.2.2.2", + "localLabel":"imp-null", + "inUse":0 + } + ] +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_discovery.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_discovery.ref new file mode 100644 index 0000000..42fa98d --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_discovery.ref @@ -0,0 +1,18 @@ +{ + "adjacencies":[ + { + "addressFamily":"ipv4", + "neighborId":"1.1.1.1", + "type":"link", + "interface":"r3-eth1", + "helloHoldtime":15 + }, + { + "addressFamily":"ipv4", + "neighborId":"2.2.2.2", + "type":"link", + "interface":"r3-eth2", + "helloHoldtime":15 + } + ] +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_igp_sync.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_igp_sync.ref new file mode 100644 index 0000000..7326183 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_igp_sync.ref @@ -0,0 +1,16 @@ +{ + "r3-eth1":{ + "state":"labelExchangeComplete", + "waitTime":10, + "waitTimeRemaining":0, + "timerRunning":false, + "peerLdpId":"1.1.1.1" + }, + "r3-eth2":{ + "state":"labelExchangeComplete", + "waitTime":10, + "waitTimeRemaining":0, + "timerRunning":false, + "peerLdpId":"2.2.2.2" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref new file mode 100644 index 0000000..7326183 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref @@ -0,0 +1,16 @@ +{ + "r3-eth1":{ + "state":"labelExchangeComplete", + "waitTime":10, + "waitTimeRemaining":0, + "timerRunning":false, + "peerLdpId":"1.1.1.1" + }, + "r3-eth2":{ + "state":"labelExchangeComplete", + "waitTime":10, + "waitTimeRemaining":0, + "timerRunning":false, + "peerLdpId":"2.2.2.2" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_neighbor.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_neighbor.ref new file mode 100644 index 0000000..5c482da --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_neighbor.ref @@ -0,0 +1,16 @@ +{ + "neighbors":[ + { + "addressFamily":"ipv4", + "neighborId":"1.1.1.1", + "state":"OPERATIONAL", + "transportAddress":"1.1.1.1" + }, + { + "addressFamily":"ipv4", + "neighborId":"2.2.2.2", + "state":"OPERATIONAL", + "transportAddress":"2.2.2.2" + } + ] +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync.ref new file mode 100644 index 0000000..b417ab0 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync.ref @@ -0,0 +1,12 @@ +{ + "r3-eth1":{ + "ldpIgpSyncEnabled":false, + "holdDownTimeInSec":50, + "ldpIgpSyncState":"Sync not required" + }, + "r3-eth2":{ + "ldpIgpSyncEnabled":true, + "holdDownTimeInSec":50, + "ldpIgpSyncState":"Sync achieved" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync_r1_eth1_shutdown.ref new file mode 100644 index 0000000..b417ab0 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync_r1_eth1_shutdown.ref @@ -0,0 +1,12 @@ +{ + "r3-eth1":{ + "ldpIgpSyncEnabled":false, + "holdDownTimeInSec":50, + "ldpIgpSyncState":"Sync not required" + }, + "r3-eth2":{ + "ldpIgpSyncEnabled":true, + "holdDownTimeInSec":50, + "ldpIgpSyncState":"Sync achieved" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync_r2_eth1_shutdown.ref new file mode 100644 index 0000000..b417ab0 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync_r2_eth1_shutdown.ref @@ -0,0 +1,12 @@ +{ + "r3-eth1":{ + "ldpIgpSyncEnabled":false, + "holdDownTimeInSec":50, + "ldpIgpSyncState":"Sync not required" + }, + "r3-eth2":{ + "ldpIgpSyncEnabled":true, + "holdDownTimeInSec":50, + "ldpIgpSyncState":"Sync achieved" + } +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/r3/zebra.conf b/tests/topotests/ldp_sync_ospf_topo1/r3/zebra.conf new file mode 100644 index 0000000..45929ac --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/r3/zebra.conf @@ -0,0 +1,32 @@ +log file zebra.log +! +hostname r3 +! +! debug zebra rib detailed +! debug zebra dplane detailed +! debug zebra kernel +! debug zebra nht +! debug zebra pseudowires +! +interface lo + ip address 3.3.3.3/32 +! +interface r3-eth0 + description to s3 +! +interface r3-eth1 + description to s5 + ip address 10.0.2.3/24 +! +interface r3-eth2 + description to s6 + ip address 10.0.3.3/24 +! +!!interface r3-eth3 +!! description to s4 +!! ip address 10.0.1.3/24 +! +ip forwarding +! +line vty +! diff --git a/tests/topotests/ldp_sync_ospf_topo1/test_ldp_sync_ospf_topo1.dot b/tests/topotests/ldp_sync_ospf_topo1/test_ldp_sync_ospf_topo1.dot new file mode 100644 index 0000000..4f1bd22 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/test_ldp_sync_ospf_topo1.dot @@ -0,0 +1,111 @@ +## Color coding: +######################### +## Main FRR: #f08080 red +## Switches: #d0e0d0 gray +## RIP: #19e3d9 Cyan +## RIPng: #fcb314 dark yellow +## OSPFv2: #32b835 Green +## OSPFv3: #19e3d9 Cyan +## ISIS IPv4 #fcb314 dark yellow +## ISIS IPv6 #9a81ec purple +## BGP IPv4 #eee3d3 beige +## BGP IPv6 #fdff00 yellow +##### Colors (see http://www.color-hex.com/) + +graph template { + label="Test Topology - LDP-VPLS 1"; + + # Routers + ce1 [ + shape=doubleoctagon, + label="ce1", + fillcolor="#f08080", + style=filled, + ]; + ce2 [ + shape=doubleoctagon + label="ce2", + fillcolor="#f08080", + style=filled, + ]; + ce3 [ + shape=doubleoctagon + label="ce3", + fillcolor="#f08080", + style=filled, + ]; + r1 [ + shape=doubleoctagon, + label="r1", + fillcolor="#f08080", + style=filled, + ]; + r2 [ + shape=doubleoctagon + label="r2", + fillcolor="#f08080", + style=filled, + ]; + r3 [ + shape=doubleoctagon + label="r3", + fillcolor="#f08080", + style=filled, + ]; + + + # Switches + s1 [ + shape=oval, + label="VPLS\n172.16.1.0/24", + fillcolor="#d0e0d0", + style=filled, + ]; + s2 [ + shape=oval, + label="VPLS\n172.16.1.0/24", + fillcolor="#d0e0d0", + style=filled, + ]; + s3 [ + shape=oval, + label="VPLS\n172.16.1.0/24", + fillcolor="#d0e0d0", + style=filled, + ]; + s4 [ + shape=oval, + label="s4\n10.0.1.0/24", + fillcolor="#d0e0d0", + style=filled, + ]; + s5 [ + shape=oval, + label="s5\n10.0.2.0/24", + fillcolor="#d0e0d0", + style=filled, + ]; + s6 [ + shape=oval, + label="s6\n10.0.3.0/24", + fillcolor="#d0e0d0", + style=filled, + ]; + + # Connections + ce1 -- s1 [label="eth0\n.1"]; + ce2 -- s2 [label="eth0\n.2"]; + ce3 -- s3 [label="eth0\n.3"]; + + r1 -- s1 [label="eth0"]; + r1 -- s4 [label="eth1\n.1"]; + r1 -- s5 [label="eth2\n.1"]; + + r2 -- s2 [label="eth0"]; + r2 -- s4 [label="eth1\n.2"]; + r2 -- s6 [label="eth2\n.2"]; + + r3 -- s3 [label="eth0"]; + r3 -- s5 [label="eth1\n.3"]; + r3 -- s6 [label="eth2\n.3"]; +} diff --git a/tests/topotests/ldp_sync_ospf_topo1/test_ldp_sync_ospf_topo1.py b/tests/topotests/ldp_sync_ospf_topo1/test_ldp_sync_ospf_topo1.py new file mode 100644 index 0000000..760b4e3 --- /dev/null +++ b/tests/topotests/ldp_sync_ospf_topo1/test_ldp_sync_ospf_topo1.py @@ -0,0 +1,430 @@ +#!/usr/bin/env python +# SPDX-License-Identifier: ISC + +# +# test_ldp_ospf_topo1.py +# Part of NetDEF Topology Tests +# +# Copyright (c) 2020 by Volta Networks +# + +""" +test_ldp_vpls_topo1.py: + + +---------+ +---------+ + | | | | + | CE1 | | CE2 | + | | | | + +---------+ +---------+ +ce1-eth0 (172.16.1.1/24)| |ce2-eth0 (172.16.1.2/24) + | | + | | + rt1-eth0| |rt2-eth0 + +---------+ 10.0.1.0/24 +---------+ + | |rt1-eth1 | | + | RT1 +----------------+ RT2 | + | 1.1.1.1 | rt2-eth1| 2.2.2.2 | + | | | | + +---------+ +---------+ + rt1-eth2| |rt2-eth2 + | | + | | + 10.0.2.0/24| +---------+ |10.0.3.0/24 + | | | | + | | RT3 | | + +--------+ 3.3.3.3 +-------+ + rt3-eth2| |rt3-eth1 + +---------+ + |rt3-eth0 + | + | + ce3-eth0 (172.16.1.3/24)| + +---------+ + | | + | CE3 | + | | + +---------+ +""" + +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.ldpd, pytest.mark.ospfd] + + +def build_topo(tgen): + "Build function" + + # + # Define FRR Routers + # + for router in ["ce1", "ce2", "ce3", "r1", "r2", "r3"]: + tgen.add_router(router) + + # + # Define connections + # + switch = tgen.add_switch("s1") + switch.add_link(tgen.gears["ce1"]) + switch.add_link(tgen.gears["r1"]) + + switch = tgen.add_switch("s2") + switch.add_link(tgen.gears["ce2"]) + switch.add_link(tgen.gears["r2"]) + + switch = tgen.add_switch("s3") + switch.add_link(tgen.gears["ce3"]) + switch.add_link(tgen.gears["r3"]) + + switch = tgen.add_switch("s4") + switch.add_link(tgen.gears["r1"]) + switch.add_link(tgen.gears["r2"]) + + switch = tgen.add_switch("s5") + switch.add_link(tgen.gears["r1"]) + switch.add_link(tgen.gears["r3"]) + + switch = tgen.add_switch("s6") + switch.add_link(tgen.gears["r2"]) + switch.add_link(tgen.gears["r3"]) + + +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)) + ) + # Don't start ospfd and ldpd in the CE nodes + if router.name[0] == "r": + router.load_config( + TopoRouter.RD_OSPF, os.path.join(CWD, "{}/ospfd.conf".format(rname)) + ) + router.load_config( + TopoRouter.RD_LDP, os.path.join(CWD, "{}/ldpd.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. + test_func = partial(topotest.router_json_cmp, tgen.gears[rname], command, expected) + _, diff = topotest.run_and_expect(test_func, None, count=320, wait=0.5) + assertmsg = '"{}" JSON output mismatches the expected result'.format(rname) + assert diff is None, assertmsg + + +def test_ospf_convergence(): + logger.info("Test: check OSPF adjacencies") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show ip ospf neighbor json", "show_ip_ospf_neighbor.json" + ) + + +def test_rib(): + logger.info("Test: verify RIB") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output(rname, "show ip route json", "show_ip_route.ref") + + +def test_ldp_adjacencies(): + logger.info("Test: verify LDP adjacencies") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show mpls ldp discovery json", "show_ldp_discovery.ref" + ) + + +def test_ldp_neighbors(): + logger.info("Test: verify LDP neighbors") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show mpls ldp neighbor json", "show_ldp_neighbor.ref" + ) + + +def test_ldp_bindings(): + logger.info("Test: verify LDP bindings") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show mpls ldp binding json", "show_ldp_binding.ref" + ) + + +def test_ldp_pwid_bindings(): + logger.info("Test: verify LDP PW-ID bindings") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show l2vpn atom binding json", "show_l2vpn_binding.ref" + ) + + +def test_ldp_pseudowires(): + logger.info("Test: verify LDP pseudowires") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show l2vpn atom vc json", "show_l2vpn_vc.ref" + ) + + +def test_ldp_igp_sync(): + logger.info("Test: verify LDP igp-sync") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show mpls ldp igp-sync json", "show_ldp_igp_sync.ref" + ) + + +def test_ospf_ldp_sync(): + logger.info("Test: verify OSPF igp-sync") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show ip ospf mpls ldp-sync json", "show_ospf_ldp_sync.ref" + ) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show ip ospf interface json", "show_ip_ospf_interface.ref" + ) + + +def test_r1_eth1_shutdown(): + logger.info("Test: verify behaviour after r1-eth1 is shutdown") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + # Shut down r1-r2 link */ + tgen = get_topogen() + tgen.gears["r1"].peer_link_enable("r1-eth1", False) + topotest.sleep(5, "Waiting for the network to reconverge") + + # check if the pseudowire is still up (using an alternate path for nexthop resolution) + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show l2vpn atom vc json", "show_l2vpn_vc.ref" + ) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, + "show mpls ldp igp-sync json", + "show_ldp_igp_sync_r1_eth1_shutdown.ref", + ) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, + "show ip ospf mpls ldp-sync json", + "show_ospf_ldp_sync_r1_eth1_shutdown.ref", + ) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, + "show ip ospf interface json", + "show_ip_ospf_interface_r1_eth1_shutdown.ref", + ) + + +def test_r1_eth1_no_shutdown(): + logger.info("Test: verify behaviour after r1-eth1 is no shutdown") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + # Run no shutdown on r1-eth1 interface */ + tgen = get_topogen() + tgen.gears["r1"].peer_link_enable("r1-eth1", True) + topotest.sleep(5, "Waiting for the network to reconverge") + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show mpls ldp igp-sync json", "show_ldp_igp_sync.ref" + ) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show ip ospf mpls ldp-sync json", "show_ospf_ldp_sync.ref" + ) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show ip ospf interface json", "show_ip_ospf_interface.ref" + ) + + +def test_r2_eth1_shutdown(): + logger.info("Test: verify behaviour after r2-eth1 is shutdown") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + # Shut down r1-r2 link */ + tgen = get_topogen() + tgen.gears["r2"].peer_link_enable("r2-eth1", False) + topotest.sleep(5, "Waiting for the network to reconverge") + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, + "show mpls ldp igp-sync json", + "show_ldp_igp_sync_r1_eth1_shutdown.ref", + ) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, + "show ip ospf mpls ldp-sync json", + "show_ospf_ldp_sync_r2_eth1_shutdown.ref", + ) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, + "show ip ospf interface json", + "show_ip_ospf_interface_r2_eth1_shutdown.ref", + ) + + +def test_r2_eth1_no_shutdown(): + logger.info("Test: verify behaviour after r2-eth1 is no shutdown") + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + # Run no shutdown on r2-eth1 interface */ + tgen = get_topogen() + tgen.gears["r2"].peer_link_enable("r2-eth1", True) + topotest.sleep(5, "Waiting for the network to reconverge") + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show mpls ldp igp-sync json", "show_ldp_igp_sync.ref" + ) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show ip ospf mpls ldp-sync json", "show_ospf_ldp_sync.ref" + ) + + for rname in ["r1", "r2", "r3"]: + router_compare_json_output( + rname, "show ip ospf interface json", "show_ip_ospf_interface.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)) |