tests: add topotest for LDP SNMP

Signed-off-by: Karen Schoener <karen@voltanet.io>
This commit is contained in:
Karen Schoener 2021-02-24 17:38:02 -05:00
parent f9a4d683dc
commit 0534e94c10
62 changed files with 1925 additions and 0 deletions

View File

@ -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
!

View File

@ -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
!

View File

@ -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
!

View File

@ -0,0 +1,27 @@
hostname r1
log file isisd.log
debug isis adj-packets
debug isis events
debug isis update-packets
debug isis ldp-sync
!
router isis 1
lsp-gen-interval 2
net 10.0000.0000.0000.0000.0000.0000.0000.0000.0001.00
metric-style wide
redistribute ipv4 connected level-1
redistribute ipv6 connected level-1
mpls ldp-sync
!
interface r1-eth1
ip router isis 1
ipv6 router isis 1
isis network point-to-point
isis circuit-type level-1
!
interface r1-eth2
ip router isis 1
ipv6 router isis 1
isis network point-to-point
isis circuit-type level-1
!

View File

@ -0,0 +1,35 @@
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
!
agentx
!

View File

@ -0,0 +1,134 @@
{
"1.1.1.1\/32":[
{
"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":"isis",
"selected":true,
"distance":115,
"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":"isis",
"selected":true,
"distance":115,
"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":"isis",
"distance":115,
"metric":10,
"nexthops":[
{
"ip":"10.0.1.2",
"afi":"ipv4",
"interfaceName":"r1-eth1"
}
]
},
{
"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":"isis",
"distance":115,
"metric":10,
"nexthops":[
{
"ip":"10.0.2.3",
"afi":"ipv4",
"interfaceName":"r1-eth2"
}
]
},
{
"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":"isis",
"selected":true,
"distance":115,
"metric":10,
"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
}
]
}
]
}

View File

@ -0,0 +1,16 @@
{
"1": {
"r1-eth1": [
{
"level": "Level-1",
"metric": "10"
}
],
"r1-eth2": [
{
"level": "Level-1",
"metric": "10"
}
]
}
}

View File

@ -0,0 +1,16 @@
{
"1": {
"r1-eth1": [
{
"level": "Level-1",
"metric": "16777214"
}
],
"r1-eth2": [
{
"level": "Level-1",
"metric": "10"
}
]
}
}

View File

@ -0,0 +1,16 @@
{
"1": {
"r1-eth1": [
{
"level": "Level-1",
"metric": "16777214"
}
],
"r1-eth2": [
{
"level": "Level-1",
"metric": "10"
}
]
}
}

View File

@ -0,0 +1,13 @@
{
"r1-eth1":{
"ldpIgpSyncEnabled":true,
"holdDownTimeInSec":0,
"ldpIgpSyncState":"Sync achieved"
},
"r1-eth2":{
"ldpIgpSyncEnabled":true,
"holdDownTimeInSec":0,
"ldpIgpSyncState":"Sync achieved"
}
}

View File

@ -0,0 +1,11 @@
{
"r1-eth1":{
"Interface":true
},
"r1-eth2":{
"ldpIgpSyncEnabled":true,
"holdDownTimeInSec":0,
"ldpIgpSyncState":"Sync achieved"
}
}

View File

@ -0,0 +1,13 @@
{
"r1-eth1":{
"ldpIgpSyncEnabled":true,
"holdDownTimeInSec":0,
"ldpIgpSyncState":"Sync not achieved"
},
"r1-eth2":{
"ldpIgpSyncEnabled":true,
"holdDownTimeInSec":0,
"ldpIgpSyncState":"Sync achieved"
}
}

View File

@ -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
}
}

View File

@ -0,0 +1,8 @@
{
"r1-mpw0":{
"peerId":"2.2.2.2",
"vcId":100,
"VpnName":"CUST_A",
"status":"up"
}
}

View File

@ -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
}
]
}

View File

@ -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
}
]
}

View File

@ -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"
}
}

View File

@ -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"
}
}

View File

@ -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"
}
]
}

View File

