pipeline: auto-detect endianness of action arguments
authorCristian Dumitrescu <cristian.dumitrescu@intel.com>
Sun, 11 Apr 2021 23:23:38 +0000 (00:23 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 20 Apr 2021 19:55:43 +0000 (21:55 +0200)
commit783768136f29863b1473874cf328205a35b91f55
tree599a5fa21e0d5330b8c233b4cf5d16eb2411ff6f
parent0f5df4ea5ddfa2f04fa821a3fed149641bb55b32
pipeline: auto-detect endianness of action arguments

Each table entry is made up of match fields and action data, with the
latter made up of the action ID and the action arguments. The approach
of having the user specify explicitly the endianness of the action
arguments is difficult to be picked up by P4 compilers, as the P4
compiler is generally unaware about this aspect.

This commit introduces the auto-detection of the endianness of the
action arguments by examining the endianness of the their destination:
network byte order (NBO) when they get copied to headers and host byte
order (HBO) when they get copied to packet meta-data or mailboxes.

The endianness specification of each action argument as part of the
rule specification, e.g. H(...) and N(...) is removed from the rule
file and auto-detected based on their destination. The DMA instruction
scope is made internal, so mov instructions need to be used. The
pattern of transferring complete headers from table entry action args
to headers is detected, and the associated set of mov instructions
plus header validate is internally detected and replaced with the
internal-only DMA instruction to preserve performance.

Signed-off-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
examples/pipeline/examples/vxlan.spec
examples/pipeline/examples/vxlan_table.py
examples/pipeline/examples/vxlan_table.txt
lib/librte_pipeline/rte_swx_ctl.c
lib/librte_pipeline/rte_swx_ctl.h
lib/librte_pipeline/rte_swx_pipeline.c
lib/librte_pipeline/rte_swx_pipeline.h