mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-06 16:20:08 +00:00
isisd: fix multiple values display in show isis database detail json
Multiple occurrences of the same (sub-)TLVs are mixed into a single JSON
object. Last values replaces the previous.
Display all the occurrences in an array for the following (sub-)TLVs:
- is-reach
- ip-reach
- ext-reach
- ext-ip-reach
- ipv6-reach
- MT
- prefix-SID
Fixes: a2cac12a63
("isisd: Add json to show isis database command.")
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
This commit is contained in:
parent
980d76c403
commit
9a83c6cf72
@ -2127,9 +2127,14 @@ static void format_item_prefix_sid(uint16_t mtid, struct isis_item *i,
|
||||
struct isis_prefix_sid *sid = (struct isis_prefix_sid *)i;
|
||||
|
||||
if (json) {
|
||||
struct json_object *sr_json;
|
||||
struct json_object *sr_json, *array_json;
|
||||
sr_json = json_object_new_object();
|
||||
json_object_object_add(json, "sr", sr_json);
|
||||
json_object_object_get_ex(json, "sr", &array_json);
|
||||
if (!array_json) {
|
||||
array_json = json_object_new_array();
|
||||
json_object_object_add(json, "sr", array_json);
|
||||
}
|
||||
json_object_array_add(array_json, sr_json);
|
||||
if (sid->flags & ISIS_PREFIX_SID_VALUE) {
|
||||
json_object_int_add(sr_json, "label", sid->value);
|
||||
} else {
|
||||
@ -2929,9 +2934,15 @@ static void format_item_oldstyle_reach(uint16_t mtid, struct isis_item *i,
|
||||
|
||||
snprintfrr(sys_id, ISO_SYSID_STRLEN, "%pPN", r->id);
|
||||
if (json) {
|
||||
struct json_object *old_json;
|
||||
struct json_object *old_json, *array_json;
|
||||
old_json = json_object_new_object();
|
||||
json_object_object_add(json, "old-reach-style", old_json);
|
||||
json_object_object_get_ex(json, "old-reach-style", &array_json);
|
||||
if (!array_json) {
|
||||
array_json = json_object_new_array();
|
||||
json_object_object_add(json, "old-reach-style",
|
||||
array_json);
|
||||
}
|
||||
json_object_array_add(array_json, old_json);
|
||||
json_object_string_add(old_json, "is-reach", sys_id);
|
||||
json_object_int_add(old_json, "metric", r->metric);
|
||||
} else
|
||||
@ -3173,9 +3184,14 @@ static void format_item_extended_reach(uint16_t mtid, struct isis_item *i,
|
||||
|
||||
snprintfrr(sys_id, ISO_SYSID_STRLEN, "%pPN", r->id);
|
||||
if (json) {
|
||||
struct json_object *reach_json;
|
||||
struct json_object *reach_json, *array_json;
|
||||
reach_json = json_object_new_object();
|
||||
json_object_object_add(json, "ext-reach", reach_json);
|
||||
json_object_object_get_ex(json, "ext-reach", &array_json);
|
||||
if (!array_json) {
|
||||
array_json = json_object_new_array();
|
||||
json_object_object_add(json, "ext-reach", array_json);
|
||||
}
|
||||
json_object_array_add(array_json, reach_json);
|
||||
json_object_string_add(
|
||||
reach_json, "mt-id",
|
||||
(mtid == ISIS_MT_IPV4_UNICAST) ? "Extended" : "MT");
|
||||
@ -3314,13 +3330,21 @@ static void format_item_oldstyle_ip_reach(uint16_t mtid, struct isis_item *i,
|
||||
char prefixbuf[PREFIX2STR_BUFFER];
|
||||
|
||||
if (json) {
|
||||
struct json_object *old_json;
|
||||
struct json_object *old_json, *array_json;
|
||||
old_json = json_object_new_object();
|
||||
json_object_object_add(json, "old-ip-reach-style", old_json);
|
||||
json_object_object_get_ex(json, "old-ip-reach-style",
|
||||
&array_json);
|
||||
if (!array_json) {
|
||||
array_json = json_object_new_array();
|
||||
json_object_object_add(json, "old-ip-reach-style",
|
||||
old_json);
|
||||
}
|
||||
json_object_array_add(array_json, old_json);
|
||||
json_object_string_add(old_json, "prefix",
|
||||
prefix2str(&r->prefix, prefixbuf, sizeof(prefixbuf)));
|
||||
json_object_int_add(old_json, "metric", r->metric);
|
||||
} else
|
||||
return;
|
||||
}
|
||||
sbuf_push(buf, indent, "IP Reachability: %s (Metric: %hhu)\n",
|
||||
prefix2str(&r->prefix, prefixbuf, sizeof(prefixbuf)),
|
||||
r->metric);
|
||||
@ -3705,9 +3729,14 @@ static void format_item_mt_router_info(uint16_t mtid, struct isis_item *i,
|
||||
struct isis_mt_router_info *info = (struct isis_mt_router_info *)i;
|
||||
|
||||
if (json) {
|
||||
struct json_object *mt_json;
|
||||
struct json_object *mt_json, *array_json;
|
||||
mt_json = json_object_new_object();
|
||||
json_object_object_add(json, "mt", mt_json);
|
||||
json_object_object_get_ex(json, "mt", &array_json);
|
||||
if (!array_json) {
|
||||
array_json = json_object_new_array();
|
||||
json_object_object_add(json, "mt", array_json);
|
||||
}
|
||||
json_object_array_add(array_json, mt_json);
|
||||
json_object_int_add(mt_json, "mtid", info->mtid);
|
||||
json_object_string_add(mt_json, "overload", info->overload?"true":"false");
|
||||
json_object_string_add(mt_json, "attached", info->attached?"true":"false");
|
||||
@ -3866,12 +3895,17 @@ static void format_item_extended_ip_reach(uint16_t mtid, struct isis_item *i,
|
||||
struct json_object *json, int indent)
|
||||
{
|
||||
struct isis_extended_ip_reach *r = (struct isis_extended_ip_reach *)i;
|
||||
struct json_object *ext_json, *array_json;
|
||||
char prefixbuf[PREFIX2STR_BUFFER];
|
||||
|
||||
if (json) {
|
||||
struct json_object *ext_json;
|
||||
ext_json = json_object_new_object();
|
||||
json_object_object_add(json, "ext-ip-reach", ext_json);
|
||||
json_object_object_get_ex(json, "ext-ip-reach", &array_json);
|
||||
if (!array_json) {
|
||||
array_json = json_object_new_array();
|
||||
json_object_object_add(json, "ext-ip-reach", array_json);
|
||||
}
|
||||
json_object_array_add(array_json, ext_json);
|
||||
json_object_string_add(
|
||||
json, "mt-id",
|
||||
(mtid == ISIS_MT_IPV4_UNICAST) ? "Extended" : "MT");
|
||||
@ -4500,9 +4534,14 @@ static void format_item_ipv6_reach(uint16_t mtid, struct isis_item *i,
|
||||
char prefixbuf[PREFIX2STR_BUFFER];
|
||||
|
||||
if (json) {
|
||||
struct json_object *reach_json;
|
||||
struct json_object *reach_json, *array_json;
|
||||
reach_json = json_object_new_object();
|
||||
json_object_object_add(json, "ipv6-reach", reach_json);
|
||||
json_object_object_get_ex(json, "ipv6-reach", &array_json);
|
||||
if (!array_json) {
|
||||
array_json = json_object_new_array();
|
||||
json_object_object_add(json, "ipv6-reach", array_json);
|
||||
}
|
||||
json_object_array_add(array_json, reach_json);
|
||||
json_object_string_add(reach_json, "mt-id",
|
||||
(mtid == ISIS_MT_IPV4_UNICAST) ? ""
|
||||
: "mt");
|
||||
|
Loading…
Reference in New Issue
Block a user