@ -0,0 +1,42 @@
{
"frr-interface:lib": {
"interface": [
{
"name": "r1-eth1",
"vrf": "default",
"state": {
"frr-isisd:isis": {
"adjacencies": {
"adjacency": [
{
"neighbor-sys-type": "level-1",
"neighbor-sysid": "0000.0000.0002",
"neighbor-extended-circuit-id": 0,
"state": "up"
}
]
}
}
}
},
{
"name": "r1-eth2",
"vrf": "default",
"state": {
"frr-isisd:isis": {
"adjacencies": {
"adjacency": [
{
"neighbor-sys-type": "level-1",
"neighbor-sysid": "0000.0000.0003",
"neighbor-extended-circuit-id": 0,
"state": "up"
}
]
}
}
}
}
]
}
}

View File

@ -0,0 +1,15 @@
agentAddress udp:1.1.1.1:161
com2sec public 1.1.1.1 public
group public_group v1 public
group public_group v2c public
access public_group "" any noauth prefix all all none
view all included .1
iquerySecName frr
rouser frr
master agentx

View File

@ -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
!

View File

@ -0,0 +1,28 @@
hostname r2
log file isisd.log
debug isis adj-packets
debug isis events
debug isis update-packets
debug isis ldp-sync
!
router isis 1
lsp-gen-interval 2
net 10.0000.0000.0000.0000.0000.0000.0000.0000.0002.00
metric-style wide
redistribute ipv4 connected level-1
redistribute ipv6 connected level-1
mpls ldp-sync
!
interface r2-eth1
ip router isis 1
ipv6 router isis 1
isis network point-to-point
isis circuit-type level-1
!
interface r2-eth2
ip router isis 1
ipv6 router isis 1
isis network point-to-point
isis circuit-type level-1
no isis mpls ldp-sync
!

View File

@ -0,0 +1,35 @@
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
!
!agentx
!

View File

@ -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
!

View File

@ -0,0 +1,134 @@
{
"1.1.1.1\/32":[
{
"prefix":"1.1.1.1\/32",
"protocol":"isis",
"selected":true,
"distance":115,
"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":"connected",
"selected":true,
"nexthops":[
{
"fib":true,
"directlyConnected":true,
"interfaceName":"lo",
"active":true
}
]
}
],
"3.3.3.3\/32":[
{
"prefix":"3.3.3.3\/32",
"protocol":"isis",
"selected":true,
"distance":115,
"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":"isis",
"distance":115,
"metric":10,
"nexthops":[
{
"ip":"10.0.1.1",
"afi":"ipv4",
"interfaceName":"r2-eth1"
}
]
},
{
"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":"isis",
"selected":true,
"distance":115,
"metric":10,
"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":"isis",
"distance":115,
"metric":10,
"nexthops":[
{
"ip":"10.0.3.3",
"afi":"ipv4",
"interfaceName":"r2-eth2"
}
]
},
{
"prefix":"10.0.3.0\/24",
"protocol":"connected",
"selected":true,
"nexthops":[
{
"fib":true,
"directlyConnected":true,
"interfaceName":"r2-eth2",
"active":true
}
]
}
]
}

View File

@ -0,0 +1,16 @@
{
"1": {
"r2-eth1": [
{
"level": "Level-1",
"metric": "10"
}
],
"r2-eth2": [
{
"level": "Level-1",
"metric": "10"
}
]
}
}

View File

@ -0,0 +1,16 @@
{
"1": {
"r2-eth1": [
{
"level": "Level-1",
"metric": "16777214"
}
],
"r2-eth2": [
{
"level": "Level-1",
"metric": "10"
}
]
}
}

View File

@ -0,0 +1,16 @@
{
"1": {
"r2-eth1": [
{
"level": "Level-1",
"metric": "16777214"
}
],
"r2-eth2": [
{
"level": "Level-1",
"metric": "10"
}
]
}
}

View File

@ -0,0 +1,13 @@
{
"r2-eth1":{
"ldpIgpSyncEnabled":true,
"holdDownTimeInSec":0,
"ldpIgpSyncState":"Sync achieved"
},
"r2-eth2":{
"ldpIgpSyncEnabled":false,
"holdDownTimeInSec":0,
"ldpIgpSyncState":"Sync not required"
}
}

View File

@ -0,0 +1,13 @@
{
"r2-eth1":{
"ldpIgpSyncEnabled":true,
"holdDownTimeInSec":0,
"ldpIgpSyncState":"Sync not achieved"
},
"r2-eth2":{
"ldpIgpSyncEnabled":false,
"holdDownTimeInSec":0,
"ldpIgpSyncState":"Sync not required"
}
}

