acl-plugin: implement an optional session reclassification when ACL is (re-)applied
[vpp.git] / src / vlib / main.h
index fb67334..57b1efb 100644 (file)
@@ -58,6 +58,7 @@
 
 typedef struct vlib_main_t
 {
+  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
   /* Instruction level timing state. */
   clib_time_t clib_time;
 
@@ -85,6 +86,8 @@ typedef struct vlib_main_t
 
   /* Jump target to exit main loop with given code. */
   u32 main_loop_exit_set;
+  /* Set e.g. in the SIGTERM signal handler, checked in a safe place... */
+  volatile u32 main_loop_exit_now;
   clib_longjmp_t main_loop_exit;
 #define VLIB_MAIN_LOOP_EXIT_NONE 0
 #define VLIB_MAIN_LOOP_EXIT_PANIC 1
@@ -101,9 +104,11 @@ typedef struct vlib_main_t
   void *heap_base;
   uword heap_size;
 
-  vlib_buffer_main_t *buffer_main;
+  /* Pool of buffer free lists. */
+  vlib_buffer_free_list_t *buffer_free_list_pool;
 
-  vlib_physmem_main_t physmem_main;
+  /* List of free-lists needing Blue Light Special announcements */
+  vlib_buffer_free_list_t **buffer_announce_list;
 
   /* Allocate/free buffer memory for DMA transfers, descriptor rings, etc.
      buffer memory is guaranteed to be cache-aligned. */
@@ -208,6 +213,9 @@ typedef struct vlib_main_t
   /* Earliest barrier can be closed again */
   f64 barrier_no_close_before;
 
+  /* Vector of pending RPC requests */
+  uword *pending_rpc_requests;
+
 } vlib_main_t;
 
 /* Global main structure. */
@@ -340,6 +348,9 @@ vlib_increment_main_loop_counter (vlib_main_t * vm)
   vm->main_loop_nodes_processed = 0;
   vm->vector_counts_per_main_loop[i] = v;
   vm->node_counts_per_main_loop[i] = n;
+
+  if (PREDICT_FALSE (vm->main_loop_exit_now))
+    clib_longjmp (&vm->main_loop_exit, VLIB_MAIN_LOOP_EXIT_CLI);
 }
 
 always_inline void vlib_set_queue_signal_callback