From: Sindhu Parvathi Gopinathan Date: Sat, 3 Dec 2022 19:09:49 +0000 (-0800) Subject: zebra: Adding FRR support for show vrf vrf-id vni X-Git-Tag: base_8.5~60^2~1 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=3cff8acb33ada54488f1df63d78c6581dfd45618;p=matthieu%2Ffrr.git zebra: Adding FRR support for show vrf vrf-id vni cli & json support extended for show vrf vrf-id vni commands: - existing: show vrf vni - show vrf vni - show vrf all vni - show vrf vni json - show vrf all vni json Before: ``` tor-1# show vrf vni VRF VNI VxLAN IF L3-SVI State Rmac default 100 None None Down None sym_1 8888 vxlan99 vlan490_l3 Up 44:38:39:ff:ff:25 sym_2 8889 vxlan99 vlan491_l3 Up 44:38:39:ff:ff:25 sym_3 8890 vxlan99 vlan492_l3 Up 44:38:39:ff:ff:25 sym_4 8891 vxlan99 vlan493_l3 Up 44:38:39:ff:ff:25 sym_5 8892 vxlan99 vlan494_l3 Up 44:38:39:ff:ff:25 tor-1# ``` After: ``` tor-1# show vrf default vni json { "vrfs":[ { "vrf":"default", "vni":100, "vxlanIntf":"None", "sviIntf":"None", "state":"Down", "routerMac":"None" } ] } tor-1# show vrf default vni VRF VNI VxLAN IF L3-SVI State Rmac default 100 None None Down None tor-1# tor-1# show vrf all vni VRF VNI VxLAN IF L3-SVI State Rmac default 100 None None Down None sym_1 8888 vxlan99 vlan490_l3 Up 44:38:39:ff:ff:25 sym_2 8889 vxlan99 vlan491_l3 Up 44:38:39:ff:ff:25 sym_3 8890 vxlan99 vlan492_l3 Up 44:38:39:ff:ff:25 sym_4 8891 vxlan99 vlan493_l3 Up 44:38:39:ff:ff:25 sym_5 8892 vxlan99 vlan494_l3 Up 44:38:39:ff:ff:25 tor-1# tor-1# tor-1# tor-1# tor-1# tor-1# show vrf all vni json { "vrfs":[ { "vrf":"default", "vni":100, "vxlanIntf":"None", "sviIntf":"None", "state":"Down", "routerMac":"None" }, { "vrf":"sym_1", "vni":8888, "vxlanIntf":"vxlan99", "sviIntf":"vlan490_l3", "state":"Up", "routerMac":"44:38:39:ff:ff:25" }, { "vrf":"sym_2", "vni":8889, "vxlanIntf":"vxlan99", "sviIntf":"vlan491_l3", "state":"Up", "routerMac":"44:38:39:ff:ff:25" }, { "vrf":"sym_3", "vni":8890, "vxlanIntf":"vxlan99", "sviIntf":"vlan492_l3", "state":"Up", "routerMac":"44:38:39:ff:ff:25" }, { "vrf":"sym_4", "vni":8891, "vxlanIntf":"vxlan99", "sviIntf":"vlan493_l3", "state":"Up", "routerMac":"44:38:39:ff:ff:25" }, { "vrf":"sym_5", "vni":8892, "vxlanIntf":"vxlan99", "sviIntf":"vlan494_l3", "state":"Up", "routerMac":"44:38:39:ff:ff:25" } ] } tor-1# ``` Ticket:#3260835 Issue:3260835 Testing: UT done Signed-off-by: Sindhu Parvathi Gopinathan --- diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c index d099a28d4d..ccd6eb2631 100644 --- a/zebra/zebra_vty.c +++ b/zebra/zebra_vty.c @@ -3169,11 +3169,11 @@ DEFUN (no_vrf_vni_mapping, } /* show vrf */ -DEFUN (show_vrf_vni, +DEFPY (show_vrf_vni, show_vrf_vni_cmd, - "show vrf vni [json]", + "show vrf [] vni [json]", SHOW_STR - "VRF\n" + VRF_FULL_CMD_HELP_STR "VNI\n" JSON_STR) { @@ -3182,20 +3182,69 @@ DEFUN (show_vrf_vni, json_object *json = NULL; json_object *json_vrfs = NULL; bool uj = use_json(argc, argv); + bool use_vrf = false; - if (uj) { + if (uj) json = json_object_new_object(); - json_vrfs = json_object_new_array(); + + /* show vrf vni used to display across all vrfs + * This is enhanced to support only for specific + * vrf based output. + */ + if (vrf_all || !vrf_name) { + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { + zvrf = vrf->info; + if (!zvrf) + continue; + + use_vrf = true; + break; + } + if (use_vrf) { + if (!uj) + vty_out(vty, + "%-37s %-10s %-20s %-20s %-5s %-18s\n", + "VRF", "VNI", "VxLAN IF", "L3-SVI", + "State", "Rmac"); + else + json_vrfs = json_object_new_array(); + } else { + if (uj) + vty_json(vty, json); + else + vty_out(vty, "%% VRF does not exist\n"); + + return CMD_WARNING; + } } - if (!uj) - vty_out(vty, "%-37s %-10s %-20s %-20s %-5s %-18s\n", "VRF", - "VNI", "VxLAN IF", "L3-SVI", "State", "Rmac"); + if (use_vrf) { + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { + zvrf = vrf->info; + if (!zvrf) + continue; - RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { - zvrf = vrf->info; - if (!zvrf) - continue; + zebra_vxlan_print_vrf_vni(vty, zvrf, json_vrfs); + } + } else if (vrf_name) { + zvrf = zebra_vrf_lookup_by_name(vrf_name); + if (!zvrf) { + if (uj) + vty_json(vty, json); + else + vty_out(vty, + "%% VRF '%s' specified does not exist\n", + vrf_name); + + return CMD_WARNING; + } + + if (!uj) + vty_out(vty, "%-37s %-10s %-20s %-20s %-5s %-18s\n", + "VRF", "VNI", "VxLAN IF", "L3-SVI", "State", + "Rmac"); + else + json_vrfs = json_object_new_array(); zebra_vxlan_print_vrf_vni(vty, zvrf, json_vrfs); }