X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Fcounter.h;h=092bd00c8793d45ee2b2c13fc8504ff7c4c019ad;hb=00078b991365db97edf919567ca8b169ffd9b3e4;hp=fe5279a5e289b808b85b997113aac6de1e0b07bb;hpb=048a4e5a000017d0d632ebf02dcc23d9bf9ccf72;p=vpp.git diff --git a/src/vlib/counter.h b/src/vlib/counter.h index fe5279a5e28..092bd00c879 100644 --- a/src/vlib/counter.h +++ b/src/vlib/counter.h @@ -40,6 +40,8 @@ #ifndef included_vlib_counter_h #define included_vlib_counter_h +#include + /** \file Optimized thread-safe counters. @@ -50,9 +52,6 @@ The idea is to drastically eliminate atomic operations. */ -/** 64bit counters */ -typedef u64 counter_t; - /** A collection of simple counters */ typedef struct @@ -85,6 +84,22 @@ vlib_increment_simple_counter (vlib_simple_counter_main_t * cm, my_counters[index] += increment; } +/** Set a simple counter + @param cm - (vlib_simple_counter_main_t *) simple counter main pointer + @param thread_index - (u32) the current cpu index + @param index - (u32) index of the counter to increment + @param value - (u64) quantitiy to set to the counter +*/ +always_inline void +vlib_set_simple_counter (vlib_simple_counter_main_t * cm, + u32 thread_index, u32 index, u64 value) +{ + counter_t *my_counters; + + my_counters = cm->counters[thread_index]; + my_counters[index] = value; +} + /** Get the value of a simple counter Scrapes the entire set of per-thread counters. Innacurate unless worker threads which might increment the counter are @@ -135,14 +150,6 @@ vlib_zero_simple_counter (vlib_simple_counter_main_t * cm, u32 index) } } -/** Combined counter to hold both packets and byte differences. - */ -typedef struct -{ - counter_t packets; /**< packet counter */ - counter_t bytes; /**< byte counter */ -} vlib_counter_t; - /** Add two combined counters, results in the first counter @param [in,out] a - (vlib_counter_t *) dst counter @param b - (vlib_counter_t *) src counter