+#define segment_manager_foreach_segment_w_lock(VAR, SM, BODY) \
+do { \
+ clib_rwlock_reader_lock (&(SM)->segments_rwlock); \
+ pool_foreach((VAR), ((SM)->segments), (BODY)); \
+ clib_rwlock_reader_unlock (&(SM)->segments_rwlock); \
+} while (0)
+
+typedef struct segment_manager_main_
+{
+ /** Pool of segment managers */
+ segment_manager_t *segment_managers;
+
+ /** Virtual address allocator */
+ clib_valloc_main_t va_allocator;
+
+} segment_manager_main_t;
+
+extern segment_manager_main_t segment_manager_main;
+
+typedef struct segment_manager_main_init_args_
+{
+ u64 baseva;
+ u64 size;
+} segment_manager_main_init_args_t;
+