net/mlx5: support multiple groups and jump action
authorYongseok Koh <yskoh@mellanox.com>
Fri, 12 Oct 2018 08:42:33 +0000 (08:42 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 18 Oct 2018 08:24:39 +0000 (10:24 +0200)
commit31fda5187761f31bf280f72cdff63a5f1669afc8
tree0e66070c9961e4fb4a1fbcd813615f270c019ddd
parent0839bb69fe22c72a73654301652270451a457153
net/mlx5: support multiple groups and jump action

rte_flow has 'group' attribute and 'jump' action in order to support
multiple groups. This feature is known as multi-table support ('chain' in
linux TC flower) in general because a group means a table of flows. Example
commands are:

flow create 0 transfer priority 1 ingress
     pattern eth / vlan vid is 100 / end
     actions jump group 1 / end

flow create 0 transfer priority 1 ingress
     pattern eth / vlan vid is 200 / end
     actions jump group 2 / end

flow create 0 transfer group 1 priority 2 ingress
     pattern eth / vlan vid is 100 /
           ipv4 dst spec 192.168.40.0 dst prefix 24 / end
     actions drop / end

flow create 0 transfer group 1 priority 2 ingress
     pattern end
     actions of_pop_vlan / port_id id 1 / end

flow create 0 transfer group 2 priority 2 ingress
     pattern eth / vlan vid is 200 /
           ipv4 dst spec 192.168.40.0 dst prefix 24 / end
     actions of_pop_vlan / port_id id 2 / end

flow create 0 transfer group 2 priority 2 ingress
     pattern end
     actions port_id id 2 / end

With theses flows, if a packet having vlan 200 and src_ip as 192.168.40.1,
this packet will firstly hit the 1st flow. Then it will hit the 5th flow
because of the 'jump' action. As a result, the packet will be forwarded to
port 2 (VF representor) with vlan tag being stripped off. If the packet had
vlan 100 instead, it would be dropped by the 3rd flow.

Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
drivers/net/mlx5/Makefile
drivers/net/mlx5/meson.build
drivers/net/mlx5/mlx5_flow.h
drivers/net/mlx5/mlx5_flow_tcf.c