stats: counters data model
[vpp.git] / src / vlib / error.h
index df2075c..11757e0 100644 (file)
 #ifndef included_vlib_error_h
 #define included_vlib_error_h
 
-/* Combined 16 bit node & 16 bit code as 32 bit number. */
-typedef u32 vlib_error_t;
+typedef u16 vlib_error_t;
 
-always_inline u32
-vlib_error_get_node (vlib_error_t e)
+enum vl_counter_severity_e
 {
-  return e >> 12;
-}
+  VL_COUNTER_SEVERITY_ERROR,
+  VL_COUNTER_SEVERITY_WARN,
+  VL_COUNTER_SEVERITY_INFO,
+};
 
-always_inline u32
-vlib_error_get_code (vlib_error_t e)
-{
-  return e & 0xfff;
-}
-
-always_inline vlib_error_t
-vlib_error_set (u32 node_index, u32 code)
-{
-  ASSERT (node_index < (1 << 20));
-  ASSERT (code < (1 << 12));
-  return (node_index << 12) | code;
-}
-
-always_inline vlib_error_t
-vlib_error_set_code (vlib_error_t e, u32 code)
+typedef struct
 {
-  ASSERT (vlib_error_get_code (e) == 0);
-  ASSERT (code < (1 << 12));
-  e |= code;
-  return e;
-}
+  char *name;
+  char *desc;
+  enum vl_counter_severity_e severity;
+} vl_counter_t;
 
 typedef struct
 {
@@ -80,15 +64,16 @@ typedef struct
   /* Counter values as of last counter clear. */
   u64 *counters_last_clear;
 
-  /* Error name strings in heap.  Heap index
+  /* Counter structures in heap. Heap index
      indexes counter vector. */
-  char **error_strings_heap;
+  vl_counter_t *counters_heap;
 } vlib_error_main_t;
 
 /* Per node error registration. */
 void vlib_register_errors (struct vlib_main_t *vm,
                           u32 node_index,
-                          u32 n_errors, char *error_strings[]);
+                          u32 n_errors, char *error_strings[],
+                          vl_counter_t counters[]);
 
 #endif /* included_vlib_error_h */