aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeale Ranns <neale@graphiant.com>2022-08-09 00:03:17 +0000
committerNeale Ranns <neale@graphiant.com>2022-08-10 00:18:05 +0000
commit5c7e579f77833537e27a265295773378835d4500 (patch)
treec789dbd303fff97988bba8f7073d65643efea656
parent0c50dbb7679039b02d4057fc6c45c87d96f8e7aa (diff)
bfd: Express node stats using the .api file
Type: improvement This method allows the assignment of a severity to the error. Signed-off-by: Neale Ranns <neale@graphiant.com> Change-Id: Id1a414a88018390d03bd6b16bd048a98903bab5a
-rw-r--r--src/vnet/bfd/bfd.api58
-rw-r--r--src/vnet/bfd/bfd_udp.c78
2 files changed, 77 insertions, 59 deletions
diff --git a/src/vnet/bfd/bfd.api b/src/vnet/bfd/bfd.api
index 3957a94f6a6..f573bc5309a 100644
--- a/src/vnet/bfd/bfd.api
+++ b/src/vnet/bfd/bfd.api
@@ -359,6 +359,64 @@ autoreply define bfd_udp_auth_deactivate
bool is_delayed;
};
+counters bfd_udp {
+ none {
+ severity info;
+ type counter64;
+ units "packets";
+ description "OK";
+ };
+ no_session {
+ severity error;
+ type counter64;
+ units "packets";
+ description "no-session";
+ };
+ bad {
+ severity error;
+ type counter64;
+ units "packets";
+ description "bad packet";
+ };
+ length {
+ severity error;
+ type counter64;
+ units "packets";
+ description "too short";
+ };
+ failed_verification {
+ severity error;
+ type counter64;
+ units "packets";
+ description "failed-verification";
+ };
+ src_mismatch {
+ severity error;
+ type counter64;
+ units "packets";
+ description "src-mismatch";
+ };
+ dst_mismatch {
+ severity error;
+ type counter64;
+ units "packets";
+ description "dst-mismatch";
+ };
+ ttl {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ttl";
+ };
+};
+
+paths {
+ "/err/bfd-udp4-input" "bfd";
+ "/err/bfd-udp6-input" "bfd";
+ "/err/bfd-udp4-echo-input" "bfd";
+ "/err/bfd-udp6-echo-input" "bfd";
+};
+
/*
* Local Variables:
* eval: (c-set-style "gnu")
diff --git a/src/vnet/bfd/bfd_udp.c b/src/vnet/bfd/bfd_udp.c
index 5a468e46d96..36ecdf1dbc9 100644
--- a/src/vnet/bfd/bfd_udp.c
+++ b/src/vnet/bfd/bfd_udp.c
@@ -40,6 +40,7 @@
#include <vnet/bfd/bfd_udp.h>
#include <vnet/bfd/bfd_main.h>
#include <vnet/bfd/bfd_api.h>
+#include <vnet/bfd/bfd.api_enum.h>
typedef struct
{
@@ -930,28 +931,6 @@ typedef enum
BFD_UDP_INPUT_N_NEXT,
} bfd_udp_input_next_t;
-/* Packet counters - BFD control frames */
-#define foreach_bfd_udp_error(F) \
- F (NO_SESSION, "no-session") \
- F (FAILED_VERIFICATION, "failed-verification") \
- F (SRC_MISMATCH, "src-mismatch") \
- F (DST_MISMATCH, "dst-mismatch") \
- F (TTL, "ttl")
-
-static char *bfd_udp_error_strings[] = {
-#define F(sym, string) string,
- foreach_bfd_error (F) foreach_bfd_udp_error (F)
-#undef F
-};
-
-typedef enum
-{
-#define F(sym, str) BFD_UDP_ERROR_##sym,
- foreach_bfd_error (F) foreach_bfd_udp_error (F)
-#undef F
- BFD_UDP_N_ERROR,
-} bfd_udp_error_t;
-
typedef enum
{
BFD_UDP_ECHO_INPUT_NEXT_NORMAL,
@@ -960,30 +939,11 @@ typedef enum
BFD_UDP_ECHO_INPUT_N_NEXT,
} bfd_udp_echo_input_next_t;
-/* Packet counters - BFD ECHO packets */
-#define foreach_bfd_udp_echo_error(F) \
- F (NONE, "good bfd echo packets (processed)") \
- F (BAD, "invalid bfd echo packets")
-
-static char *bfd_udp_echo_error_strings[] = {
-#define F(sym, string) string,
- foreach_bfd_udp_echo_error (F)
-#undef F
-};
-
-typedef enum
-{
-#define F(sym, str) BFD_UDP_ECHO_ERROR_##sym,
- foreach_bfd_udp_echo_error (F)
-#undef F
- BFD_UDP_ECHO_N_ERROR,
-} bfd_udp_echo_error_t;
-
-static_always_inline bfd_udp_error_t
+static_always_inline vl_counter_bfd_udp_enum_t
bfd_error_to_udp (bfd_error_t e)
{
/* The UDP error is a super set of the proto independent errors */
- return ((bfd_udp_error_t) e);
+ return ((vl_counter_bfd_udp_enum_t) e);
}
static void
@@ -1010,9 +970,9 @@ bfd_udp4_find_headers (vlib_buffer_t * b, ip4_header_t ** ip4,
*udp = (udp_header_t *) ((*ip4) + 1);
}
-static bfd_udp_error_t
-bfd_udp4_verify_transport (const ip4_header_t * ip4,
- const udp_header_t * udp, const bfd_session_t * bs)
+static vl_counter_bfd_udp_enum_t
+bfd_udp4_verify_transport (const ip4_header_t *ip4, const udp_header_t *udp,
+ const bfd_session_t *bs)
{
const bfd_udp_session_t *bus = &bs->udp;
const bfd_udp_key_t *key = &bus->key;
@@ -1063,7 +1023,7 @@ bfd_rpc_update_session (vlib_main_t *vm, u32 bs_idx, const bfd_pkt_t *pkt)
return err;
}
-static bfd_udp_error_t
+static vl_counter_bfd_udp_enum_t
bfd_udp4_scan (vlib_main_t *vm, vlib_buffer_t *b, bfd_session_t **bs_out)
{
const bfd_pkt_t *pkt = vlib_buffer_get_current (b);
@@ -1090,7 +1050,7 @@ bfd_udp4_scan (vlib_main_t *vm, vlib_buffer_t *b, bfd_session_t **bs_out)
pkt->head.length, udp_payload_length);
return BFD_UDP_ERROR_LENGTH;
}
- bfd_udp_error_t err;
+ vl_counter_bfd_udp_enum_t err;
if (BFD_UDP_ERROR_NONE !=
(err = bfd_error_to_udp (bfd_verify_pkt_common (pkt))))
{
@@ -1168,9 +1128,9 @@ bfd_udp6_find_headers (vlib_buffer_t * b, ip6_header_t ** ip6,
*udp = (udp_header_t *) ((*ip6) + 1);
}
-static bfd_udp_error_t
-bfd_udp6_verify_transport (const ip6_header_t * ip6,
- const udp_header_t * udp, const bfd_session_t * bs)
+static vl_counter_bfd_udp_enum_t
+bfd_udp6_verify_transport (const ip6_header_t *ip6, const udp_header_t *udp,
+ const bfd_session_t *bs)
{
const bfd_udp_session_t *bus = &bs->udp;
const bfd_udp_key_t *key = &bus->key;
@@ -1205,7 +1165,7 @@ bfd_udp6_verify_transport (const ip6_header_t * ip6,
return BFD_UDP_ERROR_NONE;
}
-static bfd_udp_error_t
+static vl_counter_bfd_udp_enum_t
bfd_udp6_scan (vlib_main_t *vm, vlib_buffer_t *b, bfd_session_t **bs_out)
{
const bfd_pkt_t *pkt = vlib_buffer_get_current (b);
@@ -1232,7 +1192,7 @@ bfd_udp6_scan (vlib_main_t *vm, vlib_buffer_t *b, bfd_session_t **bs_out)
pkt->head.length, udp_payload_length);
return BFD_UDP_ERROR_BAD;
}
- bfd_udp_error_t err;
+ vl_counter_bfd_udp_enum_t err;
if (BFD_UDP_ERROR_NONE !=
(err = bfd_error_to_udp (bfd_verify_pkt_common (pkt))))
{
@@ -1402,7 +1362,7 @@ VLIB_REGISTER_NODE (bfd_udp4_input_node, static) = {
.type = VLIB_NODE_TYPE_INTERNAL,
.n_errors = BFD_UDP_N_ERROR,
- .error_strings = bfd_udp_error_strings,
+ .error_counters = bfd_udp_error_counters,
.format_trace = bfd_input_format_trace,
@@ -1431,7 +1391,7 @@ VLIB_REGISTER_NODE (bfd_udp6_input_node, static) = {
.type = VLIB_NODE_TYPE_INTERNAL,
.n_errors = BFD_UDP_N_ERROR,
- .error_strings = bfd_udp_error_strings,
+ .error_counters = bfd_udp_error_counters,
.format_trace = bfd_input_format_trace,
@@ -1556,8 +1516,8 @@ VLIB_REGISTER_NODE (bfd_udp_echo4_input_node, static) = {
.vector_size = sizeof (u32),
.type = VLIB_NODE_TYPE_INTERNAL,
- .n_errors = BFD_UDP_ECHO_N_ERROR,
- .error_strings = bfd_udp_error_strings,
+ .n_errors = BFD_UDP_N_ERROR,
+ .error_counters = bfd_udp_error_counters,
.format_trace = bfd_echo_input_format_trace,
@@ -1585,8 +1545,8 @@ VLIB_REGISTER_NODE (bfd_udp_echo6_input_node, static) = {
.vector_size = sizeof (u32),
.type = VLIB_NODE_TYPE_INTERNAL,
- .n_errors = BFD_UDP_ECHO_N_ERROR,
- .error_strings = bfd_udp_echo_error_strings,
+ .n_errors = BFD_UDP_N_ERROR,
+ .error_counters = bfd_udp_error_counters,
.format_trace = bfd_echo_input_format_trace,