summaryrefslogtreecommitdiffstats
path: root/isisd/isis_sr.c
diff options
context:
space:
mode:
Diffstat (limited to 'isisd/isis_sr.c')
-rw-r--r--isisd/isis_sr.c37
1 files changed, 25 insertions, 12 deletions
diff --git a/isisd/isis_sr.c b/isisd/isis_sr.c
index 1d69dbb..f783038 100644
--- a/isisd/isis_sr.c
+++ b/isisd/isis_sr.c
@@ -462,8 +462,7 @@ void isis_area_delete_backup_adj_sids(struct isis_area *area, int level)
struct listnode *node, *nnode;
for (ALL_LIST_ELEMENTS(area->srdb.adj_sids, node, nnode, sra))
- if (sra->type == ISIS_SR_LAN_BACKUP
- && (sra->adj->level & level))
+ if (sra->type == ISIS_SR_ADJ_BACKUP && (sra->adj->level & level))
sr_adj_sid_del(sra);
}
@@ -689,7 +688,7 @@ void sr_adj_sid_add_single(struct isis_adjacency *adj, int family, bool backup,
circuit->ext = isis_alloc_ext_subtlvs();
sra = XCALLOC(MTYPE_ISIS_SR_INFO, sizeof(*sra));
- sra->type = backup ? ISIS_SR_LAN_BACKUP : ISIS_SR_ADJ_NORMAL;
+ sra->type = backup ? ISIS_SR_ADJ_BACKUP : ISIS_SR_ADJ_NORMAL;
sra->input_label = input_label;
sra->nexthop.family = family;
sra->nexthop.address = nexthop;
@@ -819,7 +818,7 @@ static void sr_adj_sid_del(struct sr_adjacency *sra)
exit(1);
}
- if (sra->type == ISIS_SR_LAN_BACKUP && sra->backup_nexthops) {
+ if (sra->type == ISIS_SR_ADJ_BACKUP && sra->backup_nexthops) {
sra->backup_nexthops->del =
(void (*)(void *))isis_nexthop_delete;
list_delete(&sra->backup_nexthops);
@@ -1021,8 +1020,6 @@ static void show_node(struct vty *vty, struct isis_area *area, int level,
struct ttable *tt;
char buf[128];
- vty_out(vty, " IS-IS %s SR-Nodes:\n\n", circuit_t2string(level));
-
/* Prepare table. */
tt = ttable_new(&ttable_styles[TTSTYLE_BLANK]);
ttable_add_row(tt, "System ID|SRGB|SRLB|Algorithm|MSD");
@@ -1063,6 +1060,8 @@ static void show_node(struct vty *vty, struct isis_area *area, int level,
if (tt->nrows > 1) {
char *table;
+ vty_out(vty, " IS-IS %s SR-Nodes:\n\n", circuit_t2string(level));
+
table = ttable_dump(tt, "\n");
vty_out(vty, "%s\n", table);
XFREE(MTYPE_TMP, table);
@@ -1074,7 +1073,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
@@ -1088,13 +1087,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)) {
@@ -1106,8 +1110,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);
+ }
}
}