diff options
author | baozhen-H3C <bao.zhen@h3c.com> | 2024-10-22 09:59:39 +0200 |
---|---|---|
committer | b29332 <bao.zhen@h3c.com> | 2024-10-23 07:27:45 +0200 |
commit | 66ef3576af1fb043d625fe6ed62369d9c95e86ae (patch) | |
tree | d9c145942c6e76c123ff2fe20ea0f2a70b3a4b6a /isisd | |
parent | Merge pull request #17168 from enkechen-panw/aigp-fix3 (diff) | |
download | frr-66ef3576af1fb043d625fe6ed62369d9c95e86ae.tar.xz frr-66ef3576af1fb043d625fe6ed62369d9c95e86ae.zip |
isisd: The command "'show isis vrf all summary json" has no output.
When input 'show isis vrf all summary', output is as follow:
sonic# show isis vrf all summary
vrf : default
Process Id : 55
System Id : 0000.0000.0006
Symbolic name : RouterA
Up time : 4d01h52m ago
Number of areas : 1
Area 10:
Net: 10.0000.0000.0006.00
IS_name: RouterA
TX counters per PDU type:
L1 IIH: 365003
L1 LSP: 20468
L1 PSNP: 8
LSP RXMT: 0
RX counters per PDU type:
L1 IIH: 361577
L2 IIH: 434
L1 LSP: 10492
L1 CSNP: 114260
Level-1:
LSP0 regenerated: 4840
LSPs purged: 0
SPF:
minimum interval : 1
IPv4 route computation:
last run elapsed : 00:01:02 ago
last run duration : 327 usec
run count : 12053
However, json display is null.
After the commit:
sonic# show isis vrf all summary json
{
"vrfs":[
{
"vrf":"default",
"process-id":56,
"system-id":"0000.0000.0007",
"up-time":"20:40:33",
"number-areas":1,
"areas":[
{
"area":"10",
"net":"10.0000.0000.0007.00",
"tx-pdu-type":{
"l1-iih":52234,
"l1-lsp":1053,
"l1-csnp":8269,
"l1-psnp":1,
"lsp-rxmt":0
},
"rx-pdu-type":{
"l1-iih":52245,
"l2-iih":26116,
"l1-lsp":1388,
"l1-csnp":8269
},
"levels":[
{
"id":1,
"lsp0-regenerated":89,
"lsp-purged":0,
"spf":"no pending",
"minimum-interval":1,
"last-run-elapsed":"00:00:05",
"last-run-duration-usec":192,
"last-run-count":1454
}
]
}
]
}
]
}
Signed-off-by: baozhen-H3C <bao.zhen@h3c.com>
Diffstat (limited to 'isisd')
-rw-r--r-- | isisd/isisd.c | 63 |
1 files changed, 35 insertions, 28 deletions
diff --git a/isisd/isisd.c b/isisd/isisd.c index 2863fd913..fed6d3c6d 100644 --- a/isisd/isisd.c +++ b/isisd/isisd.c @@ -2366,35 +2366,34 @@ static void common_isis_summary_json(struct json_object *json, struct isis *isis) { int level; - json_object *areas_json, *area_json, *tx_pdu_json, *rx_pdu_json, - *levels_json, *level_json; + json_object *vrf_json, *areas_json, *area_json, *tx_pdu_json, *rx_pdu_json, *levels_json, + *level_json; struct listnode *node, *node2; struct isis_area *area; time_t cur; char uptime[MONOTIME_STRLEN]; char stier[5]; - json_object_string_add(json, "vrf", isis->name); - json_object_int_add(json, "process-id", isis->process_id); + vrf_json = json_object_new_object(); + json_object_string_add(vrf_json, "vrf", isis->name); + json_object_int_add(vrf_json, "process-id", isis->process_id); if (isis->sysid_set) - json_object_string_addf(json, "system-id", "%pSY", isis->sysid); + json_object_string_addf(vrf_json, "system-id", "%pSY", isis->sysid); cur = time(NULL); cur -= isis->uptime; frrtime_to_interval(cur, uptime, sizeof(uptime)); - json_object_string_add(json, "up-time", uptime); + json_object_string_add(vrf_json, "up-time", uptime); if (isis->area_list) - json_object_int_add(json, "number-areas", - isis->area_list->count); + json_object_int_add(vrf_json, "number-areas", isis->area_list->count); areas_json = json_object_new_array(); - json_object_object_add(json, "areas", areas_json); + json_object_object_add(vrf_json, "areas", areas_json); for (ALL_LIST_ELEMENTS_RO(isis->area_list, node, area)) { area_json = json_object_new_object(); json_object_string_add(area_json, "area", area->area_tag ? area->area_tag : "null"); - if (fabricd) { uint8_t tier = fabricd_tier(area); snprintfrr(stier, sizeof(stier), "%s", &tier); @@ -2471,6 +2470,7 @@ static void common_isis_summary_json(struct json_object *json, } json_object_array_add(areas_json, area_json); } + json_object_array_add(json, vrf_json); } static void common_isis_summary_vty(struct vty *vty, struct isis *isis) @@ -2573,13 +2573,27 @@ static void common_isis_summary_vty(struct vty *vty, struct isis *isis) } } -static void common_isis_summary(struct vty *vty, struct json_object *json, - struct isis *isis) +static void common_isis_summary(struct vty *vty, struct json_object *json, const char *vrf_name, + bool all_vrf) { - if (json) { - common_isis_summary_json(json, isis); + struct listnode *node; + struct isis *isis; + + if (all_vrf) { + for (ALL_LIST_ELEMENTS_RO(im->isis, node, isis)) { + if (json) + common_isis_summary_json(json, isis); + else + common_isis_summary_vty(vty, isis); + } } else { - common_isis_summary_vty(vty, isis); + isis = isis_lookup_by_vrfname(vrf_name); + if (isis != NULL) { + if (json) + common_isis_summary_json(json, isis); + else + common_isis_summary_vty(vty, isis); + } } } @@ -2590,31 +2604,24 @@ DEFUN(show_isis_summary, show_isis_summary_cmd, "json output\n" "summary\n") { - struct listnode *node; int idx_vrf = 0; - struct isis *isis; const char *vrf_name = VRF_DEFAULT_NAME; bool all_vrf = false; bool uj = use_json(argc, argv); - json_object *json = NULL; + json_object *json = NULL, *vrfs_json = NULL; ISIS_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf) if (!im) { vty_out(vty, PROTO_NAME " is not running\n"); return CMD_SUCCESS; } - if (uj) + if (uj) { json = json_object_new_object(); - - if (all_vrf) { - for (ALL_LIST_ELEMENTS_RO(im->isis, node, isis)) - common_isis_summary(vty, json, isis); - - return CMD_SUCCESS; + vrfs_json = json_object_new_array(); + json_object_object_add(json, "vrfs", vrfs_json); } - isis = isis_lookup_by_vrfname(vrf_name); - if (isis != NULL) - common_isis_summary(vty, json, isis); + + common_isis_summary(vty, vrfs_json, vrf_name, all_vrf); if (uj) vty_json(vty, json); |