On Fri, 13 Feb 2026 08:46:04 +0100
Lukáš Šišmiš <[email protected]> wrote:

> pá 13. 2. 2026 v 1:43 odesílatel Stephen Hemminger <
> [email protected]> napsal:  
> 
> > On Fri, 6 Feb 2026 16:40:39 +0100
> > Lukáš Šišmiš <[email protected]> wrote:
> >  
> > > pá 6. 2. 2026 v 15:02 odesílatel Thomas Monjalon
> > > <[email protected]> napsal:
> > >  
> > > > 04/02/2026 15:53, Stephen Hemminger:  
> > > > > On Tue, 3 Feb 2026 09:34:26 +0100
> > > > > Lukáš Šišmiš <[email protected]> wrote:
> > > > >  
> > > > > > >
> > > > > > > The kernel version of checkpatch complains here. The DPDK
> > > > > > > shell  
> > > > script  
> > > > > > > seems to be set to ignore this but.
> > > > > > >
> > > > > > > WARNING: break is not useful after a return
> > > > > > > #15008: FILE: lib/flow_parser/rte_flow_parser.c:14763:
> > > > > > > +               return cmd_flow_parsed(out);
> > > > > > > +               break;
> > > > > > >
> > > > > > > Should I create a new patch set or just let it be at this
> > > > > > >  
> > moment?  
> > > > > > Lukas  
> > > > >
> > > > >
> > > > > I am ok with it as is.  
> > > >
> > > > Better to update.
> > > >
> > > > There are other warnings:
> > > >
> > > > WARNING:STRNCPY: Prefer strscpy, strscpy_pad, or __nonstring
> > > > over  
> > strncpy  
> > > > - see: https://github.com/KSPP/linux/issues/90
> > > > #13052 <https://github.com/KSPP/linux/issues/90#13052>: FILE:
> > > > lib/flow_parser/rte_flow_parser.c:12825:
> > > > +       strncpy(buf, str, len);
> > > >
> > > > and a lot of WARNING:LONG_LINE
> > > >
> > > > I can have a look after the decision.  
> > >  
> > > >
> > > > And on a more general note, I would have expected to ask the
> > > > opinion of rte_flow maintainers, but they are not Cc'ed in
> > > > these patches. 
> > > I communicated primarily with Stephen, and will CC Ori too.
> > > Anyone else?
> > >
> > >  
> > > > I'm a bit skeptical about adding this outside of ethdev library
> > > > which defines the flow API.
> > > >  
> > >
> > > CCing Ori to make a decision. I don't mind putting it directly
> > > into  
> > ethdev  
> > > as well, I just thought the parser could be its own separate lib
> > > as it is just consuming strings and producing rte_flow
> > > structures. I can see the heavy ties to the flow library, though.
> > > Thomas, Stephen, what are your opinions?  
> >
> > I am beginning to agree with Thomas, this belongs in the ethdev
> > directory next to rte_flow.
> >
> > Also, not sure what the purpose of parser_ops is. It says to pass
> > NULL, but test-pmd is doing something else. It would be better to
> > have an initializer (i.e RTE_INIT) instead? Maybe
> >  
> 
> 
> Ok, I can move it there then. Should I proceed with Patch v11 - that
> would include moving the ethdev directory and addressing the kernel's
> checkpatch issues?
> 
> The initializer doesn't seem like a bad idea. I didn't know about
> that one. The parser_ops are not needed for purely parsing, but to
> remain compatible with the testpmd's code, which is using, e.g., the
> hints on the commandline I added parser_ops.
> The simple public library API is for converting strings to rte_flow
> structures,
> the parser_ops is for hooking up the testpmd.


My response was more immediate (gut feel). But wanted more detailed
feedback.
I think you need to have a really simple API like the PCAP
does for compiling string into BPF. See pcap_compile.

The testpmd/cmdline method is creating too much baggage!

This is what the result of back-and-forth with Claude AI came to:

rte_flow_parser_ops — Summary of Issues

64 callbacks, zero documentation. No Doxygen on any member. The only
way to understand the contract is to read testpmd's implementation —
making testpmd the de facto spec.

Inconsistent return types. 36 callbacks return int, 10 return void.
Similar operations use different conventions (e.g. flow_create returns
int, flow_tunnel_create returns void). No error reporting possible from
the void ones.

Testpmd internals leaked into the API. verbose_level_get is a UI
concern, not a parser concern. The void/int split mirrors whatever
testpmd's internal functions happened to use, not a designed interface.

No guidance on minimal implementation. "Unused callbacks may be NULL"
but which ones does the parser actually call during a basic flow
create? A new consumer can't tell without tracing the code.

ABI-fragile but installed as a header. Adding any new rte_flow command
means extending these structs. No versioning mechanism, yet it's in
indirect_headers so external code can (and will) use it.

681-entry command enum couples consumers to parser internals. Anyone
interpreting rte_flow_parser_output.command must understand the full
token namespace.

Bottom line: This is a testpmd function dispatch table promoted to a
library header without the design work to make it an external API.
Either don't install the private header, or invest in
documenting/versioning it properly.

Reply via email to