X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fbonding%2Fdevice.c;h=8a0c10922510df7a7ed8f23a111865c9ed3f52a9;hb=c73f3299ad765c87f57a0a810819d42c11b04d5e;hp=e14d08a2f9eb735a4fefc7c9ce21f815905e4d61;hpb=dc617b8df442f3e25197ec64ffd58d11411b0470;p=vpp.git diff --git a/src/vnet/bonding/device.c b/src/vnet/bonding/device.c index e14d08a2f9e..8a0c1092251 100644 --- a/src/vnet/bonding/device.c +++ b/src/vnet/bonding/device.c @@ -28,10 +28,11 @@ #include #include -#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 { @@ -421,11 +422,6 @@ bond_tx_inline (vlib_main_t * vm, bond_if_t * bif, vlib_buffer_t ** b, CLIB_PREFETCH (pb[3]->data, CLIB_CACHE_LINE_BYTES, LOAD); } - VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b[0]); - VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b[1]); - VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b[2]); - VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b[3]); - if (lb_alg == BOND_LB_L2) { h[0] = bond_lb_l2 (b[0]); @@ -473,8 +469,6 @@ bond_tx_inline (vlib_main_t * vm, bond_if_t * bif, vlib_buffer_t ** b, while (n_left > 0) { - VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b[0]); - if (bif->lb == BOND_LB_L2) h[0] = bond_lb_l2 (b[0]); else if (bif->lb == BOND_LB_L34) @@ -762,7 +756,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;