aa52e5f0f9
The RSS expansion is based on DFS algorithm to traverse over the possible expansion paths. The current implementation breaks out, if it reaches the terminator of the "next nodes" array, instead of going backwards to try the next path. For example: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / vxlan / end actions rss level 2 types tcp end / end The paths found are: ETH IPV6 UDP VXLAN END ETH IPV6 UDP VXLAN ETH IPV4 TCP END ETH IPV6 UDP VXLAN ETH IPV6 TCP END The traversal stopped after getting to the terminator of the next nodes of the ETH node. It missed the rest of the nodes in the next nodes array of the VXLAN node. The fix is to go backwards when reaching the terminator of the current level and find if there is a "next node" to start traversing a new path. Using the above example, the flows will be: ETH IPV6 UDP VXLAN END ETH IPV6 UDP VXLAN ETH IPV4 TCP END ETH IPV6 UDP VXLAN ETH IPV6 TCP END ETH IPV6 UDP VXLAN IPV4 TCP END ETH IPV6 UDP VXLAN IPV6 TCP END The traversal will find additional paths, because it traverses through all the next nodes array of the VXLAN node. Fixes: 4ed05fcd441b ("ethdev: add flow API to expand RSS flows") Cc: stable@dpdk.org Signed-off-by: Lior Margalit <lmargalit@nvidia.com> Acked-by: Matan Azrad <matan@nvidia.com>