]> git.puffer.fish Git - matthieu/frr.git/commitdiff
tests: Adding test for LDP ordered label distribution control
authorKaren Schoener <karen@voltanet.io>
Thu, 20 Feb 2020 19:30:25 +0000 (14:30 -0500)
committerlynne <lynne@voltanet.io>
Fri, 20 Mar 2020 21:11:33 +0000 (17:11 -0400)
Adding test for LDP ordered label distribution control.

Signed-off-by: Lynne Morrison <lynne@voltanet.io>
Signed-off-by: Karen Schoener <karen@voltanet.io>
68 files changed:
tests/topotests/ldp-oc-acl-topo1/r1/ldpd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r1/ospfd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r1/show_ip_ospf_neighbor.json [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r1/show_ip_route.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_binding.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_discovery.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_neighbor.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r1/zebra.conf [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r2/ldpd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r2/ospfd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r2/show_ip_ospf_neighbor.json [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r2/show_ip_route.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_binding.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_discovery.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_neighbor.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r2/zebra.conf [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r3/ldpd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r3/ospfd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r3/show_ip_ospf_neighbor.json [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r3/show_ip_route.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_binding.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_discovery.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_neighbor.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r3/zebra.conf [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r4/ldpd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r4/ospfd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r4/show_ip_ospf_neighbor.json [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r4/show_ip_route.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_binding.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_discovery.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_neighbor.ref [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/r4/zebra.conf [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/test_ldp_oc_acl_topo1.dot [new file with mode: 0644]
tests/topotests/ldp-oc-acl-topo1/test_ldp_oc_acl_topo1.py [new file with mode: 0755]
tests/topotests/ldp-oc-topo1/r1/ldpd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r1/ospfd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r1/show_ip_ospf_neighbor.json [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r1/show_ip_route.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r1/show_ldp_binding.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r1/show_ldp_discovery.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r1/show_ldp_neighbor.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r1/zebra.conf [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r2/ldpd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r2/ospfd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r2/show_ip_ospf_neighbor.json [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r2/show_ip_route.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r2/show_ldp_binding.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r2/show_ldp_discovery.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r2/show_ldp_neighbor.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r2/zebra.conf [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r3/ldpd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r3/ospfd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r3/show_ip_ospf_neighbor.json [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r3/show_ip_route.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r3/show_ldp_binding.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r3/show_ldp_discovery.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r3/show_ldp_neighbor.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r3/zebra.conf [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r4/ldpd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r4/ospfd.conf [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r4/show_ip_ospf_neighbor.json [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r4/show_ip_route.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r4/show_ldp_binding.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r4/show_ldp_discovery.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r4/show_ldp_neighbor.ref [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/r4/zebra.conf [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/test_ldp_oc_topo1.dot [new file with mode: 0644]
tests/topotests/ldp-oc-topo1/test_ldp_oc_topo1.py [new file with mode: 0755]

diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/ldpd.conf b/tests/topotests/ldp-oc-acl-topo1/r1/ldpd.conf
new file mode 100644 (file)
index 0000000..85bb970
--- /dev/null
@@ -0,0 +1,25 @@
+hostname r1
+log file ldpd.log
+!
+debug mpls ldp zebra
+debug mpls ldp event
+debug mpls ldp errors
+debug mpls ldp messages recv
+debug mpls ldp messages sent
+debug mpls ldp discovery hello recv
+debug mpls ldp discovery hello sent
+!
+mpls ldp
+ router-id 1.1.1.1
+ ordered-control
+ !
+ address-family ipv4
+  discovery transport-address 1.1.1.1
+  label local allocate host-routes
+  !
+  interface r1-eth0
+  !
+ !
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/ospfd.conf b/tests/topotests/ldp-oc-acl-topo1/r1/ospfd.conf
new file mode 100644 (file)
index 0000000..6daf034
--- /dev/null
@@ -0,0 +1,7 @@
+hostname r1
+log file ospfd.log
+!
+router ospf
+ router-id 1.1.1.1
+ network 0.0.0.0/0 area 0
+!
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/show_ip_ospf_neighbor.json b/tests/topotests/ldp-oc-acl-topo1/r1/show_ip_ospf_neighbor.json
new file mode 100644 (file)
index 0000000..2c49317
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "neighbors":{
+    "2.2.2.2":[
+      {
+        "priority":1,
+        "state":"Full\/DR",
+        "address":"10.0.1.2",
+        "ifaceName":"r1-eth0:10.0.1.1"
+      }
+    ]
+  }
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/show_ip_route.ref b/tests/topotests/ldp-oc-acl-topo1/r1/show_ip_route.ref
new file mode 100644 (file)
index 0000000..d75b8f2
--- /dev/null
@@ -0,0 +1,171 @@
+{
+  "1.1.1.1/32":[
+    {
+      "prefix":"1.1.1.1/32",
+      "protocol":"ospf",
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"1.1.1.1/32",
+      "protocol":"connected",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "2.2.2.2/32":[
+    {
+      "prefix":"2.2.2.2/32",
+      "protocol":"ospf",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.1.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "3.3.3.3/32":[
+    {
+      "prefix":"3.3.3.3/32",
+      "protocol":"ospf",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.1.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "4.4.4.4/32":[
+    {
+      "prefix":"4.4.4.4/32",
+      "protocol":"ospf",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.1.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.1.0/24":[
+    {
+      "prefix":"10.0.1.0/24",
+      "protocol":"ospf",
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"10.0.1.0/24",
+      "protocol":"connected",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.2.0/24":[
+    {
+      "prefix":"10.0.2.0/24",
+      "protocol":"ospf",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.1.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.3.0/24":[
+    {
+      "prefix":"10.0.3.0/24",
+      "protocol":"ospf",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.1.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "123.0.1.0/24":[
+    {
+      "prefix":"123.0.1.0/24",
+      "protocol":"ospf",
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"123.0.1.0/24",
+      "protocol":"connected",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_binding.ref b/tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_binding.ref
new file mode 100644 (file)
index 0000000..ccc8413
--- /dev/null
@@ -0,0 +1,55 @@
+{
+  "bindings":[
+    {
+      "addressFamily":"ipv4",
+      "prefix":"1.1.1.1/32",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "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":"2.2.2.2",
+      "inUse":1
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"4.4.4.4/32",
+      "neighborId":"0.0.0.0",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.1.0/24",
+      "neighborId":"2.2.2.2",
+      "localLabel":"-",
+      "remoteLabel":"imp-null",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.2.0/24",
+      "neighborId":"2.2.2.2",
+      "localLabel":"-",
+      "remoteLabel":"imp-null",
+      "inUse":1
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.3.0/24",
+      "neighborId":"2.2.2.2",
+      "localLabel":"-",
+      "inUse":1
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_discovery.ref b/tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_discovery.ref
new file mode 100644 (file)
index 0000000..b349f44
--- /dev/null
@@ -0,0 +1,11 @@
+{
+  "adjacencies":[
+    {
+      "addressFamily":"ipv4",
+      "neighborId":"2.2.2.2",
+      "type":"link",
+      "interface":"r1-eth0",
+      "helloHoldtime":15
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_neighbor.ref b/tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_neighbor.ref
new file mode 100644 (file)
index 0000000..4bff444
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "neighbors":[
+    {
+      "addressFamily":"ipv4",
+      "neighborId":"2.2.2.2",
+      "state":"OPERATIONAL",
+      "transportAddress":"2.2.2.2"
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/zebra.conf b/tests/topotests/ldp-oc-acl-topo1/r1/zebra.conf
new file mode 100644 (file)
index 0000000..83aea46
--- /dev/null
@@ -0,0 +1,17 @@
+log file zebra.log
+!
+hostname r1
+!
+interface lo
+ ip address 1.1.1.1/32
+!
+interface r1-eth0
+ description to sw0
+ ip address 10.0.1.1/24
+ ip address 123.0.1.1/24
+!
+ip forwarding
+!
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/ldpd.conf b/tests/topotests/ldp-oc-acl-topo1/r2/ldpd.conf
new file mode 100644 (file)
index 0000000..e1a552c
--- /dev/null
@@ -0,0 +1,28 @@
+hostname r2
+log file ldpd.log
+!
+debug mpls ldp zebra
+debug mpls ldp event
+debug mpls ldp errors
+debug mpls ldp messages recv
+debug mpls ldp messages sent
+debug mpls ldp discovery hello recv
+debug mpls ldp discovery hello sent
+!
+mpls ldp
+ router-id 2.2.2.2
+ ordered-control
+ !
+ address-family ipv4
+  discovery transport-address 2.2.2.2
+  !
+  interface r2-eth0
+  !
+  interface r2-eth1
+  !
+  interface r2-eth2
+  !
+ !
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/ospfd.conf b/tests/topotests/ldp-oc-acl-topo1/r2/ospfd.conf
new file mode 100644 (file)
index 0000000..8678813
--- /dev/null
@@ -0,0 +1,7 @@
+hostname r2
+log file ospfd.log
+!
+router ospf
+ router-id 2.2.2.2
+ network 0.0.0.0/0 area 0
+!
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/show_ip_ospf_neighbor.json b/tests/topotests/ldp-oc-acl-topo1/r2/show_ip_ospf_neighbor.json
new file mode 100644 (file)
index 0000000..55f1235
--- /dev/null
@@ -0,0 +1,31 @@
+{
+  "neighbors":{
+    "1.1.1.1":[
+      {
+        "priority":1,
+        "state":"Full\/Backup",
+        "address":"10.0.1.1",
+        "ifaceName":"r2-eth0:10.0.1.2",
+        "retransmitCounter":0,
+        "requestCounter":0,
+        "dbSummaryCounter":0
+      }
+    ],
+    "3.3.3.3":[
+      {
+        "priority":1,
+        "state":"Full\/Backup",
+        "address":"10.0.2.3",
+        "ifaceName":"r2-eth1:10.0.2.2"
+      }
+    ],
+    "4.4.4.4":[
+      {
+        "priority":1,
+        "state":"Full\/DR",
+        "address":"10.0.2.4",
+        "ifaceName":"r2-eth1:10.0.2.2"
+      }
+    ]
+  }
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/show_ip_route.ref b/tests/topotests/ldp-oc-acl-topo1/r2/show_ip_route.ref
new file mode 100644 (file)
index 0000000..060c0b4
--- /dev/null
@@ -0,0 +1,209 @@
+{
+  "1.1.1.1/32":[
+    {
+      "prefix":"1.1.1.1/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":10,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.1.1",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r2-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "2.2.2.2/32":[
+    {
+      "prefix":"2.2.2.2/32",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":0,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"2.2.2.2/32",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "3.3.3.3/32":[
+    {
+      "prefix":"3.3.3.3/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":10,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.3",
+          "afi":"ipv4",
+          "interfaceIndex":3,
+          "interfaceName":"r2-eth1",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "4.4.4.4/32":[
+    {
+      "prefix":"4.4.4.4/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":10,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.4",
+          "afi":"ipv4",
+          "interfaceIndex":3,
+          "interfaceName":"r2-eth1",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.1.0\/24":[
+    {
+      "prefix":"10.0.1.0\/24",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":10,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r2-eth0",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"10.0.1.0\/24",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r2-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.2.0\/24":[
+    {
+      "prefix":"10.0.2.0\/24",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":10,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":3,
+          "interfaceName":"r2-eth1",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"10.0.2.0\/24",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":3,
+          "interfaceName":"r2-eth1",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.3.0\/24":[
+    {
+      "prefix":"10.0.3.0\/24",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":20,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.3",
+          "afi":"ipv4",
+          "interfaceIndex":3,
+          "interfaceName":"r2-eth1",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "123.0.1.0\/24":[
+    {
+      "prefix":"123.0.1.0\/24",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":20,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.1.1",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r2-eth0",
+          "active":true
+        }
+      ]
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_binding.ref b/tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_binding.ref
new file mode 100644 (file)
index 0000000..ea32de3
--- /dev/null
@@ -0,0 +1,63 @@
+{
+  "bindings":[
+    {
+      "addressFamily":"ipv4",
+      "prefix":"1.1.1.1/32",
+      "neighborId":"1.1.1.1",
+      "remoteLabel":"imp-null",
+      "inUse":1
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"2.2.2.2/32",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"3.3.3.3/32",
+      "neighborId":"3.3.3.3",
+      "remoteLabel":"imp-null",
+      "inUse":1
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"4.4.4.4/32",
+      "neighborId":"0.0.0.0",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.1.0/24",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.2.0/24",
+      "neighborId":"3.3.3.3",
+      "localLabel":"imp-null",
+      "remoteLabel":"imp-null",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.3.0/24",
+      "neighborId":"3.3.3.3",
+      "remoteLabel":"imp-null",
+      "inUse":1
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"123.0.1.0/24",
+      "neighborId":"0.0.0.0",
+      "remoteLabel":"-",
+      "inUse":0
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_discovery.ref b/tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_discovery.ref
new file mode 100644 (file)
index 0000000..8129570
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "adjacencies":[
+    {
+      "addressFamily":"ipv4",
+      "neighborId":"1.1.1.1",
+      "type":"link",
+      "interface":"r2-eth0",
+      "helloHoldtime":15
+    },
+    {
+      "addressFamily":"ipv4",
+      "neighborId":"3.3.3.3",
+      "type":"link",
+      "interface":"r2-eth1",
+      "helloHoldtime":15
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_neighbor.ref b/tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_neighbor.ref
new file mode 100644 (file)
index 0000000..eed3528
--- /dev/null
@@ -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-oc-acl-topo1/r2/zebra.conf b/tests/topotests/ldp-oc-acl-topo1/r2/zebra.conf
new file mode 100644 (file)
index 0000000..1f1e3e3
--- /dev/null
@@ -0,0 +1,27 @@
+log file zebra.log
+!
+hostname r2
+!
+interface lo
+ ip address 2.2.2.2/32
+!
+interface r2-eth0
+ description to sw0
+ ip address 10.0.1.2/24
+! no link-detect
+!
+interface r2-eth1
+ description to sw1
+ ip address 10.0.2.2/24
+! no link-detect
+!
+interface r2-eths2
+ description to sw2
+ ip address 10.0.3.2/24
+! no link-detect
+!
+ip forwarding
+!
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/ldpd.conf b/tests/topotests/ldp-oc-acl-topo1/r3/ldpd.conf
new file mode 100644 (file)
index 0000000..4e66b14
--- /dev/null
@@ -0,0 +1,24 @@
+hostname r3
+log file ldpd.log
+!
+debug mpls ldp zebra
+debug mpls ldp event
+debug mpls ldp errors
+debug mpls ldp messages recv
+debug mpls ldp messages sent
+debug mpls ldp discovery hello recv
+debug mpls ldp discovery hello sent
+!
+mpls ldp
+ router-id 3.3.3.3
+ ordered-control
+ !
+ address-family ipv4
+  discovery transport-address 3.3.3.3
+  !
+  interface r3-eth0
+  !
+ !
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/ospfd.conf b/tests/topotests/ldp-oc-acl-topo1/r3/ospfd.conf
new file mode 100644 (file)
index 0000000..202be23
--- /dev/null
@@ -0,0 +1,8 @@
+hostname r3
+password 1
+log file ospfd.log
+!
+router ospf
+ router-id 3.3.3.3
+ network 0.0.0.0/0 area 0
+!
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/show_ip_ospf_neighbor.json b/tests/topotests/ldp-oc-acl-topo1/r3/show_ip_ospf_neighbor.json
new file mode 100644 (file)
index 0000000..24502ed
--- /dev/null
@@ -0,0 +1,20 @@
+{
+  "neighbors":{
+    "2.2.2.2":[
+      {
+        "priority":1,
+        "state":"Full\/DROther",
+        "address":"10.0.2.2",
+        "ifaceName":"r3-eth0:10.0.2.3"
+      }
+    ],
+    "4.4.4.4":[
+      {
+        "priority":1,
+        "state":"Full\/DR",
+        "address":"10.0.2.4",
+        "ifaceName":"r3-eth0:10.0.2.3"
+      }
+    ]
+  }
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/show_ip_route.ref b/tests/topotests/ldp-oc-acl-topo1/r3/show_ip_route.ref
new file mode 100644 (file)
index 0000000..4080076
--- /dev/null
@@ -0,0 +1,209 @@
+{
+  "1.1.1.1/32":[
+    {
+      "prefix":"1.1.1.1/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":20,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r3-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "2.2.2.2/32":[
+    {
+      "prefix":"2.2.2.2/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":10,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r3-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "3.3.3.3/32":[
+    {
+      "prefix":"3.3.3.3/32",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":0,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"3.3.3.3/32",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "4.4.4.4/32":[
+    {
+      "prefix":"4.4.4.4/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":10,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.4",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r3-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.1.0\/24":[
+    {
+      "prefix":"10.0.1.0\/24",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":20,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r3-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.2.0\/24":[
+    {
+      "prefix":"10.0.2.0\/24",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":10,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r3-eth0",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"10.0.2.0\/24",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r3-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.3.0\/24":[
+    {
+      "prefix":"10.0.3.0\/24",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":10,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":3,
+          "interfaceName":"r3-eth1",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"10.0.3.0\/24",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":3,
+          "interfaceName":"r3-eth1",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "123.0.1.0\/24":[
+    {
+      "prefix":"123.0.1.0\/24",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":30,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r3-eth0",
+          "active":true
+        }
+      ]
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_binding.ref b/tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_binding.ref
new file mode 100644 (file)
index 0000000..bb1b2b3
--- /dev/null
@@ -0,0 +1,62 @@
+{
+  "bindings":[
+    {
+      "addressFamily":"ipv4",
+      "prefix":"1.1.1.1/32",
+      "neighborId":"2.2.2.2",
+      "inUse":1
+    },
+    {
+      "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":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"4.4.4.4/32",
+      "neighborId":"0.0.0.0",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.1.0/24",
+      "neighborId":"2.2.2.2",
+      "remoteLabel":"imp-null",
+      "inUse":1
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.2.0/24",
+      "neighborId":"2.2.2.2",
+      "localLabel":"imp-null",
+      "remoteLabel":"imp-null",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.3.0/24",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"123.0.1.0/24",
+      "neighborId":"0.0.0.0",
+      "remoteLabel":"-",
+      "inUse":0
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_discovery.ref b/tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_discovery.ref
new file mode 100644 (file)
index 0000000..c3a07e7
--- /dev/null
@@ -0,0 +1,11 @@
+{
+  "adjacencies":[
+    {
+      "addressFamily":"ipv4",
+      "neighborId":"2.2.2.2",
+      "type":"link",
+      "interface":"r3-eth0",
+      "helloHoldtime":15
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_neighbor.ref b/tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_neighbor.ref
new file mode 100644 (file)
index 0000000..4bff444
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "neighbors":[
+    {
+      "addressFamily":"ipv4",
+      "neighborId":"2.2.2.2",
+      "state":"OPERATIONAL",
+      "transportAddress":"2.2.2.2"
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/zebra.conf b/tests/topotests/ldp-oc-acl-topo1/r3/zebra.conf
new file mode 100644 (file)
index 0000000..234c215
--- /dev/null
@@ -0,0 +1,22 @@
+log file zebra.log
+!
+hostname r3
+!
+interface lo
+ ip address 3.3.3.3/32
+!
+interface r3-eth0
+ description to sw1
+ ip address 10.0.2.3/24
+! no link-detect
+!
+interface r3-eth1
+ description to sw2
+ ip address 10.0.3.3/24
+! no link-detect
+!
+ip forwarding
+!
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/ldpd.conf b/tests/topotests/ldp-oc-acl-topo1/r4/ldpd.conf
new file mode 100644 (file)
index 0000000..6b7d28f
--- /dev/null
@@ -0,0 +1,24 @@
+hostname r4
+log file ldpd.log
+!
+debug mpls ldp zebra
+debug mpls ldp event
+debug mpls ldp errors
+debug mpls ldp messages recv
+debug mpls ldp messages sent
+debug mpls ldp discovery hello recv
+debug mpls ldp discovery hello sent
+!
+mpls ldp
+ router-id 4.4.4.4
+ ordered-control
+ !
+ address-family ipv4
+  discovery transport-address 4.4.4.4
+  !
+  !interface r4-eth0
+  !
+ !
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/ospfd.conf b/tests/topotests/ldp-oc-acl-topo1/r4/ospfd.conf
new file mode 100644 (file)
index 0000000..569dbc5
--- /dev/null
@@ -0,0 +1,7 @@
+hostname r4
+log file ospfd.log
+!
+router ospf
+ router-id 4.4.4.4
+ network 0.0.0.0/0 area 0
+!
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/show_ip_ospf_neighbor.json b/tests/topotests/ldp-oc-acl-topo1/r4/show_ip_ospf_neighbor.json
new file mode 100644 (file)
index 0000000..7944105
--- /dev/null
@@ -0,0 +1,21 @@
+
+{
+  "neighbors":{
+    "2.2.2.2":[
+      {
+        "priority":1,
+        "state":"Full\/DROther",
+        "address":"10.0.2.2",
+        "ifaceName":"r4-eth0:10.0.2.4"
+      }
+    ],
+    "3.3.3.3":[
+      {
+        "priority":1,
+        "state":"Full\/Backup",
+        "address":"10.0.2.3",
+        "ifaceName":"r4-eth0:10.0.2.4"
+      }
+    ]
+  }
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/show_ip_route.ref b/tests/topotests/ldp-oc-acl-topo1/r4/show_ip_route.ref
new file mode 100644 (file)
index 0000000..c9b83a1
--- /dev/null
@@ -0,0 +1,196 @@
+{
+  "1.1.1.1/32":[
+    {
+      "prefix":"1.1.1.1/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":20,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "2.2.2.2/32":[
+    {
+      "prefix":"2.2.2.2/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":10,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "3.3.3.3/32":[
+    {
+      "prefix":"3.3.3.3/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":10,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.3",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "4.4.4.4/32":[
+    {
+      "prefix":"4.4.4.4/32",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":0,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"4.4.4.4/32",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.1.0\/24":[
+    {
+      "prefix":"10.0.1.0\/24",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":20,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.2.0\/24":[
+    {
+      "prefix":"10.0.2.0\/24",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":10,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"10.0.2.0\/24",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.3.0\/24":[
+    {
+      "prefix":"10.0.3.0\/24",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":20,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.3",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "123.0.1.0\/24":[
+    {
+      "prefix":"123.0.1.0\/24",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":30,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_binding.ref b/tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_binding.ref
new file mode 100644 (file)
index 0000000..2a46c40
--- /dev/null
@@ -0,0 +1,68 @@
+{
+  "bindings":[
+    {
+      "addressFamily":"ipv4",
+      "prefix":"1.1.1.1/32",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"2.2.2.2/32",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"3.3.3.3/32",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"4.4.4.4/32",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.1.0/24",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.2.0/24",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.3.0/24",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"123.0.1.0/24",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_discovery.ref b/tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_discovery.ref
new file mode 100644 (file)
index 0000000..2c63c08
--- /dev/null
@@ -0,0 +1,2 @@
+{
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_neighbor.ref b/tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_neighbor.ref
new file mode 100644 (file)
index 0000000..2c63c08
--- /dev/null
@@ -0,0 +1,2 @@
+{
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/zebra.conf b/tests/topotests/ldp-oc-acl-topo1/r4/zebra.conf
new file mode 100644 (file)
index 0000000..7e29105
--- /dev/null
@@ -0,0 +1,17 @@
+log file zebra.log
+!
+hostname r4
+!
+interface lo
+ ip address 4.4.4.4/32
+!
+interface r4-eth0
+ description to sw1
+ ip address 10.0.2.4/24
+! no link-detect
+!
+ip forwarding
+!
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-acl-topo1/test_ldp_oc_acl_topo1.dot b/tests/topotests/ldp-oc-acl-topo1/test_ldp_oc_acl_topo1.dot
new file mode 100644 (file)
index 0000000..62058e3
--- /dev/null
@@ -0,0 +1,76 @@
+## 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-OC 1";
+
+       # Routers
+       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,
+       ];
+       r4 [
+               shape=doubleoctagon
+               label="r4",
+               fillcolor="#f08080",
+               style=filled,
+       ];
+
+
+       # Switches
+       s0 [
+               shape=oval,
+               label="10.0.1.0/24",
+               fillcolor="#d0e0d0",
+               style=filled,
+       ];
+       s1 [
+               shape=oval,
+               label="10.0.2.0/24",
+               fillcolor="#d0e0d0",
+               style=filled,
+       ];
+       s2 [
+               shape=oval,
+               label="10.0.3.0/24",
+               fillcolor="#d0e0d0",
+               style=filled,
+       ];
+
+       # Connections
+
+       r1 -- s0 [label="eth0"];
+       r2 -- s0 [label="eth0"];
+
+       r2 -- s1 [label="eth1"];
+       r3 -- s1 [label="eth0"];
+       r4 -- s1 [label="eth0"];
+
+       r2 -- s2 [label="eth2"];
+       r3 -- s2 [label="eth1"];
+}
diff --git a/tests/topotests/ldp-oc-acl-topo1/test_ldp_oc_acl_topo1.py b/tests/topotests/ldp-oc-acl-topo1/test_ldp_oc_acl_topo1.py
new file mode 100755 (executable)
index 0000000..47b32a1
--- /dev/null
@@ -0,0 +1,227 @@
+#!/usr/bin/env python
+
+#
+# test_ldp_oc_acl_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_oc_acl_topo1.py: Simple FRR/Quagga LDP Test
+
+             +---------+
+             |    r1   |
+             | 1.1.1.1 |
+             +----+----+
+                  | .1  r1-eth0
+                  |
+            ~~~~~~~~~~~~~
+          ~~     sw0     ~~
+          ~~ 10.0.1.0/24 ~~
+            ~~~~~~~~~~~~~
+                  |10.0.1.0/24
+                  |
+                  | .2  r2-eth0
+             +----+----+
+             |    r2   |
+             | 2.2.2.2 |
+             +--+---+--+
+    r2-eth2  .2 |   | .2  r2-eth1
+         ______/     \______
+        /                   \
+  ~~~~~~~~~~~~~        ~~~~~~~~~~~~~
+~~     sw2     ~~    ~~     sw1     ~~
+~~ 10.0.3.0/24 ~~    ~~ 10.0.2.0/24 ~~
+  ~~~~~~~~~~~~~        ~~~~~~~~~~~~~
+        |                 /    |
+         \      _________/     |
+          \    /                \
+r3-eth1 .3 |  | .3  r3-eth0      | .4 r4-eth0
+      +----+--+---+         +----+----+
+      |     r3    |         |    r4   |
+      |  3.3.3.3  |         | 4.4.4.4 |
+      +-----------+         +---------+
+"""
+
+import os
+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
+
+# 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 ['r1', 'r2', 'r3', 'r4']:
+            tgen.add_router(router)
+
+        #
+        # Define connections
+        #
+        switch = tgen.add_switch('s0')
+        switch.add_link(tgen.gears['r1'])
+        switch.add_link(tgen.gears['r2'])
+
+        switch = tgen.add_switch('s1')
+        switch.add_link(tgen.gears['r2'])
+        switch.add_link(tgen.gears['r3'])
+        switch.add_link(tgen.gears['r4'])
+
+        switch = tgen.add_switch('s2')
+        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.iteritems():
+        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. Wait at most 80 seconds.
+    test_func = partial(topotest.router_json_cmp,
+        tgen.gears[rname], command, expected)
+    _, diff = topotest.run_and_expect(test_func, None, count=160, 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', 'r4']:
+        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', 'r4']:
+        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', 'r4']:
+        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', 'r4']:
+        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', 'r4']:
+        router_compare_json_output(rname, "show mpls ldp binding json", "show_ldp_binding.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))
diff --git a/tests/topotests/ldp-oc-topo1/r1/ldpd.conf b/tests/topotests/ldp-oc-topo1/r1/ldpd.conf
new file mode 100644 (file)
index 0000000..2a8e023
--- /dev/null
@@ -0,0 +1,24 @@
+hostname r1
+log file ldpd.log
+!
+debug mpls ldp zebra
+debug mpls ldp event
+debug mpls ldp errors
+debug mpls ldp messages recv
+debug mpls ldp messages sent
+debug mpls ldp discovery hello recv
+debug mpls ldp discovery hello sent
+!
+mpls ldp
+ router-id 1.1.1.1
+ ordered-control
+ !
+ address-family ipv4
+  discovery transport-address 1.1.1.1
+  !
+  interface r1-eth0
+  !
+ !
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-topo1/r1/ospfd.conf b/tests/topotests/ldp-oc-topo1/r1/ospfd.conf
new file mode 100644 (file)
index 0000000..6daf034
--- /dev/null
@@ -0,0 +1,7 @@
+hostname r1
+log file ospfd.log
+!
+router ospf
+ router-id 1.1.1.1
+ network 0.0.0.0/0 area 0
+!
diff --git a/tests/topotests/ldp-oc-topo1/r1/show_ip_ospf_neighbor.json b/tests/topotests/ldp-oc-topo1/r1/show_ip_ospf_neighbor.json
new file mode 100644 (file)
index 0000000..2c49317
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "neighbors":{
+    "2.2.2.2":[
+      {
+        "priority":1,
+        "state":"Full\/DR",
+        "address":"10.0.1.2",
+        "ifaceName":"r1-eth0:10.0.1.1"
+      }
+    ]
+  }
+}
diff --git a/tests/topotests/ldp-oc-topo1/r1/show_ip_route.ref b/tests/topotests/ldp-oc-topo1/r1/show_ip_route.ref
new file mode 100644 (file)
index 0000000..d75b8f2
--- /dev/null
@@ -0,0 +1,171 @@
+{
+  "1.1.1.1/32":[
+    {
+      "prefix":"1.1.1.1/32",
+      "protocol":"ospf",
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"1.1.1.1/32",
+      "protocol":"connected",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "2.2.2.2/32":[
+    {
+      "prefix":"2.2.2.2/32",
+      "protocol":"ospf",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.1.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "3.3.3.3/32":[
+    {
+      "prefix":"3.3.3.3/32",
+      "protocol":"ospf",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.1.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "4.4.4.4/32":[
+    {
+      "prefix":"4.4.4.4/32",
+      "protocol":"ospf",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.1.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.1.0/24":[
+    {
+      "prefix":"10.0.1.0/24",
+      "protocol":"ospf",
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"10.0.1.0/24",
+      "protocol":"connected",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.2.0/24":[
+    {
+      "prefix":"10.0.2.0/24",
+      "protocol":"ospf",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.1.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.3.0/24":[
+    {
+      "prefix":"10.0.3.0/24",
+      "protocol":"ospf",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.1.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "123.0.1.0/24":[
+    {
+      "prefix":"123.0.1.0/24",
+      "protocol":"ospf",
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"123.0.1.0/24",
+      "protocol":"connected",
+      "selected":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r1-eth0",
+          "active":true
+        }
+      ]
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-topo1/r1/show_ldp_binding.ref b/tests/topotests/ldp-oc-topo1/r1/show_ldp_binding.ref
new file mode 100644 (file)
index 0000000..99a5966
--- /dev/null
@@ -0,0 +1,61 @@
+{
+  "bindings":[
+    {
+      "addressFamily":"ipv4",
+      "prefix":"1.1.1.1/32",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "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":"2.2.2.2",
+      "inUse":1
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"4.4.4.4/32",
+      "neighborId":"0.0.0.0",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.1.0/24",
+      "neighborId":"2.2.2.2",
+      "localLabel":"imp-null",
+      "remoteLabel":"imp-null",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.2.0/24",
+      "neighborId":"2.2.2.2",
+      "remoteLabel":"imp-null",
+      "inUse":1
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.3.0/24",
+      "neighborId":"2.2.2.2",
+      "inUse":1
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"123.0.1.0/24",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-topo1/r1/show_ldp_discovery.ref b/tests/topotests/ldp-oc-topo1/r1/show_ldp_discovery.ref
new file mode 100644 (file)
index 0000000..b349f44
--- /dev/null
@@ -0,0 +1,11 @@
+{
+  "adjacencies":[
+    {
+      "addressFamily":"ipv4",
+      "neighborId":"2.2.2.2",
+      "type":"link",
+      "interface":"r1-eth0",
+      "helloHoldtime":15
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-topo1/r1/show_ldp_neighbor.ref b/tests/topotests/ldp-oc-topo1/r1/show_ldp_neighbor.ref
new file mode 100644 (file)
index 0000000..4bff444
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "neighbors":[
+    {
+      "addressFamily":"ipv4",
+      "neighborId":"2.2.2.2",
+      "state":"OPERATIONAL",
+      "transportAddress":"2.2.2.2"
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-topo1/r1/zebra.conf b/tests/topotests/ldp-oc-topo1/r1/zebra.conf
new file mode 100644 (file)
index 0000000..83aea46
--- /dev/null
@@ -0,0 +1,17 @@
+log file zebra.log
+!
+hostname r1
+!
+interface lo
+ ip address 1.1.1.1/32
+!
+interface r1-eth0
+ description to sw0
+ ip address 10.0.1.1/24
+ ip address 123.0.1.1/24
+!
+ip forwarding
+!
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-topo1/r2/ldpd.conf b/tests/topotests/ldp-oc-topo1/r2/ldpd.conf
new file mode 100644 (file)
index 0000000..e1a552c
--- /dev/null
@@ -0,0 +1,28 @@
+hostname r2
+log file ldpd.log
+!
+debug mpls ldp zebra
+debug mpls ldp event
+debug mpls ldp errors
+debug mpls ldp messages recv
+debug mpls ldp messages sent
+debug mpls ldp discovery hello recv
+debug mpls ldp discovery hello sent
+!
+mpls ldp
+ router-id 2.2.2.2
+ ordered-control
+ !
+ address-family ipv4
+  discovery transport-address 2.2.2.2
+  !
+  interface r2-eth0
+  !
+  interface r2-eth1
+  !
+  interface r2-eth2
+  !
+ !
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-topo1/r2/ospfd.conf b/tests/topotests/ldp-oc-topo1/r2/ospfd.conf
new file mode 100644 (file)
index 0000000..8678813
--- /dev/null
@@ -0,0 +1,7 @@
+hostname r2
+log file ospfd.log
+!
+router ospf
+ router-id 2.2.2.2
+ network 0.0.0.0/0 area 0
+!
diff --git a/tests/topotests/ldp-oc-topo1/r2/show_ip_ospf_neighbor.json b/tests/topotests/ldp-oc-topo1/r2/show_ip_ospf_neighbor.json
new file mode 100644 (file)
index 0000000..55f1235
--- /dev/null
@@ -0,0 +1,31 @@
+{
+  "neighbors":{
+    "1.1.1.1":[
+      {
+        "priority":1,
+        "state":"Full\/Backup",
+        "address":"10.0.1.1",
+        "ifaceName":"r2-eth0:10.0.1.2",
+        "retransmitCounter":0,
+        "requestCounter":0,
+        "dbSummaryCounter":0
+      }
+    ],
+    "3.3.3.3":[
+      {
+        "priority":1,
+        "state":"Full\/Backup",
+        "address":"10.0.2.3",
+        "ifaceName":"r2-eth1:10.0.2.2"
+      }
+    ],
+    "4.4.4.4":[
+      {
+        "priority":1,
+        "state":"Full\/DR",
+        "address":"10.0.2.4",
+        "ifaceName":"r2-eth1:10.0.2.2"
+      }
+    ]
+  }
+}
diff --git a/tests/topotests/ldp-oc-topo1/r2/show_ip_route.ref b/tests/topotests/ldp-oc-topo1/r2/show_ip_route.ref
new file mode 100644 (file)
index 0000000..060c0b4
--- /dev/null
@@ -0,0 +1,209 @@
+{
+  "1.1.1.1/32":[
+    {
+      "prefix":"1.1.1.1/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":10,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.1.1",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r2-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "2.2.2.2/32":[
+    {
+      "prefix":"2.2.2.2/32",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":0,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"2.2.2.2/32",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "3.3.3.3/32":[
+    {
+      "prefix":"3.3.3.3/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":10,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.3",
+          "afi":"ipv4",
+          "interfaceIndex":3,
+          "interfaceName":"r2-eth1",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "4.4.4.4/32":[
+    {
+      "prefix":"4.4.4.4/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":10,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.4",
+          "afi":"ipv4",
+          "interfaceIndex":3,
+          "interfaceName":"r2-eth1",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.1.0\/24":[
+    {
+      "prefix":"10.0.1.0\/24",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":10,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r2-eth0",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"10.0.1.0\/24",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r2-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.2.0\/24":[
+    {
+      "prefix":"10.0.2.0\/24",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":10,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":3,
+          "interfaceName":"r2-eth1",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"10.0.2.0\/24",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":3,
+          "interfaceName":"r2-eth1",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.3.0\/24":[
+    {
+      "prefix":"10.0.3.0\/24",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":20,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.3",
+          "afi":"ipv4",
+          "interfaceIndex":3,
+          "interfaceName":"r2-eth1",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "123.0.1.0\/24":[
+    {
+      "prefix":"123.0.1.0\/24",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":20,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.1.1",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r2-eth0",
+          "active":true
+        }
+      ]
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-topo1/r2/show_ldp_binding.ref b/tests/topotests/ldp-oc-topo1/r2/show_ldp_binding.ref
new file mode 100644 (file)
index 0000000..95fb847
--- /dev/null
@@ -0,0 +1,63 @@
+{
+  "bindings":[
+    {
+      "addressFamily":"ipv4",
+      "prefix":"1.1.1.1/32",
+      "neighborId":"1.1.1.1",
+      "remoteLabel":"imp-null",
+      "inUse":1
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"2.2.2.2/32",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"3.3.3.3/32",
+      "neighborId":"3.3.3.3",
+      "remoteLabel":"imp-null",
+      "inUse":1
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"4.4.4.4/32",
+      "neighborId":"0.0.0.0",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.1.0/24",
+      "neighborId":"1.1.1.1",
+      "localLabel":"imp-null",
+      "remoteLabel":"imp-null",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.2.0/24",
+      "neighborId":"3.3.3.3",
+      "localLabel":"imp-null",
+      "remoteLabel":"imp-null",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.3.0/24",
+      "neighborId":"3.3.3.3",
+      "remoteLabel":"imp-null",
+      "inUse":1
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"123.0.1.0/24",
+      "neighborId":"1.1.1.1",
+      "remoteLabel":"imp-null",
+      "inUse":1
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-topo1/r2/show_ldp_discovery.ref b/tests/topotests/ldp-oc-topo1/r2/show_ldp_discovery.ref
new file mode 100644 (file)
index 0000000..8129570
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "adjacencies":[
+    {
+      "addressFamily":"ipv4",
+      "neighborId":"1.1.1.1",
+      "type":"link",
+      "interface":"r2-eth0",
+      "helloHoldtime":15
+    },
+    {
+      "addressFamily":"ipv4",
+      "neighborId":"3.3.3.3",
+      "type":"link",
+      "interface":"r2-eth1",
+      "helloHoldtime":15
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-topo1/r2/show_ldp_neighbor.ref b/tests/topotests/ldp-oc-topo1/r2/show_ldp_neighbor.ref
new file mode 100644 (file)
index 0000000..eed3528
--- /dev/null
@@ -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-oc-topo1/r2/zebra.conf b/tests/topotests/ldp-oc-topo1/r2/zebra.conf
new file mode 100644 (file)
index 0000000..1f1e3e3
--- /dev/null
@@ -0,0 +1,27 @@
+log file zebra.log
+!
+hostname r2
+!
+interface lo
+ ip address 2.2.2.2/32
+!
+interface r2-eth0
+ description to sw0
+ ip address 10.0.1.2/24
+! no link-detect
+!
+interface r2-eth1
+ description to sw1
+ ip address 10.0.2.2/24
+! no link-detect
+!
+interface r2-eths2
+ description to sw2
+ ip address 10.0.3.2/24
+! no link-detect
+!
+ip forwarding
+!
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-topo1/r3/ldpd.conf b/tests/topotests/ldp-oc-topo1/r3/ldpd.conf
new file mode 100644 (file)
index 0000000..4e66b14
--- /dev/null
@@ -0,0 +1,24 @@
+hostname r3
+log file ldpd.log
+!
+debug mpls ldp zebra
+debug mpls ldp event
+debug mpls ldp errors
+debug mpls ldp messages recv
+debug mpls ldp messages sent
+debug mpls ldp discovery hello recv
+debug mpls ldp discovery hello sent
+!
+mpls ldp
+ router-id 3.3.3.3
+ ordered-control
+ !
+ address-family ipv4
+  discovery transport-address 3.3.3.3
+  !
+  interface r3-eth0
+  !
+ !
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-topo1/r3/ospfd.conf b/tests/topotests/ldp-oc-topo1/r3/ospfd.conf
new file mode 100644 (file)
index 0000000..202be23
--- /dev/null
@@ -0,0 +1,8 @@
+hostname r3
+password 1
+log file ospfd.log
+!
+router ospf
+ router-id 3.3.3.3
+ network 0.0.0.0/0 area 0
+!
diff --git a/tests/topotests/ldp-oc-topo1/r3/show_ip_ospf_neighbor.json b/tests/topotests/ldp-oc-topo1/r3/show_ip_ospf_neighbor.json
new file mode 100644 (file)
index 0000000..24502ed
--- /dev/null
@@ -0,0 +1,20 @@
+{
+  "neighbors":{
+    "2.2.2.2":[
+      {
+        "priority":1,
+        "state":"Full\/DROther",
+        "address":"10.0.2.2",
+        "ifaceName":"r3-eth0:10.0.2.3"
+      }
+    ],
+    "4.4.4.4":[
+      {
+        "priority":1,
+        "state":"Full\/DR",
+        "address":"10.0.2.4",
+        "ifaceName":"r3-eth0:10.0.2.3"
+      }
+    ]
+  }
+}
diff --git a/tests/topotests/ldp-oc-topo1/r3/show_ip_route.ref b/tests/topotests/ldp-oc-topo1/r3/show_ip_route.ref
new file mode 100644 (file)
index 0000000..4080076
--- /dev/null
@@ -0,0 +1,209 @@
+{
+  "1.1.1.1/32":[
+    {
+      "prefix":"1.1.1.1/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":20,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r3-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "2.2.2.2/32":[
+    {
+      "prefix":"2.2.2.2/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":10,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r3-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "3.3.3.3/32":[
+    {
+      "prefix":"3.3.3.3/32",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":0,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"3.3.3.3/32",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "4.4.4.4/32":[
+    {
+      "prefix":"4.4.4.4/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":10,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.4",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r3-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.1.0\/24":[
+    {
+      "prefix":"10.0.1.0\/24",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":20,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r3-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.2.0\/24":[
+    {
+      "prefix":"10.0.2.0\/24",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":10,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r3-eth0",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"10.0.2.0\/24",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r3-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.3.0\/24":[
+    {
+      "prefix":"10.0.3.0\/24",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":10,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":3,
+          "interfaceName":"r3-eth1",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"10.0.3.0\/24",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":3,
+          "interfaceName":"r3-eth1",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "123.0.1.0\/24":[
+    {
+      "prefix":"123.0.1.0\/24",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":30,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r3-eth0",
+          "active":true
+        }
+      ]
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-topo1/r3/show_ldp_binding.ref b/tests/topotests/ldp-oc-topo1/r3/show_ldp_binding.ref
new file mode 100644 (file)
index 0000000..100dd30
--- /dev/null
@@ -0,0 +1,61 @@
+{
+  "bindings":[
+    {
+      "addressFamily":"ipv4",
+      "prefix":"1.1.1.1/32",
+      "neighborId":"2.2.2.2",
+      "inUse":1
+    },
+    {
+      "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":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"4.4.4.4/32",
+      "neighborId":"0.0.0.0",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.1.0/24",
+      "neighborId":"2.2.2.2",
+      "remoteLabel":"imp-null",
+      "inUse":1
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.2.0/24",
+      "neighborId":"2.2.2.2",
+      "localLabel":"imp-null",
+      "remoteLabel":"imp-null",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.3.0/24",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"123.0.1.0/24",
+      "neighborId":"2.2.2.2",
+      "inUse":1
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-topo1/r3/show_ldp_discovery.ref b/tests/topotests/ldp-oc-topo1/r3/show_ldp_discovery.ref
new file mode 100644 (file)
index 0000000..c3a07e7
--- /dev/null
@@ -0,0 +1,11 @@
+{
+  "adjacencies":[
+    {
+      "addressFamily":"ipv4",
+      "neighborId":"2.2.2.2",
+      "type":"link",
+      "interface":"r3-eth0",
+      "helloHoldtime":15
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-topo1/r3/show_ldp_neighbor.ref b/tests/topotests/ldp-oc-topo1/r3/show_ldp_neighbor.ref
new file mode 100644 (file)
index 0000000..4bff444
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "neighbors":[
+    {
+      "addressFamily":"ipv4",
+      "neighborId":"2.2.2.2",
+      "state":"OPERATIONAL",
+      "transportAddress":"2.2.2.2"
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-topo1/r3/zebra.conf b/tests/topotests/ldp-oc-topo1/r3/zebra.conf
new file mode 100644 (file)
index 0000000..234c215
--- /dev/null
@@ -0,0 +1,22 @@
+log file zebra.log
+!
+hostname r3
+!
+interface lo
+ ip address 3.3.3.3/32
+!
+interface r3-eth0
+ description to sw1
+ ip address 10.0.2.3/24
+! no link-detect
+!
+interface r3-eth1
+ description to sw2
+ ip address 10.0.3.3/24
+! no link-detect
+!
+ip forwarding
+!
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-topo1/r4/ldpd.conf b/tests/topotests/ldp-oc-topo1/r4/ldpd.conf
new file mode 100644 (file)
index 0000000..6b7d28f
--- /dev/null
@@ -0,0 +1,24 @@
+hostname r4
+log file ldpd.log
+!
+debug mpls ldp zebra
+debug mpls ldp event
+debug mpls ldp errors
+debug mpls ldp messages recv
+debug mpls ldp messages sent
+debug mpls ldp discovery hello recv
+debug mpls ldp discovery hello sent
+!
+mpls ldp
+ router-id 4.4.4.4
+ ordered-control
+ !
+ address-family ipv4
+  discovery transport-address 4.4.4.4
+  !
+  !interface r4-eth0
+  !
+ !
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-topo1/r4/ospfd.conf b/tests/topotests/ldp-oc-topo1/r4/ospfd.conf
new file mode 100644 (file)
index 0000000..569dbc5
--- /dev/null
@@ -0,0 +1,7 @@
+hostname r4
+log file ospfd.log
+!
+router ospf
+ router-id 4.4.4.4
+ network 0.0.0.0/0 area 0
+!
diff --git a/tests/topotests/ldp-oc-topo1/r4/show_ip_ospf_neighbor.json b/tests/topotests/ldp-oc-topo1/r4/show_ip_ospf_neighbor.json
new file mode 100644 (file)
index 0000000..7944105
--- /dev/null
@@ -0,0 +1,21 @@
+
+{
+  "neighbors":{
+    "2.2.2.2":[
+      {
+        "priority":1,
+        "state":"Full\/DROther",
+        "address":"10.0.2.2",
+        "ifaceName":"r4-eth0:10.0.2.4"
+      }
+    ],
+    "3.3.3.3":[
+      {
+        "priority":1,
+        "state":"Full\/Backup",
+        "address":"10.0.2.3",
+        "ifaceName":"r4-eth0:10.0.2.4"
+      }
+    ]
+  }
+}
diff --git a/tests/topotests/ldp-oc-topo1/r4/show_ip_route.ref b/tests/topotests/ldp-oc-topo1/r4/show_ip_route.ref
new file mode 100644 (file)
index 0000000..c9b83a1
--- /dev/null
@@ -0,0 +1,196 @@
+{
+  "1.1.1.1/32":[
+    {
+      "prefix":"1.1.1.1/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":20,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "2.2.2.2/32":[
+    {
+      "prefix":"2.2.2.2/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":10,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "3.3.3.3/32":[
+    {
+      "prefix":"3.3.3.3/32",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":10,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.3",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "4.4.4.4/32":[
+    {
+      "prefix":"4.4.4.4/32",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":0,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"4.4.4.4/32",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":1,
+          "interfaceName":"lo",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.1.0\/24":[
+    {
+      "prefix":"10.0.1.0\/24",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":20,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.2.0\/24":[
+    {
+      "prefix":"10.0.2.0\/24",
+      "protocol":"ospf",
+      "distance":110,
+      "metric":10,
+      "nexthops":[
+        {
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    },
+    {
+      "prefix":"10.0.2.0\/24",
+      "protocol":"connected",
+      "selected":true,
+      "destSelected":true,
+      "distance":0,
+      "metric":0,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "directlyConnected":true,
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "10.0.3.0\/24":[
+    {
+      "prefix":"10.0.3.0\/24",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":20,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.3",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    }
+  ],
+  "123.0.1.0\/24":[
+    {
+      "prefix":"123.0.1.0\/24",
+      "protocol":"ospf",
+      "selected":true,
+      "destSelected":true,
+      "distance":110,
+      "metric":30,
+      "installed":true,
+      "nexthops":[
+        {
+          "fib":true,
+          "ip":"10.0.2.2",
+          "afi":"ipv4",
+          "interfaceIndex":2,
+          "interfaceName":"r4-eth0",
+          "active":true
+        }
+      ]
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-topo1/r4/show_ldp_binding.ref b/tests/topotests/ldp-oc-topo1/r4/show_ldp_binding.ref
new file mode 100644 (file)
index 0000000..2a46c40
--- /dev/null
@@ -0,0 +1,68 @@
+{
+  "bindings":[
+    {
+      "addressFamily":"ipv4",
+      "prefix":"1.1.1.1/32",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"2.2.2.2/32",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"3.3.3.3/32",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"4.4.4.4/32",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.1.0/24",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.2.0/24",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"10.0.3.0/24",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    },
+    {
+      "addressFamily":"ipv4",
+      "prefix":"123.0.1.0/24",
+      "neighborId":"0.0.0.0",
+      "localLabel":"imp-null",
+      "remoteLabel":"-",
+      "inUse":0
+    }
+  ]
+}
diff --git a/tests/topotests/ldp-oc-topo1/r4/show_ldp_discovery.ref b/tests/topotests/ldp-oc-topo1/r4/show_ldp_discovery.ref
new file mode 100644 (file)
index 0000000..2c63c08
--- /dev/null
@@ -0,0 +1,2 @@
+{
+}
diff --git a/tests/topotests/ldp-oc-topo1/r4/show_ldp_neighbor.ref b/tests/topotests/ldp-oc-topo1/r4/show_ldp_neighbor.ref
new file mode 100644 (file)
index 0000000..2c63c08
--- /dev/null
@@ -0,0 +1,2 @@
+{
+}
diff --git a/tests/topotests/ldp-oc-topo1/r4/zebra.conf b/tests/topotests/ldp-oc-topo1/r4/zebra.conf
new file mode 100644 (file)
index 0000000..7e29105
--- /dev/null
@@ -0,0 +1,17 @@
+log file zebra.log
+!
+hostname r4
+!
+interface lo
+ ip address 4.4.4.4/32
+!
+interface r4-eth0
+ description to sw1
+ ip address 10.0.2.4/24
+! no link-detect
+!
+ip forwarding
+!
+!
+line vty
+!
diff --git a/tests/topotests/ldp-oc-topo1/test_ldp_oc_topo1.dot b/tests/topotests/ldp-oc-topo1/test_ldp_oc_topo1.dot
new file mode 100644 (file)
index 0000000..62058e3
--- /dev/null
@@ -0,0 +1,76 @@
+## 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-OC 1";
+
+       # Routers
+       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,
+       ];
+       r4 [
+               shape=doubleoctagon
+               label="r4",
+               fillcolor="#f08080",
+               style=filled,
+       ];
+
+
+       # Switches
+       s0 [
+               shape=oval,
+               label="10.0.1.0/24",
+               fillcolor="#d0e0d0",
+               style=filled,
+       ];
+       s1 [
+               shape=oval,
+               label="10.0.2.0/24",
+               fillcolor="#d0e0d0",
+               style=filled,
+       ];
+       s2 [
+               shape=oval,
+               label="10.0.3.0/24",
+               fillcolor="#d0e0d0",
+               style=filled,
+       ];
+
+       # Connections
+
+       r1 -- s0 [label="eth0"];
+       r2 -- s0 [label="eth0"];
+
+       r2 -- s1 [label="eth1"];
+       r3 -- s1 [label="eth0"];
+       r4 -- s1 [label="eth0"];
+
+       r2 -- s2 [label="eth2"];
+       r3 -- s2 [label="eth1"];
+}
diff --git a/tests/topotests/ldp-oc-topo1/test_ldp_oc_topo1.py b/tests/topotests/ldp-oc-topo1/test_ldp_oc_topo1.py
new file mode 100755 (executable)
index 0000000..eda1b37
--- /dev/null
@@ -0,0 +1,227 @@
+#!/usr/bin/env python
+
+#
+# test_ldp_oc_topo1.py
+# Part of NetDEF Topology Tests
+#
+# Copyright (c) 2020 by 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_oc_topo1.py: Simple FRR/Quagga LDP Test
+
+             +---------+
+             |    r1   |
+             | 1.1.1.1 |
+             +----+----+
+                  | .1  r1-eth0
+                  |
+            ~~~~~~~~~~~~~
+          ~~     sw0     ~~
+          ~~ 10.0.1.0/24 ~~
+            ~~~~~~~~~~~~~
+                  |10.0.1.0/24
+                  |
+                  | .2  r2-eth0
+             +----+----+
+             |    r2   |
+             | 2.2.2.2 |
+             +--+---+--+
+    r2-eth2  .2 |   | .2  r2-eth1
+         ______/     \______
+        /                   \
+  ~~~~~~~~~~~~~        ~~~~~~~~~~~~~
+~~     sw2     ~~    ~~     sw1     ~~
+~~ 10.0.3.0/24 ~~    ~~ 10.0.2.0/24 ~~
+  ~~~~~~~~~~~~~        ~~~~~~~~~~~~~
+        |                 /    |
+         \      _________/     |
+          \    /                \
+r3-eth1 .3 |  | .3  r3-eth0      | .4 r4-eth0
+      +----+--+---+         +----+----+
+      |     r3    |         |    r4   |
+      |  3.3.3.3  |         | 4.4.4.4 |
+      +-----------+         +---------+
+"""
+
+import os
+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
+
+# 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 ['r1', 'r2', 'r3', 'r4']:
+            tgen.add_router(router)
+
+        #
+        # Define connections
+        #
+        switch = tgen.add_switch('s0')
+        switch.add_link(tgen.gears['r1'])
+        switch.add_link(tgen.gears['r2'])
+
+        switch = tgen.add_switch('s1')
+        switch.add_link(tgen.gears['r2'])
+        switch.add_link(tgen.gears['r3'])
+        switch.add_link(tgen.gears['r4'])
+
+        switch = tgen.add_switch('s2')
+        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.iteritems():
+        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. Wait at most 80 seconds.
+    test_func = partial(topotest.router_json_cmp,
+        tgen.gears[rname], command, expected)
+    _, diff = topotest.run_and_expect(test_func, None, count=160, 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', 'r4']:
+        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', 'r4']:
+        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', 'r4']:
+        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', 'r4']:
+        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', 'r4']:
+        router_compare_json_output(rname, "show mpls ldp binding json", "show_ldp_binding.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))