#include <vppinfra/error.h> /* for ASSERT */
#include <vppinfra/serialize.h>
#include <vppinfra/time.h> /* for clib_cpu_time_now */
+#include <vppinfra/hash.h>
#include <vppinfra/mhash.h>
typedef struct
};
/** Event type index. */
- u16 type;
+ u16 event_type;
/** Track for this event. Tracks allow events to be sorted and
displayed by track. Think of 2 dimensional display with time and
u32 n_total_events_disable_limit;
/** Dummy event to use when logger is disabled. */
- elog_event_t dummy_event;
+ elog_event_t placeholder_event;
/** Power of 2 number of elements in ring. */
uword event_ring_size;
/** Events may refer to strings in string table. */
char *string_table;
+ uword *string_table_hash;
+ u8 *string_table_tmp;
/** Vector of tracks. */
elog_track_t *tracks;
uword ei;
word type_index, track_index;
- /* Return the user dummy memory to scribble data into. */
+ /* Return the user placeholder memory to scribble data into. */
if (PREDICT_FALSE (!elog_is_enabled (em)))
- return em->dummy_event.data;
+ return em->placeholder_event.data;
type_index = (word) type->type_index_plus_one - 1;
track_index = (word) track->track_index_plus_one - 1;
ASSERT (is_pow2 (vec_len (em->event_ring)));
if (em->lock)
- ei = clib_smp_atomic_add (&em->n_total_events, 1);
+ ei = clib_atomic_fetch_add (&em->n_total_events, 1);
else
ei = em->n_total_events++;
e = vec_elt_at_index (em->event_ring, ei);
e->time_cycles = cpu_time;
- e->type = type_index;
+ e->event_type = type_index;
e->track = track_index;
/* Return user data for caller to fill in. */
elog_event_type_t * type,
elog_track_t * track, u64 cpu_time)
{
- /* Return the user dummy memory to scribble data into. */
+ /* Return the user placeholder memory to scribble data into. */
if (PREDICT_FALSE (!elog_is_enabled (em)))
- return em->dummy_event.data;
+ return em->placeholder_event.data;
return elog_event_data (em, type, track, cpu_time);
}
/* 2 arguments elog_main_t and elog_event_t to format event or track name. */
u8 *format_elog_event (u8 * s, va_list * va);
-u8 *format_elog_track (u8 * s, va_list * va);
+u8 *format_elog_track_name (u8 * s, va_list * va);
+u8 *format_elog_track (u8 * s, va_list * args);
void serialize_elog_main (serialize_main_t * m, va_list * va);
void unserialize_elog_main (serialize_main_t * m, va_list * va);
void elog_init (elog_main_t * em, u32 n_events);
void elog_alloc (elog_main_t * em, u32 n_events);
+void elog_resize (elog_main_t * em, u32 n_events);
#ifdef CLIB_UNIX
always_inline clib_error_t *
-elog_write_file (elog_main_t * em, char *unix_file, int flush_ring)
+elog_write_file (elog_main_t * em, char *clib_file, int flush_ring)
{
serialize_main_t m;
clib_error_t *error;
- error = serialize_open_unix_file (&m, unix_file);
+ error = serialize_open_clib_file (&m, clib_file);
if (error)
return error;
error = serialize (&m, serialize_elog_main, em, flush_ring);
return error;
}
+clib_error_t *elog_write_file_not_inline (elog_main_t * em, char *clib_file,
+ int flush_ring);
+
always_inline clib_error_t *
-elog_read_file (elog_main_t * em, char *unix_file)
+elog_read_file (elog_main_t * em, char *clib_file)
{
serialize_main_t m;
clib_error_t *error;
- error = unserialize_open_unix_file (&m, unix_file);
+ error = unserialize_open_clib_file (&m, clib_file);
if (error)
return error;
error = unserialize (&m, unserialize_elog_main, em);
return error;
}
+clib_error_t *elog_read_file_not_inline (elog_main_t * em, char *clib_file);
+char *format_one_elog_event (void *em_arg, void *ep_arg);
+
#endif /* CLIB_UNIX */
#endif /* included_clib_elog_h */