public inbox for dev@dpdk.org
 help / color / mirror / Atom feed
From: Lukas Sismis <sismis@dyna-nic.com>
To: orika@nvidia.com
Cc: dev@dpdk.org, stephen@networkplumber.org, thomas@monjalon.net,
	Lukas Sismis <sismis@dyna-nic.com>
Subject: [PATCH v11 0/6] flow_parser: add shared parser library
Date: Fri, 10 Apr 2026 22:15:38 +0200	[thread overview]
Message-ID: <cover.1775850858.git.sismis@dyna-nic.com> (raw)

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
-------
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                |   479 +
 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                   |   791 +
 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/ethdev/meson.build                        |     5 +-
 lib/ethdev/rte_ethdev.c                       |   109 +
 lib/ethdev/rte_ethdev.h                       |    60 +
 .../ethdev/rte_flow_parser.c                  | 12250 ++++++++--------
 lib/ethdev/rte_flow_parser.h                  |   130 +
 lib/ethdev/rte_flow_parser_cmdline.h          |   739 +
 lib/meson.build                               |     2 +-
 29 files changed, 9936 insertions(+), 6569 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
 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_cmdline.h

-- 
2.43.7


             reply	other threads:[~2026-04-10 20:15 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-10 20:15 Lukas Sismis [this message]
2026-04-10 20:15 ` [PATCH v11 1/6] cmdline: include stddef.h for MSVC compatibility Lukas Sismis
2026-04-10 20:15 ` [PATCH v11 2/6] ethdev: add RSS type helper APIs Lukas Sismis
2026-04-10 20:15 ` [PATCH v11 3/6] ethdev: add flow parser library Lukas Sismis
2026-04-10 20:15 ` [PATCH v11 4/6] app/testpmd: use flow parser from ethdev Lukas Sismis
2026-04-10 20:15 ` [PATCH v11 5/6] examples/flow_parsing: add flow parser demo Lukas Sismis
2026-04-10 20:15 ` [PATCH v11 6/6] test: add flow parser functional tests Lukas Sismis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cover.1775850858.git.sismis@dyna-nic.com \
    --to=sismis@dyna-nic.com \
    --cc=dev@dpdk.org \
    --cc=orika@nvidia.com \
    --cc=stephen@networkplumber.org \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox