]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: add show bgp vni <VNI|all> json commands
authorStephen Worley <sworley@nvidia.com>
Tue, 9 Nov 2021 22:52:03 +0000 (17:52 -0500)
committerStephen Worley <sworley@nvidia.com>
Tue, 11 Oct 2022 20:18:21 +0000 (16:18 -0400)
Add add show bgp vni <VNI|all> json commands.

This is very similar to the old `show bgp evpn l2vpn vni route json`
commands but adds a new `macTable` object under the normal output.

This may change in the future but doing it like this for now

VNI ALL:

```
{
"1002":{
"vni":1002,
"[2]:[0]:[48]:[00:00:00:00:00:00]:[128]:[fe80::202:ff:fe00:9]":{
  "prefix":"[2]:[0]:[48]:[00:00:00:00:00:00]:[128]:[fe80::202:ff:fe00:9]",
  "prefixLen":352,
  "paths":[
    [
      {
        "valid":true,
        "pathFrom":"external",
...
...
...
    "numPrefix":4,
    "numPaths":7,
    "macTable":{
      "[2]:[0]:[48]:[00:02:00:00:00:09]":{
        "prefix":"[2]:[0]:[48]:[00:02:00:00:00:09]",
        "prefixLen":352,
        "paths":[
          [
            {
              "valid":true,
              "pathFrom":"external",

```

VNI 1002:

```
{
  "[2]:[0]:[48]:[00:00:00:00:00:00]:[128]:[fe80::202:ff:fe00:9]":{
    "prefix":"[2]:[0]:[48]:[00:00:00:00:00:00]:[128]:[fe80::202:ff:fe00:9]",
    "prefixLen":352,
    "paths":[
      [
        {
          "valid":true,
          "pathFrom":"external",
...
...
...
  "numPrefix":4,
  "numPaths":7,
  "macTable":{
    "[2]:[0]:[48]:[00:02:00:00:00:09]":{
      "prefix":"[2]:[0]:[48]:[00:02:00:00:00:09]",
      "prefixLen":352,
      "paths":[
        [
          {
            "valid":true,
            "pathFrom":"external",
```

Signed-off-by: Stephen Worley <sworley@nvidia.com>
bgpd/bgp_evpn_vty.c

index f8110117ecf49948bb4d63f87a7f66473047bea7..5d16b55d5729a8b466e1b9f0b4858c6acc0ed1e2 100644 (file)
@@ -5241,14 +5241,15 @@ DEFUN(show_bgp_l2vpn_evpn_route_vni_all,
  */
 DEFPY(show_bgp_vni_all,
       show_bgp_vni_all_cmd,
-      "show bgp vni all [vtep A.B.C.D$addr] [detail$detail]",
+      "show bgp vni all [vtep A.B.C.D$addr] [detail$detail] [json$uj]",
       SHOW_STR
       BGP_STR
       VNI_HELP_STR
       VNI_ALL_HELP_STR
       VTEP_HELP_STR
       VTEP_IP_HELP_STR
-      DETAIL_HELP_STR)
+      DETAIL_HELP_STR
+      JSON_STR)
 {
        struct bgp *bgp;
        json_object *json = NULL;
@@ -5258,21 +5259,17 @@ DEFPY(show_bgp_vni_all,
                return CMD_WARNING;
 
        /* check if we need json output */
-       /*
        if (uj)
                json = json_object_new_object();
-       */
 
        evpn_show_routes_vni_all_type_all(vty, bgp, addr, json, !!detail);
 
-       /*
        if (uj) {
                vty_out(vty, "%s\n",
                        json_object_to_json_string_ext(
                                json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
-       */
 
        return CMD_SUCCESS;
 }
@@ -5452,23 +5449,43 @@ DEFPY(show_bgp_vni_all_imet,
  */
 DEFPY(show_bgp_vni,
       show_bgp_vni_cmd,
-      "show bgp vni "CMD_VNI_RANGE"$vni [vtep A.B.C.D$addr]",
+      "show bgp vni "CMD_VNI_RANGE"$vni [vtep A.B.C.D$addr] [json$uj]",
       SHOW_STR
       BGP_STR
       VNI_HELP_STR
       VNI_NUM_HELP_STR
       VTEP_HELP_STR
-      VTEP_IP_HELP_STR)
+      VTEP_IP_HELP_STR
+      JSON_STR)
 {
        struct bgp *bgp;
+       json_object *json = NULL;
+       json_object *json_mac = NULL;
 
        bgp = bgp_get_evpn();
        if (!bgp)
                return CMD_WARNING;
 
-       evpn_show_routes_vni(vty, bgp, vni, 0, false, addr, NULL);
-       vty_out(vty, "\n\nMAC Table:\n\n");
-       evpn_show_routes_vni(vty, bgp, vni, 0, true, addr, NULL);
+       /* check if we need json output */
+       if (uj) {
+               json = json_object_new_object();
+               json_mac = json_object_new_object();
+       }
+
+       evpn_show_routes_vni(vty, bgp, vni, 0, false, addr, json);
+
+       if (!uj)
+               vty_out(vty, "\n\nMAC Table:\n\n");
+
+       evpn_show_routes_vni(vty, bgp, vni, 0, true, addr, json_mac);
+
+       if (uj) {
+               json_object_object_add(json, "macTable", json_mac);
+               vty_out(vty, "%s\n",
+                       json_object_to_json_string_ext(
+                               json, JSON_C_TO_STRING_PRETTY));
+               json_object_free(json);
+       }
 
        return CMD_SUCCESS;
 }