Add possibility to use RTE_FLOW_ACTION_TYPE_QUEUE.
Signed-off-by: Serhii Iliushyk <sil-plv@napatech.com>
---
doc/guides/nics/features/ntnic.ini | 1 +
doc/guides/nics/ntnic.rst | 4 ++
doc/guides/rel_notes/release_24_11.rst | 1 +
.../profile_inline/flow_api_profile_inline.c | 37 +++++++++++++++++++
4 files changed, 43 insertions(+)
@@ -18,3 +18,4 @@ any = Y
[rte_flow actions]
port_id = Y
+queue = Y
@@ -42,6 +42,10 @@ Features
- Promiscuous mode (Enable only. The device always run promiscuous mode)
- Flow API support.
- Support for multiple rte_flow groups.
+- Multiple TX and RX queues.
+- Scattered and gather for TX and RX.
+- Jumbo frame support.
+- Traffic mirroring.
Limitations
~~~~~~~~~~~
@@ -162,6 +162,7 @@ New Features
* Added initialization of FPGA modules related to flow HW offload.
* Added basic handling of the virtual queues.
* Added flow handling support
+ * Enable virtual queues
* **Added cryptodev queue pair reset support.**
@@ -23,6 +23,15 @@
static void *flm_lrn_queue_arr;
+static int rx_queue_idx_to_hw_id(const struct flow_eth_dev *dev, int id)
+{
+ for (int i = 0; i < dev->num_queues; ++i)
+ if (dev->rx_queue[i].id == id)
+ return dev->rx_queue[i].hw_id;
+
+ return -1;
+}
+
struct flm_flow_key_def_s {
union {
struct {
@@ -349,6 +358,34 @@ static int interpret_flow_actions(const struct flow_eth_dev *dev,
break;
+ case RTE_FLOW_ACTION_TYPE_QUEUE:
+ NT_LOG(DBG, FILTER, "Dev:%p: RTE_FLOW_ACTION_TYPE_QUEUE", dev);
+
+ if (action[aidx].conf) {
+ struct rte_flow_action_queue queue_tmp;
+ const struct rte_flow_action_queue *queue =
+ memcpy_mask_if(&queue_tmp, action[aidx].conf,
+ action_mask ? action_mask[aidx].conf : NULL,
+ sizeof(struct rte_flow_action_queue));
+
+ int hw_id = rx_queue_idx_to_hw_id(dev, queue->index);
+
+ fd->dst_id[fd->dst_num_avail].owning_port_id = dev->port;
+ fd->dst_id[fd->dst_num_avail].id = hw_id;
+ fd->dst_id[fd->dst_num_avail].type = PORT_VIRT;
+ fd->dst_id[fd->dst_num_avail].active = 1;
+ fd->dst_num_avail++;
+
+ NT_LOG(DBG, FILTER,
+ "Dev:%p: RTE_FLOW_ACTION_TYPE_QUEUE port %u, queue index: %u, hw id %u",
+ dev, dev->port, queue->index, hw_id);
+
+ fd->full_offload = 0;
+ *num_queues += 1;
+ }
+
+ break;
+
default:
NT_LOG(ERR, FILTER, "Invalid or unsupported flow action received - %i",
action[aidx].type);