]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: Show NHT resolve via default status on/off 14162/head
authorDonatas Abraitis <donatas@opensourcerouting.org>
Tue, 8 Aug 2023 13:15:45 +0000 (16:15 +0300)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Thu, 17 Aug 2023 18:45:55 +0000 (21:45 +0300)
```
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>
tests/topotests/all_protocol_startup/r1/ip_nht.ref
tests/topotests/all_protocol_startup/r1/ipv6_nht.ref
tests/topotests/bgp_features/r1/zebra.conf
zebra/zebra_vty.c

index 0ef3f4b67535222a9ecdfe4587c4eb08e2d3bfd8..a2f3d3b0db4e2dd5dcebd461e6f8d1c6c630b4cf 100644 (file)
@@ -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
index 8c937280075845dbbd6a84418cb1d35088506cdb..100a36a8d6abb69a64d302e2117c234cff6a40fa 100644 (file)
@@ -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)
+
index 61564f1a1a8e73493553d7c469ad905bfa331b2b..a4e51fdf586d24ed1074f5e08f4d5db354a9441a 100644 (file)
@@ -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
index 1a123ba5c268b908e30fbda4c94f86e999ff2a9e..d36c2f81c789ccc8b5379355bccd60ef2a715796 100644 (file)
@@ -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);