mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 01:40:16 +00:00
Merge pull request #9899 from Drumato/zebra-srv6-locator-detail-json-support
zebra: Add support for json output in srv6 locator detail command
This commit is contained in:
commit
e69ae079b7
88
lib/srv6.c
88
lib/srv6.c
@ -171,6 +171,47 @@ json_object *srv6_locator_chunk_json(const struct srv6_locator_chunk *chunk)
|
|||||||
return jo_root;
|
return jo_root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
json_object *
|
||||||
|
srv6_locator_chunk_detailed_json(const struct srv6_locator_chunk *chunk)
|
||||||
|
{
|
||||||
|
json_object *jo_root = NULL;
|
||||||
|
|
||||||
|
jo_root = json_object_new_object();
|
||||||
|
|
||||||
|
/* set prefix */
|
||||||
|
json_object_string_addf(jo_root, "prefix", "%pFX", &chunk->prefix);
|
||||||
|
|
||||||
|
/* set block_bits_length */
|
||||||
|
json_object_int_add(jo_root, "blockBitsLength",
|
||||||
|
chunk->block_bits_length);
|
||||||
|
|
||||||
|
/* set node_bits_length */
|
||||||
|
json_object_int_add(jo_root, "nodeBitsLength", chunk->node_bits_length);
|
||||||
|
|
||||||
|
/* set function_bits_length */
|
||||||
|
json_object_int_add(jo_root, "functionBitsLength",
|
||||||
|
chunk->function_bits_length);
|
||||||
|
|
||||||
|
/* set argument_bits_length */
|
||||||
|
json_object_int_add(jo_root, "argumentBitsLength",
|
||||||
|
chunk->argument_bits_length);
|
||||||
|
|
||||||
|
/* set keep */
|
||||||
|
json_object_int_add(jo_root, "keep", chunk->keep);
|
||||||
|
|
||||||
|
/* set proto */
|
||||||
|
json_object_string_add(jo_root, "proto",
|
||||||
|
zebra_route_string(chunk->proto));
|
||||||
|
|
||||||
|
/* set instance */
|
||||||
|
json_object_int_add(jo_root, "instance", chunk->instance);
|
||||||
|
|
||||||
|
/* set session_id */
|
||||||
|
json_object_int_add(jo_root, "sessionId", chunk->session_id);
|
||||||
|
|
||||||
|
return jo_root;
|
||||||
|
}
|
||||||
|
|
||||||
json_object *srv6_locator_json(const struct srv6_locator *loc)
|
json_object *srv6_locator_json(const struct srv6_locator *loc)
|
||||||
{
|
{
|
||||||
struct listnode *node;
|
struct listnode *node;
|
||||||
@ -205,3 +246,50 @@ json_object *srv6_locator_json(const struct srv6_locator *loc)
|
|||||||
|
|
||||||
return jo_root;
|
return jo_root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
json_object *srv6_locator_detailed_json(const struct srv6_locator *loc)
|
||||||
|
{
|
||||||
|
struct listnode *node;
|
||||||
|
struct srv6_locator_chunk *chunk;
|
||||||
|
json_object *jo_root = NULL;
|
||||||
|
json_object *jo_chunk = NULL;
|
||||||
|
json_object *jo_chunks = NULL;
|
||||||
|
|
||||||
|
jo_root = json_object_new_object();
|
||||||
|
|
||||||
|
/* set name */
|
||||||
|
json_object_string_add(jo_root, "name", loc->name);
|
||||||
|
|
||||||
|
/* set prefix */
|
||||||
|
json_object_string_addf(jo_root, "prefix", "%pFX", &loc->prefix);
|
||||||
|
|
||||||
|
/* set block_bits_length */
|
||||||
|
json_object_int_add(jo_root, "blockBitsLength", loc->block_bits_length);
|
||||||
|
|
||||||
|
/* set node_bits_length */
|
||||||
|
json_object_int_add(jo_root, "nodeBitsLength", loc->node_bits_length);
|
||||||
|
|
||||||
|
/* set function_bits_length */
|
||||||
|
json_object_int_add(jo_root, "functionBitsLength",
|
||||||
|
loc->function_bits_length);
|
||||||
|
|
||||||
|
/* set argument_bits_length */
|
||||||
|
json_object_int_add(jo_root, "argumentBitsLength",
|
||||||
|
loc->argument_bits_length);
|
||||||
|
|
||||||
|
/* set algonum */
|
||||||
|
json_object_int_add(jo_root, "algoNum", loc->algonum);
|
||||||
|
|
||||||
|
/* set status_up */
|
||||||
|
json_object_boolean_add(jo_root, "statusUp", loc->status_up);
|
||||||
|
|
||||||
|
/* set chunks */
|
||||||
|
jo_chunks = json_object_new_array();
|
||||||
|
json_object_object_add(jo_root, "chunks", jo_chunks);
|
||||||
|
for (ALL_LIST_ELEMENTS_RO((struct list *)loc->chunks, node, chunk)) {
|
||||||
|
jo_chunk = srv6_locator_chunk_detailed_json(chunk);
|
||||||
|
json_object_array_add(jo_chunks, jo_chunk);
|
||||||
|
}
|
||||||
|
|
||||||
|
return jo_root;
|
||||||
|
}
|
||||||
|
@ -189,6 +189,9 @@ extern void srv6_locator_free(struct srv6_locator *locator);
|
|||||||
extern void srv6_locator_chunk_free(struct srv6_locator_chunk *chunk);
|
extern void srv6_locator_chunk_free(struct srv6_locator_chunk *chunk);
|
||||||
json_object *srv6_locator_chunk_json(const struct srv6_locator_chunk *chunk);
|
json_object *srv6_locator_chunk_json(const struct srv6_locator_chunk *chunk);
|
||||||
json_object *srv6_locator_json(const struct srv6_locator *loc);
|
json_object *srv6_locator_json(const struct srv6_locator *loc);
|
||||||
|
json_object *srv6_locator_detailed_json(const struct srv6_locator *loc);
|
||||||
|
json_object *
|
||||||
|
srv6_locator_chunk_detailed_json(const struct srv6_locator_chunk *chunk);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -145,10 +145,16 @@ DEFUN (show_srv6_locator_detail,
|
|||||||
struct listnode *node;
|
struct listnode *node;
|
||||||
char str[256];
|
char str[256];
|
||||||
const char *locator_name = argv[4]->arg;
|
const char *locator_name = argv[4]->arg;
|
||||||
|
json_object *json_locator = NULL;
|
||||||
|
|
||||||
if (uj) {
|
if (uj) {
|
||||||
vty_out(vty, "JSON format isn't supported\n");
|
locator = zebra_srv6_locator_lookup(locator_name);
|
||||||
return CMD_WARNING;
|
if (!locator)
|
||||||
|
return CMD_WARNING;
|
||||||
|
|
||||||
|
json_locator = srv6_locator_detailed_json(locator);
|
||||||
|
vty_json(vty, json_locator);
|
||||||
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ALL_LIST_ELEMENTS_RO(srv6->locators, node, locator)) {
|
for (ALL_LIST_ELEMENTS_RO(srv6->locators, node, locator)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user