X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fpg%2Fstream.c;h=bf0eac370aa678c7360a20e76caf708136b912b0;hb=9e829a856fdf88b3ea5770048ea20dcd50d1b4eb;hp=1ed7189ffc9e54a91551494c05501ca13f2effb2;hpb=7cd468a3d7dee7d6c92f69a0bb7061ae208ec727;p=vpp.git diff --git a/src/vnet/pg/stream.c b/src/vnet/pg/stream.c index 1ed7189ffc9..bf0eac370aa 100644 --- a/src/vnet/pg/stream.c +++ b/src/vnet/pg/stream.c @@ -94,6 +94,25 @@ pg_stream_enable_disable (pg_main_t * pg, pg_stream_t * s, int want_enabled) s->time_last_generate = 0; } +static u8 * +format_pg_output_trace (u8 * s, va_list * va) +{ + CLIB_UNUSED (vlib_main_t * vm) = va_arg (*va, vlib_main_t *); + CLIB_UNUSED (vlib_node_t * node) = va_arg (*va, vlib_node_t *); + pg_output_trace_t *t = va_arg (*va, pg_output_trace_t *); + u32 indent = format_get_indent (s); + + s = format (s, "%Ubuffer 0x%x: %U", + format_white_space, indent, + t->buffer_index, format_vnet_buffer, &t->buffer); + + s = format (s, "\n%U%U", format_white_space, indent, + format_ethernet_header_with_length, t->buffer.pre_data, + sizeof (t->buffer.pre_data)); + + return s; +} + static u8 * format_pg_interface_name (u8 * s, va_list * args) { @@ -125,6 +144,7 @@ VNET_DEVICE_CLASS (pg_dev_class) = { .name = "pg", .tx_function = pg_output, .format_device_name = format_pg_interface_name, + .format_tx_trace = format_pg_output_trace, .admin_up_down_function = pg_interface_admin_up_down, }; /* *INDENT-ON* */ @@ -185,7 +205,7 @@ pg_interface_add_or_get (pg_main_t * pg, uword if_id) rnd = (u32) (now * 1e6); rnd = random_u32 (&rnd); - clib_memcpy (hw_addr + 2, &rnd, sizeof (rnd)); + clib_memcpy_fast (hw_addr + 2, &rnd, sizeof (rnd)); hw_addr[0] = 2; hw_addr[1] = 0xfe; @@ -203,10 +223,6 @@ pg_interface_add_or_get (pg_main_t * pg, uword if_id) CLIB_CACHE_LINE_BYTES); *pi->lockp = 0; } - - ip4_sw_interface_enable_disable (pi->hw_if_index, 1); - ip6_sw_interface_enable_disable (pi->hw_if_index, 1); - mpls_sw_interface_enable_disable (&mpls_main, pi->hw_if_index, 1); } return i; @@ -317,10 +333,10 @@ pg_edit_group_get_fixed_packet_data (pg_stream_t * s, vec_foreach (e, g->edits) do_edit (s, g, e, /* want_commit */ 0); - clib_memcpy (packet_data, g->fixed_packet_data, - vec_len (g->fixed_packet_data)); - clib_memcpy (packet_data_mask, g->fixed_packet_data_mask, - vec_len (g->fixed_packet_data_mask)); + clib_memcpy_fast (packet_data, g->fixed_packet_data, + vec_len (g->fixed_packet_data)); + clib_memcpy_fast (packet_data_mask, g->fixed_packet_data_mask, + vec_len (g->fixed_packet_data_mask)); } static void @@ -422,28 +438,14 @@ pg_stream_add (pg_main_t * pg, pg_stream_t * s_init) pg_buffer_index_t *bi; int n; -#if DPDK > 0 - s->buffer_bytes = VLIB_BUFFER_DATA_SIZE; -#endif - - if (!s->buffer_bytes) - s->buffer_bytes = s->max_packet_bytes; - - s->buffer_bytes = vlib_buffer_round_size (s->buffer_bytes); - + s->buffer_bytes = VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES; n = s->max_packet_bytes / s->buffer_bytes; n += (s->max_packet_bytes % s->buffer_bytes) != 0; vec_resize (s->buffer_indices, n); vec_foreach (bi, s->buffer_indices) - { - bi->free_list_index = - vlib_buffer_create_free_list (vm, s->buffer_bytes, - "pg stream %d buffer #%d", - s - pg->streams, - 1 + (bi - s->buffer_indices)); - } + bi->free_list_index = VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX; } /* Find an interface to use. */ @@ -468,7 +470,6 @@ pg_stream_add (pg_main_t * pg, pg_stream_t * s_init) void pg_stream_del (pg_main_t * pg, uword index) { - vlib_main_t *vm = vlib_get_main (); pg_stream_t *s; pg_buffer_index_t *bi; @@ -479,7 +480,6 @@ pg_stream_del (pg_main_t * pg, uword index) vec_foreach (bi, s->buffer_indices) { - vlib_buffer_delete_free_list (vm, bi->free_list_index); clib_fifo_free (bi->buffer_fifo); }