mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-03 02:17:12 +00:00
zebra: json support for show ip nht route-map
Changes: JSON support added for below commands, - show ip nht route-map vrf all json - show ip nht route-map vrf <name> json - show ipv6 nht route-map vrf all json - show ipv6 nht route-map vrf <name> json - show ipv6 nht route-map json - show ip nht route-map json Testing Done: Unit testing completed. tor-1# show ip nht route-map vrf default json { "afi":"ipv4", "vrfs":{ "default":{ "protocols":{ "system":"none", "kernel":"none", "connected":"connected-policy", "static":"none", "rip":"none", "ripng":"none", "ospf":"none", "ospf6":"none", "isis":"none", "bgp":"bgp-policy", "pim":"none", "eigrp":"none", "nhrp":"none", "hsls":"none", "olsr":"none", "table":"none", "ldp":"none", "vnc":"none", "vnc-direct":"none", "vnc-rn":"none", "bgp-direct":"none", "bgp-direct-to-nve-groups":"none", "babel":"none", "sharp":"none", "pbr":"none", "bfd":"none", "openfabric":"none", "vrrp":"none", "zebra":"none", "frr":"none", "wildcard":"none", "any":"none" } } } } tor-1# show ip nht route-map vrf all json { "afi":"ipv4", "vrfs":{ "default":{ "protocols":{ "system":"none", "kernel":"none", "connected":"connected-policy", "static":"none", "rip":"none", "ripng":"none", "ospf":"none", "ospf6":"none", "isis":"none", "bgp":"bgp-policy", "pim":"none", "eigrp":"none", "nhrp":"none", "hsls":"none", "olsr":"none", "table":"none", "ldp":"none", "vnc":"none", "vnc-direct":"none", "vnc-rn":"none", "bgp-direct":"none", "bgp-direct-to-nve-groups":"none", "babel":"none", "sharp":"none", "pbr":"none", "bfd":"none", "openfabric":"none", "vrrp":"none", "zebra":"none", "frr":"none", "wildcard":"none", "any":"none" } }, "mgmt":{ "protocols":{ "system":"none", "kernel":"none", "connected":"none", "static":"none", "rip":"none", "ripng":"none", "ospf":"none", "ospf6":"none", "isis":"none", "bgp":"none", "pim":"none", "eigrp":"none", "nhrp":"none", "hsls":"none", "olsr":"none", "table":"none", "ldp":"none", "vnc":"none", "vnc-direct":"none", "vnc-rn":"none", "bgp-direct":"none", "bgp-direct-to-nve-groups":"none", "babel":"none", "sharp":"none", "pbr":"none", "bfd":"none", "openfabric":"none", "vrrp":"none", "zebra":"none", "frr":"none", "wildcard":"none", "any":"none" } }, "sym_1":{ "protocols":{ "system":"none", "kernel":"none", "connected":"none", "static":"none", "rip":"none", "ripng":"none", "ospf":"none", "ospf6":"none", "isis":"none", "bgp":"bgp-policy", "pim":"none", "eigrp":"none", "nhrp":"none", "hsls":"none", "olsr":"none", "table":"none", "ldp":"none", "vnc":"none", "vnc-direct":"none", "vnc-rn":"none", "bgp-direct":"none", "bgp-direct-to-nve-groups":"none", "babel":"none", "sharp":"none", "pbr":"none", "bfd":"none", "openfabric":"none", "vrrp":"none", "zebra":"none", "frr":"none", "wildcard":"none", "any":"none" } } } } tor-1# show ipv6 nht route-map vrf default json { "afi":"ipv6", "vrfs":{ "default":{ "protocols":{ "system":"none", "kernel":"kernel-policy", "connected":"connected-policy", "static":"none", "rip":"none", "ripng":"none", "ospf":"none", "ospf6":"none", "isis":"none", "bgp":"none", "pim":"none", "eigrp":"none", "nhrp":"none", "hsls":"none", "olsr":"none", "table":"none", "ldp":"none", "vnc":"none", "vnc-direct":"none", "vnc-rn":"none", "bgp-direct":"none", "bgp-direct-to-nve-groups":"none", "babel":"none", "sharp":"none", "pbr":"none", "bfd":"none", "openfabric":"none", "vrrp":"none", "zebra":"none", "frr":"none", "wildcard":"none", "any":"none" } } } } Ticket:#3229016 Issue:3229016 Signed-off-by: Sindhu Parvathi Gopinathan <sgopinathan@nvidia.com>
This commit is contained in:
parent
7b78f6c87f
commit
63e7deba05
@ -143,26 +143,48 @@ static void show_vrf_proto_rm(struct vty *vty, struct zebra_vrf *zvrf,
|
||||
}
|
||||
|
||||
static void show_vrf_nht_rm(struct vty *vty, struct zebra_vrf *zvrf,
|
||||
int af_type)
|
||||
int af_type, json_object *json)
|
||||
{
|
||||
int i;
|
||||
|
||||
vty_out(vty, "Protocol : route-map\n");
|
||||
vty_out(vty, "-------------------------------------\n");
|
||||
|
||||
for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
|
||||
if (NHT_RM_NAME(zvrf, af_type, i))
|
||||
vty_out(vty, "%-24s : %-10s\n", zebra_route_string(i),
|
||||
NHT_RM_NAME(zvrf, af_type, i));
|
||||
else
|
||||
vty_out(vty, "%-24s : none\n", zebra_route_string(i));
|
||||
if (!json) {
|
||||
vty_out(vty, "Protocol : route-map\n");
|
||||
vty_out(vty, "-------------------------------------\n");
|
||||
}
|
||||
|
||||
if (NHT_RM_NAME(zvrf, af_type, i))
|
||||
vty_out(vty, "%-24s : %-10s\n", "any",
|
||||
NHT_RM_NAME(zvrf, af_type, i));
|
||||
else
|
||||
vty_out(vty, "%-24s : none\n", "any");
|
||||
for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
|
||||
if (json) {
|
||||
if (NHT_RM_NAME(zvrf, af_type, i))
|
||||
json_object_string_add(
|
||||
json, zebra_route_string(i),
|
||||
NHT_RM_NAME(zvrf, af_type, i));
|
||||
else
|
||||
json_object_string_add(
|
||||
json, zebra_route_string(i), "none");
|
||||
} else {
|
||||
if (NHT_RM_NAME(zvrf, af_type, i))
|
||||
vty_out(vty, "%-24s : %-10s\n",
|
||||
zebra_route_string(i),
|
||||
NHT_RM_NAME(zvrf, af_type, i));
|
||||
else
|
||||
vty_out(vty, "%-24s : none\n",
|
||||
zebra_route_string(i));
|
||||
}
|
||||
}
|
||||
|
||||
if (json) {
|
||||
if (NHT_RM_NAME(zvrf, af_type, i))
|
||||
json_object_string_add(json, "any",
|
||||
NHT_RM_NAME(zvrf, af_type, i));
|
||||
else
|
||||
json_object_string_add(json, "any", "none");
|
||||
} else {
|
||||
if (NHT_RM_NAME(zvrf, af_type, i))
|
||||
vty_out(vty, "%-24s : %-10s\n", "any",
|
||||
NHT_RM_NAME(zvrf, af_type, i));
|
||||
else
|
||||
vty_out(vty, "%-24s : none\n", "any");
|
||||
}
|
||||
}
|
||||
|
||||
static int show_proto_rm(struct vty *vty, int af_type, const char *vrf_all,
|
||||
@ -198,35 +220,78 @@ static int show_proto_rm(struct vty *vty, int af_type, const char *vrf_all,
|
||||
}
|
||||
|
||||
static int show_nht_rm(struct vty *vty, int af_type, const char *vrf_all,
|
||||
const char *vrf_name)
|
||||
const char *vrf_name, bool use_json)
|
||||
{
|
||||
struct zebra_vrf *zvrf;
|
||||
json_object *json = NULL;
|
||||
json_object *json_vrfs = NULL;
|
||||
|
||||
if (use_json) {
|
||||
json = json_object_new_object();
|
||||
json_vrfs = json_object_new_object();
|
||||
json_object_string_add(json, "afi",
|
||||
(af_type == AFI_IP) ? "ipv4" : "ipv6");
|
||||
}
|
||||
|
||||
if (vrf_all) {
|
||||
struct vrf *vrf;
|
||||
|
||||
if (use_json)
|
||||
json_object_object_add(json, "vrfs", json_vrfs);
|
||||
|
||||
RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {
|
||||
zvrf = (struct zebra_vrf *)vrf->info;
|
||||
if (zvrf == NULL)
|
||||
continue;
|
||||
|
||||
vty_out(vty, "VRF: %s\n", zvrf->vrf->name);
|
||||
show_vrf_nht_rm(vty, zvrf, af_type);
|
||||
if (use_json) {
|
||||
json_object *json_proto = NULL;
|
||||
json_object *json_vrf = NULL;
|
||||
json_vrf = json_object_new_object();
|
||||
json_object_object_add(
|
||||
json_vrfs, zvrf->vrf->name, json_vrf);
|
||||
json_proto = json_object_new_object();
|
||||
json_object_object_add(json_vrf, "protocols",
|
||||
json_proto);
|
||||
show_vrf_nht_rm(vty, zvrf, af_type, json_proto);
|
||||
} else {
|
||||
vty_out(vty, "VRF: %s\n", zvrf->vrf->name);
|
||||
show_vrf_nht_rm(vty, zvrf, af_type, NULL);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
json_object *json_proto = NULL;
|
||||
json_object *json_vrf = NULL;
|
||||
vrf_id_t vrf_id = VRF_DEFAULT;
|
||||
|
||||
if (vrf_name)
|
||||
VRF_GET_ID(vrf_id, vrf_name, false);
|
||||
|
||||
zvrf = zebra_vrf_lookup_by_id(vrf_id);
|
||||
if (!zvrf)
|
||||
if (!zvrf) {
|
||||
json_object_free(json);
|
||||
json_object_free(json_vrfs);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
vty_out(vty, "VRF: %s\n", zvrf->vrf->name);
|
||||
show_vrf_nht_rm(vty, zvrf, af_type);
|
||||
if (use_json) {
|
||||
json_object_object_add(json, "vrfs", json_vrfs);
|
||||
json_vrf = json_object_new_object();
|
||||
json_object_object_add(json_vrfs, zvrf->vrf->name,
|
||||
json_vrf);
|
||||
json_proto = json_object_new_object();
|
||||
json_object_object_add(json_vrf, "protocols",
|
||||
json_proto);
|
||||
show_vrf_nht_rm(vty, zvrf, af_type, json_proto);
|
||||
} else {
|
||||
vty_out(vty, "VRF: %s\n", zvrf->vrf->name);
|
||||
show_vrf_nht_rm(vty, zvrf, af_type, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
if (use_json)
|
||||
vty_json(vty, json);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
@ -854,14 +919,19 @@ DEFPY_YANG (no_ip_protocol_nht_rmap,
|
||||
|
||||
DEFPY_YANG (show_ip_protocol_nht,
|
||||
show_ip_protocol_nht_cmd,
|
||||
"show ip nht route-map [vrf <NAME$vrf_name|all$vrf_all>]",
|
||||
"show ip nht route-map [vrf <NAME$vrf_name|all$vrf_all>] [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
"IP nexthop tracking table\n"
|
||||
"IP Next Hop tracking filtering status\n"
|
||||
VRF_FULL_CMD_HELP_STR)
|
||||
"IPv4 nexthop tracking table\n"
|
||||
"IPv4 Next Hop tracking filtering status\n"
|
||||
VRF_CMD_HELP_STR
|
||||
"All VRFs\n"
|
||||
JSON_STR)
|
||||
{
|
||||
int ret = show_nht_rm(vty, AFI_IP, vrf_all, vrf_name);
|
||||
int ret;
|
||||
bool uj = use_json(argc, argv);
|
||||
|
||||
ret = show_nht_rm(vty, AFI_IP, vrf_all, vrf_name, uj);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -936,14 +1006,19 @@ DEFPY_YANG (no_ipv6_protocol_nht_rmap,
|
||||
|
||||
DEFPY_YANG (show_ipv6_protocol_nht,
|
||||
show_ipv6_protocol_nht_cmd,
|
||||
"show ipv6 nht route-map [vrf <NAME$vrf_name|all$vrf_all>]",
|
||||
"show ipv6 nht route-map [vrf <NAME$vrf_name|all$vrf_all>] [json]",
|
||||
SHOW_STR
|
||||
IP6_STR
|
||||
"Next Hop filtering status\n"
|
||||
"Route-map\n"
|
||||
VRF_FULL_CMD_HELP_STR)
|
||||
"IPv6 nexthop tracking table\n"
|
||||
"IPv6 Next Hop tracking filtering status\n"
|
||||
VRF_CMD_HELP_STR
|
||||
"All VRFs\n"
|
||||
JSON_STR)
|
||||
{
|
||||
int ret = show_nht_rm(vty, AFI_IP6, vrf_all, vrf_name);
|
||||
int ret;
|
||||
bool uj = use_json(argc, argv);
|
||||
|
||||
ret = show_nht_rm(vty, AFI_IP6, vrf_all, vrf_name, uj);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user