Commit 76cdf86deb for frr

commit 76cdf86debde9aa0233e036f5df3a23bbe3b6431
Merge: 2732c6bffc 83a7c9f901
Author: Russ White <russ@riw.us>
Date:   Fri Nov 6 17:52:21 2026 -0500

    Merge pull request #23840 from alxrxs/isisd-flex-algo-per-level

    isisd: flex-algo in level-2 and level-1-2 routers

diff --cc isisd/isis_flex_algo.c
index 28873a7e11,b2bee33ecd..7a334ec83c
--- a/isisd/isis_flex_algo.c
+++ b/isisd/isis_flex_algo.c
@@@ -225,19 -223,12 +241,19 @@@ bool isis_flex_algo_state(const struct
  }

  struct isis_router_cap_fad *
- isis_flex_algo_elected_supported_local_fad(int algorithm, const struct isis_area *area,
+ isis_flex_algo_elected_supported_local_fad(int algorithm, const struct isis_area *area, int level,
  					   struct isis_router_cap_fad **fad)
  {
- 	return _isis_flex_algo_elected_supported(algorithm, area, fad);
+ 	return _isis_flex_algo_elected_supported(algorithm, area, level, fad);
  }

 +/* The SR-Algorithm sub-TLV is stored indexed by algorithm. */
 +static bool sr_algorithm_advertised(const struct isis_lsp *lsp, uint8_t algorithm)
 +{
 +	return lsp->tlvs && lsp->tlvs->router_cap &&
 +	       lsp->tlvs->router_cap->algo[algorithm] == algorithm;
 +}
 +
  /**
   * Check LSP is participating specified SR Algorithm
   *
diff --cc isisd/isis_flex_algo.h
index a7b82536c0,6334071d84..7990ff58c4
--- a/isisd/isis_flex_algo.h
+++ b/isisd/isis_flex_algo.h
@@@ -33,16 -35,15 +35,16 @@@ struct isis_flex_algo_alloc_arg

  void *isis_flex_algo_data_alloc(void *arg);
  void isis_flex_algo_data_free(void *data);
 +void isis_flex_algos_spftrees_init(struct isis_area *area);

- struct isis_router_cap_fad *
- isis_flex_algo_elected(int algorithm, const struct isis_area *area);
+ struct isis_router_cap_fad *isis_flex_algo_elected(int algorithm, const struct isis_area *area,
+ 						   int level);
  bool isis_flex_algo_supported(struct flex_algo *fad);
+ bool isis_flex_algo_state(const struct isis_area *area, int algorithm, int level);
  struct isis_router_cap_fad *
- isis_flex_algo_elected_supported(int algorithm, const struct isis_area *area);
+ isis_flex_algo_elected_supported(int algorithm, const struct isis_area *area, int level);
  struct isis_router_cap_fad *
- isis_flex_algo_elected_supported_local_fad(int algorithm,
- 					   const struct isis_area *area,
+ isis_flex_algo_elected_supported_local_fad(int algorithm, const struct isis_area *area, int level,
  					   struct isis_router_cap_fad **fad);
  struct isis_lsp;
  bool sr_algorithm_participated(const struct isis_lsp *lsp, uint8_t algorithm);
diff --cc isisd/isis_spf.c
index a66cbc18a1,78455ffe11..7ce4ee2608
--- a/isisd/isis_spf.c
+++ b/isisd/isis_spf.c
@@@ -1018,9 -971,10 +1019,10 @@@ lspfragloop

  #ifndef FABRICD
  					if (flex_algo_id_valid(spftree->algorithm) &&
 -					    (!sr_algorithm_participated(lsp, spftree->algorithm) ||
 +					    (!fa_participates ||
  					     !isis_flex_algo_elected_supported(spftree->algorithm,
- 									       spftree->area)))
+ 									       spftree->area,
+ 									       spftree->level)))
  						continue;
  #endif /* ifndef FABRICD */

@@@ -1088,9 -1038,10 +1090,10 @@@

  #ifndef FABRICD
  					if (flex_algo_id_valid(spftree->algorithm) &&
 -					    (!sr_algorithm_participated(lsp, spftree->algorithm) ||
 +					    (!fa_participates ||
  					     !isis_flex_algo_elected_supported(spftree->algorithm,
- 									       spftree->area)))
+ 									       spftree->area,
+ 									       spftree->level)))
  						continue;
  #endif /* ifndef FABRICD */