summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonatas Abraitis <donatas@opensourcerouting.org>2023-08-08 16:15:45 +0300
committerDonatas Abraitis <donatas@opensourcerouting.org>2023-08-17 21:45:55 +0300
commitd02fae58360bbed6103ec4d14b4946ce016f5b90 (patch)
treefdc97abd544abde5d7389eb9cad71e2fffd97b15
parent62196fbd1919f98a8cf36ebdd1f48d31a404ed9f (diff)
zebra: Show NHT resolve via default status on/off
``` donatas-laptop# show ip nht VRF default: Resolve via default: on 192.168.10.123 resolved via connected is directly connected, wlp82s0 (vrf default) Client list: bgp(fd 21) donatas-laptop# show ip nht json { "default":{ "ipv4":{ "resolveViaDefault":true, "192.168.10.123":{ "nhtConnected":false, "clientList":[ { "protocol":"bgp", "socket":21, "protocolFiltered":"none" } ], "nexthops":[ { "flags":3, "fib":true, "directlyConnected":true, "interfaceIndex":3, "interfaceName":"wlp82s0", "vrf":"default", "active":true } ], "resolvedProtocol":"connected" } } } } donatas-laptop# show ip nht vrf all VRF default: Resolve via default: on 192.168.10.123 resolved via connected is directly connected, wlp82s0 (vrf default) Client list: bgp(fd 21) donatas-laptop# show ip nht vrf all json { "default":{ "ipv4":{ "resolveViaDefault":true, "192.168.10.123":{ "nhtConnected":false, "clientList":[ { "protocol":"bgp", "socket":21, "protocolFiltered":"none" } ], "nexthops":[ { "flags":3, "fib":true, "directlyConnected":true, "interfaceIndex":3, "interfaceName":"wlp82s0", "vrf":"default", "active":true } ], "resolvedProtocol":"connected" } } } } donatas-laptop# ``` Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
-rw-r--r--tests/topotests/all_protocol_startup/r1/ip_nht.ref2
-rw-r--r--tests/topotests/all_protocol_startup/r1/ipv6_nht.ref4
-rw-r--r--tests/topotests/bgp_features/r1/zebra.conf1
-rw-r--r--zebra/zebra_vty.c27
4 files changed, 32 insertions, 2 deletions
diff --git a/tests/topotests/all_protocol_startup/r1/ip_nht.ref b/tests/topotests/all_protocol_startup/r1/ip_nht.ref
index 0ef3f4b675..a2f3d3b0db 100644
--- a/tests/topotests/all_protocol_startup/r1/ip_nht.ref
+++ b/tests/topotests/all_protocol_startup/r1/ip_nht.ref
@@ -1,3 +1,5 @@
+VRF default:
+ Resolve via default: on
1.1.1.1
resolved via static
is directly connected, r1-eth1 (vrf default), weight 1
diff --git a/tests/topotests/all_protocol_startup/r1/ipv6_nht.ref b/tests/topotests/all_protocol_startup/r1/ipv6_nht.ref
index 8c93728007..100a36a8d6 100644
--- a/tests/topotests/all_protocol_startup/r1/ipv6_nht.ref
+++ b/tests/topotests/all_protocol_startup/r1/ipv6_nht.ref
@@ -1,3 +1,5 @@
+VRF default:
+ Resolve via default: on
fc00::2
resolved via connected
is directly connected, r1-eth0 (vrf default)
@@ -10,4 +12,4 @@ fc00:0:0:8::2000(Connected)
resolved via connected
is directly connected, r1-eth8 (vrf default)
Client list: bgp(fd XX)
-
+
diff --git a/tests/topotests/bgp_features/r1/zebra.conf b/tests/topotests/bgp_features/r1/zebra.conf
index 61564f1a1a..a4e51fdf58 100644
--- a/tests/topotests/bgp_features/r1/zebra.conf
+++ b/tests/topotests/bgp_features/r1/zebra.conf
@@ -26,3 +26,4 @@ interface r1-eth3
ip address 192.168.101.1/24
ipv6 address fc00:100:0:1::1/64
!
+no ip nht resolve-via-default
diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c
index 1a123ba5c2..d36c2f81c7 100644
--- a/zebra/zebra_vty.c
+++ b/zebra/zebra_vty.c
@@ -1067,16 +1067,22 @@ DEFPY (show_ip_nht,
json_object *json = NULL;
json_object *json_vrf = NULL;
json_object *json_nexthop = NULL;
+ struct zebra_vrf *zvrf;
+ bool resolve_via_default = false;
if (uj)
json = json_object_new_object();
if (vrf_all) {
struct vrf *vrf;
- struct zebra_vrf *zvrf;
RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {
if ((zvrf = vrf->info) != NULL) {
+ resolve_via_default =
+ (afi == AFI_IP)
+ ? zvrf->zebra_rnh_ip_default_route
+ : zvrf->zebra_rnh_ipv6_default_route;
+
if (uj) {
json_vrf = json_object_new_object();
json_nexthop = json_object_new_object();
@@ -1088,9 +1094,16 @@ DEFPY (show_ip_nht,
? "ipv4"
: "ipv6",
json_nexthop);
+ json_object_boolean_add(json_nexthop,
+ "resolveViaDefault",
+ resolve_via_default);
} else {
vty_out(vty, "\nVRF %s:\n",
zvrf_name(zvrf));
+ vty_out(vty,
+ " Resolve via default: %s\n",
+ resolve_via_default ? "on"
+ : "off");
}
zebra_print_rnh_table(zvrf_id(zvrf), afi, safi,
vty, NULL, json_nexthop);
@@ -1115,6 +1128,11 @@ DEFPY (show_ip_nht,
}
}
+ zvrf = zebra_vrf_lookup_by_id(vrf_id);
+ resolve_via_default = (afi == AFI_IP)
+ ? zvrf->zebra_rnh_ip_default_route
+ : zvrf->zebra_rnh_ipv6_default_route;
+
if (uj) {
json_vrf = json_object_new_object();
json_nexthop = json_object_new_object();
@@ -1126,6 +1144,13 @@ DEFPY (show_ip_nht,
json_object_object_add(json_vrf,
(afi == AFI_IP) ? "ipv4" : "ipv6",
json_nexthop);
+
+ json_object_boolean_add(json_nexthop, "resolveViaDefault",
+ resolve_via_default);
+ } else {
+ vty_out(vty, "VRF %s:\n", zvrf_name(zvrf));
+ vty_out(vty, " Resolve via default: %s\n",
+ resolve_via_default ? "on" : "off");
}
zebra_print_rnh_table(vrf_id, afi, safi, vty, p, json_nexthop);