aboutsummaryrefslogtreecommitdiffstats
path: root/vnet/vnet/devices/dpdk/node.c
diff options
context:
space:
mode:
authorDave Barach <dave@barachs.net>2016-02-15 11:34:13 -0500
committerDave Barach <dave@barachs.net>2016-02-15 11:36:00 -0500
commitd81566ff92f011704f249372e62f0b5aff1d0653 (patch)
treeac5d95beb3a6476ef929673ae053e2146ace3fd5 /vnet/vnet/devices/dpdk/node.c
parent85cdbd0757e82ca7847ded666c7e1dd6fd04613d (diff)
Disable for-us udp/tcp checksum validation by default
This patch alters behavior for dpdk rx packets. Depending on test results, it may be necessary to extend the scheme to packets received on non-dpdk paravirtualized interfaces, and packets originating in the vpp stack itself. Change-Id: I8444232a90ff176e7d6a688e36801174575251a1 Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'vnet/vnet/devices/dpdk/node.c')
-rw-r--r--vnet/vnet/devices/dpdk/node.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/vnet/vnet/devices/dpdk/node.c b/vnet/vnet/devices/dpdk/node.c
index 770af2a0..b13d1368 100644
--- a/vnet/vnet/devices/dpdk/node.c
+++ b/vnet/vnet/devices/dpdk/node.c
@@ -542,7 +542,8 @@ static inline u32 dpdk_device_input ( dpdk_main_t * dm,
vlib_buffer_free_list_t * fl;
u8 efd_discard_burst = 0;
u16 ip_align_offset = 0;
-
+ u32 buffer_flags_template;
+
if (xd->admin_up == 0)
return 0;
@@ -563,6 +564,8 @@ static inline u32 dpdk_device_input ( dpdk_main_t * dm,
if (xd->pmd == VNET_DPDK_PMD_THUNDERX)
ip_align_offset = 6;
+ buffer_flags_template = dm->buffer_flags_template;
+
vec_reset_length (xd->d_trace_buffers);
trace_cnt = n_trace = vlib_get_trace_count (vm, node);
@@ -718,7 +721,7 @@ static inline u32 dpdk_device_input ( dpdk_main_t * dm,
b0->current_data += ip_align_offset;
}
- b0->flags = VLIB_BUFFER_TOTAL_LENGTH_VALID;
+ b0->flags = buffer_flags_template;
if (VMWARE_LENGTH_BUG_WORKAROUND)
b0->current_length -= 4;
@@ -1142,6 +1145,7 @@ void dpdk_io_thread (vlib_worker_thread_t * w,
u16 queue_id = 0;
vlib_node_runtime_t * node_trace;
u32 first_worker_index = 0;
+ u32 buffer_flags_template;
/* Wait until the dpdk init sequence is complete */
while (dm->io_thread_release == 0)
@@ -1186,6 +1190,8 @@ void dpdk_io_thread (vlib_worker_thread_t * w,
/* packet tracing is triggered on the dpdk-input node for ease-of-use */
node_trace = vlib_node_get_runtime (vm, dpdk_input_node.index);
+ buffer_flags_template = dm->buffer_flags_template;
+
/* And handle them... */
while (1)
{
@@ -1382,7 +1388,7 @@ void dpdk_io_thread (vlib_worker_thread_t * w,
b0->current_data = l3_offset0;
b0->current_length = mb->data_len - l3_offset0;
- b0->flags = VLIB_BUFFER_TOTAL_LENGTH_VALID;
+ b0->flags = buffer_flags_template;
if (VMWARE_LENGTH_BUG_WORKAROUND)
b0->current_length -= 4;
@@ -1585,6 +1591,7 @@ dpdk_io_input (vlib_main_t * vm,
u16 queue_id = 0;
vlib_node_runtime_t * node_trace;
static u32 first_worker_index;
+ u32 buffer_flags_template;
if (PREDICT_FALSE(num_workers_set == 0))
{
@@ -1613,6 +1620,8 @@ dpdk_io_input (vlib_main_t * vm,
/* packet tracing is triggered on the dpdk-input node for ease-of-use */
node_trace = vlib_node_get_runtime (vm, dpdk_input_node.index);
+ buffer_flags_template = dm->buffer_flags_template;
+
vec_foreach (xd, dm->devices)
{
u32 n_buffers;
@@ -1780,7 +1789,7 @@ dpdk_io_input (vlib_main_t * vm,
b0->current_data = l3_offset0;
b0->current_length = mb->data_len - l3_offset0;
- b0->flags = VLIB_BUFFER_TOTAL_LENGTH_VALID;
+ b0->flags = buffer_flags_template;
if (VMWARE_LENGTH_BUG_WORKAROUND)
b0->current_length -= 4;