1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright 2023 6WIND S.A.
9 #include "isisd/isisd.h"
10 #include "isisd/isis_affinitymap.h"
14 static bool isis_affinity_map_check_use(const char *affmap_name
)
16 struct isis
*isis
= isis_lookup_by_vrfid(VRF_DEFAULT
);
17 struct isis_area
*area
;
18 struct listnode
*area_node
, *fa_node
;
20 struct affinity_map
*map
;
26 map
= affinity_map_get(affmap_name
);
27 pos
= map
->bit_position
;
29 for (ALL_LIST_ELEMENTS_RO(isis
->area_list
, area_node
, area
)) {
30 for (ALL_LIST_ELEMENTS_RO(area
->flex_algos
->flex_algos
, fa_node
,
32 if (admin_group_get(&fa
->admin_group_exclude_any
,
34 admin_group_get(&fa
->admin_group_include_any
,
36 admin_group_get(&fa
->admin_group_include_all
, pos
))
43 static void isis_affinity_map_update(const char *affmap_name
, uint16_t old_pos
,
46 struct isis
*isis
= isis_lookup_by_vrfid(VRF_DEFAULT
);
47 struct listnode
*area_node
, *fa_node
;
48 struct isis_area
*area
;
55 for (ALL_LIST_ELEMENTS_RO(isis
->area_list
, area_node
, area
)) {
57 for (ALL_LIST_ELEMENTS_RO(area
->flex_algos
->flex_algos
, fa_node
,
59 if (admin_group_get(&fa
->admin_group_exclude_any
,
61 admin_group_unset(&fa
->admin_group_exclude_any
,
63 admin_group_set(&fa
->admin_group_exclude_any
,
67 if (admin_group_get(&fa
->admin_group_include_any
,
69 admin_group_unset(&fa
->admin_group_include_any
,
71 admin_group_set(&fa
->admin_group_include_any
,
75 if (admin_group_get(&fa
->admin_group_include_all
,
77 admin_group_unset(&fa
->admin_group_include_all
,
79 admin_group_set(&fa
->admin_group_include_all
,
85 lsp_regenerate_schedule(area
, area
->is_type
, 0);
89 void isis_affinity_map_init(void)
93 affinity_map_set_check_use_hook(isis_affinity_map_check_use
);
94 affinity_map_set_update_hook(isis_affinity_map_update
);
97 #endif /* ifndef FABRICD */