int isis_instance_flex_algo_destroy(struct nb_cb_destroy_args *args)
{
+ struct listnode *node, *nnode;
+ struct flex_algo *fa;
struct isis_area *area;
uint32_t algorithm;
switch (args->event) {
case NB_EV_APPLY:
- flex_algo_delete(area->flex_algos, algorithm);
+ for (ALL_LIST_ELEMENTS(area->flex_algos->flex_algos, node,
+ nnode, fa)) {
+ if (fa->algorithm == algorithm)
+ flex_algo_free(area->flex_algos, fa);
+ }
lsp_regenerate_schedule(area, area->is_type, 0);
break;
case NB_EV_VALIDATE:
DEFINE_MTYPE_STATIC(LIB, FLEX_ALGO_DATABASE, "Flex-Algo database");
DEFINE_MTYPE_STATIC(LIB, FLEX_ALGO, "Flex-Algo algorithm information");
-static void _flex_algo_delete(struct flex_algos *flex_algos,
- struct flex_algo *fa);
-
struct flex_algos *flex_algos_alloc(flex_algo_allocator_t allocator,
flex_algo_releaser_t releaser)
{
struct flex_algo *fa;
for (ALL_LIST_ELEMENTS(flex_algos->flex_algos, node, nnode, fa))
- _flex_algo_delete(flex_algos, fa);
+ flex_algo_free(flex_algos, fa);
list_delete(&flex_algos->flex_algos);
XFREE(MTYPE_FLEX_ALGO_DATABASE, flex_algos);
}
return fa;
}
-static void _flex_algo_delete(struct flex_algos *flex_algos,
- struct flex_algo *fa)
+void flex_algo_free(struct flex_algos *flex_algos, struct flex_algo *fa)
{
if (flex_algos->releaser)
flex_algos->releaser(fa->data);
XFREE(MTYPE_FLEX_ALGO, fa);
}
-
-void flex_algo_delete(struct flex_algos *flex_algos, uint8_t algorithm)
-{
- struct listnode *node, *nnode;
- struct flex_algo *fa;
-
- for (ALL_LIST_ELEMENTS(flex_algos->flex_algos, node, nnode, fa)) {
- if (fa->algorithm != algorithm)
- continue;
- _flex_algo_delete(flex_algos, fa);
- }
-}
-
/**
* @brief Look up the local flex-algo object by its algorithm number.
* @param algorithm flex-algo algorithm number
void flex_algos_free(struct flex_algos *flex_algos);
struct flex_algo *flex_algo_alloc(struct flex_algos *flex_algos,
uint8_t algorithm, void *arg);
+void flex_algo_free(struct flex_algos *flex_algos, struct flex_algo *fa);
struct flex_algo *flex_algo_lookup(struct flex_algos *flex_algos,
uint8_t algorithm);
bool flex_algo_definition_cmp(struct flex_algo *fa1, struct flex_algo *fa2);
-void flex_algo_delete(struct flex_algos *flex_algos, uint8_t algorithm);
bool flex_algo_id_valid(uint16_t algorithm);
char *flex_algo_metric_type_print(char *type_str, size_t sz,
enum flex_algo_metric_type metric_type);