summaryrefslogtreecommitdiffstats
path: root/src/vnet/pg
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/pg')
-rw-r--r--src/vnet/pg/cli.c4
-rw-r--r--src/vnet/pg/input.c5
-rw-r--r--src/vnet/pg/pg.h3
3 files changed, 11 insertions, 1 deletions
diff --git a/src/vnet/pg/cli.c b/src/vnet/pg/cli.c
index 9336ca406d7..b3aaddfda2b 100644
--- a/src/vnet/pg/cli.c
+++ b/src/vnet/pg/cli.c
@@ -376,6 +376,10 @@ new_stream (vlib_main_t * vm,
else if (unformat (input, "source pg%u", &s.if_id))
;
+ else if (unformat (input, "buffer-flags %U",
+ unformat_vnet_buffer_flags, &s.buffer_flags))
+ ;
+
else if (unformat (input, "node %U",
unformat_vlib_node, vm, &s.node_index))
;
diff --git a/src/vnet/pg/input.c b/src/vnet/pg/input.c
index bbcd34e763a..8ba3b361894 100644
--- a/src/vnet/pg/input.c
+++ b/src/vnet/pg/input.c
@@ -1106,6 +1106,8 @@ init_buffers_inline (vlib_main_t * vm,
b0 = vlib_get_buffer (vm, bi0);
b1 = vlib_get_buffer (vm, bi1);
+ b0->flags |= s->buffer_flags;
+ b1->flags |= s->buffer_flags;
vnet_buffer (b0)->sw_if_index[VLIB_RX] =
vnet_buffer (b1)->sw_if_index[VLIB_RX] = s->sw_if_index[VLIB_RX];
@@ -1135,6 +1137,7 @@ init_buffers_inline (vlib_main_t * vm,
n_left -= 1;
b0 = vlib_get_buffer (vm, bi0);
+ b0->flags |= s->buffer_flags;
vnet_buffer (b0)->sw_if_index[VLIB_RX] = s->sw_if_index[VLIB_RX];
vnet_buffer (b0)->sw_if_index[VLIB_TX] = s->sw_if_index[VLIB_TX];
@@ -1269,7 +1272,7 @@ pg_stream_fill_replay (pg_main_t * pg, pg_stream_t * s, u32 n_alloc)
clib_memcpy_fast (b->data, d0 + data_offset, bytes_this_chunk);
vnet_buffer (b)->sw_if_index[VLIB_RX] = s->sw_if_index[VLIB_RX];
vnet_buffer (b)->sw_if_index[VLIB_TX] = s->sw_if_index[VLIB_TX];
- b->flags = 0;
+ b->flags = s->buffer_flags;
b->next_buffer = 0;
b->current_data = 0;
b->current_length = bytes_this_chunk;
diff --git a/src/vnet/pg/pg.h b/src/vnet/pg/pg.h
index 55bc75dc282..a6616d9ced7 100644
--- a/src/vnet/pg/pg.h
+++ b/src/vnet/pg/pg.h
@@ -123,6 +123,9 @@ typedef struct pg_stream_t
for max_packet_bytes. */
u32 buffer_bytes;
+ /* Buffer flags to set in each packet e.g. checksum offload flags */
+ u32 buffer_flags;
+
/* Last packet length if packet size edit type is increment. */
u32 last_increment_packet_size;