aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vnet/gso/node.c65
-rw-r--r--src/vnet/interface.c1
-rw-r--r--src/vnet/interface_funcs.h2
3 files changed, 52 insertions, 16 deletions
diff --git a/src/vnet/gso/node.c b/src/vnet/gso/node.c
index 5814aad4b0d..5e793a5cffd 100644
--- a/src/vnet/gso/node.c
+++ b/src/vnet/gso/node.c
@@ -25,6 +25,30 @@
#include <vnet/ip/ip6.h>
#include <vnet/udp/udp_packet.h>
+#define foreach_gso_error \
+ _ (NO_BUFFERS, "no buffers to segment GSO") \
+ _ (UNHANDLED_TYPE, "unhandled gso type")
+
+static char *gso_error_strings[] = {
+#define _(sym, string) string,
+ foreach_gso_error
+#undef _
+};
+
+typedef enum
+{
+#define _(sym, str) GSO_ERROR_##sym,
+ foreach_gso_error
+#undef _
+ GSO_N_ERROR,
+} gso_error_t;
+
+typedef enum
+{
+ GSO_NEXT_DROP,
+ GSO_N_NEXT,
+} gso_next_t;
+
typedef struct
{
u32 flags;
@@ -459,9 +483,8 @@ drop_one_buffer_and_count (vlib_main_t * vm, vnet_main_t * vnm,
vlib_error_drop_buffers (vm, node, pbi0,
/* buffer stride */ 1,
- /* n_buffers */ 1,
- VNET_INTERFACE_OUTPUT_NEXT_DROP,
- node->node_index, drop_error_code);
+ /* n_buffers */ 1, GSO_NEXT_DROP, node->node_index,
+ drop_error_code);
}
static_always_inline uword
@@ -670,7 +693,7 @@ vnet_gso_node_inline (vlib_main_t * vm,
/* not supported yet */
drop_one_buffer_and_count (vm, vnm, node, from - 1,
hi->sw_if_index,
- VNET_INTERFACE_OUTPUT_ERROR_UNHANDLED_GSO_TYPE);
+ GSO_ERROR_UNHANDLED_TYPE);
b += 1;
continue;
}
@@ -689,7 +712,7 @@ vnet_gso_node_inline (vlib_main_t * vm,
{
drop_one_buffer_and_count (vm, vnm, node, from - 1,
hi->sw_if_index,
- VNET_INTERFACE_OUTPUT_ERROR_NO_BUFFERS_FOR_GSO);
+ GSO_ERROR_NO_BUFFERS);
b += 1;
continue;
}
@@ -822,8 +845,12 @@ VLIB_REGISTER_NODE (gso_l2_ip4_node) = {
.vector_size = sizeof (u32),
.format_trace = format_gso_trace,
.type = VLIB_NODE_TYPE_INTERNAL,
- .n_errors = 0,
- .n_next_nodes = 0,
+ .n_errors = ARRAY_LEN(gso_error_strings),
+ .error_strings = gso_error_strings,
+ .n_next_nodes = GSO_N_NEXT,
+ .next_nodes = {
+ [GSO_NEXT_DROP] = "error-drop",
+ },
.name = "gso-l2-ip4",
};
@@ -831,8 +858,12 @@ VLIB_REGISTER_NODE (gso_l2_ip6_node) = {
.vector_size = sizeof (u32),
.format_trace = format_gso_trace,
.type = VLIB_NODE_TYPE_INTERNAL,
- .n_errors = 0,
- .n_next_nodes = 0,
+ .n_errors = ARRAY_LEN(gso_error_strings),
+ .error_strings = gso_error_strings,
+ .n_next_nodes = GSO_N_NEXT,
+ .next_nodes = {
+ [GSO_NEXT_DROP] = "error-drop",
+ },
.name = "gso-l2-ip6",
};
@@ -840,8 +871,12 @@ VLIB_REGISTER_NODE (gso_ip4_node) = {
.vector_size = sizeof (u32),
.format_trace = format_gso_trace,
.type = VLIB_NODE_TYPE_INTERNAL,
- .n_errors = 0,
- .n_next_nodes = 0,
+ .n_errors = ARRAY_LEN(gso_error_strings),
+ .error_strings = gso_error_strings,
+ .n_next_nodes = GSO_N_NEXT,
+ .next_nodes = {
+ [GSO_NEXT_DROP] = "error-drop",
+ },
.name = "gso-ip4",
};
@@ -849,8 +884,12 @@ VLIB_REGISTER_NODE (gso_ip6_node) = {
.vector_size = sizeof (u32),
.format_trace = format_gso_trace,
.type = VLIB_NODE_TYPE_INTERNAL,
- .n_errors = 0,
- .n_next_nodes = 0,
+ .n_errors = ARRAY_LEN(gso_error_strings),
+ .error_strings = gso_error_strings,
+ .n_next_nodes = GSO_N_NEXT,
+ .next_nodes = {
+ [GSO_NEXT_DROP] = "error-drop",
+ },
.name = "gso-ip6",
};
diff --git a/src/vnet/interface.c b/src/vnet/interface.c
index 5c0ccaa900b..278cd6e50c3 100644
--- a/src/vnet/interface.c
+++ b/src/vnet/interface.c
@@ -993,7 +993,6 @@ vnet_register_interface (vnet_main_t * vnm,
static char *e[] = {
"interface is down",
"interface is deleted",
- "no buffers to segment GSO",
};
r.n_errors = ARRAY_LEN (e);
diff --git a/src/vnet/interface_funcs.h b/src/vnet/interface_funcs.h
index 9bcce3dd53c..14168406377 100644
--- a/src/vnet/interface_funcs.h
+++ b/src/vnet/interface_funcs.h
@@ -502,8 +502,6 @@ typedef enum
{
VNET_INTERFACE_OUTPUT_ERROR_INTERFACE_DOWN,
VNET_INTERFACE_OUTPUT_ERROR_INTERFACE_DELETED,
- VNET_INTERFACE_OUTPUT_ERROR_NO_BUFFERS_FOR_GSO,
- VNET_INTERFACE_OUTPUT_ERROR_UNHANDLED_GSO_TYPE,
} vnet_interface_output_error_t;
/* Format for interface output traces. */