slotmap: Introduce the concept of a slotmap state
... which is required in remsim-server
Change-Id: I56f5ecd6194ef62c87d87d2965ca0315e3d0fc2d
diff --git a/src/slotmap.h b/src/slotmap.h
index 92eb6f4..27d7e1b 100644
--- a/src/slotmap.h
+++ b/src/slotmap.h
@@ -4,6 +4,8 @@
#include <pthread.h>
#include <osmocom/core/linuxlist.h>
+#define REMSIM_SERVER 1
+
struct bank_slot {
uint16_t bank_id;
uint16_t slot_nr;
@@ -30,14 +32,33 @@
return false;
}
+enum slot_mapping_state {
+ SLMAP_S_NEW, /* created; not yet sent to bankd */
+ SLMAP_S_UNACKNOWLEDGED, /* created + sent to bankd but not yet acknowledge by bankd */
+ SLMAP_S_ACTIVE, /* fully active map; acknowledged by bankd */
+ SLMAP_S_DELETING, /* we were asked to delete it; bankd hasn't confirmed yet */
+};
+extern const struct value_string slot_map_state_name[];
+static inline const char *slotmap_state_name(enum slot_mapping_state st)
+{
+ return get_value_string(slot_map_state_name, st);
+}
+
/* slot mappings are created / removed by the server */
struct slot_mapping {
/* global lits of bankd slot mappings */
struct llist_head list;
+ struct slotmaps *maps;
+
/* slot on bank side */
struct bank_slot bank;
/* slot on client side */
struct client_slot client;
+
+#ifdef REMSIM_SERVER
+ struct llist_head bank_list;
+ enum slot_mapping_state state;
+#endif
};
/* collection of slot mappings */
@@ -60,3 +81,11 @@
/* initialize the entire map collection */
struct slotmaps *slotmap_init(void *ctx);
+
+#ifdef REMSIM_SERVER
+void _slotmap_state_change(struct slot_mapping *map, enum slot_mapping_state new_state,
+ struct llist_head *new_bank_list);
+/* thread-safe way to change the state of given slot map */
+void slotmap_state_change(struct slot_mapping *map, enum slot_mapping_state new_state,
+ struct llist_head *new_bank_list);
+#endif