diff --git a/nhrpd/nhrp_vty.c b/nhrpd/nhrp_vty.c index 40d38c44d272..f91fcb532f18 100644 --- a/nhrpd/nhrp_vty.c +++ b/nhrpd/nhrp_vty.c @@ -826,7 +826,7 @@ static void show_ip_nhrp_shortcut(struct nhrp_shortcut *s, void *pctx) char buf1[PREFIX_STRLEN], buf2[SU_ADDRSTRLEN]; struct json_object *json = NULL; - if (!ctx->count) { + if (!ctx->count && !ctx->json) { vty_out(vty, "%-8s %-24s %-24s %s\n", "Type", "Prefix", "Via", "Identity"); } diff --git a/tests/topotests/nhrp_redundancy/host/zebra.conf b/tests/topotests/nhrp_redundancy/host/zebra.conf new file mode 100644 index 000000000000..8bb7da0ad658 --- /dev/null +++ b/tests/topotests/nhrp_redundancy/host/zebra.conf @@ -0,0 +1,4 @@ +interface host-eth0 + ip address 10.4.4.7/24 +! +ip route 0.0.0.0/0 10.4.4.4 diff --git a/tests/topotests/nhrp_redundancy/r4/nhrp_cache.json b/tests/topotests/nhrp_redundancy/nhc1/nhrp_cache.json similarity index 77% rename from tests/topotests/nhrp_redundancy/r4/nhrp_cache.json rename to tests/topotests/nhrp_redundancy/nhc1/nhrp_cache.json index f87ebcf5fc7e..9e8a5c999d04 100644 --- a/tests/topotests/nhrp_redundancy/r4/nhrp_cache.json +++ b/tests/topotests/nhrp_redundancy/nhc1/nhrp_cache.json @@ -4,9 +4,9 @@ }, "table": [ { - "interface": "r4-gre0", + "interface": "nhc1-gre0", "type": "nhs", - "protocol": "176.16.1.2", + "protocol": "172.16.1.2", "nbma": "192.168.1.2", "claimed_nbma": "192.168.1.2", "used": false, @@ -15,9 +15,9 @@ "identity": "" }, { - "interface": "r4-gre0", + "interface": "nhc1-gre0", "type": "local", - "protocol": "176.16.1.4", + "protocol": "172.16.1.4", "nbma": "192.168.2.4", "claimed_nbma": "192.168.2.4", "used": false, @@ -26,9 +26,9 @@ "identity": "-" }, { - "interface": "r4-gre0", + "interface": "nhc1-gre0", "type": "nhs", - "protocol": "176.16.1.3", + "protocol": "172.16.1.3", "nbma": "192.168.1.3", "claimed_nbma": "192.168.1.3", "used": false, @@ -37,9 +37,9 @@ "identity": "" }, { - "interface": "r4-gre0", + "interface": "nhc1-gre0", "type": "nhs", - "protocol": "176.16.1.1", + "protocol": "172.16.1.1", "nbma": "192.168.1.1", "claimed_nbma": "192.168.1.1", "used": false, diff --git a/tests/topotests/nhrp_redundancy/nhc1/nhrp_cache_nhs1_down.json b/tests/topotests/nhrp_redundancy/nhc1/nhrp_cache_nhs1_down.json new file mode 100644 index 000000000000..5b91f3bcfbea --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhc1/nhrp_cache_nhs1_down.json @@ -0,0 +1,40 @@ +{ + "attr": { + "entriesCount": 3 + }, + "table": [ + { + "interface": "nhc1-gre0", + "type": "nhs", + "protocol": "172.16.1.2", + "nbma": "192.168.1.2", + "claimed_nbma": "192.168.1.2", + "used": false, + "timeout": true, + "auth": false, + "identity": "" + }, + { + "interface": "nhc1-gre0", + "type": "local", + "protocol": "172.16.1.4", + "nbma": "192.168.2.4", + "claimed_nbma": "192.168.2.4", + "used": false, + "timeout": false, + "auth": false, + "identity": "-" + }, + { + "interface": "nhc1-gre0", + "type": "nhs", + "protocol": "172.16.1.3", + "nbma": "192.168.1.3", + "claimed_nbma": "192.168.1.3", + "used": false, + "timeout": true, + "auth": false, + "identity": "" + } + ] +} \ No newline at end of file diff --git a/tests/topotests/nhrp_redundancy/r5/nhrp_route.json b/tests/topotests/nhrp_redundancy/nhc1/nhrp_route.json similarity index 82% rename from tests/topotests/nhrp_redundancy/r5/nhrp_route.json rename to tests/topotests/nhrp_redundancy/nhc1/nhrp_route.json index 1d1c16ffb86b..083675651f76 100644 --- a/tests/topotests/nhrp_redundancy/r5/nhrp_route.json +++ b/tests/topotests/nhrp_redundancy/nhc1/nhrp_route.json @@ -1,7 +1,7 @@ { - "176.16.1.1\/32": [ + "172.16.1.1\/32": [ { - "prefix": "176.16.1.1\/32", + "prefix": "172.16.1.1\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -16,15 +16,15 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r5-gre0", + "interfaceName": "nhc1-gre0", "active": true } ] } ], - "176.16.1.2\/32": [ + "172.16.1.2\/32": [ { - "prefix": "176.16.1.2\/32", + "prefix": "172.16.1.2\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -39,15 +39,15 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r5-gre0", + "interfaceName": "nhc1-gre0", "active": true } ] } ], - "176.16.1.3\/32": [ + "172.16.1.3\/32": [ { - "prefix": "176.16.1.3\/32", + "prefix": "172.16.1.3\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -62,7 +62,7 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r5-gre0", + "interfaceName": "nhc1-gre0", "active": true } ] diff --git a/tests/topotests/nhrp_redundancy/nhc1/nhrp_route_nhs1_down.json b/tests/topotests/nhrp_redundancy/nhc1/nhrp_route_nhs1_down.json new file mode 100644 index 000000000000..bfb468b0fbd7 --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhc1/nhrp_route_nhs1_down.json @@ -0,0 +1,49 @@ +{ + "172.16.1.1\/32": null, + "172.16.1.2\/32": [ + { + "prefix": "172.16.1.2\/32", + "protocol": "nhrp", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 10, + "metric": 0, + "installed": true, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthops": [ + { + "fib": true, + "directlyConnected": true, + "interfaceName": "nhc1-gre0", + "active": true + } + ] + } + ], + "172.16.1.3\/32": [ + { + "prefix": "172.16.1.3\/32", + "protocol": "nhrp", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 10, + "metric": 0, + "installed": true, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthops": [ + { + "fib": true, + "directlyConnected": true, + "interfaceName": "nhc1-gre0", + "active": true + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/topotests/nhrp_redundancy/r4/nhrp_route_shortcut.json b/tests/topotests/nhrp_redundancy/nhc1/nhrp_route_shortcut.json similarity index 81% rename from tests/topotests/nhrp_redundancy/r4/nhrp_route_shortcut.json rename to tests/topotests/nhrp_redundancy/nhc1/nhrp_route_shortcut.json index f8efff2059e4..3a91f1baaaaf 100644 --- a/tests/topotests/nhrp_redundancy/r4/nhrp_route_shortcut.json +++ b/tests/topotests/nhrp_redundancy/nhc1/nhrp_route_shortcut.json @@ -1,7 +1,7 @@ { - "5.5.5.5\/32": [ + "10.5.5.0\/24": [ { - "prefix": "5.5.5.5\/32", + "prefix": "10.5.5.0\/24", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -15,17 +15,17 @@ "nexthops": [ { "fib": true, - "ip": "176.16.1.5", + "ip": "172.16.1.5", "afi": "ipv4", - "interfaceName": "r4-gre0", + "interfaceName": "nhc1-gre0", "active": true } ] } ], - "176.16.1.1\/32": [ + "172.16.1.1\/32": [ { - "prefix": "176.16.1.1\/32", + "prefix": "172.16.1.1\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -40,15 +40,15 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r4-gre0", + "interfaceName": "nhc1-gre0", "active": true } ] } ], - "176.16.1.2\/32": [ + "172.16.1.2\/32": [ { - "prefix": "176.16.1.2\/32", + "prefix": "172.16.1.2\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -63,15 +63,15 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r4-gre0", + "interfaceName": "nhc1-gre0", "active": true } ] } ], - "176.16.1.3\/32": [ + "172.16.1.3\/32": [ { - "prefix": "176.16.1.3\/32", + "prefix": "172.16.1.3\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -86,15 +86,15 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r4-gre0", + "interfaceName": "nhc1-gre0", "active": true } ] } ], - "176.16.1.5\/32": [ + "172.16.1.5\/32": [ { - "prefix": "176.16.1.5\/32", + "prefix": "172.16.1.5\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -109,7 +109,7 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r4-gre0", + "interfaceName": "nhc1-gre0", "active": true } ] diff --git a/tests/topotests/nhrp_redundancy/nhc1/nhrp_route_shortcut_nhs1_down.json b/tests/topotests/nhrp_redundancy/nhc1/nhrp_route_shortcut_nhs1_down.json new file mode 100644 index 000000000000..0f38feb6a89a --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhc1/nhrp_route_shortcut_nhs1_down.json @@ -0,0 +1,96 @@ +{ + "10.5.5.0\/24": [ + { + "prefix": "10.5.5.0\/24", + "protocol": "nhrp", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 10, + "metric": 0, + "installed": true, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthops": [ + { + "fib": true, + "ip": "172.16.1.5", + "afi": "ipv4", + "interfaceName": "nhc1-gre0", + "active": true + } + ] + } + ], + "172.16.1.1\/32": null, + "172.16.1.2\/32": [ + { + "prefix": "172.16.1.2\/32", + "protocol": "nhrp", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 10, + "metric": 0, + "installed": true, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthops": [ + { + "fib": true, + "directlyConnected": true, + "interfaceName": "nhc1-gre0", + "active": true + } + ] + } + ], + "172.16.1.3\/32": [ + { + "prefix": "172.16.1.3\/32", + "protocol": "nhrp", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 10, + "metric": 0, + "installed": true, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthops": [ + { + "fib": true, + "directlyConnected": true, + "interfaceName": "nhc1-gre0", + "active": true + } + ] + } + ], + "172.16.1.5\/32": [ + { + "prefix": "172.16.1.5\/32", + "protocol": "nhrp", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 10, + "metric": 0, + "installed": true, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthops": [ + { + "fib": true, + "directlyConnected": true, + "interfaceName": "nhc1-gre0", + "active": true + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/topotests/nhrp_redundancy/nhc1/nhrp_shortcut_absent.json b/tests/topotests/nhrp_redundancy/nhc1/nhrp_shortcut_absent.json new file mode 100644 index 000000000000..78563cb90221 --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhc1/nhrp_shortcut_absent.json @@ -0,0 +1,5 @@ +{ + "attr":{ + "entriesCount":0 + } +} diff --git a/tests/topotests/nhrp_redundancy/nhc1/nhrp_shortcut_present.json b/tests/topotests/nhrp_redundancy/nhc1/nhrp_shortcut_present.json new file mode 100644 index 000000000000..4547c59c88f5 --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhc1/nhrp_shortcut_present.json @@ -0,0 +1,9 @@ +{ + "table":[ + { + "type":"dynamic", + "prefix":"10.5.5.0/24", + "via":"172.16.1.5" + } + ] +} diff --git a/tests/topotests/nhrp_redundancy/r4/nhrpd.conf b/tests/topotests/nhrp_redundancy/nhc1/nhrpd.conf similarity index 83% rename from tests/topotests/nhrp_redundancy/r4/nhrpd.conf rename to tests/topotests/nhrp_redundancy/nhc1/nhrpd.conf index 8a52f3386e89..a0862f77ef7d 100644 --- a/tests/topotests/nhrp_redundancy/r4/nhrpd.conf +++ b/tests/topotests/nhrp_redundancy/nhc1/nhrpd.conf @@ -1,5 +1,5 @@ !debug nhrp all -interface r4-gre0 +interface nhc1-gre0 ip nhrp holdtime 10 ip nhrp network-id 42 ip nhrp registration no-unique @@ -7,5 +7,5 @@ interface r4-gre0 ip nhrp nhs dynamic nbma 192.168.1.2 ip nhrp nhs dynamic nbma 192.168.1.3 ip nhrp shortcut - tunnel source r4-eth0 + tunnel source nhc1-eth0 exit diff --git a/tests/topotests/nhrp_redundancy/nhc1/zebra.conf b/tests/topotests/nhrp_redundancy/nhc1/zebra.conf new file mode 100644 index 000000000000..07d9175418ad --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhc1/zebra.conf @@ -0,0 +1,16 @@ +ip forwarding +interface nhc1-eth0 + ip address 192.168.2.4/24 +! +ip route 192.168.1.0/24 192.168.2.6 +interface nhc1-gre0 + ip address 172.16.1.4/32 + no link-detect + ipv6 nd suppress-ra +! +interface nhc1-eth1 + ip address 10.4.4.4/24 +! +ip route 0.0.0.0/0 172.16.1.1 50 +ip route 0.0.0.0/0 172.16.1.2 60 +ip route 0.0.0.0/0 172.16.1.3 70 \ No newline at end of file diff --git a/tests/topotests/nhrp_redundancy/r5/nhrp_cache.json b/tests/topotests/nhrp_redundancy/nhc2/nhrp_cache.json similarity index 77% rename from tests/topotests/nhrp_redundancy/r5/nhrp_cache.json rename to tests/topotests/nhrp_redundancy/nhc2/nhrp_cache.json index bc041c601475..8ee02a7cbf4f 100644 --- a/tests/topotests/nhrp_redundancy/r5/nhrp_cache.json +++ b/tests/topotests/nhrp_redundancy/nhc2/nhrp_cache.json @@ -4,9 +4,9 @@ }, "table": [ { - "interface": "r5-gre0", + "interface": "nhc2-gre0", "type": "nhs", - "protocol": "176.16.1.2", + "protocol": "172.16.1.2", "nbma": "192.168.1.2", "claimed_nbma": "192.168.1.2", "used": false, @@ -15,9 +15,9 @@ "identity": "" }, { - "interface": "r5-gre0", + "interface": "nhc2-gre0", "type": "nhs", - "protocol": "176.16.1.3", + "protocol": "172.16.1.3", "nbma": "192.168.1.3", "claimed_nbma": "192.168.1.3", "used": false, @@ -26,9 +26,9 @@ "identity": "" }, { - "interface": "r5-gre0", + "interface": "nhc2-gre0", "type": "nhs", - "protocol": "176.16.1.1", + "protocol": "172.16.1.1", "nbma": "192.168.1.1", "claimed_nbma": "192.168.1.1", "used": false, @@ -37,9 +37,9 @@ "identity": "" }, { - "interface": "r5-gre0", + "interface": "nhc2-gre0", "type": "local", - "protocol": "176.16.1.5", + "protocol": "172.16.1.5", "nbma": "192.168.2.5", "claimed_nbma": "192.168.2.5", "used": false, diff --git a/tests/topotests/nhrp_redundancy/nhc2/nhrp_cache_nhs1_down.json b/tests/topotests/nhrp_redundancy/nhc2/nhrp_cache_nhs1_down.json new file mode 100644 index 000000000000..bb1c4837186d --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhc2/nhrp_cache_nhs1_down.json @@ -0,0 +1,40 @@ +{ + "attr": { + "entriesCount": 3 + }, + "table": [ + { + "interface": "nhc2-gre0", + "type": "nhs", + "protocol": "172.16.1.2", + "nbma": "192.168.1.2", + "claimed_nbma": "192.168.1.2", + "used": false, + "timeout": true, + "auth": false, + "identity": "" + }, + { + "interface": "nhc2-gre0", + "type": "nhs", + "protocol": "172.16.1.3", + "nbma": "192.168.1.3", + "claimed_nbma": "192.168.1.3", + "used": false, + "timeout": true, + "auth": false, + "identity": "" + }, + { + "interface": "nhc2-gre0", + "type": "local", + "protocol": "172.16.1.5", + "nbma": "192.168.2.5", + "claimed_nbma": "192.168.2.5", + "used": false, + "timeout": false, + "auth": false, + "identity": "-" + } + ] +} \ No newline at end of file diff --git a/tests/topotests/nhrp_redundancy/r4/nhrp_route.json b/tests/topotests/nhrp_redundancy/nhc2/nhrp_route.json similarity index 82% rename from tests/topotests/nhrp_redundancy/r4/nhrp_route.json rename to tests/topotests/nhrp_redundancy/nhc2/nhrp_route.json index 4f1faee7a744..a69c0caec3ce 100644 --- a/tests/topotests/nhrp_redundancy/r4/nhrp_route.json +++ b/tests/topotests/nhrp_redundancy/nhc2/nhrp_route.json @@ -1,7 +1,7 @@ { - "176.16.1.1\/32": [ + "172.16.1.1\/32": [ { - "prefix": "176.16.1.1\/32", + "prefix": "172.16.1.1\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -16,15 +16,15 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r4-gre0", + "interfaceName": "nhc2-gre0", "active": true } ] } ], - "176.16.1.2\/32": [ + "172.16.1.2\/32": [ { - "prefix": "176.16.1.2\/32", + "prefix": "172.16.1.2\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -39,15 +39,15 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r4-gre0", + "interfaceName": "nhc2-gre0", "active": true } ] } ], - "176.16.1.3\/32": [ + "172.16.1.3\/32": [ { - "prefix": "176.16.1.3\/32", + "prefix": "172.16.1.3\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -62,7 +62,7 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r4-gre0", + "interfaceName": "nhc2-gre0", "active": true } ] diff --git a/tests/topotests/nhrp_redundancy/nhc2/nhrp_route_nhs1_down.json b/tests/topotests/nhrp_redundancy/nhc2/nhrp_route_nhs1_down.json new file mode 100644 index 000000000000..e2dd9dde2398 --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhc2/nhrp_route_nhs1_down.json @@ -0,0 +1,49 @@ +{ + "172.16.1.1\/32": null, + "172.16.1.2\/32": [ + { + "prefix": "172.16.1.2\/32", + "protocol": "nhrp", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 10, + "metric": 0, + "installed": true, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthops": [ + { + "fib": true, + "directlyConnected": true, + "interfaceName": "nhc2-gre0", + "active": true + } + ] + } + ], + "172.16.1.3\/32": [ + { + "prefix": "172.16.1.3\/32", + "protocol": "nhrp", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 10, + "metric": 0, + "installed": true, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthops": [ + { + "fib": true, + "directlyConnected": true, + "interfaceName": "nhc2-gre0", + "active": true + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/topotests/nhrp_redundancy/r5/nhrpd.conf b/tests/topotests/nhrp_redundancy/nhc2/nhrpd.conf similarity index 83% rename from tests/topotests/nhrp_redundancy/r5/nhrpd.conf rename to tests/topotests/nhrp_redundancy/nhc2/nhrpd.conf index 7241ed592da8..16a6d87c273f 100644 --- a/tests/topotests/nhrp_redundancy/r5/nhrpd.conf +++ b/tests/topotests/nhrp_redundancy/nhc2/nhrpd.conf @@ -1,5 +1,5 @@ !debug nhrp all -interface r5-gre0 +interface nhc2-gre0 ip nhrp holdtime 10 ip nhrp network-id 42 ip nhrp nhs dynamic nbma 192.168.1.1 @@ -7,5 +7,5 @@ interface r5-gre0 ip nhrp nhs dynamic nbma 192.168.1.3 ip nhrp registration no-unique ip nhrp shortcut - tunnel source r5-eth0 + tunnel source nhc2-eth0 exit diff --git a/tests/topotests/nhrp_redundancy/nhc2/zebra.conf b/tests/topotests/nhrp_redundancy/nhc2/zebra.conf new file mode 100644 index 000000000000..30ea6d4d1d56 --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhc2/zebra.conf @@ -0,0 +1,16 @@ +ip forwarding +interface nhc2-eth0 + ip address 192.168.2.5/24 +! +ip route 192.168.1.0/24 192.168.2.6 +interface nhc2-gre0 + ip address 172.16.1.5/32 + no link-detect + ipv6 nd suppress-ra +! +interface nhc2-eth1 + ip address 10.5.5.5/24 +! +ip route 0.0.0.0/0 172.16.1.1 50 +ip route 0.0.0.0/0 172.16.1.2 60 +ip route 0.0.0.0/0 172.16.1.3 70 diff --git a/tests/topotests/nhrp_redundancy/r1/nhrp_cache.json b/tests/topotests/nhrp_redundancy/nhs1/nhrp_cache.json similarity index 77% rename from tests/topotests/nhrp_redundancy/r1/nhrp_cache.json rename to tests/topotests/nhrp_redundancy/nhs1/nhrp_cache.json index a94dd9fecfb1..11d41d1b83bc 100644 --- a/tests/topotests/nhrp_redundancy/r1/nhrp_cache.json +++ b/tests/topotests/nhrp_redundancy/nhs1/nhrp_cache.json @@ -4,9 +4,9 @@ }, "table": [ { - "interface": "r1-gre0", + "interface": "nhs1-gre0", "type": "dynamic", - "protocol": "176.16.1.4", + "protocol": "172.16.1.4", "nbma": "192.168.2.4", "claimed_nbma": "192.168.2.4", "used": false, @@ -15,9 +15,9 @@ "identity": "" }, { - "interface": "r1-gre0", + "interface": "nhs1-gre0", "type": "local", - "protocol": "176.16.1.1", + "protocol": "172.16.1.1", "nbma": "192.168.1.1", "claimed_nbma": "192.168.1.1", "used": false, @@ -26,9 +26,9 @@ "identity": "-" }, { - "interface": "r1-gre0", + "interface": "nhs1-gre0", "type": "dynamic", - "protocol": "176.16.1.5", + "protocol": "172.16.1.5", "nbma": "192.168.2.5", "claimed_nbma": "192.168.2.5", "used": false, diff --git a/tests/topotests/nhrp_redundancy/r3/nhrp_route.json b/tests/topotests/nhrp_redundancy/nhs1/nhrp_route.json similarity index 82% rename from tests/topotests/nhrp_redundancy/r3/nhrp_route.json rename to tests/topotests/nhrp_redundancy/nhs1/nhrp_route.json index 3d548c08fdce..2574b1a5d2b5 100644 --- a/tests/topotests/nhrp_redundancy/r3/nhrp_route.json +++ b/tests/topotests/nhrp_redundancy/nhs1/nhrp_route.json @@ -1,7 +1,7 @@ { - "176.16.1.4\/32": [ + "172.16.1.4\/32": [ { - "prefix": "176.16.1.4\/32", + "prefix": "172.16.1.4\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -16,15 +16,15 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r3-gre0", + "interfaceName": "nhs1-gre0", "active": true } ] } ], - "176.16.1.5\/32": [ + "172.16.1.5\/32": [ { - "prefix": "176.16.1.5\/32", + "prefix": "172.16.1.5\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -39,7 +39,7 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r3-gre0", + "interfaceName": "nhs1-gre0", "active": true } ] diff --git a/tests/topotests/nhrp_redundancy/r2/nhrpd.conf b/tests/topotests/nhrp_redundancy/nhs1/nhrpd.conf similarity index 74% rename from tests/topotests/nhrp_redundancy/r2/nhrpd.conf rename to tests/topotests/nhrp_redundancy/nhs1/nhrpd.conf index 4d63f07d1f71..c0c8c28f94c9 100644 --- a/tests/topotests/nhrp_redundancy/r2/nhrpd.conf +++ b/tests/topotests/nhrp_redundancy/nhs1/nhrpd.conf @@ -1,9 +1,9 @@ !debug nhrp all nhrp nflog-group 1 -interface r2-gre0 +interface nhs1-gre0 ip nhrp holdtime 10 ip nhrp network-id 42 ip nhrp registration no-unique ip nhrp redirect - tunnel source r2-eth0 + tunnel source nhs1-eth0 exit diff --git a/tests/topotests/nhrp_redundancy/nhs1/zebra.conf b/tests/topotests/nhrp_redundancy/nhs1/zebra.conf new file mode 100644 index 000000000000..718e01b99184 --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhs1/zebra.conf @@ -0,0 +1,12 @@ +ip forwarding +interface nhs1-eth0 + ip address 192.168.1.1/24 +! +ip route 192.168.2.0/24 192.168.1.6 +interface nhs1-gre0 + ip address 172.16.1.1/32 + no link-detect + ipv6 nd suppress-ra +! +ip route 10.4.4.0/24 172.16.1.4 +ip route 10.5.5.0/24 172.16.1.5 diff --git a/tests/topotests/nhrp_redundancy/r2/nhrp_cache.json b/tests/topotests/nhrp_redundancy/nhs2/nhrp_cache.json similarity index 77% rename from tests/topotests/nhrp_redundancy/r2/nhrp_cache.json rename to tests/topotests/nhrp_redundancy/nhs2/nhrp_cache.json index 91557a191826..6343c4deb935 100644 --- a/tests/topotests/nhrp_redundancy/r2/nhrp_cache.json +++ b/tests/topotests/nhrp_redundancy/nhs2/nhrp_cache.json @@ -4,9 +4,9 @@ }, "table": [ { - "interface": "r2-gre0", + "interface": "nhs2-gre0", "type": "local", - "protocol": "176.16.1.2", + "protocol": "172.16.1.2", "nbma": "192.168.1.2", "claimed_nbma": "192.168.1.2", "used": false, @@ -15,9 +15,9 @@ "identity": "-" }, { - "interface": "r2-gre0", + "interface": "nhs2-gre0", "type": "dynamic", - "protocol": "176.16.1.4", + "protocol": "172.16.1.4", "nbma": "192.168.2.4", "claimed_nbma": "192.168.2.4", "used": false, @@ -26,9 +26,9 @@ "identity": "" }, { - "interface": "r2-gre0", + "interface": "nhs2-gre0", "type": "dynamic", - "protocol": "176.16.1.5", + "protocol": "172.16.1.5", "nbma": "192.168.2.5", "claimed_nbma": "192.168.2.5", "used": false, diff --git a/tests/topotests/nhrp_redundancy/nhs2/nhrp_cache_nhs1_down.json b/tests/topotests/nhrp_redundancy/nhs2/nhrp_cache_nhs1_down.json new file mode 100644 index 000000000000..6343c4deb935 --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhs2/nhrp_cache_nhs1_down.json @@ -0,0 +1,40 @@ +{ + "attr": { + "entriesCount": 3 + }, + "table": [ + { + "interface": "nhs2-gre0", + "type": "local", + "protocol": "172.16.1.2", + "nbma": "192.168.1.2", + "claimed_nbma": "192.168.1.2", + "used": false, + "timeout": false, + "auth": false, + "identity": "-" + }, + { + "interface": "nhs2-gre0", + "type": "dynamic", + "protocol": "172.16.1.4", + "nbma": "192.168.2.4", + "claimed_nbma": "192.168.2.4", + "used": false, + "timeout": true, + "auth": false, + "identity": "" + }, + { + "interface": "nhs2-gre0", + "type": "dynamic", + "protocol": "172.16.1.5", + "nbma": "192.168.2.5", + "claimed_nbma": "192.168.2.5", + "used": false, + "timeout": true, + "auth": false, + "identity": "" + } + ] +} \ No newline at end of file diff --git a/tests/topotests/nhrp_redundancy/r1/nhrp_route.json b/tests/topotests/nhrp_redundancy/nhs2/nhrp_route.json similarity index 82% rename from tests/topotests/nhrp_redundancy/r1/nhrp_route.json rename to tests/topotests/nhrp_redundancy/nhs2/nhrp_route.json index b5f3e29e7418..0ad37fc31970 100644 --- a/tests/topotests/nhrp_redundancy/r1/nhrp_route.json +++ b/tests/topotests/nhrp_redundancy/nhs2/nhrp_route.json @@ -1,7 +1,7 @@ { - "176.16.1.4\/32": [ + "172.16.1.4\/32": [ { - "prefix": "176.16.1.4\/32", + "prefix": "172.16.1.4\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -16,15 +16,15 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r1-gre0", + "interfaceName": "nhs2-gre0", "active": true } ] } ], - "176.16.1.5\/32": [ + "172.16.1.5\/32": [ { - "prefix": "176.16.1.5\/32", + "prefix": "172.16.1.5\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -39,7 +39,7 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r1-gre0", + "interfaceName": "nhs2-gre0", "active": true } ] diff --git a/tests/topotests/nhrp_redundancy/nhs2/nhrp_route_nhs1_down.json b/tests/topotests/nhrp_redundancy/nhs2/nhrp_route_nhs1_down.json new file mode 100644 index 000000000000..0ad37fc31970 --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhs2/nhrp_route_nhs1_down.json @@ -0,0 +1,48 @@ +{ + "172.16.1.4\/32": [ + { + "prefix": "172.16.1.4\/32", + "protocol": "nhrp", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 10, + "metric": 0, + "installed": true, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthops": [ + { + "fib": true, + "directlyConnected": true, + "interfaceName": "nhs2-gre0", + "active": true + } + ] + } + ], + "172.16.1.5\/32": [ + { + "prefix": "172.16.1.5\/32", + "protocol": "nhrp", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 10, + "metric": 0, + "installed": true, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthops": [ + { + "fib": true, + "directlyConnected": true, + "interfaceName": "nhs2-gre0", + "active": true + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/topotests/nhrp_redundancy/r3/nhrpd.conf b/tests/topotests/nhrp_redundancy/nhs2/nhrpd.conf similarity index 74% rename from tests/topotests/nhrp_redundancy/r3/nhrpd.conf rename to tests/topotests/nhrp_redundancy/nhs2/nhrpd.conf index 87cc2161f8bf..df86d2798e2a 100644 --- a/tests/topotests/nhrp_redundancy/r3/nhrpd.conf +++ b/tests/topotests/nhrp_redundancy/nhs2/nhrpd.conf @@ -1,9 +1,9 @@ !debug nhrp all nhrp nflog-group 1 -interface r3-gre0 +interface nhs2-gre0 ip nhrp holdtime 10 ip nhrp network-id 42 ip nhrp registration no-unique ip nhrp redirect - tunnel source r3-eth0 + tunnel source nhs2-eth0 exit diff --git a/tests/topotests/nhrp_redundancy/nhs2/zebra.conf b/tests/topotests/nhrp_redundancy/nhs2/zebra.conf new file mode 100644 index 000000000000..6001bf21c0ce --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhs2/zebra.conf @@ -0,0 +1,12 @@ +ip forwarding +interface nhs2-eth0 + ip address 192.168.1.2/24 +! +ip route 192.168.2.0/24 192.168.1.6 +interface nhs2-gre0 + ip address 172.16.1.2/32 + no link-detect + ipv6 nd suppress-ra +! +ip route 10.4.4.0/24 172.16.1.4 +ip route 10.5.5.0/24 172.16.1.5 diff --git a/tests/topotests/nhrp_redundancy/r3/nhrp_cache.json b/tests/topotests/nhrp_redundancy/nhs3/nhrp_cache.json similarity index 77% rename from tests/topotests/nhrp_redundancy/r3/nhrp_cache.json rename to tests/topotests/nhrp_redundancy/nhs3/nhrp_cache.json index ef3ab690bc5b..d911de348b01 100644 --- a/tests/topotests/nhrp_redundancy/r3/nhrp_cache.json +++ b/tests/topotests/nhrp_redundancy/nhs3/nhrp_cache.json @@ -4,9 +4,9 @@ }, "table": [ { - "interface": "r3-gre0", + "interface": "nhs3-gre0", "type": "dynamic", - "protocol": "176.16.1.4", + "protocol": "172.16.1.4", "nbma": "192.168.2.4", "claimed_nbma": "192.168.2.4", "used": false, @@ -15,9 +15,9 @@ "identity": "" }, { - "interface": "r3-gre0", + "interface": "nhs3-gre0", "type": "local", - "protocol": "176.16.1.3", + "protocol": "172.16.1.3", "nbma": "192.168.1.3", "claimed_nbma": "192.168.1.3", "used": false, @@ -26,9 +26,9 @@ "identity": "-" }, { - "interface": "r3-gre0", + "interface": "nhs3-gre0", "type": "dynamic", - "protocol": "176.16.1.5", + "protocol": "172.16.1.5", "nbma": "192.168.2.5", "claimed_nbma": "192.168.2.5", "used": false, diff --git a/tests/topotests/nhrp_redundancy/nhs3/nhrp_cache_nhs1_down.json b/tests/topotests/nhrp_redundancy/nhs3/nhrp_cache_nhs1_down.json new file mode 100644 index 000000000000..d911de348b01 --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhs3/nhrp_cache_nhs1_down.json @@ -0,0 +1,40 @@ +{ + "attr": { + "entriesCount": 3 + }, + "table": [ + { + "interface": "nhs3-gre0", + "type": "dynamic", + "protocol": "172.16.1.4", + "nbma": "192.168.2.4", + "claimed_nbma": "192.168.2.4", + "used": false, + "timeout": true, + "auth": false, + "identity": "" + }, + { + "interface": "nhs3-gre0", + "type": "local", + "protocol": "172.16.1.3", + "nbma": "192.168.1.3", + "claimed_nbma": "192.168.1.3", + "used": false, + "timeout": false, + "auth": false, + "identity": "-" + }, + { + "interface": "nhs3-gre0", + "type": "dynamic", + "protocol": "172.16.1.5", + "nbma": "192.168.2.5", + "claimed_nbma": "192.168.2.5", + "used": false, + "timeout": true, + "auth": false, + "identity": "" + } + ] +} \ No newline at end of file diff --git a/tests/topotests/nhrp_redundancy/r2/nhrp_route.json b/tests/topotests/nhrp_redundancy/nhs3/nhrp_route.json similarity index 82% rename from tests/topotests/nhrp_redundancy/r2/nhrp_route.json rename to tests/topotests/nhrp_redundancy/nhs3/nhrp_route.json index f1fa6e54c1bc..29a4f8f11b60 100644 --- a/tests/topotests/nhrp_redundancy/r2/nhrp_route.json +++ b/tests/topotests/nhrp_redundancy/nhs3/nhrp_route.json @@ -1,7 +1,7 @@ { - "176.16.1.4\/32": [ + "172.16.1.4\/32": [ { - "prefix": "176.16.1.4\/32", + "prefix": "172.16.1.4\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -16,15 +16,15 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r2-gre0", + "interfaceName": "nhs3-gre0", "active": true } ] } ], - "176.16.1.5\/32": [ + "172.16.1.5\/32": [ { - "prefix": "176.16.1.5\/32", + "prefix": "172.16.1.5\/32", "protocol": "nhrp", "vrfId": 0, "vrfName": "default", @@ -39,7 +39,7 @@ { "fib": true, "directlyConnected": true, - "interfaceName": "r2-gre0", + "interfaceName": "nhs3-gre0", "active": true } ] diff --git a/tests/topotests/nhrp_redundancy/nhs3/nhrp_route_nhs1_down.json b/tests/topotests/nhrp_redundancy/nhs3/nhrp_route_nhs1_down.json new file mode 100644 index 000000000000..29a4f8f11b60 --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhs3/nhrp_route_nhs1_down.json @@ -0,0 +1,48 @@ +{ + "172.16.1.4\/32": [ + { + "prefix": "172.16.1.4\/32", + "protocol": "nhrp", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 10, + "metric": 0, + "installed": true, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthops": [ + { + "fib": true, + "directlyConnected": true, + "interfaceName": "nhs3-gre0", + "active": true + } + ] + } + ], + "172.16.1.5\/32": [ + { + "prefix": "172.16.1.5\/32", + "protocol": "nhrp", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 10, + "metric": 0, + "installed": true, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthops": [ + { + "fib": true, + "directlyConnected": true, + "interfaceName": "nhs3-gre0", + "active": true + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/topotests/nhrp_redundancy/r1/nhrpd.conf b/tests/topotests/nhrp_redundancy/nhs3/nhrpd.conf similarity index 74% rename from tests/topotests/nhrp_redundancy/r1/nhrpd.conf rename to tests/topotests/nhrp_redundancy/nhs3/nhrpd.conf index ad48ce3769a7..e7c3504f6584 100644 --- a/tests/topotests/nhrp_redundancy/r1/nhrpd.conf +++ b/tests/topotests/nhrp_redundancy/nhs3/nhrpd.conf @@ -1,9 +1,9 @@ !debug nhrp all nhrp nflog-group 1 -interface r1-gre0 +interface nhs3-gre0 ip nhrp holdtime 10 ip nhrp network-id 42 ip nhrp registration no-unique ip nhrp redirect - tunnel source r1-eth0 + tunnel source nhs3-eth0 exit diff --git a/tests/topotests/nhrp_redundancy/nhs3/zebra.conf b/tests/topotests/nhrp_redundancy/nhs3/zebra.conf new file mode 100644 index 000000000000..7c1543881785 --- /dev/null +++ b/tests/topotests/nhrp_redundancy/nhs3/zebra.conf @@ -0,0 +1,12 @@ +ip forwarding +interface nhs3-eth0 + ip address 192.168.1.3/24 +! +ip route 192.168.2.0/24 192.168.1.6 +interface nhs3-gre0 + ip address 172.16.1.3/32 + no link-detect + ipv6 nd suppress-ra +! +ip route 10.4.4.0/24 172.16.1.4 +ip route 10.5.5.0/24 172.16.1.5 \ No newline at end of file diff --git a/tests/topotests/nhrp_redundancy/r1/zebra.conf b/tests/topotests/nhrp_redundancy/r1/zebra.conf deleted file mode 100644 index 0f11563f575d..000000000000 --- a/tests/topotests/nhrp_redundancy/r1/zebra.conf +++ /dev/null @@ -1,12 +0,0 @@ -ip forwarding -interface r1-eth0 - ip address 192.168.1.1/24 -! -ip route 192.168.2.0/24 192.168.1.6 -interface r1-gre0 - ip address 176.16.1.1/32 - no link-detect - ipv6 nd suppress-ra -! -ip route 4.4.4.0/24 176.16.1.4 -ip route 5.5.5.0/24 176.16.1.5 diff --git a/tests/topotests/nhrp_redundancy/r2/zebra.conf b/tests/topotests/nhrp_redundancy/r2/zebra.conf deleted file mode 100644 index 1a9c4ff91544..000000000000 --- a/tests/topotests/nhrp_redundancy/r2/zebra.conf +++ /dev/null @@ -1,12 +0,0 @@ -ip forwarding -interface r2-eth0 - ip address 192.168.1.2/24 -! -ip route 192.168.2.0/24 192.168.1.6 -interface r2-gre0 - ip address 176.16.1.2/32 - no link-detect - ipv6 nd suppress-ra -! -ip route 4.4.4.0/24 176.16.1.4 -ip route 5.5.5.0/24 176.16.1.5 diff --git a/tests/topotests/nhrp_redundancy/r3/zebra.conf b/tests/topotests/nhrp_redundancy/r3/zebra.conf deleted file mode 100644 index 980cfbcaab7d..000000000000 --- a/tests/topotests/nhrp_redundancy/r3/zebra.conf +++ /dev/null @@ -1,12 +0,0 @@ -ip forwarding -interface r3-eth0 - ip address 192.168.1.3/24 -! -ip route 192.168.2.0/24 192.168.1.6 -interface r3-gre0 - ip address 176.16.1.3/32 - no link-detect - ipv6 nd suppress-ra -! -ip route 4.4.4.0/24 176.16.1.4 -ip route 5.5.5.0/24 176.16.1.5 \ No newline at end of file diff --git a/tests/topotests/nhrp_redundancy/r4/zebra.conf b/tests/topotests/nhrp_redundancy/r4/zebra.conf deleted file mode 100644 index e4a9a6f80f74..000000000000 --- a/tests/topotests/nhrp_redundancy/r4/zebra.conf +++ /dev/null @@ -1,16 +0,0 @@ -ip forwarding -interface r4-eth0 - ip address 192.168.2.4/24 -! -ip route 192.168.1.0/24 192.168.2.6 -interface r4-gre0 - ip address 176.16.1.4/32 - no link-detect - ipv6 nd suppress-ra -! -interface r4-eth1 - ip address 4.4.4.4/24 -! -ip route 0.0.0.0/0 176.16.1.1 50 -ip route 0.0.0.0/0 176.16.1.2 60 -ip route 0.0.0.0/0 176.16.1.3 70 \ No newline at end of file diff --git a/tests/topotests/nhrp_redundancy/r5/zebra.conf b/tests/topotests/nhrp_redundancy/r5/zebra.conf deleted file mode 100644 index 9b1e1c0646e3..000000000000 --- a/tests/topotests/nhrp_redundancy/r5/zebra.conf +++ /dev/null @@ -1,16 +0,0 @@ -ip forwarding -interface r5-eth0 - ip address 192.168.2.5/24 -! -ip route 192.168.1.0/24 192.168.2.6 -interface r5-gre0 - ip address 176.16.1.5/32 - no link-detect - ipv6 nd suppress-ra -! -interface r5-eth1 - ip address 5.5.5.5/24 -! -ip route 0.0.0.0/0 176.16.1.1 50 -ip route 0.0.0.0/0 176.16.1.2 60 -ip route 0.0.0.0/0 176.16.1.3 70 diff --git a/tests/topotests/nhrp_redundancy/r7/zebra.conf b/tests/topotests/nhrp_redundancy/r7/zebra.conf deleted file mode 100644 index 5747b409561e..000000000000 --- a/tests/topotests/nhrp_redundancy/r7/zebra.conf +++ /dev/null @@ -1,4 +0,0 @@ -interface r7-eth0 - ip address 4.4.4.7/24 -! -ip route 0.0.0.0/0 4.4.4.4 diff --git a/tests/topotests/nhrp_redundancy/r6/zebra.conf b/tests/topotests/nhrp_redundancy/router/zebra.conf similarity index 63% rename from tests/topotests/nhrp_redundancy/r6/zebra.conf rename to tests/topotests/nhrp_redundancy/router/zebra.conf index 63a37cd5bf38..c0eb19ca40fe 100644 --- a/tests/topotests/nhrp_redundancy/r6/zebra.conf +++ b/tests/topotests/nhrp_redundancy/router/zebra.conf @@ -1,7 +1,7 @@ ip forwarding -interface r6-eth0 +interface router-eth0 ip address 192.168.1.6/24 ! -interface r6-eth1 +interface router-eth1 ip address 192.168.2.6/24 exit diff --git a/tests/topotests/nhrp_redundancy/test_nhrp_redundancy.dot b/tests/topotests/nhrp_redundancy/test_nhrp_redundancy.dot index c169436db04f..e94e1d0734cd 100644 --- a/tests/topotests/nhrp_redundancy/test_nhrp_redundancy.dot +++ b/tests/topotests/nhrp_redundancy/test_nhrp_redundancy.dot @@ -16,43 +16,43 @@ graph template { label="nhrp-topo-redundant-nhs"; # Routers - r1 [ + nhs1 [ shape=doubleoctagon, label="NHS 1", fillcolor="#f08080", style=filled, ]; - r2 [ + nhs2 [ shape=doubleoctagon label="NHS 2", fillcolor="#f08080", style=filled, ]; - r3 [ + nhs3 [ shape=doubleoctagon label="NHS 3", fillcolor="#f08080", style=filled, ]; - r4 [ + nhc1 [ shape=doubleoctagon label="NHC 1", fillcolor="#f08080", style=filled, ]; - r5 [ + nhc2 [ shape=doubleoctagon label="NHC 2", fillcolor="#f08080", style=filled, ]; - r6 [ + router [ shape=doubleoctagon label="router", fillcolor="#f08080", style=filled, ]; - r7 [ + host [ shape=doubleoctagon label="host", fillcolor="#f08080", @@ -74,30 +74,30 @@ graph template { ]; sw3 [ shape=oval, - label="sw3\n4.4.4.0/24", + label="sw3\n10.4.4.0/24", fillcolor="#d0e0d0", style=filled, ]; sw4 [ shape=oval, - label="sw4\n5.5.5.0/24", + label="sw4\n10.5.5.0/24", fillcolor="#d0e0d0", style=filled, ]; # Connections - r1 -- sw1 [label="eth0"]; - r2 -- sw1 [label="eth0"]; - r3 -- sw1 [label="eth0"]; - r6 -- sw1 [label="eth0"]; + nhs1 -- sw1 [label="eth0"]; + nhs2 -- sw1 [label="eth0"]; + nhs3 -- sw1 [label="eth0"]; + router -- sw1 [label="eth0"]; - r4 -- sw2 [label="eth0"]; - r5 -- sw2 [label="eth0"]; - r6 -- sw2 [label="eth1"]; + nhc1 -- sw2 [label="eth0"]; + nhc2 -- sw2 [label="eth0"]; + router -- sw2 [label="eth1"]; - r4 -- sw3 [label="eth1"]; - r7 -- sw3 [label="eth0"]; + nhc1 -- sw3 [label="eth1"]; + host -- sw3 [label="eth0"]; - r5 -- sw4 [label="eth1"]; + nhc2 -- sw4 [label="eth1"]; } diff --git a/tests/topotests/nhrp_redundancy/test_nhrp_redundancy.py b/tests/topotests/nhrp_redundancy/test_nhrp_redundancy.py index 81a22ebfaf5d..06777aaa23dd 100644 --- a/tests/topotests/nhrp_redundancy/test_nhrp_redundancy.py +++ b/tests/topotests/nhrp_redundancy/test_nhrp_redundancy.py @@ -10,7 +10,6 @@ import os import sys import json -from time import sleep from functools import partial import pytest @@ -57,11 +56,11 @@ +------------+ | +-------+----+ +------+-----+ | | | | | | | | | | | +--------+ | | | | -| Host |.7 | | NHC 1 | | NHC 2 +-----+5.5.5.0/24 +| Host |.7 | | NHC 1 | | NHC 2 +-----+10.5.5.0/24 | +---------+ | | | | | +------------+ | +------------+ +------------+ | | | - 4.4.4.0/24 + 10.4.4.0/24 """ # Save the Current Working Directory to find configuration files. @@ -77,30 +76,26 @@ def build_topo(tgen): "Build function" # Create 7 routers - for routern in range(1, 8): - tgen.add_router("r{}".format(routern)) + for rname in ["nhs1", "nhs2", "nhs3", "nhc1", "nhc2", "router", "host"]: + tgen.add_router(rname) - # Interconnect routers 1, 2, 3, 6 switch = tgen.add_switch("s1") - switch.add_link(tgen.gears["r1"]) - switch.add_link(tgen.gears["r2"]) - switch.add_link(tgen.gears["r3"]) - switch.add_link(tgen.gears["r6"]) + switch.add_link(tgen.gears["nhs1"]) + switch.add_link(tgen.gears["nhs2"]) + switch.add_link(tgen.gears["nhs3"]) + switch.add_link(tgen.gears["router"]) - # Interconnect routers 4, 5, 6 switch = tgen.add_switch("s2") - switch.add_link(tgen.gears["r4"]) - switch.add_link(tgen.gears["r5"]) - switch.add_link(tgen.gears["r6"]) + switch.add_link(tgen.gears["nhc1"]) + switch.add_link(tgen.gears["nhc2"]) + switch.add_link(tgen.gears["router"]) - # Connect router 4, 7 switch = tgen.add_switch("s3") - switch.add_link(tgen.gears["r4"]) - switch.add_link(tgen.gears["r7"]) + switch.add_link(tgen.gears["nhc1"]) + switch.add_link(tgen.gears["host"]) - # Connect router 5 switch = tgen.add_switch("s4") - switch.add_link(tgen.gears["r5"]) + switch.add_link(tgen.gears["nhc2"]) def _populate_iface(): @@ -111,7 +106,7 @@ def _populate_iface(): "echo 0 > /proc/sys/net/ipv4/ip_forward_use_pmtu", "echo 1 > /proc/sys/net/ipv6/conf/{0}-eth0/disable_ipv6", "echo 1 > /proc/sys/net/ipv6/conf/{0}-gre0/disable_ipv6", - "iptables -A FORWARD -i {0}-gre0 -o {0}-gre0 -m hashlimit --hashlimit-upto 4/minute --hashlimit-burst 1 --hashlimit-mode srcip,dstip --hashlimit-srcmask 24 --hashlimit-dstmask 24 --hashlimit-name loglimit-0 -j NFLOG --nflog-group 1 --nflog-range 128", + "iptables -A FORWARD -i {0}-gre0 -o {0}-gre0 -m hashlimit --hashlimit-upto 4/minute --hashlimit-burst 1 --hashlimit-mode srcip,dstip --hashlimit-srcmask 24 --hashlimit-dstmask 24 --hashlimit-name loglimit-0 -j NFLOG --nflog-group 1 --nflog-size 128", ] cmds_tot = [ @@ -123,40 +118,37 @@ def _populate_iface(): ] for cmd in cmds_tot_hub: - # Router 1 - input = cmd.format("r1", "1") + input = cmd.format("nhs1", "1") logger.info("input: " + input) - output = tgen.net["r1"].cmd(input) + output = tgen.net["nhs1"].cmd(input) logger.info("output: " + output) - # Router 2 - input = cmd.format("r2", "2") + input = cmd.format("nhs2", "2") logger.info("input: " + input) - output = tgen.net["r2"].cmd(input) + output = tgen.net["nhs2"].cmd(input) logger.info("output: " + output) - # Router 3 - input = cmd.format("r3", "3") + input = cmd.format("nhs3", "3") logger.info("input: " + input) - output = tgen.net["r3"].cmd(input) + output = tgen.net["nhs3"].cmd(input) logger.info("output: " + output) for cmd in cmds_tot: - input = cmd.format("r4", "4") + input = cmd.format("nhc1", "4") logger.info("input: " + input) - output = tgen.net["r4"].cmd(input) + output = tgen.net["nhc1"].cmd(input) logger.info("output: " + output) - input = cmd.format("r5", "5") + input = cmd.format("nhc2", "5") logger.info("input: " + input) - output = tgen.net["r5"].cmd(input) + output = tgen.net["nhc2"].cmd(input) logger.info("output: " + output) def _verify_iptables(): tgen = get_topogen() # Verify iptables is installed. Required for shortcuts - rc, _, _ = tgen.net["r1"].cmd_status("iptables") + rc, _, _ = tgen.net["nhs1"].cmd_status("iptables") return False if rc == 127 else True @@ -179,7 +171,7 @@ def setup_module(mod): TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname)), ) - if rname in ("r1", "r2", "r3", "r4", "r5"): + if rname in ("nhs1", "nhs2", "nhs3", "nhc1", "nhc2"): router.load_config( TopoRouter.RD_NHRP, os.path.join(CWD, "{}/nhrpd.conf".format(rname)) ) @@ -203,17 +195,15 @@ def test_protocols_convergence(): if tgen.routers_have_failure(): pytest.skip(tgen.errors) - logger.info("Checking NHRP cache and IPv4 routes for convergence") + logger.info("Checking NHRP cache for convergence") router_list = tgen.routers() # Check NHRP cache on servers and clients for rname, router in router_list.items(): - - json_file = "{}/{}/nhrp_cache.json".format(CWD, router.name) - if not os.path.isfile(json_file): - logger.info("skipping file {}".format(json_file)) + if "nh" not in rname: continue + json_file = "{}/{}/nhrp_cache.json".format(CWD, router.name) expected = json.loads(open(json_file).read()) test_func = partial( topotest.router_json_cmp, router, "show ip nhrp cache json", expected @@ -227,13 +217,12 @@ def test_protocols_convergence(): assert result is None, assertmsg # Check NHRP IPV4 routes on servers and clients + logger.info("Checking IPv4 routes for convergence") for rname, router in router_list.items(): - - json_file = "{}/{}/nhrp_route.json".format(CWD, router.name) - if not os.path.isfile(json_file): - logger.info("skipping file {}".format(json_file)) + if "nh" not in rname: continue + json_file = "{}/{}/nhrp_route.json".format(CWD, router.name) expected = json.loads(open(json_file).read()) test_func = partial( topotest.router_json_cmp, router, "show ip route nhrp json", expected @@ -247,53 +236,53 @@ def test_protocols_convergence(): assert result is None, assertmsg # Test connectivity from 1 NHRP server to all clients - pingrouter = tgen.gears["r1"] - logger.info("Check Ping IPv4 from R1 to R4 = 176.16.1.4)") - output = pingrouter.run("ping 176.16.1.4 -f -c 1000") + nhs1 = tgen.gears["nhs1"] + logger.info("Check Ping IPv4 from nhs1 to nhc1 = 172.16.1.4)") + output = nhs1.run("ping 172.16.1.4 -f -c 1000") logger.info(output) if "1000 packets transmitted, 1000 received" not in output: - assertmsg = "expected ping IPv4 from R1 to R4 should be ok" + assertmsg = "expected ping IPv4 from nhs1 to nhc1 should be ok" assert 0, assertmsg else: - logger.info("Check Ping IPv4 from R1 to R4 OK") + logger.info("Check Ping IPv4 from nhs1 to nhc1 OK") - logger.info("Check Ping IPv4 from R1 to R5 = 176.16.1.5)") - output = pingrouter.run("ping 176.16.1.5 -f -c 1000") + logger.info("Check Ping IPv4 from nhs1 to nhc2 = 172.16.1.5)") + output = nhs1.run("ping 172.16.1.5 -f -c 1000") logger.info(output) if "1000 packets transmitted, 1000 received" not in output: - assertmsg = "expected ping IPv4 from R1 to R5 should be ok" + assertmsg = "expected ping IPv4 from nhs1 to nhc2 should be ok" assert 0, assertmsg else: - logger.info("Check Ping IPv4 from R1 to R5 OK") + logger.info("Check Ping IPv4 from nhs1 to nhc2 OK") # Test connectivity from 1 NHRP client to all servers - pingrouter = tgen.gears["r4"] - logger.info("Check Ping IPv4 from R4 to R1 = 176.16.1.1)") - output = pingrouter.run("ping 176.16.1.1 -f -c 1000") + nhc1 = tgen.gears["nhc1"] + logger.info("Check Ping IPv4 from nhc1 to nhs1 = 172.16.1.1)") + output = nhc1.run("ping 172.16.1.1 -f -c 1000") logger.info(output) if "1000 packets transmitted, 1000 received" not in output: - assertmsg = "expected ping IPv4 from R4 to R1 should be ok" + assertmsg = "expected ping IPv4 from nhc1 to nhs1 should be ok" assert 0, assertmsg else: - logger.info("Check Ping IPv4 from R4 to R1 OK") + logger.info("Check Ping IPv4 from nhc1 to nhs1 OK") - logger.info("Check Ping IPv4 from R4 to R2 = 176.16.1.2)") - output = pingrouter.run("ping 176.16.1.2 -f -c 1000") + logger.info("Check Ping IPv4 from nhc1 to nhs2 = 172.16.1.2)") + output = nhc1.run("ping 172.16.1.2 -f -c 1000") logger.info(output) if "1000 packets transmitted, 1000 received" not in output: - assertmsg = "expected ping IPv4 from R4 to R2 should be ok" + assertmsg = "expected ping IPv4 from nhc1 to nhs2 should be ok" assert 0, assertmsg else: - logger.info("Check Ping IPv4 from R4 to R2 OK") + logger.info("Check Ping IPv4 from nhc1 to nhs2 OK") - logger.info("Check Ping IPv4 from R4 to R3 = 176.16.1.3)") - output = pingrouter.run("ping 176.16.1.3 -f -c 1000") + logger.info("Check Ping IPv4 from nhc1 to nhs3 = 172.16.1.3)") + output = nhc1.run("ping 172.16.1.3 -f -c 1000") logger.info(output) if "1000 packets transmitted, 1000 received" not in output: - assertmsg = "expected ping IPv4 from R4 to R3 should be ok" + assertmsg = "expected ping IPv4 from nhc1 to nhs3 should be ok" assert 0, assertmsg else: - logger.info("Check Ping IPv4 from R4 to R3 OK") + logger.info("Check Ping IPv4 from nhc1 to nhs3 OK") @retry(retry_timeout=30, initial_wait=5) @@ -302,22 +291,21 @@ def verify_shortcut_path(): Verifying that traffic flows through shortcut path """ tgen = get_topogen() - pingrouter = tgen.gears["r7"] - logger.info("Check Ping IPv4 from R7 to R5 = 5.5.5.5") + host = tgen.gears["host"] + logger.info("Check Ping IPv4 from host to nhc2 = 10.5.5.5") - output = pingrouter.run("ping 5.5.5.5 -f -c 1000") + output = host.run("ping 10.5.5.5 -f -c 1000") logger.info(output) if "1000 packets transmitted, 1000 received" not in output: - assertmsg = "expected ping IPv4 from R7 to R5 should be ok" + assertmsg = "expected ping IPv4 from host to nhc2 should be ok" assert 0, assertmsg else: - logger.info("Check Ping IPv4 from R7 to R5 OK") + logger.info("Check Ping IPv4 from host to nhc2 OK") def test_redundancy_shortcut(): """ Assert that if shortcut created and then NHS goes down, there is no traffic disruption - Stop traffic and verify next time traffic started, shortcut is initiated by backup NHS """ tgen = get_topogen() if tgen.routers_have_failure(): @@ -328,84 +316,207 @@ def test_redundancy_shortcut(): logger.info("Testing NHRP shortcuts with redundant servers") - # Verify R4 nhrp routes before shortcut creation - router = tgen.gears["r4"] - json_file = "{}/{}/nhrp_route.json".format(CWD, router.name) + # Verify nhc1 nhrp routes before shortcut creation + nhc1 = tgen.gears["nhc1"] + json_file = "{}/{}/nhrp_route.json".format(CWD, nhc1.name) assertmsg = "No nhrp_route file found" assert os.path.isfile(json_file), assertmsg expected = json.loads(open(json_file).read()) test_func = partial( - topotest.router_json_cmp, router, "show ip route nhrp json", expected + topotest.router_json_cmp, nhc1, "show ip route nhrp json", expected ) _, result = topotest.run_and_expect(test_func, None, count=40, wait=0.5) - output = router.vtysh_cmd("show ip route nhrp") + output = nhc1.vtysh_cmd("show ip route nhrp") logger.info(output) - assertmsg = '"{}" JSON output mismatches'.format(router.name) + assertmsg = '"{}" JSON output mismatches'.format(nhc1.name) assert result is None, assertmsg # Initiate shortcut by pinging between clients - pingrouter = tgen.gears["r7"] - logger.info("Check Ping IPv4 from R7 to R5 via shortcut = 5.5.5.5") + host = tgen.gears["host"] + logger.info("Check Ping IPv4 from host to nhc2 via shortcut = 10.5.5.5") - output = pingrouter.run("ping 5.5.5.5 -f -c 1000") + output = host.run("ping 10.5.5.5 -f -c 1000") logger.info(output) if "1000 packets transmitted, 1000 received" not in output: - assertmsg = "expected ping IPv4 from R7 to R5 via shortcut should be ok" + assertmsg = "expected ping IPv4 from host to nhc2 via shortcut should be ok" assert 0, assertmsg else: - logger.info("Check Ping IPv4 from R7 to R5 via shortcut OK") + logger.info("Check Ping IPv4 from host to nhc2 via shortcut OK") # Now check that NHRP shortcut route installed - json_file = "{}/{}/nhrp_route_shortcut.json".format(CWD, router.name) + json_file = "{}/{}/nhrp_route_shortcut.json".format(CWD, nhc1.name) assertmsg = "No nhrp_route file found" assert os.path.isfile(json_file), assertmsg expected = json.loads(open(json_file).read()) test_func = partial( - topotest.router_json_cmp, router, "show ip route nhrp json", expected + topotest.router_json_cmp, nhc1, "show ip route nhrp json", expected + ) + _, result = topotest.run_and_expect(test_func, None, count=40, wait=0.5) + + output = nhc1.vtysh_cmd("show ip route nhrp") + logger.info(output) + + assertmsg = '"{}" JSON output mismatches'.format(nhc1.name) + assert result is None, assertmsg + + json_file = "{}/{}/nhrp_shortcut_present.json".format(CWD, nhc1.name) + expected = json.loads(open(json_file).read()) + test_func = partial( + topotest.router_json_cmp, nhc1, "show ip nhrp shortcut json", expected + ) + _, result = topotest.run_and_expect(test_func, None, count=40, wait=0.5) + + output = nhc1.vtysh_cmd("show ip nhrp shortcut") + logger.info(output) + + assertmsg = '"{}" JSON output mismatches'.format(nhc1.name) + assert result is None, assertmsg + + # check the shortcut disappears because of no traffic + json_file = "{}/{}/nhrp_shortcut_absent.json".format(CWD, nhc1.name) + expected = json.loads(open(json_file).read()) + test_func = partial( + topotest.router_json_cmp, nhc1, "show ip nhrp shortcut json", expected ) _, result = topotest.run_and_expect(test_func, None, count=40, wait=0.5) - output = router.vtysh_cmd("show ip route nhrp") + output = nhc1.vtysh_cmd("show ip nhrp shortcut") logger.info(output) - assertmsg = '"{}" JSON output mismatches'.format(router.name) + assertmsg = '"{}" JSON output mismatches'.format(nhc1.name) assert result is None, assertmsg + +def test_redundancy_shortcut_backup(): + """ + Stop traffic and verify next time traffic started, shortcut is initiated by backup NHS + """ + tgen = get_topogen() + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + if not _verify_iptables(): + pytest.skip("iptables not installed") + + nhc1 = tgen.gears["nhc1"] + router_list = tgen.routers() + # Bring down primary GRE interface and verify shortcut is not disturbed - logger.info("Bringing down R1, primary NHRP server.") - shutdown_bringup_interface(tgen, "r1", "r1-gre0", False) + logger.info("Bringing down nhs1, primary NHRP server.") + shutdown_bringup_interface(tgen, "nhs1", "nhs1-gre0", False) + + # Check NHRP cache on servers and clients + for rname, router in router_list.items(): + if "nh" not in rname: + continue + if "nhs1" in rname: + continue + + json_file = "{}/{}/nhrp_cache_nhs1_down.json".format(CWD, router.name) + expected = json.loads(open(json_file).read()) + test_func = partial( + topotest.router_json_cmp, router, "show ip nhrp cache json", expected + ) + _, result = topotest.run_and_expect(test_func, None, count=40, wait=0.5) + + output = router.vtysh_cmd("show ip nhrp cache") + logger.info(output) + + assertmsg = '"{}" JSON output mismatches'.format(router.name) + assert result is None, assertmsg + + # Check NHRP IPV4 routes on servers and clients + logger.info("Checking IPv4 routes for convergence") + for rname, router in router_list.items(): + if "nh" not in rname: + continue + if "nhs1" in rname: + continue + + json_file = "{}/{}/nhrp_route_nhs1_down.json".format(CWD, router.name) + expected = json.loads(open(json_file).read()) + test_func = partial( + topotest.router_json_cmp, router, "show ip route nhrp json", expected + ) + _, result = topotest.run_and_expect(test_func, None, count=40, wait=0.5) + + output = router.vtysh_cmd("show ip route nhrp") + logger.info(output) + + assertmsg = '"{}" JSON output mismatches'.format(router.name) + assert result is None, assertmsg # Verify shortcut is still active - pingrouter = tgen.gears["r7"] - logger.info("Check Ping IPv4 from R7 to R5 via shortcut = 5.5.5.5") + host = tgen.gears["host"] + logger.info("Check Ping IPv4 from host to nhc2 via shortcut = 10.5.5.5") - output = pingrouter.run("ping 5.5.5.5 -f -c 1000") + output = host.run("ping 10.5.5.5 -f -c 1000") logger.info(output) if "1000 packets transmitted, 1000 received" not in output: - assertmsg = "expected ping IPv4 from R7 to R5 via shortcut should be ok" + assertmsg = "expected ping IPv4 from host to nhc2 via shortcut should be ok" assert 0, assertmsg else: - logger.info("Check Ping IPv4 from R7 to R5 via shortcut OK") + logger.info("Check Ping IPv4 from host to nhc2 via shortcut OK") + + # Verify shortcut is present in routing table + json_file = "{}/{}/nhrp_route_shortcut_nhs1_down.json".format(CWD, nhc1.name) + assertmsg = "No nhrp_route file found" + assert os.path.isfile(json_file), assertmsg + + expected = json.loads(open(json_file).read()) + test_func = partial( + topotest.router_json_cmp, nhc1, "show ip route nhrp json", expected + ) + _, result = topotest.run_and_expect(test_func, None, count=40, wait=0.5) + + output = nhc1.vtysh_cmd("show ip route nhrp") + logger.info(output) + + json_file = "{}/{}/nhrp_shortcut_present.json".format(CWD, nhc1.name) + expected = json.loads(open(json_file).read()) + test_func = partial( + topotest.router_json_cmp, nhc1, "show ip nhrp shortcut json", expected + ) + _, result = topotest.run_and_expect(test_func, None, count=40, wait=0.5) + + output = nhc1.vtysh_cmd("show ip nhrp shortcut") + logger.info(output) + + assertmsg = '"{}" JSON output mismatches'.format(nhc1.name) + assert result is None, assertmsg # Now verify shortcut is purged with lack of traffic - json_file = "{}/{}/nhrp_route.json".format(CWD, router.name) + json_file = "{}/{}/nhrp_route_nhs1_down.json".format(CWD, nhc1.name) assertmsg = "No nhrp_route file found" assert os.path.isfile(json_file), assertmsg expected = json.loads(open(json_file).read()) test_func = partial( - topotest.router_json_cmp, router, "show ip route nhrp json", expected + topotest.router_json_cmp, nhc1, "show ip route nhrp json", expected + ) + _, result = topotest.run_and_expect(test_func, None, count=40, wait=0.5) + + output = nhc1.vtysh_cmd("show ip route nhrp") + logger.info(output) + + assertmsg = '"{}" JSON output mismatches'.format(nhc1.name) + assert result is None, assertmsg + + json_file = "{}/{}/nhrp_shortcut_absent.json".format(CWD, nhc1.name) + expected = json.loads(open(json_file).read()) + test_func = partial( + topotest.router_json_cmp, nhc1, "show ip nhrp shortcut json", expected ) _, result = topotest.run_and_expect(test_func, None, count=40, wait=0.5) - output = router.vtysh_cmd("show ip route nhrp") + output = nhc1.vtysh_cmd("show ip nhrp shortcut") logger.info(output) - assertmsg = '"{}" JSON output mismatches'.format(router.name) + assertmsg = '"{}" JSON output mismatches'.format(nhc1.name) assert result is None, assertmsg