+static u32 segment_name_counter = 0;
+
+/**
+ * Default fifo and segment size. TODO config.
+ */
+u32 default_fifo_size = 1 << 12;
+u32 default_segment_size = 1 << 20;
+
+segment_manager_properties_t *
+segment_manager_properties_get (segment_manager_t * sm)
+{
+ return application_get_segment_manager_properties (sm->app_index);
+}
+
+segment_manager_properties_t *
+segment_manager_properties_init (segment_manager_properties_t * props)
+{
+ props->add_segment_size = default_segment_size;
+ props->rx_fifo_size = default_fifo_size;
+ props->tx_fifo_size = default_fifo_size;
+ return props;
+}
+
+static u8
+segment_manager_app_detached (segment_manager_t * sm)
+{
+ return (sm->app_index == SEGMENT_MANAGER_INVALID_APP_INDEX);
+}
+
+void
+segment_manager_app_detach (segment_manager_t * sm)
+{
+ sm->app_index = SEGMENT_MANAGER_INVALID_APP_INDEX;
+}
+
+always_inline u32
+segment_manager_segment_index (segment_manager_t * sm,
+ svm_fifo_segment_private_t * seg)
+{
+ return (seg - sm->segments);
+}
+
+/**
+ * Remove segment without lock
+ */
+always_inline void
+segment_manager_del_segment (segment_manager_t * sm,
+ svm_fifo_segment_private_t * fs)
+{
+ segment_manager_main_t *smm = &segment_manager_main;
+
+ if (ssvm_type (&fs->ssvm) != SSVM_SEGMENT_PRIVATE)
+ clib_valloc_free (&smm->va_allocator, fs->ssvm.requested_va);
+
+ ssvm_delete (&fs->ssvm);
+
+ if (CLIB_DEBUG)
+ memset (fs, 0xfb, sizeof (*fs));
+ pool_put (sm->segments, fs);
+}