View File

@ -0,0 +1,11 @@
{
"r2-eth1":{
"Interface":true
},
"r2-eth2":{
"ldpIgpSyncEnabled":false,
"holdDownTimeInSec":0,
"ldpIgpSyncState":"Sync not required"
}
}

View File

@ -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
}
}

View File

@ -0,0 +1,8 @@
{
"r2-mpw0":{
"peerId":"1.1.1.1",
"vcId":100,
"VpnName":"CUST_A",
"status":"up"
}
}

View File

@ -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
}
]
}

View File

@ -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
}
]
}

View File

@ -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"
}
}

View File

@ -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"
}
}

View File

@ -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"
}
}

View File

@ -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"
}
]
}

View File

@ -0,0 +1,42 @@
{
"frr-interface:lib": {
"interface": [
{
"name": "r2-eth1",
"vrf": "default",
"state": {
"frr-isisd:isis": {
"adjacencies": {
"adjacency": [
{
"neighbor-sys-type": "level-1",
"neighbor-sysid": "0000.0000.0001",
"neighbor-extended-circuit-id": 0,
"state": "up"
}
]
}
}
}
},
{
"name": "r2-eth2",
"vrf": "default",
"state": {
"frr-isisd:isis": {
"adjacencies": {
"adjacency": [
{
"neighbor-sys-type": "level-1",
"neighbor-sysid": "0000.0000.0003",
"neighbor-extended-circuit-id": 0,
"state": "up"
}
]
}
}
}
}
]
}
}

View File

@ -0,0 +1,15 @@
agentAddress udp:2.2.2.2:161
com2sec public 2.2.2.2 public
group public_group v1 public
group public_group v2c public
access public_group "" any noauth prefix all all none
view all included .1
iquerySecName frr
rouser frr
master agentx

View File

@ -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
!

View File

@ -0,0 +1,29 @@
hostname r3
log file isisd.log
debug isis adj-packets
debug isis events
debug isis update-packets
debug isis ldp-sync
!
router isis 1
lsp-gen-interval 2
net 10.0000.0000.0000.0000.0000.0000.0000.0000.0003.00
metric-style wide
redistribute ipv4 connected level-1
redistribute ipv6 connected level-1
mpls ldp-sync
mpls ldp-sync holddown 50
!
interface r3-eth1
ip router isis 1
ipv6 router isis 1
isis network point-to-point
isis circuit-type level-1
no isis mpls ldp-sync
!
interface r3-eth2
ip router isis 1
ipv6 router isis 1
isis network point-to-point
isis circuit-type level-1
!

View File

@ -0,0 +1,27 @@
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
!
!agentx
!

View File

@ -0,0 +1,134 @@
{
"1.1.1.1\/32":[
{
"prefix":"1.1.1.1\/32",
"protocol":"isis",
"selected":true,
"distance":115,
"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":"isis",
"selected":true,
"distance":115,
"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":"connected",
"selected":true,
"nexthops":[
{
"fib":true,
"directlyConnected":true,
"interfaceName":"lo",
"active":true
}
]
}
],
"10.0.1.0\/24":[
{
"prefix":"10.0.1.0\/24",
"protocol":"isis",
"selected":true,
"distance":115,
"metric":10,
"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":"isis",
"distance":115,
"metric":10,
"nexthops":[
{
"ip":"10.0.2.1",
"afi":"ipv4",
"interfaceName":"r3-eth1"
}
]
},
{
"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":"isis",
"distance":115,
"metric":10,
"nexthops":[
{
"ip":"10.0.3.2",
"afi":"ipv4",
"interfaceName":"r3-eth2"
}
]
},
{
"prefix":"10.0.3.0\/24",
"protocol":"connected",
"selected":true,
"nexthops":[
{
"fib":true,
"directlyConnected":true,
"interfaceName":"r3-eth2",
"active":true
}
]
}
]
}

View File

@ -0,0 +1,16 @@
{
"1": {
"r3-eth1": [
{
"level": "Level-1",
"metric": "10"
}
],
"r3-eth2": [
{
"level": "Level-1",
"metric": "10"
}
]
}
}

View File

