diff options
| author | Philippe Guibert <philippe.guibert@6wind.com> | 2022-12-15 09:28:19 +0100 | 
|---|---|---|
| committer | Louis Scalbert <louis.scalbert@6wind.com> | 2024-02-19 10:10:54 +0100 | 
| commit | f93b08f4a06f110fbfb0f21005504a4b381cd64d (patch) | |
| tree | 138fc2e315b8ba0badab1359a632209dcdc179cb /isisd | |
| parent | 4d63d8cd62b700393b07fe1487f54e38197e9979 (diff) | |
isisd: make algorithm id optional in show isis commands
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 <philippe.guibert@6wind.com>
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
Diffstat (limited to 'isisd')
| -rw-r--r-- | isisd/isis_spf.c | 44 | ||||
| -rw-r--r-- | isisd/isis_sr.c | 26 | 
2 files changed, 55 insertions, 15 deletions
diff --git a/isisd/isis_spf.c b/isisd/isis_spf.c index 773136d034..36986a19c5 100644 --- a/isisd/isis_spf.c +++ b/isisd/isis_spf.c @@ -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 @@ -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; @@ -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) { @@ -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; diff --git a/isisd/isis_sr.c b/isisd/isis_sr.c index 1d69dbbbfa..e8354fdf92 100644 --- a/isisd/isis_sr.c +++ b/isisd/isis_sr.c @@ -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 @@ -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)) { @@ -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); +			}  		}  	}  | 
