Horizontal (nSessions) scaling draft
[vpp.git] / src / vnet / session / segment_manager.h
index 778d604..41abeb2 100644 (file)
 #include <vnet/vnet.h>
 #include <svm/svm_fifo_segment.h>
 
+#include <vlibmemory/unix_shared_memory_queue.h>
+#include <vlibmemory/api.h>
+#include <vppinfra/lock.h>
+
 typedef struct _segment_manager_properties
 {
   /** Session fifo sizes.  */
   u32 rx_fifo_size;
   u32 tx_fifo_size;
 
+  /** Preallocated pool sizes */
+  u32 preallocated_fifo_pairs;
+
   /** Configured additional segment size */
   u32 add_segment_size;
 
   /** Flag that indicates if additional segments should be created */
   u8 add_segment;
 
+  /** Use private memory segment instead of shared memory */
+  u8 use_private_segment;
+
+  /** Use one or more private mheaps, instead of the global heap */
+  u32 private_segment_count;
+  u32 private_segment_size;
 } segment_manager_properties_t;
 
 typedef struct _segment_manager
 {
+  clib_spinlock_t lockp;
+
   /** segments mapped by this manager */
   u32 *segment_indices;
 
@@ -85,6 +100,7 @@ segment_manager_init (segment_manager_t * sm,
 void segment_manager_get_segment_info (u32 index, u8 ** name, u32 * size);
 int
 session_manager_add_first_segment (segment_manager_t * sm, u32 segment_size);
+void segment_manager_first_segment_maybe_del (segment_manager_t * sm);
 int session_manager_add_segment (segment_manager_t * sm);
 void segment_manager_del (segment_manager_t * sm);
 int
@@ -95,6 +111,10 @@ segment_manager_alloc_session_fifos (segment_manager_t * sm,
 void
 segment_manager_dealloc_fifos (u32 svm_segment_index, svm_fifo_t * rx_fifo,
                               svm_fifo_t * tx_fifo);
+unix_shared_memory_queue_t *segment_manager_alloc_queue (segment_manager_t *
+                                                        sm, u32 queue_size);
+void segment_manager_dealloc_queue (segment_manager_t * sm,
+                                   unix_shared_memory_queue_t * q);
 
 #endif /* SRC_VNET_SESSION_SEGMENT_MANAGER_H_ */
 /*