From: Stephen Hemminger <stephen@networkplumber.org>
To: Lukas Sismis <sismis@dyna-nic.com>
Cc: dev@dpdk.org
Subject: Re: [RFC PATCH v2 0/7] flow_parser: add shared parser library
Date: Tue, 13 Jan 2026 09:46:19 -0800 [thread overview]
Message-ID: <20260113094619.14ab23ce@phoenix.local> (raw)
In-Reply-To: <20260106153838.398033-1-sismis@dyna-nic.com>
On Tue, 6 Jan 2026 16:38:30 +0100
Lukas Sismis <sismis@dyna-nic.com> wrote:
> 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:
> - rte_flow_parser_parse(): Parse command strings into structured output
> - 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 shared library, ensuring a single
> maintained parser implementation.
>
> Testing
> -------
> - Unit tests: flow_parser_autotest, flow_parser_helpers_autotest
> - Example application: examples/flow_parsing
> - All existing testpmd flow commands work unchanged
>
>
>
> [1] https://github.com/OISF/suricata/pull/13950
>
> Lukas Sismis (7):
> flow_parser: add shared parser library
> app/testpmd: integrate shared flow parser library
> examples/flow_parsing: add flow parser demo
> test: add flow parser unit tests
> doc: add flow parser library maintainers
> dts: fix invalid f-string syntax in testpmd API
> cmdline: include stddef.h before defining offsetof
>
> .mailmap | 2 +-
> MAINTAINERS | 3 +
> app/test-pmd/cmd_flex_item.c | 41 +-
> app/test-pmd/cmdline.c | 254 +-
> app/test-pmd/config.c | 112 +-
> app/test-pmd/flow_parser.c | 406 +
> app/test-pmd/flow_parser.h | 8 +
> app/test-pmd/flow_parser_cli.c | 149 +
> app/test-pmd/meson.build | 5 +-
> app/test-pmd/testpmd.c | 4 +
> app/test-pmd/testpmd.h | 126 +-
> app/test/meson.build | 1 +
> app/test/test_flow_parser.c | 226 +
> doc/guides/prog_guide/flow_parser_lib.rst | 140 +
> doc/guides/prog_guide/index.rst | 1 +
> doc/guides/rel_notes/release_26_03.rst | 9 +
> dts/api/testpmd/__init__.py | 8 +-
> examples/flow_parsing/main.c | 345 +
> examples/flow_parsing/meson.build | 11 +
> examples/meson.build | 1 +
> lib/cmdline/cmdline_parse.h | 2 +
> lib/ethdev/rte_ethdev.c | 107 +
> lib/ethdev/rte_ethdev.h | 60 +
> lib/flow_parser/meson.build | 6 +
> .../flow_parser/rte_flow_parser.c | 10774 ++++++++--------
> lib/flow_parser/rte_flow_parser.h | 1304 ++
> lib/meson.build | 2 +
> 27 files changed, 8600 insertions(+), 5507 deletions(-)
> create mode 100644 app/test-pmd/flow_parser.c
> create mode 100644 app/test-pmd/flow_parser.h
> create mode 100644 app/test-pmd/flow_parser_cli.c
> create mode 100644 app/test/test_flow_parser.c
> create mode 100644 doc/guides/prog_guide/flow_parser_lib.rst
> create mode 100644 examples/flow_parsing/main.c
> create mode 100644 examples/flow_parsing/meson.build
> create mode 100644 lib/flow_parser/meson.build
> rename app/test-pmd/cmdline_flow.c => lib/flow_parser/rte_flow_parser.c (57%)
> create mode 100644 lib/flow_parser/rte_flow_parser.h
>
Looks OK to me, so asked AI for second opinion.
It saw some things that do need to be fixed.
# DPDK Patch Review: Flow Parser Library (v2)
**Series:** `[PATCH v2 0/7]` flow_parser: add shared parser library
**Author:** Lukas Sismis <sismis@dyna-nic.com>
**Date:** Tue, 6 Jan 2026
**Reviewer:** AI Code Review Tool
---
## Series Overview
This patch series introduces `librte_flow_parser` as an optional, experimental library that exposes the testpmd flow CLI parser as a reusable component. The series is well-structured:
| Patch | Description |
|-------|-------------|
| 1/7 | Core library implementation (~15K lines) |
| 2/7 | testpmd integration - removes embedded parser, uses library |
| 3/7 | Example application demonstrating library usage |
| 4/7 | Unit tests for the parser |
| 5/7 | MAINTAINERS and .mailmap updates |
| 6/7 | DTS f-string syntax fix (tangential bugfix) |
| 7/7 | cmdline stddef.h include fix (tangential bugfix) |
---
## Errors (Must Fix)
### 1. Missing Copyright Lines in New Files
**Severity:** Error
**Rule:** SPDX license identifier must be followed by copyright notice
**Location:** Multiple files
Per DPDK guidelines, every source file must have SPDX identifier followed by copyright:
**`lib/flow_parser/rte_flow_parser.h`** (Patch 1):
```c
/* SPDX-License-Identifier: BSD-3-Clause */
#ifndef RTE_FLOW_PARSER_H
```
Missing: `Copyright(c) 2026 Dyna-NIC` line after SPDX
**`app/test/test_flow_parser.c`** (Patch 4):
```c
/* SPDX-License-Identifier: BSD-3-Clause */
#include <stdint.h>
```
Missing: Copyright line after SPDX
**Recommended fix:**
```c
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2026 Dyna-NIC
*/
```
---
### 2. Subject Lines Exceed 60 Characters
**Severity:** Error
**Rule:** Subject line maximum 60 characters
**Location:** Patches 2 and 7
| Patch | Length | Subject |
|-------|--------|---------|
| 2/7 | **64** | `[PATCH v2 2/7] app/testpmd: integrate shared flow parser library` |
| 7/7 | **65** | `[PATCH v2 7/7] cmdline: include stddef.h before defining offsetof` |
**Recommended fixes:**
- Patch 2: `app/testpmd: use shared flow parser library` (47 chars with prefix)
- Patch 7: `cmdline: include stddef.h for offsetof` (54 chars with prefix)
---
## Warnings (Should Fix)
### 3. Implicit Pointer/Integer Comparisons
**Severity:** Warning
**Rule:** Compare pointers explicitly with NULL, integers with zero
**Location:** `lib/flow_parser/rte_flow_parser.c`
Multiple instances use `!ptr` instead of `ptr == NULL`:
```c
// Current (non-compliant):
if (!data)
if (!ipv4->version_ihl)
if (!ops || !ops->port_validate)
if (!conf->select_ipv4)
// Should be:
if (data == NULL)
if (ipv4->version_ihl == 0)
if (ops == NULL || ops->port_validate == NULL)
if (conf->select_ipv4 == 0)
```
Affected locations include lines: 767, 783, 943, 999, 1012, 1053, 1091, 1104, 1167, 1381, 1390, 1393, 1658, 1668, 1678, 1688, 1699, 1709, 1720, 1730, and many more.
---
### 4. Missing Newline at End of File (Cross-Patch Fix)
**Severity:** Warning
**Rule:** Files must end with a newline
**Location:** `app/test-pmd/flow_parser.h`
Patch 2 creates this file without a trailing newline:
```
-#endif /* _TESTPMD_FLOW_PARSER_H_ */
\ No newline at end of file
```
Patch 3 fixes it, but each commit should compile independently. The fix should be in Patch 2.
---
### 5. MAINTAINERS Entry Missing Explicit Maintainer
**Severity:** Warning
**Rule:** New subsystems should have release notes and maintainer entries
**Location:** `MAINTAINERS`
The update adds files to the Flow API section:
```
F: lib/flow_parser/
F: app/test-pmd/flow_parser.c
F: doc/guides/prog_guide/flow_parser_lib.rst
```
However, no explicit `M:` (maintainer) entry is added. Consider adding:
```
Flow Parser Library
M: Lukas Sismis <sismis@dyna-nic.com>
F: lib/flow_parser/
F: doc/guides/prog_guide/flow_parser_lib.rst
```
---
## Info (Consider)
### 6. Unrelated Fixes Bundled in Series
Patches 6/7 and 7/7 fix issues unrelated to the flow parser:
- Patch 6: DTS f-string syntax fix
- Patch 7: cmdline stddef.h include
These should ideally be separate patch submissions with their own `Fixes:` tags if they address regressions. If they're prerequisites for the flow parser, this should be documented.
---
### 7. Code Structure Positive Notes
The series demonstrates good practices:
✓ New APIs marked as `__rte_experimental` (correctly on separate lines in headers)
✓ Release notes updated (`doc/guides/rel_notes/release_26_03.rst`)
✓ Documentation added (`doc/guides/prog_guide/flow_parser_lib.rst`)
✓ Unit tests added (`app/test/test_flow_parser.c`)
✓ Example application provided (`examples/flow_parsing/`)
✓ Proper use of `RTE_EXPORT_EXPERIMENTAL_SYMBOL`
✓ Thread-local storage for helper functions
✓ Commit messages don't start with "It"
---
## Checklist Summary
| Category | Status |
|----------|--------|
| SPDX + Copyright | ❌ Missing copyright in 2 files |
| Subject line ≤60 chars | ❌ 2 patches exceed limit |
| Subject lowercase (except acronyms) | ✓ |
| Correct component prefix | ✓ |
| Body ≤75 chars | ✓ |
| Signed-off-by present | ✓ |
| __rte_experimental placement | ✓ |
| New APIs experimental | ✓ |
| Release notes | ✓ |
| Documentation | ✓ |
| Tests added | ✓ |
| Explicit comparisons | ❌ Multiple implicit comparisons |
| Each commit compiles | ⚠️ Missing newline issue |
---
## Recommended Actions for v3
1. **Add copyright lines** to `rte_flow_parser.h` and `test_flow_parser.c`
2. **Shorten subject lines** for patches 2 and 7
3. **Fix newline** at end of `flow_parser.h` in patch 2 (not patch 3)
4. **Consider** adding explicit `M:` entry in MAINTAINERS
5. **Consider** splitting patches 6-7 into separate series or adding dependency notes
6. **Consider** converting implicit comparisons to explicit style (lower priority, many occurrences)
---
*Review generated based on DPDK AGENTS.md guidelines*
next prev parent reply other threads:[~2026-01-13 17:46 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-06 15:38 [RFC PATCH v2 0/7] flow_parser: add shared parser library Lukas Sismis
2026-01-06 15:38 ` [PATCH v2 2/7] app/testpmd: integrate shared flow " Lukas Sismis
2026-01-06 15:38 ` [PATCH v2 3/7] examples/flow_parsing: add flow parser demo Lukas Sismis
2026-01-06 15:38 ` [PATCH v2 4/7] test: add flow parser unit tests Lukas Sismis
2026-01-06 18:04 ` Stephen Hemminger
2026-01-06 18:07 ` Stephen Hemminger
2026-01-06 15:38 ` [PATCH v2 5/7] doc: add flow parser library maintainers Lukas Sismis
2026-01-06 15:38 ` [PATCH v2 6/7] dts: fix invalid f-string syntax in testpmd API Lukas Sismis
2026-01-06 15:38 ` [PATCH v2 7/7] cmdline: include stddef.h before defining offsetof Lukas Sismis
2026-01-13 17:46 ` Stephen Hemminger [this message]
2026-01-15 9:01 ` [RFC PATCH v2 0/7] flow_parser: add shared parser library Lukáš Šišmiš
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=20260113094619.14ab23ce@phoenix.local \
--to=stephen@networkplumber.org \
--cc=dev@dpdk.org \
--cc=sismis@dyna-nic.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.