diff options
Diffstat (limited to 'src/vnet/pg/input.c')
-rw-r--r-- | src/vnet/pg/input.c | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/src/vnet/pg/input.c b/src/vnet/pg/input.c index 17b7c518385..321472c4d85 100644 --- a/src/vnet/pg/input.c +++ b/src/vnet/pg/input.c @@ -965,7 +965,7 @@ pg_generate_fix_multi_buffer_lengths (pg_main_t * pg, if (vec_len (unused_buffers) > 0) { vlib_buffer_free_no_next (vm, unused_buffers, vec_len (unused_buffers)); - _vec_len (unused_buffers) = 0; + vec_set_len (unused_buffers, 0); } } @@ -1578,7 +1578,7 @@ fill_buffer_offload_flags (vlib_main_t *vm, u32 *buffers, u32 n_buffers, (VNET_BUFFER_F_IS_IP4 | VNET_BUFFER_F_L2_HDR_OFFSET_VALID | VNET_BUFFER_F_L3_HDR_OFFSET_VALID | VNET_BUFFER_F_L4_HDR_OFFSET_VALID); - if (buffer_oflags & VNET_BUFFER_OFFLOAD_F_IP_CKSUM) + if (buffer_oflags & VNET_BUFFER_OFFLOAD_F_IP_CKSUM || gso_enabled) oflags |= VNET_BUFFER_OFFLOAD_F_IP_CKSUM; } else if (PREDICT_TRUE (ethertype == ETHERNET_TYPE_IP6)) @@ -1596,7 +1596,7 @@ fill_buffer_offload_flags (vlib_main_t *vm, u32 *buffers, u32 n_buffers, if (l4_proto == IP_PROTOCOL_TCP) { - if (buffer_oflags & VNET_BUFFER_OFFLOAD_F_TCP_CKSUM) + if (buffer_oflags & VNET_BUFFER_OFFLOAD_F_TCP_CKSUM || gso_enabled) oflags |= VNET_BUFFER_OFFLOAD_F_TCP_CKSUM; /* only set GSO flag for chained buffers */ @@ -1639,8 +1639,8 @@ pg_generate_packets (vlib_node_runtime_t * node, pg_interface_t *pi; int i; - pi = pool_elt_at_index (pg->interfaces, - pg->if_id_by_sw_if_index[s->sw_if_index[VLIB_RX]]); + pi = pool_elt_at_index ( + pg->interfaces, pg->if_index_by_sw_if_index[s->sw_if_index[VLIB_RX]]); bi0 = s->buffer_indices; n_packets_in_fifo = pg_stream_fill (pg, s, n_packets_to_generate); @@ -1657,7 +1657,11 @@ pg_generate_packets (vlib_node_runtime_t * node, } if (PREDICT_FALSE (pi->coalesce_enabled)) - vnet_gro_flow_table_schedule_node_on_dispatcher (vm, pi->flow_table); + { + vnet_hw_if_tx_queue_t txq = { 0 }; + vnet_gro_flow_table_schedule_node_on_dispatcher (vm, &txq, + pi->flow_table); + } while (n_packets_to_generate > 0) { @@ -1812,17 +1816,14 @@ pg_input (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) if (vlib_num_workers ()) worker_index = vlib_get_current_worker_index (); - /* *INDENT-OFF* */ clib_bitmap_foreach (i, pg->enabled_streams[worker_index]) { pg_stream_t *s = vec_elt_at_index (pg->streams, i); n_packets += pg_input_stream (node, pg, s); } - /* *INDENT-ON* */ return n_packets; } -/* *INDENT-OFF* */ VLIB_REGISTER_NODE (pg_input_node) = { .function = pg_input, .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, @@ -1835,7 +1836,6 @@ VLIB_REGISTER_NODE (pg_input_node) = { /* Input node will be left disabled until a stream is active. */ .state = VLIB_NODE_STATE_DISABLED, }; -/* *INDENT-ON* */ VLIB_NODE_FN (pg_input_mac_filter) (vlib_main_t * vm, vlib_node_runtime_t * node, @@ -1860,9 +1860,9 @@ VLIB_NODE_FN (pg_input_mac_filter) (vlib_main_t * vm, pg_interface_t *pi; mac_address_t in; - pi = pool_elt_at_index - (pg->interfaces, - pg->if_id_by_sw_if_index[vnet_buffer (b[0])->sw_if_index[VLIB_RX]]); + pi = pool_elt_at_index ( + pg->interfaces, + pg->if_index_by_sw_if_index[vnet_buffer (b[0])->sw_if_index[VLIB_RX]]); eth = vlib_buffer_get_current (b[0]); mac_address_from_bytes (&in, eth->dst_address); @@ -1894,7 +1894,6 @@ VLIB_NODE_FN (pg_input_mac_filter) (vlib_main_t * vm, return (frame->n_vectors); } -/* *INDENT-OFF* */ VLIB_REGISTER_NODE (pg_input_mac_filter) = { .name = "pg-input-mac-filter", .vector_size = sizeof (u32), @@ -1908,7 +1907,6 @@ VNET_FEATURE_INIT (pg_input_mac_filter_feat, static) = { .arc_name = "device-input", .node_name = "pg-input-mac-filter", }; -/* *INDENT-ON* */ static clib_error_t * pg_input_mac_filter_cfg (vlib_main_t * vm, @@ -1946,13 +1944,11 @@ pg_input_mac_filter_cfg (vlib_main_t * vm, return NULL; } -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (enable_streams_cli, static) = { .path = "packet-generator mac-filter", .short_help = "packet-generator mac-filter <INTERFACE> <on|off>", .function = pg_input_mac_filter_cfg, }; -/* *INDENT-ON* */ /* |