@ -0,0 +1,16 @@
{
"1": {
"r3-eth1": [
{
"level": "Level-1",
"metric": "10"
}
],
"r3-eth2": [
{
"level": "Level-1",
"metric": "10"
}
]
}
}

View File

@ -0,0 +1,16 @@
{
"1": {
"r3-eth1": [
{
"level": "Level-1",
"metric": "10"
}
],
"r3-eth2": [
{
"level": "Level-1",
"metric": "10"
}
]
}
}

View File

@ -0,0 +1,13 @@
{
"r3-eth1":{
"ldpIgpSyncEnabled":false,
"holdDownTimeInSec":50,
"ldpIgpSyncState":"Sync not required"
},
"r3-eth2":{
"ldpIgpSyncEnabled":true,
"holdDownTimeInSec":50,
"ldpIgpSyncState":"Sync achieved"
}
}

View File

@ -0,0 +1,13 @@
{
"r3-eth1":{
"ldpIgpSyncEnabled":false,
"holdDownTimeInSec":50,
"ldpIgpSyncState":"Sync not required"
},
"r3-eth2":{
"ldpIgpSyncEnabled":true,
"holdDownTimeInSec":50,
"ldpIgpSyncState":"Sync achieved"
}
}

View File

@ -0,0 +1,13 @@
{
"r3-eth1":{
"ldpIgpSyncEnabled":false,
"holdDownTimeInSec":50,
"ldpIgpSyncState":"Sync not required"
},
"r3-eth2":{
"ldpIgpSyncEnabled":true,
"holdDownTimeInSec":50,
"ldpIgpSyncState":"Sync achieved"
}
}

View File

@ -0,0 +1,2 @@
{
}

View File

@ -0,0 +1,2 @@
{
}

View File

@ -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
}
]
}

View File

@ -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
}
]
}

View File

@ -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"
}
}

View File

@ -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"
}
}

View File

@ -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"
}
]
}

View File

@ -0,0 +1,42 @@
{
"frr-interface:lib": {
"interface": [
{
"name": "r3-eth1",
"vrf": "default",
"state": {
"frr-isisd:isis": {
"adjacencies": {
"adjacency": [
{
"neighbor-sys-type": "level-1",
"neighbor-sysid": "0000.0000.0001",
"neighbor-extended-circuit-id": 0,
"state": "up"
}
]
}
}
}
},
{
"name": "r3-eth2",
"vrf": "default",
"state": {
"frr-isisd:isis": {
"adjacencies": {
"adjacency": [
{
"neighbor-sys-type": "level-1",
"neighbor-sysid": "0000.0000.0002",
"neighbor-extended-circuit-id": 0,
"state": "up"
}
]
}
}
}
}
]
}
}

View File

@ -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
!

View File

