papi: Use CMSG_SPACE for sizing ancillary buffer space
[vpp.git] / src / vlib / stats / stats.h
index 25d7c4b..ab1e282 100644 (file)
@@ -21,25 +21,14 @@ typedef enum
 {
   STAT_COUNTER_HEARTBEAT = 0,
   STAT_COUNTER_LAST_STATS_CLEAR,
-  STAT_COUNTER_NODE_CLOCKS,
-  STAT_COUNTER_NODE_VECTORS,
-  STAT_COUNTER_NODE_CALLS,
-  STAT_COUNTER_NODE_SUSPENDS,
-  STAT_COUNTER_NODE_NAMES,
+  STAT_COUNTER_BOOTTIME,
   STAT_COUNTERS
 } stat_segment_counter_t;
 
-#define foreach_stat_segment_node_counter_name                                \
-  _ (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")
-
 #define foreach_stat_segment_counter_name                                     \
   _ (LAST_STATS_CLEAR, SCALAR_INDEX, last_stats_clear, "/sys")                \
   _ (HEARTBEAT, SCALAR_INDEX, heartbeat, "/sys")                              \
-  _ (NODE_NAMES, NAME_VECTOR, names, "/sys/node")                             \
-  foreach_stat_segment_node_counter_name
+  _ (BOOTTIME, SCALAR_INDEX, boottime, "/sys")
 
 typedef struct
 {
@@ -75,13 +64,14 @@ typedef struct
   /* statistics segment */
   uword *directory_vector_by_name;
   vlib_stats_entry_t *directory_vector;
-  volatile u64 **error_vector;
-  u8 **nodes;
+  u32 dir_vector_first_free_elt;
 
   /* Update interval */
   f64 update_interval;
 
   clib_spinlock_t *stat_segment_lockp;
+  u32 locking_thread_index;
+  u32 n_locks;
   clib_socket_t *socket;
   u8 *socket_name;
   ssize_t memory_size;
@@ -94,6 +84,11 @@ typedef struct
 
 } vlib_stats_segment_t;
 
+typedef struct
+{
+  u32 entry_index;
+} vlib_stats_header_t;
+
 typedef struct
 {
   vlib_stats_segment_t segment;
@@ -117,15 +112,18 @@ vlib_stats_get_entry (vlib_stats_segment_t *sm, u32 entry_index)
   return e;
 }
 
+static_always_inline void *
+vlib_stats_get_entry_data_pointer (u32 entry_index)
+{
+  vlib_stats_segment_t *sm = vlib_stats_get_segment ();
+  vlib_stats_entry_t *e = vlib_stats_get_entry (sm, entry_index);
+  return e->data;
+}
+
 clib_error_t *vlib_stats_init (vlib_main_t *vm);
 void *vlib_stats_set_heap ();
-void vlib_stats_update_counter (void *, u32, stat_directory_type_t);
-void vlib_stats_register_error_index (u64 *em_vec, u64 index, char *fmt, ...);
-void vlib_stats_update_error_vector (u64 *error_vector, u32 thread_index,
-                                    int lock);
 void vlib_stats_segment_lock (void);
 void vlib_stats_segment_unlock (void);
-void vlib_stats_delete_cm (void *);
 void vlib_stats_register_mem_heap (clib_mem_heap_t *);
 f64 vlib_stats_get_segment_update_rate (void);
 
@@ -137,20 +135,26 @@ void vlib_stats_set_gauge (u32 entry_index, u64 value);
 u32 vlib_stats_add_timestamp (char *fmt, ...);
 void vlib_stats_set_timestamp (u32 entry_index, f64 value);
 
-/* vector */
+/* counter vector */
 u32 vlib_stats_add_counter_vector (char *fmt, ...);
-void vlib_stats_validate_counter_vector (u32 entry_index, u32 vector_index);
+
+/* counter pair vector */
+u32 vlib_stats_add_counter_pair_vector (char *fmt, ...);
 
 /* string vector */
-u32 vlib_stats_add_string_vector (char *fmt, ...);
-void vlib_stats_set_string_vector (u32 entry_index, u32 vector_index,
+typedef u8 **vlib_stats_string_vector_t;
+vlib_stats_string_vector_t vlib_stats_add_string_vector (char *fmt, ...);
+void vlib_stats_set_string_vector (vlib_stats_string_vector_t *sv, u32 index,
                                   char *fmt, ...);
+void vlib_stats_free_string_vector (vlib_stats_string_vector_t *sv);
 
 /* symlink */
 u32 vlib_stats_add_symlink (u32 entry_index, u32 vector_index, char *fmt, ...);
 void vlib_stats_rename_symlink (u64 entry_index, char *fmt, ...);
 
 /* common to all types */
+void vlib_stats_validate (u32 entry_index, ...);
+int vlib_stats_validate_will_expand (u32 entry_index, ...);
 void vlib_stats_remove_entry (u32 entry_index);
 u32 vlib_stats_find_entry_index (char *fmt, ...);
 void vlib_stats_register_collector_fn (vlib_stats_collector_reg_t *r);