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);