@ -0,0 +1,373 @@
#!/usr/bin/env python
#
# test_ldp_isis_topo1.py
# Part of NetDEF Topology Tests
#
# Copyright (c) 2020 by Volta Networks
#
# Permission to use, copy, modify, and/or distribute this software
# for any purpose with or without fee is hereby granted, provided
# that the above copyright notice and this permission notice appear
# in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NETDEF DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NETDEF BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
# OF THIS SOFTWARE.
#
"""
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 re
import sys
import pytest
import json
from time import sleep
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
from lib.snmptest import SnmpTester
# Required to instantiate the topology builder class.
from mininet.topo import Topo
class TemplateTopo(Topo):
"Test topology builder"
def build(self, *_args, **_opts):
"Build function"
tgen = get_topogen(self)
#
# 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(TemplateTopo, 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 isisd and ldpd in the CE nodes
if router.name[0] == "r":
router.load_config(
TopoRouter.RD_ISIS, os.path.join(CWD, "{}/isisd.conf".format(rname))
)
router.load_config(
TopoRouter.RD_LDP, os.path.join(CWD, "{}/ldpd.conf".format(rname)),
"-M snmp"
)
router.load_config(
TopoRouter.RD_SNMP, os.path.join(CWD, "{}/snmpd.conf".format(rname)),
"-Le -Ivacm_conf,usmConf,iquery -V -DAgentX,trap"
)
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_isis_convergence():
logger.info("Test: check ISIS 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 yang operational-data /frr-interface:lib isisd",
"show_yang_interface_isis_adjacencies.ref",
)
def test_rib():
logger.info("Test: verify RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
# TODO: disabling this check to avoid 'snmpd not running' errors
#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
# TODO: disabling this check to avoid 'snmpd not running' errors
#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_r1_ldp_lsr_objects():
"Test mplsLdpLsrObjects objects"
tgen = get_topogen()
r1 = tgen.net.get("r1")
r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
assert r1_snmp.test_oid('mplsLdpLsrId', "01 01 01 01")
assert r1_snmp.test_oid('mplsLdpLsrLoopDetectionCapable', 'none(1)')
def test_r1_ldp_entity_table():
"Test mplsLdpEntityTable"
tgen = get_topogen()
r1 = tgen.net.get("r1")
r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
assert r1_snmp.test_oid_walk(
'mplsLdpEntityLdpId', ['1.1.1.1:0'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityIndex', ['1'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityProtocolVersion', ['1'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityAdminStatus', ['enable(1)'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityOperStatus', ['enabled(2)'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityTcpPort', ['646'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityUdpDscPort', ['646'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityMaxPduLength', ['4096 octets'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityKeepAliveHoldTimer', ['180 seconds'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityHelloHoldTimer', ['0 seconds'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityInitSessionThreshold', ['0'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityLabelDistMethod', ['downstreamUnsolicited(2)'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityLabelRetentionMode', ['liberal(2)'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityPathVectorLimit', ['0'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityHopCountLimit', ['0'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityTransportAddrKind', ['loopback(2)'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityTargetPeer', ['true(1)'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityTargetPeerAddrType', ['ipv4(1)'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityTargetPeerAddr', ['01 01 01 01'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityLabelType', ['generic(1)'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityDiscontinuityTime', ['(0) 0:00:00.00'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityStorageType', ['nonVolatile(3)'])
assert r1_snmp.test_oid_walk(
'mplsLdpEntityRowStatus', ['createAndGo(4)'])
def test_r1_ldp_peer_table():
"Test mplsLdpPeerTable"
tgen = get_topogen()
r1 = tgen.net.get("r1")
r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
assert r1_snmp.test_oid_walk(
'mplsLdpPeerLdpId', ['2.2.2.2:0', '3.3.3.3:0'])
assert r1_snmp.test_oid_walk(
'mplsLdpPeerLabelDistMethod',
['downstreamUnsolicited(2)', 'downstreamUnsolicited(2)'])
assert r1_snmp.test_oid_walk(
'mplsLdpPeerPathVectorLimit', ['0', '0'])
assert r1_snmp.test_oid_walk(
'mplsLdpPeerTransportAddrType', ['ipv4(1)', 'ipv4(1)'])
assert r1_snmp.test_oid_walk(
'mplsLdpPeerTransportAddr', ['02 02 02 02', '03 03 03 03'])
def test_r1_ldp_session_table():
"Test mplsLdpSessionTable"
tgen = get_topogen()
r1 = tgen.net.get("r1")
r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
assert r1_snmp.test_oid_walk('mplsLdpSessionState',
['operational(5)', 'operational(5)'])
assert r1_snmp.test_oid_walk('mplsLdpSessionRole',
['passive(3)', 'passive(3)'])
assert r1_snmp.test_oid_walk('mplsLdpSessionProtocolVersion',
['1', '1'])
assert r1_snmp.test_oid_walk('mplsLdpSessionKeepAliveTime',
['180 seconds', '180 seconds'])
assert r1_snmp.test_oid_walk('mplsLdpSessionMaxPduLength',
['4096 octets', '4096 octets'])
assert r1_snmp.test_oid_walk('mplsLdpSessionDiscontinuityTime',
['(0) 0:00:00.00', '(0) 0:00:00.00'])
def test_r1_ldp_hello_adjacency_table():
"Test mplsLdpHelloAdjacencyTable"
tgen = get_topogen()
r1 = tgen.net.get("r1")
r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
assert r1_snmp.test_oid_walk('mplsLdpHelloAdjacencyIndex',
['1', '2', '1'])
assert r1_snmp.test_oid_walk('mplsLdpHelloAdjacencyHoldTime',
['15', '45', '15'])
assert r1_snmp.test_oid_walk('mplsLdpHelloAdjacencyType',
['link(1)', 'targeted(2)', 'link(1)'])
# Memory leak test template
# disabling memory leak
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))