diff options
author | Andrew Yourtchenko <ayourtch@gmail.com> | 2019-06-13 15:23:21 +0000 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2019-07-24 18:16:41 +0000 |
commit | f995c7122ba0d024b17bc3232e8edd18d5e25088 (patch) | |
tree | 1bb44ddff0d009cf5e7fa62c8418b094edcaaa79 /src/plugins/acl/acl.h | |
parent | 025cd9c867bef937724535033ccdb979292b7714 (diff) |
acl: implement counters
implement per-acl-number counters in the stats segment.
They are created during the ACL creation,
the counters are incremented in the dataplane using
the new inline function with the extra parameter being
the packet size. Counting in shared segment adds
a noticeable overhead, so add also an API to
turn the counters on.
Type: feature
Change-Id: I8af7b0c31a3d986b68089eb52452aed45df66c7b
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
Diffstat (limited to 'src/plugins/acl/acl.h')
-rw-r--r-- | src/plugins/acl/acl.h | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/plugins/acl/acl.h b/src/plugins/acl/acl.h index 53650916423..229ee057725 100644 --- a/src/plugins/acl/acl.h +++ b/src/plugins/acl/acl.h @@ -27,6 +27,7 @@ #include <vppinfra/bihash_48_8.h> #include <vppinfra/bihash_40_8.h> #include <vppinfra/bihash_16_8.h> +#include <vlib/counter.h> #include "types.h" #include "fa_node.h" @@ -34,7 +35,7 @@ #include "lookup_context.h" #define ACL_PLUGIN_VERSION_MAJOR 1 -#define ACL_PLUGIN_VERSION_MINOR 3 +#define ACL_PLUGIN_VERSION_MINOR 4 #define UDP_SESSION_IDLE_TIMEOUT_SEC 600 #define TCP_SESSION_IDLE_TIMEOUT_SEC (3600*24) @@ -314,6 +315,11 @@ typedef struct { vnet_main_t * vnet_main; /* logging */ vlib_log_class_t log_default; + /* acl counters exposed via stats segment */ + volatile u32 *acl_counter_lock; + vlib_combined_counter_main_t *combined_acl_counters; + /* enable/disable ACL counters for interface processing */ + u32 interface_acl_counters_enabled; } acl_main_t; #define acl_log_err(...) \ @@ -326,6 +332,21 @@ typedef struct { vlib_log(VLIB_LOG_LEVEL_INFO, acl_main.log_default, __VA_ARGS__) +static inline void +acl_plugin_counter_lock (acl_main_t * am) +{ + if (am->acl_counter_lock) + while (clib_atomic_test_and_set (am->acl_counter_lock)) + /* zzzz */ ; +} + +static inline void +acl_plugin_counter_unlock (acl_main_t * am) +{ + if (am->acl_counter_lock) + clib_atomic_release (am->acl_counter_lock); +} + #define foreach_acl_eh \ _(HOPBYHOP , 0 , "IPv6ExtHdrHopByHop") \ |