X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface_output.c;h=2a41271852ab39f4f5880c1ea4706fbe4d71a293;hb=4f740c8f0085c0cd576744c00bf50a9d9b111470;hp=2e4f36005ad45138ad27f05ac85f7ad3ad7b36aa;hpb=a462c070ab9bf593d7ed3c454ea3267929550a62;p=vpp.git diff --git a/src/vnet/interface_output.c b/src/vnet/interface_output.c index 2e4f36005ad..2a41271852a 100644 --- a/src/vnet/interface_output.c +++ b/src/vnet/interface_output.c @@ -352,7 +352,7 @@ tso_segment_buffer (vlib_main_t * vm, vnet_interface_per_thread_data_t * ptd, vlib_buffer_t *b0 = vlib_get_buffer (vm, ptd->split_buffers[0]); tso_init_buf_from_template_base (b0, sb0, default_bflags, - l4_hdr_sz + first_data_size); + l234_sz + first_data_size); u32 total_src_left = n_bytes_b0 - l234_sz - first_data_size; if (total_src_left) @@ -410,7 +410,7 @@ tso_segment_buffer (vlib_main_t * vm, vnet_interface_per_thread_data_t * ptd, csbi0 = next_bi; csb0 = vlib_get_buffer (vm, csbi0); src_left = csb0->current_length; - src_ptr = csb0->data; + src_ptr = vlib_buffer_get_current (csb0); } else { @@ -713,6 +713,7 @@ vnet_interface_output_node_inline_gso (vlib_main_t * vm, { drop_one_buffer_and_count (vm, vnm, node, from - 1, VNET_INTERFACE_OUTPUT_ERROR_NO_BUFFERS_FOR_GSO); + b += 1; continue; } @@ -737,17 +738,14 @@ vnet_interface_output_node_inline_gso (vlib_main_t * vm, vlib_get_new_next_frame (vm, node, next_index, to_tx, n_left_to_tx); } - else + while (n_tx_bufs > 0) { - while (n_tx_bufs > 0) - { - to_tx[0] = from_tx_seg[0]; - to_tx += 1; - from_tx_seg += 1; - n_left_to_tx -= 1; - n_tx_bufs -= 1; - n_packets += 1; - } + to_tx[0] = from_tx_seg[0]; + to_tx += 1; + from_tx_seg += 1; + n_left_to_tx -= 1; + n_tx_bufs -= 1; + n_packets += 1; } } n_bytes += n_tx_bytes; @@ -763,6 +761,7 @@ vnet_interface_output_node_inline_gso (vlib_main_t * vm, _vec_len (ptd->split_buffers) = 0; /* Free the now segmented buffer */ vlib_buffer_free_one (vm, bi0); + b += 1; continue; } }