diff options
| author | Louis Scalbert <louis.scalbert@6wind.com> | 2022-11-09 15:17:19 +0100 |
|---|---|---|
| committer | Louis Scalbert <louis.scalbert@6wind.com> | 2023-02-10 13:52:01 +0100 |
| commit | ae251b86845a976534f978b4a323cfee779916ee (patch) | |
| tree | 4d40515b9db7d494b9641df47b106c2bdb608acc /lib/affinitymap.c | |
| parent | fa1b95c3ec8c1c34116ffe1cc908fb08459bd3e4 (diff) | |
lib,zebra: add affinity-map configuration hooks
Add affinity-map hooks to check the utilization of affinity-map in
link-params before its deletion and to update link-params when the
affinity-map bit-position is updated.
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
Diffstat (limited to 'lib/affinitymap.c')
| -rw-r--r-- | lib/affinitymap.c | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/lib/affinitymap.c b/lib/affinitymap.c index 62c9c0df8c..17e1b2cc01 100644 --- a/lib/affinitymap.c +++ b/lib/affinitymap.c @@ -47,7 +47,7 @@ DEFINE_MTYPE_STATIC(LIB, AFFINITY_MAP_INDEX, "Affinity map index"); DEFINE_QOBJ_TYPE(affinity_maps); DEFINE_QOBJ_TYPE(affinity_map); -struct affinity_maps affinity_map_master = {NULL}; +struct affinity_maps affinity_map_master = {NULL, NULL, NULL, NULL}; static void affinity_map_free(struct affinity_map *map) { @@ -120,3 +120,54 @@ char *affinity_map_name_get(int pos) return map->name; return NULL; } + +bool affinity_map_check_use_hook(const char *affmap_name) +{ + if (affinity_map_master.check_use_hook) + return (*affinity_map_master.check_use_hook)(affmap_name); + return false; +} + +bool affinity_map_check_update_hook(const char *affmap_name, uint16_t new_pos) +{ + if (affinity_map_master.check_update_hook) + return (*affinity_map_master.check_update_hook)(affmap_name, + new_pos); + return true; +} + +void affinity_map_update_hook(const char *affmap_name, uint16_t new_pos) +{ + struct affinity_map *map; + + if (!affinity_map_master.update_hook) + return; + + map = affinity_map_get(affmap_name); + + if (!map) + /* Affinity-map creation */ + return; + + (*affinity_map_master.update_hook)(affmap_name, map->bit_position, + new_pos); +} + + +void affinity_map_set_check_use_hook(bool (*func)(const char *affmap_name)) +{ + affinity_map_master.check_use_hook = func; +} + +void affinity_map_set_check_update_hook(bool (*func)(const char *affmap_name, + uint16_t new_pos)) +{ + affinity_map_master.check_update_hook = func; +} + +void affinity_map_set_update_hook(void (*func)(const char *affmap_name, + uint16_t old_pos, + uint16_t new_pos)) +{ + affinity_map_master.update_hook = func; +} |
