[PATCH v12 0/6] flow_parser: add shared parser library
Lukáš Šišmiš
sismis at dyna-nic.com
Tue May 5 20:46:23 CEST 2026
út 5. 5. 2026 v 20:39 odesílatel Lukas Sismis <sismis at dyna-nic.com> napsal:
> This series extracts the testpmd flow CLI parser into a reusable library,
> enabling external applications to parse rte_flow rules using testpmd
> syntax.
>
> Motivation
> ----------
> External applications like Suricata IDS [1] need to express hardware
> filtering
> rules in a consistent, human-readable format. Rather than inventing custom
> syntax, reusing testpmd's well-tested flow grammar provides immediate
> compatibility with existing documentation and user knowledge.
>
> Note: This library provides only one way to create rte_flow structures.
> Applications can also construct rte_flow_attr, rte_flow_item[], and
> rte_flow_action[] directly in C code.
>
> Design
> ------
> The library (librte_flow_parser) exposes the following APIs:
> - rte_flow_parser_parse_attr_str(): Parse attributes only
> - rte_flow_parser_parse_pattern_str(): Parse patterns only
> - rte_flow_parser_parse_actions_str(): Parse actions only
>
> Testpmd is updated to use the library, ensuring a single
> maintained parser implementation.
>
> Testing and Demo
> -------
> - Functional tests in dpdk-test
> - Example application: examples/flow_parsing
>
> Changes
> -------
> v12:
> - flipped the ethdev dependency on cmdline, now cmdline depends on ethdev
> - added Bruce's ACK from v11 to the MSVC commit
>
> v11:
> - targetting 26.07 now
> - MAJOR overhaul of the patch set to make every part of the library API
> public
> and reusable, while only parsing flow testpmd commands.
> - library splitted into a "simple" part and "cmdline" part
> - testpmd changed to use the "cmdline" part of the library, and also to
> handle
> most of the "set" commands itself, while still using the library to
> parse
> the parameters of the "set" commands. Previous "operation callbacks" are
> now
> replaced by command-codes (enum) and the caller is expected to handle
> the command execution itself. Likewise, the ownership of helper
> structures,
> e.g. for vxlan/raw/sample etc. is in the hands of the caller, and the
> library
> only uses/fills them in with the parsed parameters.
>
> v10:
> - rebased to avoid Github Actions CI build failure
> - merge conflict solved in rel_notes/release_26_03.rst
> - release notes shortened
>
> v9:
> - removed extra new line from the flow parser docs file
>
> v8:
> - rte_port/queue_id_t typedefs removal to be included in a separate patch
> series
> - move of accidental changes of rte_flow parser library from the testpmd
> commit
> - DynaNIC copyright name update
>
> v7:
> - Fixed implicit integer comparison (while (left) -> while (left != 0))
> - NULL checks fixed
> - arpa header removed for Windows compatibility
> - minor comments from the last review addressed
>
> v6:
> - Inconsistent Experimental API Version adjusted
> - Fixes Tag added to MSVC build commit
> - Non-Standard Header Guards updated
> - Implicit Pointer Comparison and Return Type issues addressed in many
> places
> - commit message in patch 6 updated
>
> v5:
> - removed/replaced (f)printf code from the library
> - reverted back to exporting the internal/private API as it is needed by
> testpmd and cannot be easily split further.
> - adjusted length of certain lines
> - marking port/queue id typedef as experimental
> - updated release rel_notes
> - copyeright adjustments
>
> v4:
> - ethdev changes in separate commit
> - library's public API only exposes attribute, pattern and action parsing,
> while the full command parsing is kept internal for testpmd usage only.
> - Addressed Stephen's comments from V3
> - dpdk-test now have tests focused on public and internal library functions
>
> v3:
> - Add more functional tests
> - More concise MAINTAINERS updates
> - Updated license headers
> - A thing to note: When playing with flow commands, I figured, some may use
> non-flow commands, such as raw decap/encap, policy meter and others.
> Flow parser library itself now supports `set` command to set e.g. the
> decap/
> encap parameters, as the flow syntax only supports defining the index of
> the
> encap/decap configs. The library, however, does not support e.g. `create`
> command to create policy meters, as that is just an ID and it can be
> created
> separately using rte_meter APIs.
>
> [1] https://github.com/OISF/suricata/pull/13950
>
> Lukas Sismis (6):
> cmdline: include stddef.h for MSVC compatibility
> ethdev: add RSS type helper APIs
> ethdev: add flow parser library
> app/testpmd: use flow parser from ethdev
> examples/flow_parsing: add flow parser demo
> test: add flow parser functional tests
>
> MAINTAINERS | 6 +-
> app/test-pmd/cmd_flex_item.c | 47 +-
> app/test-pmd/cmdline.c | 249 +-
> app/test-pmd/config.c | 115 +-
> app/test-pmd/flow_parser.c | 288 +
> app/test-pmd/flow_parser_cli.c | 478 +
> app/test-pmd/meson.build | 3 +-
> app/test-pmd/testpmd.h | 135 +-
> app/test/meson.build | 2 +
> app/test/test_ethdev_api.c | 56 +
> app/test/test_flow_parser.c | 790 +
> app/test/test_flow_parser_simple.c | 445 +
> doc/api/doxy-api-index.md | 2 +
> doc/guides/prog_guide/flow_parser_lib.rst | 99 +
> doc/guides/prog_guide/index.rst | 1 +
> doc/guides/rel_notes/release_26_07.rst | 11 +
> doc/guides/sample_app_ug/flow_parsing.rst | 60 +
> doc/guides/sample_app_ug/index.rst | 1 +
> examples/flow_parsing/main.c | 409 +
> examples/flow_parsing/meson.build | 8 +
> examples/meson.build | 1 +
> lib/cmdline/cmdline_parse.h | 2 +
> lib/cmdline/meson.build | 8 +-
> lib/cmdline/rte_flow_parser_cmdline.c | 138 +
> lib/cmdline/rte_flow_parser_cmdline.h | 82 +
> lib/ethdev/meson.build | 3 +
> lib/ethdev/rte_ethdev.c | 109 +
> lib/ethdev/rte_ethdev.h | 60 +
> .../ethdev/rte_flow_parser.c | 12350 ++++++++--------
> lib/ethdev/rte_flow_parser.h | 130 +
> lib/ethdev/rte_flow_parser_config.h | 583 +
> lib/ethdev/rte_flow_parser_internal.h | 124 +
> lib/meson.build | 4 +-
> 33 files changed, 10157 insertions(+), 6642 deletions(-)
> create mode 100644 app/test-pmd/flow_parser.c
> create mode 100644 app/test-pmd/flow_parser_cli.c
> create mode 100644 app/test/test_flow_parser.c
> create mode 100644 app/test/test_flow_parser_simple.c
> create mode 100644 doc/guides/prog_guide/flow_parser_lib.rst
> create mode 100644 doc/guides/sample_app_ug/flow_parsing.rst
> create mode 100644 examples/flow_parsing/main.c
> create mode 100644 examples/flow_parsing/meson.build
> create mode 100644 lib/cmdline/rte_flow_parser_cmdline.c
> create mode 100644 lib/cmdline/rte_flow_parser_cmdline.h
> rename app/test-pmd/cmdline_flow.c => lib/ethdev/rte_flow_parser.c (59%)
> create mode 100644 lib/ethdev/rte_flow_parser.h
> create mode 100644 lib/ethdev/rte_flow_parser_config.h
> create mode 100644 lib/ethdev/rte_flow_parser_internal.h
>
> --
> 2.43.7
>
>
Apparently, I missed documenting one field, so GH Actions will fail. But
Stephen, can you please check and decide if this direction is viable? I
didn't make the full parser part of the cmdline part, but now the cmdline
has a dependency on ethdev.
I generally think, no matter the way you look at it, some added dependency
will be present (and likely of cmdline on ethdev).
Thank you.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mails.dpdk.org/archives/dev/attachments/20260505/b764e205/attachment.htm>
More information about the dev
mailing list