From 03b2695f17a297641e78b3901e17d617d893e3a7 Mon Sep 17 00:00:00 2001 From: Mohsin Kazmi Date: Wed, 16 Sep 2020 16:53:16 +0000 Subject: virtio: refactor tx trace Type: refactor Signed-off-by: Mohsin Kazmi Change-Id: I37fef2c32d0561b944b201a1012b87c7ac315e73 --- src/vnet/devices/virtio/device.c | 70 +++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 33 deletions(-) (limited to 'src/vnet/devices/virtio/device.c') diff --git a/src/vnet/devices/virtio/device.c b/src/vnet/devices/virtio/device.c index 1f1abfded77..6f7d1f664dc 100644 --- a/src/vnet/devices/virtio/device.c +++ b/src/vnet/devices/virtio/device.c @@ -99,6 +99,42 @@ format_virtio_tx_trace (u8 * s, va_list * va) return s; } +static_always_inline void +virtio_tx_trace (vlib_main_t * vm, vlib_node_runtime_t * node, + virtio_if_type_t type, vlib_buffer_t * b0, u32 bi) +{ + virtio_tx_trace_t *t; + t = vlib_add_trace (vm, node, b0, sizeof (t[0])); + t->sw_if_index = vnet_buffer (b0)->sw_if_index[VLIB_TX]; + t->buffer_index = bi; + if (type == VIRTIO_IF_TYPE_TUN) + { + int is_ip4 = 0, is_ip6 = 0; + + switch (((u8 *) vlib_buffer_get_current (b0))[0] & 0xf0) + { + case 0x40: + is_ip4 = 1; + break; + case 0x60: + is_ip6 = 1; + break; + default: + break; + } + vnet_generic_header_offset_parser (b0, &t->gho, 0, is_ip4, is_ip6); + } + else + vnet_generic_header_offset_parser (b0, &t->gho, 1, + b0->flags & + VNET_BUFFER_F_IS_IP4, + b0->flags & VNET_BUFFER_F_IS_IP6); + + clib_memcpy_fast (&t->buffer, b0, sizeof (*b0) - sizeof (b0->pre_data)); + clib_memcpy_fast (t->buffer.pre_data, vlib_buffer_get_current (b0), + sizeof (t->buffer.pre_data)); +} + static_always_inline void virtio_interface_drop_inline (vlib_main_t * vm, uword node_index, u32 * buffers, u16 n, @@ -555,43 +591,11 @@ retry: while (n_left && free_desc_count) { u16 n_added = 0; - virtio_tx_trace_t *t; vlib_buffer_t *b0 = vlib_get_buffer (vm, buffers[0]); if (b0->flags & VLIB_BUFFER_IS_TRACED) { - t = vlib_add_trace (vm, node, b0, sizeof (t[0])); - t->sw_if_index = vnet_buffer (b0)->sw_if_index[VLIB_TX]; - t->buffer_index = buffers[0]; - if (type == VIRTIO_IF_TYPE_TUN) - { - int is_ip4 = 0, is_ip6 = 0; - - switch (((u8 *) vlib_buffer_get_current (b0))[0] & 0xf0) - { - case 0x40: - is_ip4 = 1; - break; - case 0x60: - is_ip6 = 1; - break; - default: - break; - } - vnet_generic_header_offset_parser (b0, &t->gho, 0, is_ip4, - is_ip6); - } - else - vnet_generic_header_offset_parser (b0, &t->gho, 1, - b0->flags & - VNET_BUFFER_F_IS_IP4, - b0->flags & - VNET_BUFFER_F_IS_IP6); - - clib_memcpy_fast (&t->buffer, b0, - sizeof (*b0) - sizeof (b0->pre_data)); - clib_memcpy_fast (t->buffer.pre_data, vlib_buffer_get_current (b0), - sizeof (t->buffer.pre_data)); + virtio_tx_trace (vm, node, type, b0, buffers[0]); } n_added = add_buffer_to_slot (vm, vif, type, vring, buffers[0], free_desc_count, -- cgit 1.2.3-korg