út 5. 5. 2026 v 20:39 odesílatel Lukas Sismis <[email protected]> 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.

