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; +}  | 
