stats: add version field to stat segment base header
[vpp.git] / src / vpp / stats / stat_segment.h
index 917b512..113eb9a 100644 (file)
@@ -24,6 +24,8 @@
 typedef enum
 {
  STAT_COUNTER_VECTOR_RATE = 0,
+ STAT_COUNTER_NUM_WORKER_THREADS,
+ STAT_COUNTER_VECTOR_RATE_PER_WORKER,
  STAT_COUNTER_INPUT_RATE,
  STAT_COUNTER_LAST_UPDATE,
  STAT_COUNTER_LAST_STATS_CLEAR,
@@ -33,20 +35,25 @@ typedef enum
  STAT_COUNTER_NODE_CALLS,
  STAT_COUNTER_NODE_SUSPENDS,
  STAT_COUNTER_INTERFACE_NAMES,
+ STAT_COUNTER_NODE_NAMES,
  STAT_COUNTERS
 } stat_segment_counter_t;
 
-#define foreach_stat_segment_counter_name                      \
-  _(VECTOR_RATE, SCALAR_INDEX, vector_rate, /sys)              \
-  _(INPUT_RATE, SCALAR_INDEX, input_rate, /sys)                        \
-  _(LAST_UPDATE, SCALAR_INDEX, last_update, /sys)              \
-  _(LAST_STATS_CLEAR, SCALAR_INDEX, last_stats_clear, /sys)    \
-  _(HEARTBEAT, SCALAR_INDEX, heartbeat, /sys)                  \
-  _(NODE_CLOCKS, COUNTER_VECTOR_SIMPLE, clocks, /sys/node)     \
-  _(NODE_VECTORS, COUNTER_VECTOR_SIMPLE, vectors, /sys/node)   \
-  _(NODE_CALLS, COUNTER_VECTOR_SIMPLE, calls, /sys/node)       \
-  _(NODE_SUSPENDS, COUNTER_VECTOR_SIMPLE, suspends, /sys/node) \
-  _(INTERFACE_NAMES, NAME_VECTOR, names, /if)
+#define foreach_stat_segment_counter_name                       \
+  _(VECTOR_RATE, SCALAR_INDEX, vector_rate, /sys)               \
+  _(VECTOR_RATE_PER_WORKER, COUNTER_VECTOR_SIMPLE,              \
+    vector_rate_per_worker, /sys)                               \
+  _(NUM_WORKER_THREADS, SCALAR_INDEX, num_worker_threads, /sys) \
+  _(INPUT_RATE, SCALAR_INDEX, input_rate, /sys)                 \
+  _(LAST_UPDATE, SCALAR_INDEX, last_update, /sys)               \
+  _(LAST_STATS_CLEAR, SCALAR_INDEX, last_stats_clear, /sys)     \
+  _(HEARTBEAT, SCALAR_INDEX, heartbeat, /sys)                   \
+  _(NODE_CLOCKS, COUNTER_VECTOR_SIMPLE, clocks, /sys/node)      \
+  _(NODE_VECTORS, COUNTER_VECTOR_SIMPLE, vectors, /sys/node)    \
+  _(NODE_CALLS, COUNTER_VECTOR_SIMPLE, calls, /sys/node)        \
+  _(NODE_SUSPENDS, COUNTER_VECTOR_SIMPLE, suspends, /sys/node)  \
+  _(INTERFACE_NAMES, NAME_VECTOR, names, /if)                   \
+  _(NODE_NAMES, NAME_VECTOR, names, /sys/node)
 
 typedef struct
 {
@@ -63,11 +70,15 @@ typedef struct
 /* Default stat segment 32m */
 #define STAT_SEGMENT_DEFAULT_SIZE      (32<<20)
 
+/* Shared segment memory layout version */
+#define STAT_SEGMENT_VERSION           1
+
 /*
  * Shared header first in the shared memory segment.
  */
 typedef struct
 {
+  u64 version;
   atomic_int_fast64_t epoch;
   atomic_int_fast64_t in_progress;
   atomic_int_fast64_t directory_offset;
@@ -103,13 +114,16 @@ typedef struct
   /* statistics segment */
   uword *directory_vector_by_name;
   stat_segment_directory_entry_t *directory_vector;
+  u64 *error_vector;
   u8 **interfaces;
+  u8 **nodes;
 
   clib_spinlock_t *stat_segment_lockp;
   clib_socket_t *socket;
   u8 *socket_name;
   ssize_t memory_size;
   u8 node_counters_enabled;
+  void *last;
   void *heap;
   stat_segment_shared_header_t *shared_header; /* pointer to shared memory segment */
   int memfd;