On 5/27/2026 3:25 PM, Bruce Richardson wrote:
On Mon, May 25, 2026 at 03:06:22PM +0100, Anatoly Burakov wrote:
Currently, each driver has their own code for action parsing, which results
in a lot of duplication and subtle mismatches in behavior between drivers.

Add common infrastructure, based on the following assumptions:

- All drivers support at most 4 actions at once, but usually less
- Not every action is supported by all drivers
- We can check a few common things to filter out obviously wrong actions
- Driver performs semantic checks on all valid actions

So, the intention is to reject everything we can reasonably reject at the
outset without knowing anything about the drivers, parametrize what is
trivial to parametrize, and leave the rest for the driver to implement.

While we're at it, also add logging infrastructure for Intel common code,
using the new component name defines that are automatically passed to each
DPDK driver as it is being built.

Signed-off-by: Anatoly Burakov <[email protected]>
---
<snip>

+
+static inline int
+__flow_action_check_rss(const struct rte_flow_action_rss *rss,
+               const struct ci_flow_actions_check_param *param,
+               struct rte_flow_error *error)
+{
+       uint32_t qnum, q;
+
+       qnum = rss->queue_num;
+
+       /* either we have both queues and queue number, or we have neither */
+       if ((qnum == 0) != (rss->queue == NULL)) {
+               return rte_flow_error_set(error, EINVAL,
+                       RTE_FLOW_ERROR_TYPE_ACTION_CONF, rss,
+                       "If queue number is specified, queue array must also be 
specified");
+       }
+       /* check if queues are monotonic */
+       for (q = 1; q < qnum; q++) {
+               if (rss->queue[q] < rss->queue[q - 1]) {
+                       return rte_flow_error_set(error, EINVAL,
+                               RTE_FLOW_ERROR_TYPE_ACTION_CONF, rss,
+                               "RSS queues must be in ascending order");
+               }
+               /* if user has requested contiguousness, check that as well */
+               if (param == NULL || !param->rss_queues_contig)
+                       continue;
+               if (rss->queue[q] != rss->queue[0] + q) {
+                       return rte_flow_error_set(error, EINVAL,
+                               RTE_FLOW_ERROR_TYPE_ACTION_CONF, rss,
+                               "RSS queues must be contiguous");
+               }
+       }
+       /* if user has requested to check for queue contiguousness, do it */
+       if (param != NULL && param->rss_queues_contig) {
+       }
+

Empty block, and I don't see it filled in later patches. Is this for future
use, or just an oversight? I see the check for contiguity done in the loop
above.


It's rather a merge rebase error...

--
Thanks,
Anatoly

Reply via email to