diff options
| author | zhou-run <zhou.run@h3c.com> | 2024-09-21 15:19:19 +0800 | 
|---|---|---|
| committer | zhourun (RD) <zhou.run@h3c.com> | 2024-09-21 16:47:40 +0800 | 
| commit | a9af78af42403ba8b77baf6b576023a14ef80f19 (patch) | |
| tree | 17a9b6d90bffdb82faebfe3e6799e096a93f7c6d /isisd | |
| parent | 916c90f503359fe3860e527a2f7b1b803cb5f370 (diff) | |
isisd: Fix infinity flag not being set successfully
When creating SPF neighbors and calling spf_adj_list_parse_tlv(), the F_ISIS_SPF_ADJ_METRIC_INFINITY flag is only set to a local variable flags and not set to the SPF neighbor sadj->flags. Additionally, the pseudo node metric pseudo_metric is also not reflected in the F_ISIS_SPF_ADJ_METRIC_INFINITY flag, the metric should be checked using sadj->metric.
Signed-off-by: zhou-run <zhou.run@h3c.com>
Diffstat (limited to 'isisd')
| -rw-r--r-- | isisd/isis_spf.c | 7 | 
1 files changed, 3 insertions, 4 deletions
diff --git a/isisd/isis_spf.c b/isisd/isis_spf.c index 0f37ed012a..8fc0f144b2 100644 --- a/isisd/isis_spf.c +++ b/isisd/isis_spf.c @@ -1469,14 +1469,13 @@ static void spf_adj_list_parse_tlv(struct isis_spftree *spftree,  		sadj->metric = metric;  	if (oldmetric)  		SET_FLAG(flags, F_ISIS_SPF_ADJ_OLDMETRIC); +	if ((oldmetric && sadj->metric == ISIS_NARROW_METRIC_INFINITY) || +	    (!oldmetric && sadj->metric == ISIS_WIDE_METRIC_INFINITY)) +		SET_FLAG(flags, F_ISIS_SPF_ADJ_METRIC_INFINITY);  	sadj->lsp = lsp;  	sadj->subtlvs = subtlvs;  	sadj->flags = flags; -	if ((oldmetric && metric == ISIS_NARROW_METRIC_INFINITY) -	    || (!oldmetric && metric == ISIS_WIDE_METRIC_INFINITY)) -		SET_FLAG(flags, F_ISIS_SPF_ADJ_METRIC_INFINITY); -  	/* Set real adjacency. */  	if (!CHECK_FLAG(spftree->flags, F_SPFTREE_NO_ADJACENCIES)  	    && !LSP_PSEUDO_ID(id)) {  | 
