diff options
Diffstat (limited to 'src/vnet/flow')
-rw-r--r-- | src/vnet/flow/flow.h | 4 | ||||
-rw-r--r-- | src/vnet/flow/flow_cli.c | 19 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/vnet/flow/flow.h b/src/vnet/flow/flow.h index 313e85c45f9..194579b88d8 100644 --- a/src/vnet/flow/flow.h +++ b/src/vnet/flow/flow.h @@ -252,6 +252,10 @@ typedef struct /* queue for VNET_FLOW_ACTION_REDIRECT_TO_QUEUE */ u32 redirect_queue; + /* start queue index and queue numbers for RSS queue group */ + u32 queue_index; + u32 queue_num; + /* buffer offset for VNET_FLOW_ACTION_BUFFER_ADVANCE */ i32 buffer_advance; diff --git a/src/vnet/flow/flow_cli.c b/src/vnet/flow/flow_cli.c index f3e6c3912bd..5f44a099f57 100644 --- a/src/vnet/flow/flow_cli.c +++ b/src/vnet/flow/flow_cli.c @@ -364,6 +364,7 @@ test_flow (vlib_main_t * vm, unformat_input_t * input, int rv; u32 teid = 0, session_id = 0, spi = 0; u32 vni = 0; + u32 queue_start = 0, queue_end = 0; vnet_flow_type_t type = VNET_FLOW_TYPE_UNKNOWN; ip4_address_and_mask_t ip4s = { }; ip4_address_and_mask_t ip4d = { }; @@ -522,6 +523,21 @@ test_flow (vlib_main_t * vm, unformat_input_t * input, #undef _ flow.actions |= VNET_FLOW_ACTION_RSS; } + else if (unformat (line_input, "rss queues")) + { + if (unformat (line_input, "%d to %d", &queue_start, &queue_end)) + ; + else + { + return clib_error_return (0, "unknown input `%U'", + format_unformat_error, line_input); + } + + flow.queue_index = queue_start; + flow.queue_num = queue_end - queue_start + 1; + + flow.actions |= VNET_FLOW_ACTION_RSS; + } else if (unformat (line_input, "%U", unformat_vnet_hw_interface, vnm, &hw_if_index)) ; @@ -728,7 +744,8 @@ VLIB_CLI_COMMAND (test_flow_command, static) = { "[spec <spec string>] [mask <mask string>]" "[next-node <node>] [mark <id>] [buffer-advance <len>] " "[redirect-to-queue <queue>] [drop] " - "[rss function <name>] [rss types <flow type>]", + "[rss function <name>] [rss types <flow type>]" + "[rss queues <queue_start> to <queue_end>]", .function = test_flow, }; /* *INDENT-ON* */ |