summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/vnet/bonding/device.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/vnet/bonding/device.c b/src/vnet/bonding/device.c
index e14d08a2f9e..c69d5a40145 100644
--- a/src/vnet/bonding/device.c
+++ b/src/vnet/bonding/device.c
@@ -28,10 +28,11 @@
#include <vnet/ip-neighbor/ip4_neighbor.h>
#include <vnet/ip-neighbor/ip6_neighbor.h>
-#define foreach_bond_tx_error \
- _(NONE, "no error") \
- _(IF_DOWN, "interface down") \
- _(NO_MEMBER, "no member")
+#define foreach_bond_tx_error \
+ _ (NONE, "no error") \
+ _ (IF_DOWN, "interface down") \
+ _ (BAD_LB_MODE, "bad load balance mode") \
+ _ (NO_MEMBER, "no member")
typedef enum
{
@@ -762,7 +763,15 @@ VNET_DEVICE_CLASS_TX_FN (bond_dev_class) (vlib_main_t * vm,
else if (bif->lb == BOND_LB_RR)
bond_tx_inline (vm, bif, bufs, hashes, n_left, n_members, BOND_LB_RR);
else
- ASSERT (0);
+ {
+ vlib_buffer_free (vm, vlib_frame_vector_args (frame), frame->n_vectors);
+ vlib_increment_simple_counter (
+ vnet_main.interface_main.sw_if_counters + VNET_INTERFACE_COUNTER_DROP,
+ thread_index, bif->sw_if_index, frame->n_vectors);
+ vlib_error_count (vm, node->node_index, BOND_TX_ERROR_BAD_LB_MODE,
+ frame->n_vectors);
+ return frame->n_vectors;
+ }
/* calculate port out of hash */
h = hashes;