summaryrefslogtreecommitdiff
path: root/lib/affinitymap.c
diff options
context:
space:
mode:
authorLouis Scalbert <louis.scalbert@6wind.com>2022-11-09 15:17:19 +0100
committerLouis Scalbert <louis.scalbert@6wind.com>2023-02-10 13:52:01 +0100
commitae251b86845a976534f978b4a323cfee779916ee (patch)
tree4d40515b9db7d494b9641df47b106c2bdb608acc /lib/affinitymap.c
parentfa1b95c3ec8c1c34116ffe1cc908fb08459bd3e4 (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.c53
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;
+}