Skip to content

Commit ae27101

Browse files
committed
isisd: fix building asla at first flex-algo config
When an color affinity is set on an interface before configuring the flex-algorithm, the ASLA (Application Specific Link-Attribute) sub-TLV is not build. Flex-algo fails to build the paths when a affinity constraint is required because of the lacking of information contained in ASLA. There are no problems when the configuration order is reversed. For example: > affinity-map red bit-position 1 > > interface eth2 > link-params > affinity red > > router isis 1 > mpls-te on > flex-algo 129 > dataplane sr-mpls > advertise-definition > affinity include-any green In isis_link_params_update_asla(), the ASLA sub-TLV is not build when the list of flex-algos is empty. Update ASLA when the first flex-algorithm is configured. Fixes: 893882e ("isisd: add isis flex-algo configuration backend") Signed-off-by: Louis Scalbert <[email protected]>
1 parent 9c0e668 commit ae27101

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

isisd/isis_nb_config.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2838,7 +2838,9 @@ int isis_instance_flex_algo_create(struct nb_cb_create_args *args)
28382838
{
28392839
struct isis_area *area;
28402840
struct flex_algo *fa;
2841-
bool advertise;
2841+
bool advertise, update_te;
2842+
struct isis_circuit *circuit;
2843+
struct listnode *node;
28422844
uint32_t algorithm;
28432845
uint32_t priority = FLEX_ALGO_PRIO_DEFAULT;
28442846
struct isis_flex_algo_alloc_arg arg;
@@ -2851,6 +2853,7 @@ int isis_instance_flex_algo_create(struct nb_cb_create_args *args)
28512853
area = nb_running_get_entry(args->dnode, NULL, true);
28522854
arg.algorithm = algorithm;
28532855
arg.area = area;
2856+
update_te = list_isempty(area->flex_algos->flex_algos);
28542857
fa = flex_algo_alloc(area->flex_algos, algorithm, &arg);
28552858
fa->priority = priority;
28562859
fa->advertise_definition = advertise;
@@ -2862,6 +2865,12 @@ int isis_instance_flex_algo_create(struct nb_cb_create_args *args)
28622865
admin_group_allow_explicit_zero(
28632866
&fa->admin_group_include_all);
28642867
}
2868+
if (update_te) {
2869+
for (ALL_LIST_ELEMENTS_RO(area->circuit_list, node,
2870+
circuit))
2871+
isis_link_params_update_asla(circuit,
2872+
circuit->interface);
2873+
}
28652874
lsp_regenerate_schedule(area, area->is_type, 0);
28662875
break;
28672876
case NB_EV_VALIDATE:

isisd/isis_te.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,8 @@ void isis_mpls_te_term(struct isis_area *area)
164164
XFREE(MTYPE_ISIS_MPLS_TE, area->mta);
165165
}
166166

167-
static void isis_link_params_update_asla(struct isis_circuit *circuit,
168-
struct interface *ifp)
167+
void isis_link_params_update_asla(struct isis_circuit *circuit,
168+
struct interface *ifp)
169169
{
170170
struct isis_asla_subtlvs *asla;
171171
struct listnode *node, *nnode;

isisd/isis_te.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ void isis_mpls_te_init(void);
112112
void isis_mpls_te_create(struct isis_area *area);
113113
void isis_mpls_te_disable(struct isis_area *area);
114114
void isis_mpls_te_term(struct isis_area *area);
115+
void isis_link_params_update_asla(struct isis_circuit *circuit,
116+
struct interface *ifp);
115117
void isis_link_params_update(struct isis_circuit *, struct interface *);
116118
int isis_mpls_te_update(struct interface *);
117119
void isis_te_lsp_event(struct isis_lsp *lsp, enum lsp_event event);

0 commit comments

Comments
 (0)