summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sharpd/sharp_vty.c47
-rwxr-xr-xtests/topotests/srv6_locator/test_srv6_locator.py2
2 files changed, 33 insertions, 16 deletions
diff --git a/sharpd/sharp_vty.c b/sharpd/sharp_vty.c
index 72bc7d16b9..a6fcb8d58c 100644
--- a/sharpd/sharp_vty.c
+++ b/sharpd/sharp_vty.c
@@ -988,37 +988,54 @@ DEFPY (sharp_srv6_manager_release_locator_chunk,
DEFPY (show_sharp_segment_routing_srv6,
show_sharp_segment_routing_srv6_cmd,
- "show sharp segment-routing srv6",
+ "show sharp segment-routing srv6 [json]",
SHOW_STR
SHARP_STR
"Segment-Routing\n"
- "Segment-Routing IPv6\n")
+ "Segment-Routing IPv6\n"
+ JSON_STR)
{
char str[256];
struct listnode *loc_node;
struct listnode *chunk_node;
struct sharp_srv6_locator *loc;
struct prefix_ipv6 *chunk;
+ bool uj = use_json(argc, argv);
json_object *jo_locs = NULL;
json_object *jo_loc = NULL;
json_object *jo_chunks = NULL;
- jo_locs = json_object_new_array();
- for (ALL_LIST_ELEMENTS_RO(sg.srv6_locators, loc_node, loc)) {
- jo_loc = json_object_new_object();
- json_object_array_add(jo_locs, jo_loc);
- json_object_string_add(jo_loc, "name", loc->name);
- jo_chunks = json_object_new_array();
- json_object_object_add(jo_loc, "chunks", jo_chunks);
- for (ALL_LIST_ELEMENTS_RO(loc->chunks, chunk_node, chunk)) {
- prefix2str(chunk, str, sizeof(str));
- json_array_string_add(jo_chunks, str);
+ if (uj) {
+ jo_locs = json_object_new_array();
+ for (ALL_LIST_ELEMENTS_RO(sg.srv6_locators, loc_node, loc)) {
+ jo_loc = json_object_new_object();
+ json_object_array_add(jo_locs, jo_loc);
+ json_object_string_add(jo_loc, "name", loc->name);
+ jo_chunks = json_object_new_array();
+ json_object_object_add(jo_loc, "chunks", jo_chunks);
+ for (ALL_LIST_ELEMENTS_RO(loc->chunks, chunk_node,
+ chunk)) {
+ prefix2str(chunk, str, sizeof(str));
+ json_array_string_add(jo_chunks, str);
+ }
+ }
+
+ vty_out(vty, "%s\n", json_object_to_json_string_ext(
+ jo_locs, JSON_C_TO_STRING_PRETTY));
+ json_object_free(jo_locs);
+ } else {
+ for (ALL_LIST_ELEMENTS_RO(sg.srv6_locators, loc_node, loc)) {
+ vty_out(vty, "Locator %s has %d prefix chunks\n",
+ loc->name, listcount(loc->chunks));
+ for (ALL_LIST_ELEMENTS_RO(loc->chunks, chunk_node,
+ chunk)) {
+ prefix2str(chunk, str, sizeof(str));
+ vty_out(vty, " %s\n", str);
+ }
+ vty_out(vty, "\n");
}
}
- vty_out(vty, "%s\n", json_object_to_json_string_ext(
- jo_locs, JSON_C_TO_STRING_PRETTY));
- json_object_free(jo_locs);
return CMD_SUCCESS;
}
diff --git a/tests/topotests/srv6_locator/test_srv6_locator.py b/tests/topotests/srv6_locator/test_srv6_locator.py
index 91850b5045..a7416ce085 100755
--- a/tests/topotests/srv6_locator/test_srv6_locator.py
+++ b/tests/topotests/srv6_locator/test_srv6_locator.py
@@ -89,7 +89,7 @@ def test_srv6():
def _check_sharpd_chunk(router, expected_chunk_file):
logger.info("checking sharpd locator chunk status")
- output = json.loads(router.vtysh_cmd("show sharp segment-routing srv6"))
+ output = json.loads(router.vtysh_cmd("show sharp segment-routing srv6 json"))
expected = open_json_file("{}/{}".format(CWD, expected_chunk_file))
return topotest.json_cmp(output, expected)