Skip to content

Commit

Permalink
isisd: make algorithm id optional in show isis commands
Browse files Browse the repository at this point in the history
The following two isis commands have now the algorithm id
optional:

> # show isis segment-routing node algorithm
> # show isis topology algorithm

Signed-off-by: Philippe Guibert <[email protected]>
Signed-off-by: Louis Scalbert <[email protected]>
  • Loading branch information
pguibert6WIND authored and louis-6wind committed Feb 19, 2024
1 parent 4d63d8c commit f93b08f
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 15 deletions.
44 changes: 35 additions & 9 deletions isisd/isis_spf.c
Original file line number Diff line number Diff line change
Expand Up @@ -2424,7 +2424,7 @@ DEFUN(show_isis_topology, show_isis_topology_cmd,
" [vrf <NAME|all>] topology"
#ifndef FABRICD
" [<level-1|level-2>]"
" [algorithm (128-255)]"
" [algorithm [(128-255)]]"
#endif /* ifndef FABRICD */
,
SHOW_STR PROTO_HELP VRF_CMD_HELP_STR
Expand All @@ -2443,8 +2443,10 @@ DEFUN(show_isis_topology, show_isis_topology_cmd,
struct isis *isis = NULL;
const char *vrf_name = VRF_DEFAULT_NAME;
bool all_vrf = false;
bool all_algorithm = false;
int idx_vrf = 0;
uint8_t algorithm = SR_ALGORITHM_SPF;
uint16_t algorithm = SR_ALGORITHM_SPF;

#ifndef FABRICD
int idx = 0;

Expand All @@ -2453,8 +2455,12 @@ DEFUN(show_isis_topology, show_isis_topology_cmd,
levels = ISIS_LEVEL1;
if (argv_find(argv, argc, "level-2", &idx))
levels = ISIS_LEVEL2;
if (argv_find(argv, argc, "algorithm", &idx))
algorithm = (uint8_t)strtoul(argv[idx + 1]->arg, NULL, 10);
if (argv_find(argv, argc, "algorithm", &idx)) {
if (argv_find(argv, argc, "(128-255)", &idx))
algorithm = (uint16_t)strtoul(argv[idx]->arg, NULL, 10);
else
all_algorithm = true;
}
#endif /* ifndef FABRICD */

if (!im) {
Expand All @@ -2465,14 +2471,34 @@ DEFUN(show_isis_topology, show_isis_topology_cmd,

if (vrf_name) {
if (all_vrf) {
for (ALL_LIST_ELEMENTS_RO(im->isis, node, isis))
show_isis_topology_common(vty, levels, isis,
algorithm);
for (ALL_LIST_ELEMENTS_RO(im->isis, node, isis)) {
if (all_algorithm) {
for (algorithm = SR_ALGORITHM_FLEX_MIN;
algorithm <= SR_ALGORITHM_FLEX_MAX;
algorithm++)
show_isis_topology_common(
vty, levels, isis,
(uint8_t)algorithm);
} else {
show_isis_topology_common(
vty, levels, isis,
(uint8_t)algorithm);
}
}
return CMD_SUCCESS;
}
isis = isis_lookup_by_vrfname(vrf_name);
if (isis != NULL)
show_isis_topology_common(vty, levels, isis, algorithm);
if (isis == NULL)
return CMD_SUCCESS;
if (all_algorithm) {
for (algorithm = SR_ALGORITHM_FLEX_MIN;
algorithm <= SR_ALGORITHM_FLEX_MAX; algorithm++) {
show_isis_topology_common(vty, levels, isis,
(uint8_t)algorithm);
}
} else
show_isis_topology_common(vty, levels, isis,
(uint8_t)algorithm);
}

return CMD_SUCCESS;
Expand Down
26 changes: 20 additions & 6 deletions isisd/isis_sr.c
Original file line number Diff line number Diff line change
Expand Up @@ -1074,7 +1074,7 @@ DEFUN(show_sr_node, show_sr_node_cmd,
"show " PROTO_NAME
" segment-routing node"
#ifndef FABRICD
" [algorithm (128-255)]"
" [algorithm [(128-255)]]"
#endif /* ifndef FABRICD */
,
SHOW_STR PROTO_HELP
Expand All @@ -1088,13 +1088,18 @@ DEFUN(show_sr_node, show_sr_node_cmd,
{
struct listnode *node, *inode;
struct isis_area *area;
uint8_t algorithm = SR_ALGORITHM_SPF;
uint16_t algorithm = SR_ALGORITHM_SPF;
bool all_algorithm = false;
struct isis *isis;
#ifndef FABRICD
int idx = 0;

if (argv_find(argv, argc, "algorithm", &idx))
algorithm = (uint8_t)strtoul(argv[idx + 1]->arg, NULL, 10);
if (argv_find(argv, argc, "algorithm", &idx)) {
if (argv_find(argv, argc, "(128-255)", &idx))
algorithm = (uint16_t)strtoul(argv[idx]->arg, NULL, 10);
else
all_algorithm = true;
}
#endif /* ifndef FABRICD */

for (ALL_LIST_ELEMENTS_RO(im->isis, inode, isis)) {
Expand All @@ -1106,8 +1111,17 @@ DEFUN(show_sr_node, show_sr_node_cmd,
continue;
}
for (int level = ISIS_LEVEL1; level <= ISIS_LEVELS;
level++)
show_node(vty, area, level, algorithm);
level++) {
if (all_algorithm) {
for (algorithm = SR_ALGORITHM_FLEX_MIN;
algorithm <= SR_ALGORITHM_FLEX_MAX;
algorithm++)
show_node(vty, area, level,
(uint8_t)algorithm);
} else
show_node(vty, area, level,
(uint8_t)algorithm);
}
}
}

Expand Down

0 comments on commit f93b08f

Please sign in to comment.