* [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC
@ 2025-05-20 16:19 Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 01/12] tools: ynl-gen: add makefile deps for neigh Jakub Kicinski
` (12 more replies)
0 siblings, 13 replies; 19+ messages in thread
From: Jakub Kicinski @ 2025-05-20 16:19 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, donald.hunter,
jacob.e.keller, sdf, jstancek, kory.maincent, Jakub Kicinski
Add C codegen support for constructs needed by TC, namely passing
sub-message selector from a lower nest, and sub-messages with
fixed headers.
v2:
- [patch 1] new
- [patch 8] small refactor
- [patch 10] add more includes to build on Ubuntu 22.04 system headers
Jakub Kicinski (12):
tools: ynl-gen: add makefile deps for neigh
netlink: specs: tc: remove duplicate nests
netlink: specs: tc: use tc-gact instead of tc-gen as struct name
netlink: specs: tc: add C naming info
netlink: specs: tc: drop the family name prefix from attrs
tools: ynl-gen: support passing selector to a nest
tools: ynl-gen: move fixed header info from RenderInfo to Struct
tools: ynl-gen: support local attrs in _multi_parse
tools: ynl-gen: support weird sub-message formats
tools: ynl: enable codegen for TC
netlink: specs: tc: add qdisc dump to TC spec
tools: ynl: add a sample for TC
Documentation/netlink/specs/tc.yaml | 514 +++++++++++++++-------------
tools/net/ynl/Makefile.deps | 10 +-
tools/net/ynl/generated/Makefile | 2 +-
include/uapi/linux/neighbour.h | 4 +-
tools/net/ynl/lib/ynl-priv.h | 8 +-
tools/net/ynl/samples/tc.c | 80 +++++
tools/net/ynl/pyynl/ynl_gen_c.py | 168 +++++++--
tools/net/ynl/samples/.gitignore | 1 +
8 files changed, 500 insertions(+), 287 deletions(-)
create mode 100644 tools/net/ynl/samples/tc.c
--
2.49.0
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH net-next v2 01/12] tools: ynl-gen: add makefile deps for neigh
2025-05-20 16:19 [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC Jakub Kicinski
@ 2025-05-20 16:19 ` Jakub Kicinski
2025-05-20 17:15 ` Kory Maincent
2025-05-20 16:19 ` [PATCH net-next v2 02/12] netlink: specs: tc: remove duplicate nests Jakub Kicinski
` (11 subsequent siblings)
12 siblings, 1 reply; 19+ messages in thread
From: Jakub Kicinski @ 2025-05-20 16:19 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, donald.hunter,
jacob.e.keller, sdf, jstancek, kory.maincent, Jakub Kicinski
Kory is reporting build issues after recent additions to YNL
if the system headers are old.
Link: https://lore.kernel.org/20250519164949.597d6e92@kmaincent-XPS-13-7390
Reported-by: Kory Maincent <kory.maincent@bootlin.com>
Fixes: 0939a418b3b0 ("tools: ynl: submsg: reverse parse / error reporting")
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
v2:
- new patch
---
tools/net/ynl/Makefile.deps | 3 ++-
include/uapi/linux/neighbour.h | 4 ++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/tools/net/ynl/Makefile.deps b/tools/net/ynl/Makefile.deps
index e5a5cb1b2cff..8c378356fc87 100644
--- a/tools/net/ynl/Makefile.deps
+++ b/tools/net/ynl/Makefile.deps
@@ -35,7 +35,8 @@ CFLAGS_rt-addr:=$(call get_hdr_inc,__LINUX_RTNETLINK_H,rtnetlink.h) \
$(call get_hdr_inc,__LINUX_IF_ADDR_H,if_addr.h)
CFLAGS_rt-link:=$(call get_hdr_inc,__LINUX_RTNETLINK_H,rtnetlink.h) \
$(call get_hdr_inc,_LINUX_IF_LINK_H,if_link.h)
-CFLAGS_rt-neigh:=$(call get_hdr_inc,__LINUX_RTNETLINK_H,rtnetlink.h)
+CFLAGS_rt-neigh:=$(call get_hdr_inc,__LINUX_RTNETLINK_H,rtnetlink.h) \
+ $(call get_hdr_inc,__LINUX_NEIGHBOUR_H,neighbour.h)
CFLAGS_rt-route:=$(call get_hdr_inc,__LINUX_RTNETLINK_H,rtnetlink.h)
CFLAGS_rt-rule:=$(call get_hdr_inc,__LINUX_FIB_RULES_H,fib_rules.h)
CFLAGS_tcp_metrics:=$(call get_hdr_inc,_LINUX_TCP_METRICS_H,tcp_metrics.h)
diff --git a/include/uapi/linux/neighbour.h b/include/uapi/linux/neighbour.h
index 5e67a7eaf4a7..b851c36ad25d 100644
--- a/include/uapi/linux/neighbour.h
+++ b/include/uapi/linux/neighbour.h
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-#ifndef __LINUX_NEIGHBOUR_H
-#define __LINUX_NEIGHBOUR_H
+#ifndef _UAPI__LINUX_NEIGHBOUR_H
+#define _UAPI__LINUX_NEIGHBOUR_H
#include <linux/types.h>
#include <linux/netlink.h>
--
2.49.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH net-next v2 02/12] netlink: specs: tc: remove duplicate nests
2025-05-20 16:19 [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 01/12] tools: ynl-gen: add makefile deps for neigh Jakub Kicinski
@ 2025-05-20 16:19 ` Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 03/12] netlink: specs: tc: use tc-gact instead of tc-gen as struct name Jakub Kicinski
` (10 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Jakub Kicinski @ 2025-05-20 16:19 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, donald.hunter,
jacob.e.keller, sdf, jstancek, kory.maincent, Jakub Kicinski
tc-act-stats-attrs and tca-stats-attrs are almost identical.
The only difference is that the latter has sub-message decoding
for app, rather than declaring it as a binary attr.
tc-act-police-attrs and tc-police-attrs are identical but for
the TODO annotations.
Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
Documentation/netlink/specs/tc.yaml | 78 ++---------------------------
1 file changed, 4 insertions(+), 74 deletions(-)
diff --git a/Documentation/netlink/specs/tc.yaml b/Documentation/netlink/specs/tc.yaml
index 953aa837958b..c7e6a734cd12 100644
--- a/Documentation/netlink/specs/tc.yaml
+++ b/Documentation/netlink/specs/tc.yaml
@@ -1452,7 +1452,7 @@ protonum: 0
-
name: stats
type: nest
- nested-attributes: tc-act-stats-attrs
+ nested-attributes: tca-stats-attrs
-
name: pad
type: pad
@@ -1471,38 +1471,6 @@ protonum: 0
-
name: in-hw-count
type: u32
- -
- name: tc-act-stats-attrs
- attributes:
- -
- name: basic
- type: binary
- struct: gnet-stats-basic
- -
- name: rate-est
- type: binary
- struct: gnet-stats-rate-est
- -
- name: queue
- type: binary
- struct: gnet-stats-queue
- -
- name: app
- type: binary
- -
- name: rate-est64
- type: binary
- struct: gnet-stats-rate-est64
- -
- name: pad
- type: pad
- -
- name: basic-hw
- type: binary
- struct: gnet-stats-basic
- -
- name: pkt64
- type: u64
-
name: tc-act-bpf-attrs
attributes:
@@ -1797,44 +1765,6 @@ protonum: 0
-
name: key-ex
type: binary
- -
- name: tc-act-police-attrs
- attributes:
- -
- name: tbf
- type: binary
- struct: tc-police
- -
- name: rate
- type: binary # TODO
- -
- name: peakrate
- type: binary # TODO
- -
- name: avrate
- type: u32
- -
- name: result
- type: u32
- -
- name: tm
- type: binary
- struct: tcf-t
- -
- name: pad
- type: pad
- -
- name: rate64
- type: u64
- -
- name: peakrate64
- type: u64
- -
- name: pktrate64
- type: u64
- -
- name: pktburst64
- type: u64
-
name: tc-act-simple-attrs
attributes:
@@ -3327,10 +3257,10 @@ protonum: 0
struct: tc-police
-
name: rate
- type: binary
+ type: binary # TODO
-
name: peakrate
- type: binary
+ type: binary # TODO
-
name: avrate
type: u32
@@ -3817,7 +3747,7 @@ protonum: 0
attribute-set: tc-act-pedit-attrs
-
value: police
- attribute-set: tc-act-police-attrs
+ attribute-set: tc-police-attrs
-
value: sample
attribute-set: tc-act-sample-attrs
--
2.49.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH net-next v2 03/12] netlink: specs: tc: use tc-gact instead of tc-gen as struct name
2025-05-20 16:19 [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 01/12] tools: ynl-gen: add makefile deps for neigh Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 02/12] netlink: specs: tc: remove duplicate nests Jakub Kicinski
@ 2025-05-20 16:19 ` Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 04/12] netlink: specs: tc: add C naming info Jakub Kicinski
` (9 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Jakub Kicinski @ 2025-05-20 16:19 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, donald.hunter,
jacob.e.keller, sdf, jstancek, kory.maincent, Jakub Kicinski
There is a define in the uAPI header called tc_gen which expands
to the "generic" TC action fields. This helps other actions include
the base fields without having to deal with nested structs.
A couple of actions (sample, gact) do not define extra fields,
so the spec used a common tc-gen struct for both of them.
Unfortunately this struct does not exist in C. Let's use gact's
(generic act's) struct for basic actions.
Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
Documentation/netlink/specs/tc.yaml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/Documentation/netlink/specs/tc.yaml b/Documentation/netlink/specs/tc.yaml
index c7e6a734cd12..697fdd1219d5 100644
--- a/Documentation/netlink/specs/tc.yaml
+++ b/Documentation/netlink/specs/tc.yaml
@@ -1186,7 +1186,7 @@ protonum: 0
name: firstuse
type: u64
-
- name: tc-gen
+ name: tc-gact
type: struct
members:
-
@@ -3457,7 +3457,7 @@ protonum: 0
-
name: parms
type: binary
- struct: tc-gen
+ struct: tc-gact
-
name: rate
type: u32
@@ -3480,7 +3480,7 @@ protonum: 0
-
name: parms
type: binary
- struct: tc-gen
+ struct: tc-gact
-
name: prob
type: binary
--
2.49.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH net-next v2 04/12] netlink: specs: tc: add C naming info
2025-05-20 16:19 [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC Jakub Kicinski
` (2 preceding siblings ...)
2025-05-20 16:19 ` [PATCH net-next v2 03/12] netlink: specs: tc: use tc-gact instead of tc-gen as struct name Jakub Kicinski
@ 2025-05-20 16:19 ` Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 05/12] netlink: specs: tc: drop the family name prefix from attrs Jakub Kicinski
` (8 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Jakub Kicinski @ 2025-05-20 16:19 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, donald.hunter,
jacob.e.keller, sdf, jstancek, kory.maincent, Jakub Kicinski
Add naming info needed by C code gen.
Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
Documentation/netlink/specs/tc.yaml | 95 +++++++++++++++++++++++++++++
1 file changed, 95 insertions(+)
diff --git a/Documentation/netlink/specs/tc.yaml b/Documentation/netlink/specs/tc.yaml
index 697fdd1219d5..8d5e5cb439e4 100644
--- a/Documentation/netlink/specs/tc.yaml
+++ b/Documentation/netlink/specs/tc.yaml
@@ -2,6 +2,7 @@
name: tc
protocol: netlink-raw
+uapi-header: linux/pkt_cls.h
protonum: 0
doc:
@@ -12,6 +13,7 @@ protonum: 0
-
name: tcmsg
type: struct
+ header: linux/rtnetlink.h
members:
-
name: family
@@ -34,6 +36,7 @@ protonum: 0
type: u32
-
name: tc-cls-flags
+ enum-name:
type: flags
entries:
- skip-hw
@@ -43,6 +46,8 @@ protonum: 0
- verbose
-
name: tc-flower-key-ctrl-flags
+ name-prefix: tca-flower-key-flags-
+ enum-name:
type: flags
entries:
- frag
@@ -630,6 +635,7 @@ protonum: 0
-
name: tc-ratespec
type: struct
+ header: linux/pkt_sched.h
members:
-
name: cell-log
@@ -1378,6 +1384,7 @@ protonum: 0
attribute-sets:
-
name: tc-attrs
+ name-prefix: tca-
attributes:
-
name: kind
@@ -1437,6 +1444,7 @@ protonum: 0
type: string
-
name: tc-act-attrs
+ name-prefix: tca-act-
attributes:
-
name: kind
@@ -1473,6 +1481,8 @@ protonum: 0
type: u32
-
name: tc-act-bpf-attrs
+ name-prefix: tca-act-bpf-
+ header: linux/tc_act/tc_bpf.h
attributes:
-
name: tm
@@ -1504,6 +1514,8 @@ protonum: 0
type: binary
-
name: tc-act-connmark-attrs
+ name-prefix: tca-connmark-
+ header: linux/tc_act/tc_connmark.h
attributes:
-
name: parms
@@ -1517,6 +1529,8 @@ protonum: 0
type: pad
-
name: tc-act-csum-attrs
+ name-prefix: tca-csum-
+ header: linux/tc_act/tc_csum.h
attributes:
-
name: parms
@@ -1530,6 +1544,8 @@ protonum: 0
type: pad
-
name: tc-act-ct-attrs
+ name-prefix: tca-ct-
+ header: linux/tc_act/tc_ct.h
attributes:
-
name: parms
@@ -1592,6 +1608,8 @@ protonum: 0
type: u8
-
name: tc-act-ctinfo-attrs
+ name-prefix: tca-ctinfo-
+ header: linux/tc_act/tc_ctinfo.h
attributes:
-
name: pad
@@ -1626,6 +1644,8 @@ protonum: 0
type: u64
-
name: tc-act-gate-attrs
+ name-prefix: tca-gate-
+ header: linux/tc_act/tc_gate.h
attributes:
-
name: tm
@@ -1660,6 +1680,8 @@ protonum: 0
type: s32
-
name: tc-act-ife-attrs
+ name-prefix: tca-ife-
+ header: linux/tc_act/tc_ife.h
attributes:
-
name: parms
@@ -1685,6 +1707,8 @@ protonum: 0
type: pad
-
name: tc-act-mirred-attrs
+ name-prefix: tca-mirred-
+ header: linux/tc_act/tc_mirred.h
attributes:
-
name: tm
@@ -1701,6 +1725,8 @@ protonum: 0
type: binary
-
name: tc-act-mpls-attrs
+ name-prefix: tca-mpls-
+ header: linux/tc_act/tc_mpls.h
attributes:
-
name: tm
@@ -1731,6 +1757,8 @@ protonum: 0
type: u8
-
name: tc-act-nat-attrs
+ name-prefix: tca-nat-
+ header: linux/tc_act/tc_nat.h
attributes:
-
name: parms
@@ -1744,6 +1772,8 @@ protonum: 0
type: pad
-
name: tc-act-pedit-attrs
+ name-prefix: tca-pedit-
+ header: linux/tc_act/tc_pedit.h
attributes:
-
name: tm
@@ -1767,6 +1797,8 @@ protonum: 0
type: binary
-
name: tc-act-simple-attrs
+ name-prefix: tca-def-
+ header: linux/tc_act/tc_defact.h
attributes:
-
name: tm
@@ -1783,6 +1815,8 @@ protonum: 0
type: pad
-
name: tc-act-skbedit-attrs
+ name-prefix: tca-skbedit-
+ header: linux/tc_act/tc_skbedit.h
attributes:
-
name: tm
@@ -1817,6 +1851,8 @@ protonum: 0
type: u16
-
name: tc-act-skbmod-attrs
+ name-prefix: tca-skbmod-
+ header: linux/tc_act/tc_skbmod.h
attributes:
-
name: tm
@@ -1839,6 +1875,8 @@ protonum: 0
type: pad
-
name: tc-act-tunnel-key-attrs
+ name-prefix: tca-tunnel-key-
+ header: linux/tc_act/tc_tunnel_key.h
attributes:
-
name: tm
@@ -1889,6 +1927,8 @@ protonum: 0
type: flag
-
name: tc-act-vlan-attrs
+ name-prefix: tca-vlan-
+ header: linux/tc_act/tc_vlan.h
attributes:
-
name: tm
@@ -1918,6 +1958,7 @@ protonum: 0
type: binary
-
name: tc-basic-attrs
+ name-prefix: tca-basic-
attributes:
-
name: classid
@@ -1944,6 +1985,7 @@ protonum: 0
type: pad
-
name: tc-bpf-attrs
+ name-prefix: tca-bpf-
attributes:
-
name: act
@@ -1983,6 +2025,7 @@ protonum: 0
type: u32
-
name: tc-cake-attrs
+ name-prefix: tca-cake-
attributes:
-
name: pad
@@ -2040,6 +2083,7 @@ protonum: 0
type: u32
-
name: tc-cake-stats-attrs
+ name-prefix: tca-cake-stats-
attributes:
-
name: pad
@@ -2093,6 +2137,7 @@ protonum: 0
type: s32
-
name: tc-cake-tin-stats-attrs
+ name-prefix: tca-cake-tin-stats-
attributes:
-
name: pad
@@ -2171,6 +2216,7 @@ protonum: 0
type: u32
-
name: tc-cbs-attrs
+ name-prefix: tca-cbs-
attributes:
-
name: parms
@@ -2178,6 +2224,7 @@ protonum: 0
struct: tc-cbs-qopt
-
name: tc-cgroup-attrs
+ name-prefix: tca-cgroup-
attributes:
-
name: act
@@ -2193,6 +2240,7 @@ protonum: 0
type: binary
-
name: tc-choke-attrs
+ name-prefix: tca-choke-
attributes:
-
name: parms
@@ -2209,6 +2257,7 @@ protonum: 0
type: u32
-
name: tc-codel-attrs
+ name-prefix: tca-codel-
attributes:
-
name: target
@@ -2227,12 +2276,15 @@ protonum: 0
type: u32
-
name: tc-drr-attrs
+ name-prefix: tca-drr-
attributes:
-
name: quantum
type: u32
-
name: tc-ematch-attrs
+ name-prefix: tca-ematch-
+ attr-max-name: tca-ematch-tree-max
attributes:
-
name: tree-hdr
@@ -2243,6 +2295,7 @@ protonum: 0
type: binary
-
name: tc-flow-attrs
+ name-prefix: tca-flow-
attributes:
-
name: keys
@@ -2283,6 +2336,7 @@ protonum: 0
type: u32
-
name: tc-flower-attrs
+ name-prefix: tca-flower-
attributes:
-
name: classid
@@ -2709,6 +2763,7 @@ protonum: 0
enum-as-flags: true
-
name: tc-flower-key-enc-opts-attrs
+ name-prefix: tca-flower-key-enc-opts-
attributes:
-
name: geneve
@@ -2728,6 +2783,7 @@ protonum: 0
nested-attributes: tc-flower-key-enc-opt-gtp-attrs
-
name: tc-flower-key-enc-opt-geneve-attrs
+ name-prefix: tca-flower-key-enc-opt-geneve-
attributes:
-
name: class
@@ -2740,12 +2796,14 @@ protonum: 0
type: binary
-
name: tc-flower-key-enc-opt-vxlan-attrs
+ name-prefix: tca-flower-key-enc-opt-vxlan-
attributes:
-
name: gbp
type: u32
-
name: tc-flower-key-enc-opt-erspan-attrs
+ name-prefix: tca-flower-key-enc-opt-erspan-
attributes:
-
name: ver
@@ -2761,6 +2819,7 @@ protonum: 0
type: u8
-
name: tc-flower-key-enc-opt-gtp-attrs
+ name-prefix: tca-flower-key-enc-opt-gtp-
attributes:
-
name: pdu-type
@@ -2770,6 +2829,8 @@ protonum: 0
type: u8
-
name: tc-flower-key-mpls-opt-attrs
+ name-prefix: tca-flower-key-mpls-opt-
+ attr-max-name: tca-flower-key-mpls-opt-lse-max
attributes:
-
name: lse-depth
@@ -2788,6 +2849,7 @@ protonum: 0
type: u32
-
name: tc-flower-key-cfm-attrs
+ name-prefix: tca-flower-key-cfm-
attributes:
-
name: md-level
@@ -2797,6 +2859,7 @@ protonum: 0
type: u8
-
name: tc-fw-attrs
+ name-prefix: tca-fw-
attributes:
-
name: classid
@@ -2818,6 +2881,7 @@ protonum: 0
type: u32
-
name: tc-gred-attrs
+ name-prefix: tca-gred-
attributes:
-
name: parms
@@ -2843,6 +2907,7 @@ protonum: 0
nested-attributes: tca-gred-vq-list-attrs
-
name: tca-gred-vq-list-attrs
+ name-prefix: tca-gred-vq-
attributes:
-
name: entry
@@ -2851,6 +2916,7 @@ protonum: 0
multi-attr: true
-
name: tca-gred-vq-entry-attrs
+ name-prefix: tca-gred-vq-
attributes:
-
name: pad
@@ -2902,6 +2968,7 @@ protonum: 0
type: binary
-
name: tc-hhf-attrs
+ name-prefix: tca-hhf-
attributes:
-
name: backlog-limit
@@ -2926,6 +2993,7 @@ protonum: 0
type: u32
-
name: tc-htb-attrs
+ name-prefix: tca-htb-
attributes:
-
name: parms
@@ -2958,6 +3026,7 @@ protonum: 0
type: flag
-
name: tc-matchall-attrs
+ name-prefix: tca-matchall-
attributes:
-
name: classid
@@ -2979,6 +3048,7 @@ protonum: 0
type: pad
-
name: tc-etf-attrs
+ name-prefix: tca-etf-
attributes:
-
name: parms
@@ -2986,6 +3056,7 @@ protonum: 0
struct: tc-etf-qopt
-
name: tc-ets-attrs
+ name-prefix: tca-ets-
attributes:
-
name: nbands
@@ -3011,6 +3082,7 @@ protonum: 0
multi-attr: true
-
name: tc-fq-attrs
+ name-prefix: tca-fq-
attributes:
-
name: plimit
@@ -3082,6 +3154,7 @@ protonum: 0
doc: Weights for each band
-
name: tc-fq-codel-attrs
+ name-prefix: tca-fq-codel-
attributes:
-
name: target
@@ -3118,6 +3191,7 @@ protonum: 0
type: u8
-
name: tc-fq-pie-attrs
+ name-prefix: tca-fq-pie-
attributes:
-
name: limit
@@ -3157,6 +3231,7 @@ protonum: 0
type: u32
-
name: tc-netem-attrs
+ name-prefix: tca-netem-
attributes:
-
name: corr
@@ -3210,6 +3285,7 @@ protonum: 0
type: u64
-
name: tc-netem-loss-attrs
+ name-prefix: netem-loss-
attributes:
-
name: gi
@@ -3223,6 +3299,7 @@ protonum: 0
struct: tc-netem-gemodel
-
name: tc-pie-attrs
+ name-prefix: tca-pie-
attributes:
-
name: target
@@ -3250,6 +3327,7 @@ protonum: 0
type: u32
-
name: tc-police-attrs
+ name-prefix: tca-police-
attributes:
-
name: tbf
@@ -3288,6 +3366,7 @@ protonum: 0
type: u64
-
name: tc-qfq-attrs
+ name-prefix: tca-qfq-
attributes:
-
name: weight
@@ -3297,6 +3376,7 @@ protonum: 0
type: u32
-
name: tc-red-attrs
+ name-prefix: tca-red-
attributes:
-
name: parms
@@ -3319,6 +3399,7 @@ protonum: 0
type: u32
-
name: tc-route-attrs
+ name-prefix: tca-route4-
attributes:
-
name: classid
@@ -3343,6 +3424,7 @@ protonum: 0
nested-attributes: tc-act-attrs
-
name: tc-taprio-attrs
+ name-prefix: tca-taprio-attr-
attributes:
-
name: priomap
@@ -3386,6 +3468,7 @@ protonum: 0
nested-attributes: tc-taprio-tc-entry-attrs
-
name: tc-taprio-sched-entry-list
+ name-prefix: tca-taprio-sched-
attributes:
-
name: entry
@@ -3394,6 +3477,7 @@ protonum: 0
multi-attr: true
-
name: tc-taprio-sched-entry
+ name-prefix: tca-taprio-sched-entry-
attributes:
-
name: index
@@ -3409,6 +3493,7 @@ protonum: 0
type: u32
-
name: tc-taprio-tc-entry-attrs
+ name-prefix: tca-taprio-tc-entry-
attributes:
-
name: index
@@ -3421,6 +3506,7 @@ protonum: 0
type: u32
-
name: tc-tbf-attrs
+ name-prefix: tca-tbf-
attributes:
-
name: parms
@@ -3449,6 +3535,8 @@ protonum: 0
type: pad
-
name: tc-act-sample-attrs
+ name-prefix: tca-sample-
+ header: linux/tc_act/tc_sample.h
attributes:
-
name: tm
@@ -3472,6 +3560,8 @@ protonum: 0
type: pad
-
name: tc-act-gact-attrs
+ name-prefix: tca-gact-
+ header: linux/tc_act/tc_gact.h
attributes:
-
name: tm
@@ -3490,6 +3580,7 @@ protonum: 0
type: pad
-
name: tca-stab-attrs
+ name-prefix: tca-stab-
attributes:
-
name: base
@@ -3500,6 +3591,8 @@ protonum: 0
type: binary
-
name: tca-stats-attrs
+ name-prefix: tca-stats-
+ header: linux/gen_stats.h
attributes:
-
name: basic
@@ -3534,6 +3627,7 @@ protonum: 0
type: u64
-
name: tc-u32-attrs
+ name-prefix: tca-u32-
attributes:
-
name: classid
@@ -3805,6 +3899,7 @@ protonum: 0
operations:
enum-model: directional
+ name-prefix: rtm-
list:
-
name: newqdisc
--
2.49.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH net-next v2 05/12] netlink: specs: tc: drop the family name prefix from attrs
2025-05-20 16:19 [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC Jakub Kicinski
` (3 preceding siblings ...)
2025-05-20 16:19 ` [PATCH net-next v2 04/12] netlink: specs: tc: add C naming info Jakub Kicinski
@ 2025-05-20 16:19 ` Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 06/12] tools: ynl-gen: support passing selector to a nest Jakub Kicinski
` (7 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Jakub Kicinski @ 2025-05-20 16:19 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, donald.hunter,
jacob.e.keller, sdf, jstancek, kory.maincent, Jakub Kicinski
All attribute sets and messages are prefixed with tc-.
The C codegen also adds the family name to all structs.
We end up with names like struct tc_tc_act_attrs.
Remove the tc- prefixes to shorten the names.
This should not impact Python as the attr set names
are never exposed to user, they are only used to refer
to things internally, in the encoder / decoder.
Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
Documentation/netlink/specs/tc.yaml | 334 ++++++++++++++--------------
1 file changed, 167 insertions(+), 167 deletions(-)
diff --git a/Documentation/netlink/specs/tc.yaml b/Documentation/netlink/specs/tc.yaml
index 8d5e5cb439e4..6e8db7adde3c 100644
--- a/Documentation/netlink/specs/tc.yaml
+++ b/Documentation/netlink/specs/tc.yaml
@@ -35,7 +35,7 @@ protonum: 0
name: info
type: u32
-
- name: tc-cls-flags
+ name: cls-flags
enum-name:
type: flags
entries:
@@ -45,7 +45,7 @@ protonum: 0
- not-in-nw
- verbose
-
- name: tc-flower-key-ctrl-flags
+ name: flower-key-ctrl-flags
name-prefix: tca-flower-key-flags-
enum-name:
type: flags
@@ -1383,7 +1383,7 @@ protonum: 0
type: s32
attribute-sets:
-
- name: tc-attrs
+ name: attrs
name-prefix: tca-
attributes:
-
@@ -1392,7 +1392,7 @@ protonum: 0
-
name: options
type: sub-message
- sub-message: tc-options-msg
+ sub-message: options-msg
selector: kind
-
name: stats
@@ -1443,7 +1443,7 @@ protonum: 0
name: ext-warn-msg
type: string
-
- name: tc-act-attrs
+ name: act-attrs
name-prefix: tca-act-
attributes:
-
@@ -1452,7 +1452,7 @@ protonum: 0
-
name: options
type: sub-message
- sub-message: tc-act-options-msg
+ sub-message: act-options-msg
selector: kind
-
name: index
@@ -1480,7 +1480,7 @@ protonum: 0
name: in-hw-count
type: u32
-
- name: tc-act-bpf-attrs
+ name: act-bpf-attrs
name-prefix: tca-act-bpf-
header: linux/tc_act/tc_bpf.h
attributes:
@@ -1513,7 +1513,7 @@ protonum: 0
name: id
type: binary
-
- name: tc-act-connmark-attrs
+ name: act-connmark-attrs
name-prefix: tca-connmark-
header: linux/tc_act/tc_connmark.h
attributes:
@@ -1528,7 +1528,7 @@ protonum: 0
name: pad
type: pad
-
- name: tc-act-csum-attrs
+ name: act-csum-attrs
name-prefix: tca-csum-
header: linux/tc_act/tc_csum.h
attributes:
@@ -1543,7 +1543,7 @@ protonum: 0
name: pad
type: pad
-
- name: tc-act-ct-attrs
+ name: act-ct-attrs
name-prefix: tca-ct-
header: linux/tc_act/tc_ct.h
attributes:
@@ -1607,7 +1607,7 @@ protonum: 0
name: helper-proto
type: u8
-
- name: tc-act-ctinfo-attrs
+ name: act-ctinfo-attrs
name-prefix: tca-ctinfo-
header: linux/tc_act/tc_ctinfo.h
attributes:
@@ -1643,7 +1643,7 @@ protonum: 0
name: stats-cpmark-set
type: u64
-
- name: tc-act-gate-attrs
+ name: act-gate-attrs
name-prefix: tca-gate-
header: linux/tc_act/tc_gate.h
attributes:
@@ -1679,7 +1679,7 @@ protonum: 0
name: clockid
type: s32
-
- name: tc-act-ife-attrs
+ name: act-ife-attrs
name-prefix: tca-ife-
header: linux/tc_act/tc_ife.h
attributes:
@@ -1706,7 +1706,7 @@ protonum: 0
name: pad
type: pad
-
- name: tc-act-mirred-attrs
+ name: act-mirred-attrs
name-prefix: tca-mirred-
header: linux/tc_act/tc_mirred.h
attributes:
@@ -1724,7 +1724,7 @@ protonum: 0
name: blockid
type: binary
-
- name: tc-act-mpls-attrs
+ name: act-mpls-attrs
name-prefix: tca-mpls-
header: linux/tc_act/tc_mpls.h
attributes:
@@ -1756,7 +1756,7 @@ protonum: 0
name: bos
type: u8
-
- name: tc-act-nat-attrs
+ name: act-nat-attrs
name-prefix: tca-nat-
header: linux/tc_act/tc_nat.h
attributes:
@@ -1771,7 +1771,7 @@ protonum: 0
name: pad
type: pad
-
- name: tc-act-pedit-attrs
+ name: act-pedit-attrs
name-prefix: tca-pedit-
header: linux/tc_act/tc_pedit.h
attributes:
@@ -1796,7 +1796,7 @@ protonum: 0
name: key-ex
type: binary
-
- name: tc-act-simple-attrs
+ name: act-simple-attrs
name-prefix: tca-def-
header: linux/tc_act/tc_defact.h
attributes:
@@ -1814,7 +1814,7 @@ protonum: 0
name: pad
type: pad
-
- name: tc-act-skbedit-attrs
+ name: act-skbedit-attrs
name-prefix: tca-skbedit-
header: linux/tc_act/tc_skbedit.h
attributes:
@@ -1850,7 +1850,7 @@ protonum: 0
name: queue-mapping-max
type: u16
-
- name: tc-act-skbmod-attrs
+ name: act-skbmod-attrs
name-prefix: tca-skbmod-
header: linux/tc_act/tc_skbmod.h
attributes:
@@ -1874,7 +1874,7 @@ protonum: 0
name: pad
type: pad
-
- name: tc-act-tunnel-key-attrs
+ name: act-tunnel-key-attrs
name-prefix: tca-tunnel-key-
header: linux/tc_act/tc_tunnel_key.h
attributes:
@@ -1926,7 +1926,7 @@ protonum: 0
name: no-frag
type: flag
-
- name: tc-act-vlan-attrs
+ name: act-vlan-attrs
name-prefix: tca-vlan-
header: linux/tc_act/tc_vlan.h
attributes:
@@ -1957,7 +1957,7 @@ protonum: 0
name: push-eth-src
type: binary
-
- name: tc-basic-attrs
+ name: basic-attrs
name-prefix: tca-basic-
attributes:
-
@@ -1966,16 +1966,16 @@ protonum: 0
-
name: ematches
type: nest
- nested-attributes: tc-ematch-attrs
+ nested-attributes: ematch-attrs
-
name: act
type: indexed-array
sub-type: nest
- nested-attributes: tc-act-attrs
+ nested-attributes: act-attrs
-
name: police
type: nest
- nested-attributes: tc-police-attrs
+ nested-attributes: police-attrs
-
name: pcnt
type: binary
@@ -1984,18 +1984,18 @@ protonum: 0
name: pad
type: pad
-
- name: tc-bpf-attrs
+ name: bpf-attrs
name-prefix: tca-bpf-
attributes:
-
name: act
type: indexed-array
sub-type: nest
- nested-attributes: tc-act-attrs
+ nested-attributes: act-attrs
-
name: police
type: nest
- nested-attributes: tc-police-attrs
+ nested-attributes: police-attrs
-
name: classid
type: u32
@@ -2024,7 +2024,7 @@ protonum: 0
name: id
type: u32
-
- name: tc-cake-attrs
+ name: cake-attrs
name-prefix: tca-cake-
attributes:
-
@@ -2082,7 +2082,7 @@ protonum: 0
name: fwmark
type: u32
-
- name: tc-cake-stats-attrs
+ name: cake-stats-attrs
name-prefix: tca-cake-stats-
attributes:
-
@@ -2116,7 +2116,7 @@ protonum: 0
name: tin-stats
type: indexed-array
sub-type: nest
- nested-attributes: tc-cake-tin-stats-attrs
+ nested-attributes: cake-tin-stats-attrs
-
name: deficit
type: s32
@@ -2136,7 +2136,7 @@ protonum: 0
name: blue-timer-us
type: s32
-
- name: tc-cake-tin-stats-attrs
+ name: cake-tin-stats-attrs
name-prefix: tca-cake-tin-stats-
attributes:
-
@@ -2215,7 +2215,7 @@ protonum: 0
name: flow-quantum
type: u32
-
- name: tc-cbs-attrs
+ name: cbs-attrs
name-prefix: tca-cbs-
attributes:
-
@@ -2223,23 +2223,23 @@ protonum: 0
type: binary
struct: tc-cbs-qopt
-
- name: tc-cgroup-attrs
+ name: cgroup-attrs
name-prefix: tca-cgroup-
attributes:
-
name: act
type: indexed-array
sub-type: nest
- nested-attributes: tc-act-attrs
+ nested-attributes: act-attrs
-
name: police
type: nest
- nested-attributes: tc-police-attrs
+ nested-attributes: police-attrs
-
name: ematches
type: binary
-
- name: tc-choke-attrs
+ name: choke-attrs
name-prefix: tca-choke-
attributes:
-
@@ -2256,7 +2256,7 @@ protonum: 0
name: max-p
type: u32
-
- name: tc-codel-attrs
+ name: codel-attrs
name-prefix: tca-codel-
attributes:
-
@@ -2275,14 +2275,14 @@ protonum: 0
name: ce-threshold
type: u32
-
- name: tc-drr-attrs
+ name: drr-attrs
name-prefix: tca-drr-
attributes:
-
name: quantum
type: u32
-
- name: tc-ematch-attrs
+ name: ematch-attrs
name-prefix: tca-ematch-
attr-max-name: tca-ematch-tree-max
attributes:
@@ -2294,7 +2294,7 @@ protonum: 0
name: tree-list
type: binary
-
- name: tc-flow-attrs
+ name: flow-attrs
name-prefix: tca-flow-
attributes:
-
@@ -2327,7 +2327,7 @@ protonum: 0
-
name: police
type: nest
- nested-attributes: tc-police-attrs
+ nested-attributes: police-attrs
-
name: ematches
type: binary
@@ -2335,7 +2335,7 @@ protonum: 0
name: perturb
type: u32
-
- name: tc-flower-attrs
+ name: flower-attrs
name-prefix: tca-flower-
attributes:
-
@@ -2348,7 +2348,7 @@ protonum: 0
name: act
type: indexed-array
sub-type: nest
- nested-attributes: tc-act-attrs
+ nested-attributes: act-attrs
-
name: key-eth-dst
type: binary
@@ -2427,7 +2427,7 @@ protonum: 0
-
name: flags
type: u32
- enum: tc-cls-flags
+ enum: cls-flags
enum-as-flags: true
-
name: key-vlan-id
@@ -2532,13 +2532,13 @@ protonum: 0
name: key-flags
type: u32
byte-order: big-endian
- enum: tc-flower-key-ctrl-flags
+ enum: flower-key-ctrl-flags
enum-as-flags: true
-
name: key-flags-mask
type: u32
byte-order: big-endian
- enum: tc-flower-key-ctrl-flags
+ enum: flower-key-ctrl-flags
enum-as-flags: true
-
name: key-icmpv4-code
@@ -2661,11 +2661,11 @@ protonum: 0
-
name: key-enc-opts
type: nest
- nested-attributes: tc-flower-key-enc-opts-attrs
+ nested-attributes: flower-key-enc-opts-attrs
-
name: key-enc-opts-mask
type: nest
- nested-attributes: tc-flower-key-enc-opts-attrs
+ nested-attributes: flower-key-enc-opts-attrs
-
name: in-hw-count
type: u32
@@ -2712,7 +2712,7 @@ protonum: 0
-
name: key-mpls-opts
type: nest
- nested-attributes: tc-flower-key-mpls-opt-attrs
+ nested-attributes: flower-key-mpls-opt-attrs
-
name: key-hash
type: u32
@@ -2740,7 +2740,7 @@ protonum: 0
-
name: key-cfm
type: nest
- nested-attributes: tc-flower-key-cfm-attrs
+ nested-attributes: flower-key-cfm-attrs
-
name: key-spi
type: u32
@@ -2753,36 +2753,36 @@ protonum: 0
name: key-enc-flags
type: u32
byte-order: big-endian
- enum: tc-flower-key-ctrl-flags
+ enum: flower-key-ctrl-flags
enum-as-flags: true
-
name: key-enc-flags-mask
type: u32
byte-order: big-endian
- enum: tc-flower-key-ctrl-flags
+ enum: flower-key-ctrl-flags
enum-as-flags: true
-
- name: tc-flower-key-enc-opts-attrs
+ name: flower-key-enc-opts-attrs
name-prefix: tca-flower-key-enc-opts-
attributes:
-
name: geneve
type: nest
- nested-attributes: tc-flower-key-enc-opt-geneve-attrs
+ nested-attributes: flower-key-enc-opt-geneve-attrs
-
name: vxlan
type: nest
- nested-attributes: tc-flower-key-enc-opt-vxlan-attrs
+ nested-attributes: flower-key-enc-opt-vxlan-attrs
-
name: erspan
type: nest
- nested-attributes: tc-flower-key-enc-opt-erspan-attrs
+ nested-attributes: flower-key-enc-opt-erspan-attrs
-
name: gtp
type: nest
- nested-attributes: tc-flower-key-enc-opt-gtp-attrs
+ nested-attributes: flower-key-enc-opt-gtp-attrs
-
- name: tc-flower-key-enc-opt-geneve-attrs
+ name: flower-key-enc-opt-geneve-attrs
name-prefix: tca-flower-key-enc-opt-geneve-
attributes:
-
@@ -2795,14 +2795,14 @@ protonum: 0
name: data
type: binary
-
- name: tc-flower-key-enc-opt-vxlan-attrs
+ name: flower-key-enc-opt-vxlan-attrs
name-prefix: tca-flower-key-enc-opt-vxlan-
attributes:
-
name: gbp
type: u32
-
- name: tc-flower-key-enc-opt-erspan-attrs
+ name: flower-key-enc-opt-erspan-attrs
name-prefix: tca-flower-key-enc-opt-erspan-
attributes:
-
@@ -2818,7 +2818,7 @@ protonum: 0
name: hwid
type: u8
-
- name: tc-flower-key-enc-opt-gtp-attrs
+ name: flower-key-enc-opt-gtp-attrs
name-prefix: tca-flower-key-enc-opt-gtp-
attributes:
-
@@ -2828,7 +2828,7 @@ protonum: 0
name: qfi
type: u8
-
- name: tc-flower-key-mpls-opt-attrs
+ name: flower-key-mpls-opt-attrs
name-prefix: tca-flower-key-mpls-opt-
attr-max-name: tca-flower-key-mpls-opt-lse-max
attributes:
@@ -2848,7 +2848,7 @@ protonum: 0
name: lse-label
type: u32
-
- name: tc-flower-key-cfm-attrs
+ name: flower-key-cfm-attrs
name-prefix: tca-flower-key-cfm-
attributes:
-
@@ -2858,7 +2858,7 @@ protonum: 0
name: opcode
type: u8
-
- name: tc-fw-attrs
+ name: fw-attrs
name-prefix: tca-fw-
attributes:
-
@@ -2867,7 +2867,7 @@ protonum: 0
-
name: police
type: nest
- nested-attributes: tc-police-attrs
+ nested-attributes: police-attrs
-
name: indev
type: string
@@ -2875,12 +2875,12 @@ protonum: 0
name: act
type: indexed-array
sub-type: nest
- nested-attributes: tc-act-attrs
+ nested-attributes: act-attrs
-
name: mask
type: u32
-
- name: tc-gred-attrs
+ name: gred-attrs
name-prefix: tca-gred-
attributes:
-
@@ -2955,7 +2955,7 @@ protonum: 0
name: flags
type: u32
-
- name: tc-hfsc-attrs
+ name: hfsc-attrs
attributes:
-
name: rsc
@@ -2967,7 +2967,7 @@ protonum: 0
name: usc
type: binary
-
- name: tc-hhf-attrs
+ name: hhf-attrs
name-prefix: tca-hhf-
attributes:
-
@@ -2992,7 +2992,7 @@ protonum: 0
name: non-hh-weight
type: u32
-
- name: tc-htb-attrs
+ name: htb-attrs
name-prefix: tca-htb-
attributes:
-
@@ -3025,7 +3025,7 @@ protonum: 0
name: offload
type: flag
-
- name: tc-matchall-attrs
+ name: matchall-attrs
name-prefix: tca-matchall-
attributes:
-
@@ -3035,7 +3035,7 @@ protonum: 0
name: act
type: indexed-array
sub-type: nest
- nested-attributes: tc-act-attrs
+ nested-attributes: act-attrs
-
name: flags
type: u32
@@ -3047,7 +3047,7 @@ protonum: 0
name: pad
type: pad
-
- name: tc-etf-attrs
+ name: etf-attrs
name-prefix: tca-etf-
attributes:
-
@@ -3055,7 +3055,7 @@ protonum: 0
type: binary
struct: tc-etf-qopt
-
- name: tc-ets-attrs
+ name: ets-attrs
name-prefix: tca-ets-
attributes:
-
@@ -3067,7 +3067,7 @@ protonum: 0
-
name: quanta
type: nest
- nested-attributes: tc-ets-attrs
+ nested-attributes: ets-attrs
-
name: quanta-band
type: u32
@@ -3075,13 +3075,13 @@ protonum: 0
-
name: priomap
type: nest
- nested-attributes: tc-ets-attrs
+ nested-attributes: ets-attrs
-
name: priomap-band
type: u8
multi-attr: true
-
- name: tc-fq-attrs
+ name: fq-attrs
name-prefix: tca-fq-
attributes:
-
@@ -3153,7 +3153,7 @@ protonum: 0
sub-type: s32
doc: Weights for each band
-
- name: tc-fq-codel-attrs
+ name: fq-codel-attrs
name-prefix: tca-fq-codel-
attributes:
-
@@ -3190,7 +3190,7 @@ protonum: 0
name: ce-threshold-mask
type: u8
-
- name: tc-fq-pie-attrs
+ name: fq-pie-attrs
name-prefix: tca-fq-pie-
attributes:
-
@@ -3230,7 +3230,7 @@ protonum: 0
name: dq-rate-estimator
type: u32
-
- name: tc-netem-attrs
+ name: netem-attrs
name-prefix: tca-netem-
attributes:
-
@@ -3252,7 +3252,7 @@ protonum: 0
-
name: loss
type: nest
- nested-attributes: tc-netem-loss-attrs
+ nested-attributes: netem-loss-attrs
-
name: rate
type: binary
@@ -3284,7 +3284,7 @@ protonum: 0
name: prng-seed
type: u64
-
- name: tc-netem-loss-attrs
+ name: netem-loss-attrs
name-prefix: netem-loss-
attributes:
-
@@ -3298,7 +3298,7 @@ protonum: 0
doc: Gilbert Elliot models
struct: tc-netem-gemodel
-
- name: tc-pie-attrs
+ name: pie-attrs
name-prefix: tca-pie-
attributes:
-
@@ -3326,7 +3326,7 @@ protonum: 0
name: dq-rate-estimator
type: u32
-
- name: tc-police-attrs
+ name: police-attrs
name-prefix: tca-police-
attributes:
-
@@ -3365,7 +3365,7 @@ protonum: 0
name: pktburst64
type: u64
-
- name: tc-qfq-attrs
+ name: qfq-attrs
name-prefix: tca-qfq-
attributes:
-
@@ -3375,7 +3375,7 @@ protonum: 0
name: lmax
type: u32
-
- name: tc-red-attrs
+ name: red-attrs
name-prefix: tca-red-
attributes:
-
@@ -3398,7 +3398,7 @@ protonum: 0
name: mark-block
type: u32
-
- name: tc-route-attrs
+ name: route-attrs
name-prefix: tca-route4-
attributes:
-
@@ -3416,14 +3416,14 @@ protonum: 0
-
name: police
type: nest
- nested-attributes: tc-police-attrs
+ nested-attributes: police-attrs
-
name: act
type: indexed-array
sub-type: nest
- nested-attributes: tc-act-attrs
+ nested-attributes: act-attrs
-
- name: tc-taprio-attrs
+ name: taprio-attrs
name-prefix: tca-taprio-attr-
attributes:
-
@@ -3433,14 +3433,14 @@ protonum: 0
-
name: sched-entry-list
type: nest
- nested-attributes: tc-taprio-sched-entry-list
+ nested-attributes: taprio-sched-entry-list
-
name: sched-base-time
type: s64
-
name: sched-single-entry
type: nest
- nested-attributes: tc-taprio-sched-entry
+ nested-attributes: taprio-sched-entry
-
name: sched-clockid
type: s32
@@ -3465,18 +3465,18 @@ protonum: 0
-
name: tc-entry
type: nest
- nested-attributes: tc-taprio-tc-entry-attrs
+ nested-attributes: taprio-tc-entry-attrs
-
- name: tc-taprio-sched-entry-list
+ name: taprio-sched-entry-list
name-prefix: tca-taprio-sched-
attributes:
-
name: entry
type: nest
- nested-attributes: tc-taprio-sched-entry
+ nested-attributes: taprio-sched-entry
multi-attr: true
-
- name: tc-taprio-sched-entry
+ name: taprio-sched-entry
name-prefix: tca-taprio-sched-entry-
attributes:
-
@@ -3492,7 +3492,7 @@ protonum: 0
name: interval
type: u32
-
- name: tc-taprio-tc-entry-attrs
+ name: taprio-tc-entry-attrs
name-prefix: tca-taprio-tc-entry-
attributes:
-
@@ -3505,7 +3505,7 @@ protonum: 0
name: fp
type: u32
-
- name: tc-tbf-attrs
+ name: tbf-attrs
name-prefix: tca-tbf-
attributes:
-
@@ -3534,7 +3534,7 @@ protonum: 0
name: pad
type: pad
-
- name: tc-act-sample-attrs
+ name: act-sample-attrs
name-prefix: tca-sample-
header: linux/tc_act/tc_sample.h
attributes:
@@ -3559,7 +3559,7 @@ protonum: 0
name: pad
type: pad
-
- name: tc-act-gact-attrs
+ name: act-gact-attrs
name-prefix: tca-gact-
header: linux/tc_act/tc_gact.h
attributes:
@@ -3626,7 +3626,7 @@ protonum: 0
name: pkt64
type: u64
-
- name: tc-u32-attrs
+ name: u32-attrs
name-prefix: tca-u32-
attributes:
-
@@ -3648,12 +3648,12 @@ protonum: 0
-
name: police
type: nest
- nested-attributes: tc-police-attrs
+ nested-attributes: police-attrs
-
name: act
type: indexed-array
sub-type: nest
- nested-attributes: tc-act-attrs
+ nested-attributes: act-attrs
-
name: indev
type: string
@@ -3674,78 +3674,78 @@ protonum: 0
sub-messages:
-
- name: tc-options-msg
+ name: options-msg
formats:
-
value: basic
- attribute-set: tc-basic-attrs
+ attribute-set: basic-attrs
-
value: bpf
- attribute-set: tc-bpf-attrs
+ attribute-set: bpf-attrs
-
value: bfifo
fixed-header: tc-fifo-qopt
-
value: cake
- attribute-set: tc-cake-attrs
+ attribute-set: cake-attrs
-
value: cbs
- attribute-set: tc-cbs-attrs
+ attribute-set: cbs-attrs
-
value: cgroup
- attribute-set: tc-cgroup-attrs
+ attribute-set: cgroup-attrs
-
value: choke
- attribute-set: tc-choke-attrs
+ attribute-set: choke-attrs
-
value: clsact # no content
-
value: codel
- attribute-set: tc-codel-attrs
+ attribute-set: codel-attrs
-
value: drr
- attribute-set: tc-drr-attrs
+ attribute-set: drr-attrs
-
value: etf
- attribute-set: tc-etf-attrs
+ attribute-set: etf-attrs
-
value: ets
- attribute-set: tc-ets-attrs
+ attribute-set: ets-attrs
-
value: flow
- attribute-set: tc-flow-attrs
+ attribute-set: flow-attrs
-
value: flower
- attribute-set: tc-flower-attrs
+ attribute-set: flower-attrs
-
value: fq
- attribute-set: tc-fq-attrs
+ attribute-set: fq-attrs
-
value: fq_codel
- attribute-set: tc-fq-codel-attrs
+ attribute-set: fq-codel-attrs
-
value: fq_pie
- attribute-set: tc-fq-pie-attrs
+ attribute-set: fq-pie-attrs
-
value: fw
- attribute-set: tc-fw-attrs
+ attribute-set: fw-attrs
-
value: gred
- attribute-set: tc-gred-attrs
+ attribute-set: gred-attrs
-
value: hfsc
fixed-header: tc-hfsc-qopt
-
value: hhf
- attribute-set: tc-hhf-attrs
+ attribute-set: hhf-attrs
-
value: htb
- attribute-set: tc-htb-attrs
+ attribute-set: htb-attrs
-
value: ingress # no content
-
value: matchall
- attribute-set: tc-matchall-attrs
+ attribute-set: matchall-attrs
-
value: mq # no content
-
@@ -3757,7 +3757,7 @@ protonum: 0
-
value: netem
fixed-header: tc-netem-qopt
- attribute-set: tc-netem-attrs
+ attribute-set: netem-attrs
-
value: pfifo
fixed-header: tc-fifo-qopt
@@ -3769,7 +3769,7 @@ protonum: 0
fixed-header: tc-fifo-qopt
-
value: pie
- attribute-set: tc-pie-attrs
+ attribute-set: pie-attrs
-
value: plug
fixed-header: tc-plug-qopt
@@ -3778,13 +3778,13 @@ protonum: 0
fixed-header: tc-prio-qopt
-
value: qfq
- attribute-set: tc-qfq-attrs
+ attribute-set: qfq-attrs
-
value: red
- attribute-set: tc-red-attrs
+ attribute-set: red-attrs
-
value: route
- attribute-set: tc-route-attrs
+ attribute-set: route-attrs
-
value: sfb
fixed-header: tc-sfb-qopt
@@ -3793,79 +3793,79 @@ protonum: 0
fixed-header: tc-sfq-qopt-v1
-
value: taprio
- attribute-set: tc-taprio-attrs
+ attribute-set: taprio-attrs
-
value: tbf
- attribute-set: tc-tbf-attrs
+ attribute-set: tbf-attrs
-
value: u32
- attribute-set: tc-u32-attrs
+ attribute-set: u32-attrs
-
- name: tc-act-options-msg
+ name: act-options-msg
formats:
-
value: bpf
- attribute-set: tc-act-bpf-attrs
+ attribute-set: act-bpf-attrs
-
value: connmark
- attribute-set: tc-act-connmark-attrs
+ attribute-set: act-connmark-attrs
-
value: csum
- attribute-set: tc-act-csum-attrs
+ attribute-set: act-csum-attrs
-
value: ct
- attribute-set: tc-act-ct-attrs
+ attribute-set: act-ct-attrs
-
value: ctinfo
- attribute-set: tc-act-ctinfo-attrs
+ attribute-set: act-ctinfo-attrs
-
value: gact
- attribute-set: tc-act-gact-attrs
+ attribute-set: act-gact-attrs
-
value: gate
- attribute-set: tc-act-gate-attrs
+ attribute-set: act-gate-attrs
-
value: ife
- attribute-set: tc-act-ife-attrs
+ attribute-set: act-ife-attrs
-
value: mirred
- attribute-set: tc-act-mirred-attrs
+ attribute-set: act-mirred-attrs
-
value: mpls
- attribute-set: tc-act-mpls-attrs
+ attribute-set: act-mpls-attrs
-
value: nat
- attribute-set: tc-act-nat-attrs
+ attribute-set: act-nat-attrs
-
value: pedit
- attribute-set: tc-act-pedit-attrs
+ attribute-set: act-pedit-attrs
-
value: police
- attribute-set: tc-police-attrs
+ attribute-set: police-attrs
-
value: sample
- attribute-set: tc-act-sample-attrs
+ attribute-set: act-sample-attrs
-
value: simple
- attribute-set: tc-act-simple-attrs
+ attribute-set: act-simple-attrs
-
value: skbedit
- attribute-set: tc-act-skbedit-attrs
+ attribute-set: act-skbedit-attrs
-
value: skbmod
- attribute-set: tc-act-skbmod-attrs
+ attribute-set: act-skbmod-attrs
-
value: tunnel_key
- attribute-set: tc-act-tunnel-key-attrs
+ attribute-set: act-tunnel-key-attrs
-
value: vlan
- attribute-set: tc-act-vlan-attrs
+ attribute-set: act-vlan-attrs
-
name: tca-stats-app-msg
formats:
-
value: cake
- attribute-set: tc-cake-stats-attrs
+ attribute-set: cake-stats-attrs
-
value: choke
fixed-header: tc-choke-xstats
@@ -3904,7 +3904,7 @@ protonum: 0
-
name: newqdisc
doc: Create new tc qdisc.
- attribute-set: tc-attrs
+ attribute-set: attrs
fixed-header: tcmsg
do:
request:
@@ -3919,7 +3919,7 @@ protonum: 0
-
name: delqdisc
doc: Delete existing tc qdisc.
- attribute-set: tc-attrs
+ attribute-set: attrs
fixed-header: tcmsg
do:
request:
@@ -3927,7 +3927,7 @@ protonum: 0
-
name: getqdisc
doc: Get / dump tc qdisc information.
- attribute-set: tc-attrs
+ attribute-set: attrs
fixed-header: tcmsg
do:
request:
@@ -3951,7 +3951,7 @@ protonum: 0
-
name: newtclass
doc: Get / dump tc traffic class information.
- attribute-set: tc-attrs
+ attribute-set: attrs
fixed-header: tcmsg
do:
request:
@@ -3960,7 +3960,7 @@ protonum: 0
-
name: deltclass
doc: Get / dump tc traffic class information.
- attribute-set: tc-attrs
+ attribute-set: attrs
fixed-header: tcmsg
do:
request:
@@ -3968,7 +3968,7 @@ protonum: 0
-
name: gettclass
doc: Get / dump tc traffic class information.
- attribute-set: tc-attrs
+ attribute-set: attrs
fixed-header: tcmsg
do:
request:
@@ -3979,7 +3979,7 @@ protonum: 0
-
name: newtfilter
doc: Get / dump tc filter information.
- attribute-set: tc-attrs
+ attribute-set: attrs
fixed-header: tcmsg
do:
request:
@@ -3988,7 +3988,7 @@ protonum: 0
-
name: deltfilter
doc: Get / dump tc filter information.
- attribute-set: tc-attrs
+ attribute-set: attrs
fixed-header: tcmsg
do:
request:
@@ -3999,7 +3999,7 @@ protonum: 0
-
name: gettfilter
doc: Get / dump tc filter information.
- attribute-set: tc-attrs
+ attribute-set: attrs
fixed-header: tcmsg
do:
request:
@@ -4022,7 +4022,7 @@ protonum: 0
-
name: newchain
doc: Get / dump tc chain information.
- attribute-set: tc-attrs
+ attribute-set: attrs
fixed-header: tcmsg
do:
request:
@@ -4031,7 +4031,7 @@ protonum: 0
-
name: delchain
doc: Get / dump tc chain information.
- attribute-set: tc-attrs
+ attribute-set: attrs
fixed-header: tcmsg
do:
request:
@@ -4041,7 +4041,7 @@ protonum: 0
-
name: getchain
doc: Get / dump tc chain information.
- attribute-set: tc-attrs
+ attribute-set: attrs
fixed-header: tcmsg
do:
request:
--
2.49.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH net-next v2 06/12] tools: ynl-gen: support passing selector to a nest
2025-05-20 16:19 [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC Jakub Kicinski
` (4 preceding siblings ...)
2025-05-20 16:19 ` [PATCH net-next v2 05/12] netlink: specs: tc: drop the family name prefix from attrs Jakub Kicinski
@ 2025-05-20 16:19 ` Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 07/12] tools: ynl-gen: move fixed header info from RenderInfo to Struct Jakub Kicinski
` (6 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Jakub Kicinski @ 2025-05-20 16:19 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, donald.hunter,
jacob.e.keller, sdf, jstancek, kory.maincent, Jakub Kicinski
In rtnetlink all submessages had the selector at the same level
of nesting as the submessage. We could refer to the relevant
attribute from the current struct. In TC, stats are one level
of nesting deeper than "kind". Teach the code-gen about structs
which need to be passed a selector by the caller for parsing.
Because structs are "topologically sorted" one pass of propagating
the selectors down is enough.
For generating netlink message we depend on the presence bits
so no selector passing needed there.
Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
tools/net/ynl/pyynl/ynl_gen_c.py | 65 +++++++++++++++++++++++++++++---
1 file changed, 60 insertions(+), 5 deletions(-)
diff --git a/tools/net/ynl/pyynl/ynl_gen_c.py b/tools/net/ynl/pyynl/ynl_gen_c.py
index 1f8cc34ab3f0..c1508d8c1e7a 100755
--- a/tools/net/ynl/pyynl/ynl_gen_c.py
+++ b/tools/net/ynl/pyynl/ynl_gen_c.py
@@ -685,7 +685,11 @@ from lib import SpecSubMessage, SpecSubMessageFormat
f"{self.enum_name}, {at}{var}->{self.c_name})")
def _attr_get(self, ri, var):
- get_lines = [f"if ({self.nested_render_name}_parse(&parg, attr))",
+ pns = self.family.pure_nested_structs[self.nested_attrs]
+ args = ["&parg", "attr"]
+ for sel in pns.external_selectors():
+ args.append(f'{var}->{sel.name}')
+ get_lines = [f"if ({self.nested_render_name}_parse({', '.join(args)}))",
"return YNL_PARSE_CB_ERROR;"]
init_lines = [f"parg.rsp_policy = &{self.nested_render_name}_nest;",
f"parg.data = &{var}->{self.c_name};"]
@@ -890,15 +894,24 @@ from lib import SpecSubMessage, SpecSubMessageFormat
def _attr_typol(self):
typol = f'.type = YNL_PT_NEST, .nest = &{self.nested_render_name}_nest, '
- typol += f'.is_submsg = 1, .selector_type = {self.attr_set[self["selector"]].value} '
+ typol += '.is_submsg = 1, '
+ # Reverse-parsing of the policy (ynl_err_walk() in ynl.c) does not
+ # support external selectors. No family uses sub-messages with external
+ # selector for requests so this is fine for now.
+ if not self.selector.is_external():
+ typol += f'.selector_type = {self.attr_set[self["selector"]].value} '
return typol
def _attr_get(self, ri, var):
sel = c_lower(self['selector'])
- get_lines = [f'if (!{var}->{sel})',
+ if self.selector.is_external():
+ sel_var = f"_sel_{sel}"
+ else:
+ sel_var = f"{var}->{sel}"
+ get_lines = [f'if (!{sel_var})',
f'return ynl_submsg_failed(yarg, "%s", "%s");' %
(self.name, self['selector']),
- f"if ({self.nested_render_name}_parse(&parg, {var}->{sel}, attr))",
+ f"if ({self.nested_render_name}_parse(&parg, {sel_var}, attr))",
"return YNL_PARSE_CB_ERROR;"]
init_lines = [f"parg.rsp_policy = &{self.nested_render_name}_nest;",
f"parg.data = &{var}->{self.c_name};"]
@@ -914,7 +927,15 @@ from lib import SpecSubMessage, SpecSubMessageFormat
self.attr.is_selector = True
self._external = False
else:
- raise Exception("Passing selectors from external nests not supported")
+ # The selector will need to get passed down thru the structs
+ self.attr = None
+ self._external = True
+
+ def set_attr(self, attr):
+ self.attr = attr
+
+ def is_external(self):
+ return self._external
class Struct:
@@ -976,6 +997,13 @@ from lib import SpecSubMessage, SpecSubMessageFormat
raise Exception("Inheriting different members not supported")
self.inherited = [c_lower(x) for x in sorted(self._inherited)]
+ def external_selectors(self):
+ sels = []
+ for name, attr in self.attr_list:
+ if isinstance(attr, TypeSubMessage) and attr.selector.is_external():
+ sels.append(attr.selector)
+ return sels
+
def free_needs_iter(self):
for _, attr in self.attr_list:
if attr.free_needs_iter():
@@ -1222,6 +1250,7 @@ from lib import SpecSubMessage, SpecSubMessageFormat
self._load_root_sets()
self._load_nested_sets()
self._load_attr_use()
+ self._load_selector_passing()
self._load_hooks()
self.kernel_policy = self.yaml.get('kernel-policy', 'split')
@@ -1436,6 +1465,30 @@ from lib import SpecSubMessage, SpecSubMessageFormat
if attr in rs_members['reply']:
spec.set_reply()
+ def _load_selector_passing(self):
+ def all_structs():
+ for k, v in reversed(self.pure_nested_structs.items()):
+ yield k, v
+ for k, _ in self.root_sets.items():
+ yield k, None # we don't have a struct, but it must be terminal
+
+ for attr_set, struct in all_structs():
+ for _, spec in self.attr_sets[attr_set].items():
+ if 'nested-attributes' in spec:
+ child_name = spec['nested-attributes']
+ elif 'sub-message' in spec:
+ child_name = spec.sub_message
+ else:
+ continue
+
+ child = self.pure_nested_structs.get(child_name)
+ for selector in child.external_selectors():
+ if selector.name in self.attr_sets[attr_set]:
+ sel_attr = self.attr_sets[attr_set][selector.name]
+ selector.set_attr(sel_attr)
+ else:
+ raise Exception("Passing selector thru more than one layer not supported")
+
def _load_global_policy(self):
global_set = set()
attr_set_name = None
@@ -2183,6 +2236,8 @@ _C_KW = {
def parse_rsp_nested_prototype(ri, struct, suffix=';'):
func_args = ['struct ynl_parse_arg *yarg',
'const struct nlattr *nested']
+ for sel in struct.external_selectors():
+ func_args.append('const char *_sel_' + sel.name)
if struct.submsg:
func_args.insert(1, 'const char *sel')
for arg in struct.inherited:
--
2.49.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH net-next v2 07/12] tools: ynl-gen: move fixed header info from RenderInfo to Struct
2025-05-20 16:19 [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC Jakub Kicinski
` (5 preceding siblings ...)
2025-05-20 16:19 ` [PATCH net-next v2 06/12] tools: ynl-gen: support passing selector to a nest Jakub Kicinski
@ 2025-05-20 16:19 ` Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 08/12] tools: ynl-gen: support local attrs in _multi_parse Jakub Kicinski
` (5 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Jakub Kicinski @ 2025-05-20 16:19 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, donald.hunter,
jacob.e.keller, sdf, jstancek, kory.maincent, Jakub Kicinski
RenderInfo describes a request-response exchange. Struct describes
a parsed attribute set. For ease of parsing sub-messages with
fixed headers move fixed header info from RenderInfo to Struct.
No functional changes.
Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
tools/net/ynl/pyynl/ynl_gen_c.py | 45 +++++++++++++++++++-------------
1 file changed, 27 insertions(+), 18 deletions(-)
diff --git a/tools/net/ynl/pyynl/ynl_gen_c.py b/tools/net/ynl/pyynl/ynl_gen_c.py
index c1508d8c1e7a..bd1fadb2cf5a 100755
--- a/tools/net/ynl/pyynl/ynl_gen_c.py
+++ b/tools/net/ynl/pyynl/ynl_gen_c.py
@@ -939,7 +939,7 @@ from lib import SpecSubMessage, SpecSubMessageFormat
class Struct:
- def __init__(self, family, space_name, type_list=None,
+ def __init__(self, family, space_name, type_list=None, fixed_header=None,
inherited=None, submsg=None):
self.family = family
self.space_name = space_name
@@ -947,6 +947,9 @@ from lib import SpecSubMessage, SpecSubMessageFormat
# Use list to catch comparisons with empty sets
self._inherited = inherited if inherited is not None else []
self.inherited = []
+ self.fixed_header = None
+ if fixed_header:
+ self.fixed_header = 'struct ' + c_lower(fixed_header)
self.submsg = submsg
self.nested = type_list is None
@@ -1345,7 +1348,9 @@ from lib import SpecSubMessage, SpecSubMessageFormat
nested = spec['nested-attributes']
if nested not in self.root_sets:
if nested not in self.pure_nested_structs:
- self.pure_nested_structs[nested] = Struct(self, nested, inherited=inherit)
+ self.pure_nested_structs[nested] = \
+ Struct(self, nested, inherited=inherit,
+ fixed_header=spec.get('fixed-header'))
else:
raise Exception(f'Using attr set as root and nested not supported - {nested}')
@@ -1538,13 +1543,12 @@ from lib import SpecSubMessage, SpecSubMessageFormat
self.op_mode = op_mode
self.op = op
- self.fixed_hdr = None
+ fixed_hdr = op.fixed_header if op else None
self.fixed_hdr_len = 'ys->family->hdr_len'
if op and op.fixed_header:
- self.fixed_hdr = 'struct ' + c_lower(op.fixed_header)
if op.fixed_header != family.fixed_header:
if family.is_classic():
- self.fixed_hdr_len = f"sizeof({self.fixed_hdr})"
+ self.fixed_hdr_len = f"sizeof(struct {c_lower(fixed_hdr)})"
else:
raise Exception(f"Per-op fixed header not supported, yet")
@@ -1584,12 +1588,17 @@ from lib import SpecSubMessage, SpecSubMessageFormat
type_list = []
if op_dir in op[op_mode]:
type_list = op[op_mode][op_dir]['attributes']
- self.struct[op_dir] = Struct(family, self.attr_set, type_list=type_list)
+ self.struct[op_dir] = Struct(family, self.attr_set,
+ fixed_header=fixed_hdr,
+ type_list=type_list)
if op_mode == 'event':
- self.struct['reply'] = Struct(family, self.attr_set, type_list=op['event']['attributes'])
+ self.struct['reply'] = Struct(family, self.attr_set,
+ fixed_header=fixed_hdr,
+ type_list=op['event']['attributes'])
def type_empty(self, key):
- return len(self.struct[key].attr_list) == 0 and self.fixed_hdr is None
+ return len(self.struct[key].attr_list) == 0 and \
+ self.struct['request'].fixed_header is None
def needs_nlflags(self, direction):
return self.op_mode == 'do' and direction == 'request' and self.family.is_classic()
@@ -2057,12 +2066,12 @@ _C_KW = {
if struct.nested:
iter_line = "ynl_attr_for_each_nested(attr, nested)"
else:
- if ri.fixed_hdr:
+ if struct.fixed_header:
local_vars += ['void *hdr;']
iter_line = "ynl_attr_for_each(attr, nlh, yarg->ys->family->hdr_len)"
if ri.op.fixed_header != ri.family.fixed_header:
if ri.family.is_classic():
- iter_line = f"ynl_attr_for_each(attr, nlh, sizeof({ri.fixed_hdr}))"
+ iter_line = f"ynl_attr_for_each(attr, nlh, sizeof({struct.fixed_header}))"
else:
raise Exception(f"Per-op fixed header not supported, yet")
@@ -2104,12 +2113,12 @@ _C_KW = {
for arg in struct.inherited:
ri.cw.p(f'dst->{arg} = {arg};')
- if ri.fixed_hdr:
+ if struct.fixed_header:
if ri.family.is_classic():
ri.cw.p('hdr = ynl_nlmsg_data(nlh);')
else:
ri.cw.p('hdr = ynl_nlmsg_data_offset(nlh, sizeof(struct genlmsghdr));')
- ri.cw.p(f"memcpy(&dst->_hdr, hdr, sizeof({ri.fixed_hdr}));")
+ ri.cw.p(f"memcpy(&dst->_hdr, hdr, sizeof({struct.fixed_header}));")
for anest in sorted(all_multi):
aspec = struct[anest]
ri.cw.p(f"if (dst->{aspec.c_name})")
@@ -2303,7 +2312,7 @@ _C_KW = {
ret_err = 'NULL'
local_vars += [f'{type_name(ri, rdir(direction))} *rsp;']
- if ri.fixed_hdr:
+ if ri.struct["request"].fixed_header:
local_vars += ['size_t hdr_len;',
'void *hdr;']
@@ -2327,7 +2336,7 @@ _C_KW = {
ri.cw.p(f"yrs.yarg.rsp_policy = &{ri.struct['reply'].render_name}_nest;")
ri.cw.nl()
- if ri.fixed_hdr:
+ if ri.struct['request'].fixed_header:
ri.cw.p("hdr_len = sizeof(req->_hdr);")
ri.cw.p("hdr = ynl_nlmsg_put_extra_header(nlh, hdr_len);")
ri.cw.p("memcpy(hdr, &req->_hdr, hdr_len);")
@@ -2373,7 +2382,7 @@ _C_KW = {
'struct nlmsghdr *nlh;',
'int err;']
- if ri.fixed_hdr:
+ if ri.struct['request'].fixed_header:
local_vars += ['size_t hdr_len;',
'void *hdr;']
@@ -2394,7 +2403,7 @@ _C_KW = {
else:
ri.cw.p(f"nlh = ynl_gemsg_start_dump(ys, {ri.nl.get_family_id()}, {ri.op.enum_name}, 1);")
- if ri.fixed_hdr:
+ if ri.struct['request'].fixed_header:
ri.cw.p("hdr_len = sizeof(req->_hdr);")
ri.cw.p("hdr = ynl_nlmsg_put_extra_header(nlh, hdr_len);")
ri.cw.p("memcpy(hdr, &req->_hdr, hdr_len);")
@@ -2471,8 +2480,8 @@ _C_KW = {
if ri.needs_nlflags(direction):
ri.cw.p('__u16 _nlmsg_flags;')
ri.cw.nl()
- if ri.fixed_hdr:
- ri.cw.p(ri.fixed_hdr + ' _hdr;')
+ if struct.fixed_header:
+ ri.cw.p(struct.fixed_header + ' _hdr;')
ri.cw.nl()
for type_filter in ['present', 'len', 'count']:
--
2.49.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH net-next v2 08/12] tools: ynl-gen: support local attrs in _multi_parse
2025-05-20 16:19 [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC Jakub Kicinski
` (6 preceding siblings ...)
2025-05-20 16:19 ` [PATCH net-next v2 07/12] tools: ynl-gen: move fixed header info from RenderInfo to Struct Jakub Kicinski
@ 2025-05-20 16:19 ` Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 09/12] tools: ynl-gen: support weird sub-message formats Jakub Kicinski
` (4 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Jakub Kicinski @ 2025-05-20 16:19 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, donald.hunter,
jacob.e.keller, sdf, jstancek, kory.maincent, Jakub Kicinski
The _multi_parse() helper calls the _attr_get() method of each attr,
but it only respects what code the helper wants to emit, not what
local variables it needs. Local variables will soon be needed,
support them.
Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
tools/net/ynl/pyynl/ynl_gen_c.py | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/tools/net/ynl/pyynl/ynl_gen_c.py b/tools/net/ynl/pyynl/ynl_gen_c.py
index bd1fadb2cf5a..f2a4404d0d21 100755
--- a/tools/net/ynl/pyynl/ynl_gen_c.py
+++ b/tools/net/ynl/pyynl/ynl_gen_c.py
@@ -2214,12 +2214,16 @@ _C_KW = {
parse_rsp_nested_prototype(ri, struct, suffix='')
var = 'dst'
+ local_vars = {'const struct nlattr *attr = nested;',
+ f'{struct.ptr_name}{var} = yarg->data;',
+ 'struct ynl_parse_arg parg;'}
+
+ for _, arg in struct.member_list():
+ _, _, l_vars = arg._attr_get(ri, var)
+ local_vars |= set(l_vars) if l_vars else set()
ri.cw.block_start()
- ri.cw.write_func_lvar(['const struct nlattr *attr = nested;',
- f'{struct.ptr_name}{var} = yarg->data;',
- 'struct ynl_parse_arg parg;'])
-
+ ri.cw.write_func_lvar(list(local_vars))
ri.cw.p('parg.ys = yarg->ys;')
ri.cw.nl()
--
2.49.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH net-next v2 09/12] tools: ynl-gen: support weird sub-message formats
2025-05-20 16:19 [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC Jakub Kicinski
` (7 preceding siblings ...)
2025-05-20 16:19 ` [PATCH net-next v2 08/12] tools: ynl-gen: support local attrs in _multi_parse Jakub Kicinski
@ 2025-05-20 16:19 ` Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 10/12] tools: ynl: enable codegen for TC Jakub Kicinski
` (3 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Jakub Kicinski @ 2025-05-20 16:19 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, donald.hunter,
jacob.e.keller, sdf, jstancek, kory.maincent, Jakub Kicinski
TC uses all possible sub-message formats:
- nested attrs
- fixed headers + nested attrs
- fixed headers
- empty
Nested attrs are already supported for rt-link. Add support
for remaining 3. The empty and fixed headers ones are fairly
trivial, we can fake a Binary or Flags type instead of a Nest.
For fixed headers + nest we need to teach nest parsing and
nest put to handle fixed headers.
Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
v2:
- refactor for when init_lines is None
v1: https://lore.kernel.org/20250517001318.285800-9-kuba@kernel.org
---
tools/net/ynl/lib/ynl-priv.h | 8 ++++--
tools/net/ynl/pyynl/ynl_gen_c.py | 48 ++++++++++++++++++++++++--------
2 files changed, 43 insertions(+), 13 deletions(-)
diff --git a/tools/net/ynl/lib/ynl-priv.h b/tools/net/ynl/lib/ynl-priv.h
index 416866f85820..824777d7e05e 100644
--- a/tools/net/ynl/lib/ynl-priv.h
+++ b/tools/net/ynl/lib/ynl-priv.h
@@ -213,11 +213,15 @@ static inline void *ynl_attr_data_end(const struct nlattr *attr)
NLMSG_HDRLEN + fixed_hdr_sz); attr; \
(attr) = ynl_attr_next(ynl_nlmsg_end_addr(nlh), attr))
-#define ynl_attr_for_each_nested(attr, outer) \
+#define ynl_attr_for_each_nested_off(attr, outer, offset) \
for ((attr) = ynl_attr_first(outer, outer->nla_len, \
- sizeof(struct nlattr)); attr; \
+ sizeof(struct nlattr) + offset); \
+ attr; \
(attr) = ynl_attr_next(ynl_attr_data_end(outer), attr))
+#define ynl_attr_for_each_nested(attr, outer) \
+ ynl_attr_for_each_nested_off(attr, outer, 0)
+
#define ynl_attr_for_each_payload(start, len, attr) \
for ((attr) = ynl_attr_first(start, len, 0); attr; \
(attr) = ynl_attr_next(start + len, attr))
diff --git a/tools/net/ynl/pyynl/ynl_gen_c.py b/tools/net/ynl/pyynl/ynl_gen_c.py
index f2a4404d0d21..76032e01c2e7 100755
--- a/tools/net/ynl/pyynl/ynl_gen_c.py
+++ b/tools/net/ynl/pyynl/ynl_gen_c.py
@@ -1372,12 +1372,25 @@ from lib import SpecSubMessage, SpecSubMessageFormat
attrs = []
for name, fmt in submsg.formats.items():
- attrs.append({
+ attr = {
"name": name,
- "type": "nest",
"parent-sub-message": spec,
- "nested-attributes": fmt['attribute-set']
- })
+ }
+ if 'attribute-set' in fmt:
+ attr |= {
+ "type": "nest",
+ "nested-attributes": fmt['attribute-set'],
+ }
+ if 'fixed-header' in fmt:
+ attr |= { "fixed-header": fmt["fixed-header"] }
+ elif 'fixed-header' in fmt:
+ attr |= {
+ "type": "binary",
+ "struct": fmt["fixed-header"],
+ }
+ else:
+ attr["type"] = "flag"
+ attrs.append(attr)
self.attr_sets[nested] = AttrSet(self, {
"name": nested,
@@ -1921,8 +1934,11 @@ _C_KW = {
i = 0
for name, arg in struct.member_list():
- cw.p('[%d] = { .type = YNL_PT_SUBMSG, .name = "%s", .nest = &%s_nest, },' %
- (i, name, arg.nested_render_name))
+ nest = ""
+ if arg.type == 'nest':
+ nest = f" .nest = &{arg.nested_render_name}_nest,"
+ cw.p('[%d] = { .type = YNL_PT_SUBMSG, .name = "%s",%s },' %
+ (i, name, nest))
i += 1
cw.block_end(line=';')
@@ -2032,6 +2048,11 @@ _C_KW = {
if struct.submsg is None:
local_vars.append('struct nlattr *nest;')
init_lines.append("nest = ynl_attr_nest_start(nlh, attr_type);")
+ if struct.fixed_header:
+ local_vars.append('void *hdr;')
+ struct_sz = f'sizeof({struct.fixed_header})'
+ init_lines.append(f"hdr = ynl_nlmsg_put_extra_header(nlh, {struct_sz});")
+ init_lines.append(f"memcpy(hdr, &obj->_hdr, {struct_sz});")
has_anest = False
has_count = False
@@ -2063,11 +2084,14 @@ _C_KW = {
def _multi_parse(ri, struct, init_lines, local_vars):
+ if struct.fixed_header:
+ local_vars += ['void *hdr;']
if struct.nested:
- iter_line = "ynl_attr_for_each_nested(attr, nested)"
- else:
if struct.fixed_header:
- local_vars += ['void *hdr;']
+ iter_line = f"ynl_attr_for_each_nested_off(attr, nested, sizeof({struct.fixed_header}))"
+ else:
+ iter_line = "ynl_attr_for_each_nested(attr, nested)"
+ else:
iter_line = "ynl_attr_for_each(attr, nlh, yarg->ys->family->hdr_len)"
if ri.op.fixed_header != ri.family.fixed_header:
if ri.family.is_classic():
@@ -2114,7 +2138,9 @@ _C_KW = {
ri.cw.p(f'dst->{arg} = {arg};')
if struct.fixed_header:
- if ri.family.is_classic():
+ if struct.nested:
+ ri.cw.p('hdr = ynl_attr_data(nested);')
+ elif ri.family.is_classic():
ri.cw.p('hdr = ynl_nlmsg_data(nlh);')
else:
ri.cw.p('hdr = ynl_nlmsg_data_offset(nlh, sizeof(struct genlmsghdr));')
@@ -2234,7 +2260,7 @@ _C_KW = {
ri.cw.block_start(line=f'{kw} (!strcmp(sel, "{name}"))')
get_lines, init_lines, _ = arg._attr_get(ri, var)
- for line in init_lines:
+ for line in init_lines or []:
ri.cw.p(line)
for line in get_lines:
ri.cw.p(line)
--
2.49.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH net-next v2 10/12] tools: ynl: enable codegen for TC
2025-05-20 16:19 [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC Jakub Kicinski
` (8 preceding siblings ...)
2025-05-20 16:19 ` [PATCH net-next v2 09/12] tools: ynl-gen: support weird sub-message formats Jakub Kicinski
@ 2025-05-20 16:19 ` Jakub Kicinski
2025-05-20 16:34 ` Kory Maincent
2025-05-20 16:19 ` [PATCH net-next v2 11/12] netlink: specs: tc: add qdisc dump to TC spec Jakub Kicinski
` (2 subsequent siblings)
12 siblings, 1 reply; 19+ messages in thread
From: Jakub Kicinski @ 2025-05-20 16:19 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, donald.hunter,
jacob.e.keller, sdf, jstancek, kory.maincent, Jakub Kicinski
We are ready to support most of TC. Enable C code gen.
Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
v2:
- add more headers to the local includes to build on Ubuntu 22.04
v1: https://lore.kernel.org/20250517001318.285800-10-kuba@kernel.org
---
tools/net/ynl/Makefile.deps | 7 +++++++
tools/net/ynl/generated/Makefile | 2 +-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/tools/net/ynl/Makefile.deps b/tools/net/ynl/Makefile.deps
index 8c378356fc87..90686e241157 100644
--- a/tools/net/ynl/Makefile.deps
+++ b/tools/net/ynl/Makefile.deps
@@ -39,4 +39,11 @@ CFLAGS_rt-neigh:=$(call get_hdr_inc,__LINUX_RTNETLINK_H,rtnetlink.h) \
$(call get_hdr_inc,__LINUX_NEIGHBOUR_H,neighbour.h)
CFLAGS_rt-route:=$(call get_hdr_inc,__LINUX_RTNETLINK_H,rtnetlink.h)
CFLAGS_rt-rule:=$(call get_hdr_inc,__LINUX_FIB_RULES_H,fib_rules.h)
+CFLAGS_tc:= $(call get_hdr_inc,__LINUX_RTNETLINK_H,rtnetlink.h) \
+ $(call get_hdr_inc,__LINUX_PKT_SCHED_H,pkt_sched.h) \
+ $(call get_hdr_inc,__LINUX_PKT_CLS_H,pkt_cls.h) \
+ $(call get_hdr_inc,_TC_CT_H,tc_act/tc_ct.h) \
+ $(call get_hdr_inc,_TC_MIRRED_H,tc_act/tc_mirred.h) \
+ $(call get_hdr_inc,_TC_SKBEDIT_H,tc_act/tc_skbedit.h) \
+ $(call get_hdr_inc,_TC_TUNNEL_KEY_H,tc_act/tc_tunnel_key.h)
CFLAGS_tcp_metrics:=$(call get_hdr_inc,_LINUX_TCP_METRICS_H,tcp_metrics.h)
diff --git a/tools/net/ynl/generated/Makefile b/tools/net/ynl/generated/Makefile
index 9208feed28c1..86e1e4a959a7 100644
--- a/tools/net/ynl/generated/Makefile
+++ b/tools/net/ynl/generated/Makefile
@@ -23,7 +23,7 @@ TOOL_RST:=../pyynl/ynl_gen_rst.py
SPECS_DIR:=../../../../Documentation/netlink/specs
SPECS_PATHS=$(wildcard $(SPECS_DIR)/*.yaml)
-GENS_UNSUP=conntrack nftables tc
+GENS_UNSUP=conntrack nftables
GENS=$(filter-out ${GENS_UNSUP},$(patsubst $(SPECS_DIR)/%.yaml,%,${SPECS_PATHS}))
SRCS=$(patsubst %,%-user.c,${GENS})
HDRS=$(patsubst %,%-user.h,${GENS})
--
2.49.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH net-next v2 11/12] netlink: specs: tc: add qdisc dump to TC spec
2025-05-20 16:19 [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC Jakub Kicinski
` (9 preceding siblings ...)
2025-05-20 16:19 ` [PATCH net-next v2 10/12] tools: ynl: enable codegen for TC Jakub Kicinski
@ 2025-05-20 16:19 ` Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 12/12] tools: ynl: add a sample for TC Jakub Kicinski
2025-05-21 22:50 ` [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC patchwork-bot+netdevbpf
12 siblings, 0 replies; 19+ messages in thread
From: Jakub Kicinski @ 2025-05-20 16:19 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, donald.hunter,
jacob.e.keller, sdf, jstancek, kory.maincent, Jakub Kicinski
Hook TC qdisc dump in the TC qdisc get, it only supported doit
until now and dumping will be used by the sample code.
Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
Documentation/netlink/specs/tc.yaml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/Documentation/netlink/specs/tc.yaml b/Documentation/netlink/specs/tc.yaml
index 6e8db7adde3c..cb7ea7d62e56 100644
--- a/Documentation/netlink/specs/tc.yaml
+++ b/Documentation/netlink/specs/tc.yaml
@@ -3929,7 +3929,7 @@ protonum: 0
doc: Get / dump tc qdisc information.
attribute-set: attrs
fixed-header: tcmsg
- do:
+ do: &getqdisc-do
request:
value: 38
attributes:
@@ -3948,6 +3948,7 @@ protonum: 0
- chain
- ingress-block
- egress-block
+ dump: *getqdisc-do
-
name: newtclass
doc: Get / dump tc traffic class information.
--
2.49.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH net-next v2 12/12] tools: ynl: add a sample for TC
2025-05-20 16:19 [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC Jakub Kicinski
` (10 preceding siblings ...)
2025-05-20 16:19 ` [PATCH net-next v2 11/12] netlink: specs: tc: add qdisc dump to TC spec Jakub Kicinski
@ 2025-05-20 16:19 ` Jakub Kicinski
2025-05-21 22:50 ` [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC patchwork-bot+netdevbpf
12 siblings, 0 replies; 19+ messages in thread
From: Jakub Kicinski @ 2025-05-20 16:19 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, donald.hunter,
jacob.e.keller, sdf, jstancek, kory.maincent, Jakub Kicinski
Add a very simple TC dump sample with decoding of fq_codel attrs:
# ./tools/net/ynl/samples/tc
dummy0: fq_codel limit: 10240p target: 5ms new_flow_cnt: 0
proving that selector passing (for stats) works.
Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
tools/net/ynl/samples/tc.c | 80 ++++++++++++++++++++++++++++++++
tools/net/ynl/samples/.gitignore | 1 +
2 files changed, 81 insertions(+)
create mode 100644 tools/net/ynl/samples/tc.c
diff --git a/tools/net/ynl/samples/tc.c b/tools/net/ynl/samples/tc.c
new file mode 100644
index 000000000000..0bfff0fdd792
--- /dev/null
+++ b/tools/net/ynl/samples/tc.c
@@ -0,0 +1,80 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <stdio.h>
+#include <string.h>
+
+#include <ynl.h>
+
+#include <net/if.h>
+
+#include "tc-user.h"
+
+static void tc_qdisc_print(struct tc_getqdisc_rsp *q)
+{
+ char ifname[IF_NAMESIZE];
+ const char *name;
+
+ name = if_indextoname(q->_hdr.tcm_ifindex, ifname);
+ if (name)
+ printf("%16s: ", name);
+
+ if (q->_len.kind) {
+ printf("%s ", q->kind);
+
+ if (q->options._present.fq_codel) {
+ struct tc_fq_codel_attrs *fq_codel;
+ struct tc_fq_codel_xstats *stats;
+
+ fq_codel = &q->options.fq_codel;
+ stats = q->stats2.app.fq_codel;
+
+ if (fq_codel->_present.limit)
+ printf("limit: %dp ", fq_codel->limit);
+ if (fq_codel->_present.target)
+ printf("target: %dms ",
+ (fq_codel->target + 500) / 1000);
+ if (q->stats2.app._len.fq_codel)
+ printf("new_flow_cnt: %d ",
+ stats->qdisc_stats.new_flow_count);
+ }
+ }
+
+ printf("\n");
+}
+
+int main(int argc, char **argv)
+{
+ struct tc_getqdisc_req_dump *req;
+ struct tc_getqdisc_list *rsp;
+ struct ynl_error yerr;
+ struct ynl_sock *ys;
+
+ ys = ynl_sock_create(&ynl_tc_family, &yerr);
+ if (!ys) {
+ fprintf(stderr, "YNL: %s\n", yerr.msg);
+ return 1;
+ }
+
+ req = tc_getqdisc_req_dump_alloc();
+ if (!req)
+ goto err_destroy;
+
+ rsp = tc_getqdisc_dump(ys, req);
+ tc_getqdisc_req_dump_free(req);
+ if (!rsp)
+ goto err_close;
+
+ if (ynl_dump_empty(rsp))
+ fprintf(stderr, "Error: no addresses reported\n");
+ ynl_dump_foreach(rsp, qdisc)
+ tc_qdisc_print(qdisc);
+ tc_getqdisc_list_free(rsp);
+
+ ynl_sock_destroy(ys);
+ return 0;
+
+err_close:
+ fprintf(stderr, "YNL: %s\n", ys->err.msg);
+err_destroy:
+ ynl_sock_destroy(ys);
+ return 2;
+}
diff --git a/tools/net/ynl/samples/.gitignore b/tools/net/ynl/samples/.gitignore
index b3ec3fb0929f..7f5fca7682d7 100644
--- a/tools/net/ynl/samples/.gitignore
+++ b/tools/net/ynl/samples/.gitignore
@@ -6,3 +6,4 @@ page-pool
rt-addr
rt-link
rt-route
+tc
--
2.49.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH net-next v2 10/12] tools: ynl: enable codegen for TC
2025-05-20 16:19 ` [PATCH net-next v2 10/12] tools: ynl: enable codegen for TC Jakub Kicinski
@ 2025-05-20 16:34 ` Kory Maincent
2025-05-20 16:50 ` Jakub Kicinski
0 siblings, 1 reply; 19+ messages in thread
From: Kory Maincent @ 2025-05-20 16:34 UTC (permalink / raw)
To: Jakub Kicinski
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, horms,
donald.hunter, jacob.e.keller, sdf, jstancek
On Tue, 20 May 2025 09:19:14 -0700
Jakub Kicinski <kuba@kernel.org> wrote:
> We are ready to support most of TC. Enable C code gen.
>
> Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> ---
> v2:
> - add more headers to the local includes to build on Ubuntu 22.04
> v1: https://lore.kernel.org/20250517001318.285800-10-kuba@kernel.org
> ---
Now got this build error:
-e GEN tc-user.c
-e GEN tc-user.h
-e GEN_RST tc.rst
-e CC tc-user.o
In file included from <command-line>:
./../../../../include/uapi//linux/pkt_cls.h:250:9: error: expected specifier-qualifier-list before ‘__struct_group’
250 | __struct_group(tc_u32_sel_hdr, hdr, /* no attrs */,
| ^~~~~~~~~~~~~~
tc-user.c: In function ‘tc_u32_attrs_parse’:
tc-user.c:9086:33: warning: comparison is always false due to limited range of data type [-Wtype-limits]
9086 | if (len < sizeof(struct tc_u32_sel))
| ^
make[1]: *** [Makefile:52: tc-user.o] Error 1
Regards,
--
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH net-next v2 10/12] tools: ynl: enable codegen for TC
2025-05-20 16:34 ` Kory Maincent
@ 2025-05-20 16:50 ` Jakub Kicinski
2025-05-20 17:36 ` Kory Maincent
0 siblings, 1 reply; 19+ messages in thread
From: Jakub Kicinski @ 2025-05-20 16:50 UTC (permalink / raw)
To: Kory Maincent
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, horms,
donald.hunter, jacob.e.keller, sdf, jstancek
On Tue, 20 May 2025 18:34:16 +0200 Kory Maincent wrote:
> > We are ready to support most of TC. Enable C code gen.
> >
> > Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
> > Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> > ---
> > v2:
> > - add more headers to the local includes to build on Ubuntu 22.04
> > v1: https://lore.kernel.org/20250517001318.285800-10-kuba@kernel.org
> > ---
>
> Now got this build error:
>
> -e GEN tc-user.c
> -e GEN tc-user.h
> -e GEN_RST tc.rst
> -e CC tc-user.o
> In file included from <command-line>:
> ./../../../../include/uapi//linux/pkt_cls.h:250:9: error: expected specifier-qualifier-list before ‘__struct_group’
> 250 | __struct_group(tc_u32_sel_hdr, hdr, /* no attrs */,
> | ^~~~~~~~~~~~~~
> tc-user.c: In function ‘tc_u32_attrs_parse’:
> tc-user.c:9086:33: warning: comparison is always false due to limited range of data type [-Wtype-limits]
> 9086 | if (len < sizeof(struct tc_u32_sel))
> | ^
> make[1]: *** [Makefile:52: tc-user.o] Error 1
Odd, are you sure you have the latest headers for Ubuntu 22.04?
I added Ubuntu 22.04 to the GitHub build tester and it passes
there:
https://github.com/linux-netdev/ynl-c/actions/runs/15143226607/job/42572497918
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH net-next v2 01/12] tools: ynl-gen: add makefile deps for neigh
2025-05-20 16:19 ` [PATCH net-next v2 01/12] tools: ynl-gen: add makefile deps for neigh Jakub Kicinski
@ 2025-05-20 17:15 ` Kory Maincent
0 siblings, 0 replies; 19+ messages in thread
From: Kory Maincent @ 2025-05-20 17:15 UTC (permalink / raw)
To: Jakub Kicinski
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, horms,
donald.hunter, jacob.e.keller, sdf, jstancek
On Tue, 20 May 2025 09:19:05 -0700
Jakub Kicinski <kuba@kernel.org> wrote:
> Kory is reporting build issues after recent additions to YNL
> if the system headers are old.
>
> Link: https://lore.kernel.org/20250519164949.597d6e92@kmaincent-XPS-13-7390
> Reported-by: Kory Maincent <kory.maincent@bootlin.com>
> Fixes: 0939a418b3b0 ("tools: ynl: submsg: reverse parse / error reporting")
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Tested-by: Kory Maincent <kory.maincent@bootlin.com>
Thank you!
--
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH net-next v2 10/12] tools: ynl: enable codegen for TC
2025-05-20 16:50 ` Jakub Kicinski
@ 2025-05-20 17:36 ` Kory Maincent
2025-05-21 20:31 ` Jakub Kicinski
0 siblings, 1 reply; 19+ messages in thread
From: Kory Maincent @ 2025-05-20 17:36 UTC (permalink / raw)
To: Jakub Kicinski
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, horms,
donald.hunter, jacob.e.keller, sdf, jstancek
On Tue, 20 May 2025 09:50:05 -0700
Jakub Kicinski <kuba@kernel.org> wrote:
> On Tue, 20 May 2025 18:34:16 +0200 Kory Maincent wrote:
> > > We are ready to support most of TC. Enable C code gen.
> > >
> > > Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
> > > Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> > > ---
> > > v2:
> > > - add more headers to the local includes to build on Ubuntu 22.04
> > > v1: https://lore.kernel.org/20250517001318.285800-10-kuba@kernel.org
> > > ---
> >
> > Now got this build error:
> >
> > -e GEN tc-user.c
> > -e GEN tc-user.h
> > -e GEN_RST tc.rst
> > -e CC tc-user.o
> > In file included from <command-line>:
> > ./../../../../include/uapi//linux/pkt_cls.h:250:9: error: expected
> > specifier-qualifier-list before ‘__struct_group’ 250 |
> > __struct_group(tc_u32_sel_hdr, hdr, /* no attrs */, | ^~~~~~~~~~~~~~
> > tc-user.c: In function ‘tc_u32_attrs_parse’:
> > tc-user.c:9086:33: warning: comparison is always false due to limited range
> > of data type [-Wtype-limits] 9086 | if (len <
> > sizeof(struct tc_u32_sel)) | ^
> > make[1]: *** [Makefile:52: tc-user.o] Error 1
>
> Odd, are you sure you have the latest headers for Ubuntu 22.04?
Indeed I wasn't but after an update I still got the same error.
More precisely I am on Ubuntu 22.04.5 LTS. linux-headers-5.15.0-140
> I added Ubuntu 22.04 to the GitHub build tester and it passes
> there:
> https://github.com/linux-netdev/ynl-c/actions/runs/15143226607/job/42572497918
Regards,
--
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH net-next v2 10/12] tools: ynl: enable codegen for TC
2025-05-20 17:36 ` Kory Maincent
@ 2025-05-21 20:31 ` Jakub Kicinski
0 siblings, 0 replies; 19+ messages in thread
From: Jakub Kicinski @ 2025-05-21 20:31 UTC (permalink / raw)
To: Kory Maincent
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, horms,
donald.hunter, jacob.e.keller, sdf, jstancek
On Tue, 20 May 2025 19:36:25 +0200 Kory Maincent wrote:
> > > Now got this build error:
> > >
> > > -e GEN tc-user.c
> > > -e GEN tc-user.h
> > > -e GEN_RST tc.rst
> > > -e CC tc-user.o
> > > In file included from <command-line>:
> > > ./../../../../include/uapi//linux/pkt_cls.h:250:9: error: expected
> > > specifier-qualifier-list before ‘__struct_group’ 250 |
> > > __struct_group(tc_u32_sel_hdr, hdr, /* no attrs */, | ^~~~~~~~~~~~~~
> > > tc-user.c: In function ‘tc_u32_attrs_parse’:
> > > tc-user.c:9086:33: warning: comparison is always false due to limited range
> > > of data type [-Wtype-limits] 9086 | if (len <
> > > sizeof(struct tc_u32_sel)) | ^
> > > make[1]: *** [Makefile:52: tc-user.o] Error 1
> >
> > Odd, are you sure you have the latest headers for Ubuntu 22.04?
>
> Indeed I wasn't but after an update I still got the same error.
> More precisely I am on Ubuntu 22.04.5 LTS. linux-headers-5.15.0-140
I tried to fix this but stddef includes compiler_types.h, which is
a non-uAPI header, apparently this gets stripped during header
installation, but there is no guard around it, so our current hack
of including the header directly doesn't work.
__struct_group() was added in v5.16, and v5.15 stable tree pulled
it in for v5.15.142, 1.5 years ago. But latest Ubuntu 22.04 package
with user space headers is linux-libc-dev_5.15.0-25.25_amd64.deb (note
that linux-headers is for kernel headers, eg to built a OOT module),
which AFAICT is 3 years old.
All in all your kernel headers are pretty old. I will try to fix this
separately, but let's not hold up this series :( You can update that
one header in your /usr/include/linux and everything else should work.
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC
2025-05-20 16:19 [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC Jakub Kicinski
` (11 preceding siblings ...)
2025-05-20 16:19 ` [PATCH net-next v2 12/12] tools: ynl: add a sample for TC Jakub Kicinski
@ 2025-05-21 22:50 ` patchwork-bot+netdevbpf
12 siblings, 0 replies; 19+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-05-21 22:50 UTC (permalink / raw)
To: Jakub Kicinski
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, horms,
donald.hunter, jacob.e.keller, sdf, jstancek, kory.maincent
Hello:
This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Tue, 20 May 2025 09:19:04 -0700 you wrote:
> Add C codegen support for constructs needed by TC, namely passing
> sub-message selector from a lower nest, and sub-messages with
> fixed headers.
>
> v2:
> - [patch 1] new
> - [patch 8] small refactor
> - [patch 10] add more includes to build on Ubuntu 22.04 system headers
>
> [...]
Here is the summary with links:
- [net-next,v2,01/12] tools: ynl-gen: add makefile deps for neigh
(no matching commit)
- [net-next,v2,02/12] netlink: specs: tc: remove duplicate nests
https://git.kernel.org/netdev/net-next/c/e9033a846eb9
- [net-next,v2,03/12] netlink: specs: tc: use tc-gact instead of tc-gen as struct name
https://git.kernel.org/netdev/net-next/c/eb1f803f9851
- [net-next,v2,04/12] netlink: specs: tc: add C naming info
https://git.kernel.org/netdev/net-next/c/f9aec8025ab5
- [net-next,v2,05/12] netlink: specs: tc: drop the family name prefix from attrs
https://git.kernel.org/netdev/net-next/c/ba5a199b2401
- [net-next,v2,06/12] tools: ynl-gen: support passing selector to a nest
https://git.kernel.org/netdev/net-next/c/cb39645d9a6a
- [net-next,v2,07/12] tools: ynl-gen: move fixed header info from RenderInfo to Struct
https://git.kernel.org/netdev/net-next/c/a66a170b68af
- [net-next,v2,08/12] tools: ynl-gen: support local attrs in _multi_parse
https://git.kernel.org/netdev/net-next/c/092b34b93735
- [net-next,v2,09/12] tools: ynl-gen: support weird sub-message formats
https://git.kernel.org/netdev/net-next/c/4e9806a8f494
- [net-next,v2,10/12] tools: ynl: enable codegen for TC
https://git.kernel.org/netdev/net-next/c/e06c9d25159c
- [net-next,v2,11/12] netlink: specs: tc: add qdisc dump to TC spec
https://git.kernel.org/netdev/net-next/c/33baf6f73a7c
- [net-next,v2,12/12] tools: ynl: add a sample for TC
(no matching commit)
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2025-05-21 22:50 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-20 16:19 [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 01/12] tools: ynl-gen: add makefile deps for neigh Jakub Kicinski
2025-05-20 17:15 ` Kory Maincent
2025-05-20 16:19 ` [PATCH net-next v2 02/12] netlink: specs: tc: remove duplicate nests Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 03/12] netlink: specs: tc: use tc-gact instead of tc-gen as struct name Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 04/12] netlink: specs: tc: add C naming info Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 05/12] netlink: specs: tc: drop the family name prefix from attrs Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 06/12] tools: ynl-gen: support passing selector to a nest Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 07/12] tools: ynl-gen: move fixed header info from RenderInfo to Struct Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 08/12] tools: ynl-gen: support local attrs in _multi_parse Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 09/12] tools: ynl-gen: support weird sub-message formats Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 10/12] tools: ynl: enable codegen for TC Jakub Kicinski
2025-05-20 16:34 ` Kory Maincent
2025-05-20 16:50 ` Jakub Kicinski
2025-05-20 17:36 ` Kory Maincent
2025-05-21 20:31 ` Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 11/12] netlink: specs: tc: add qdisc dump to TC spec Jakub Kicinski
2025-05-20 16:19 ` [PATCH net-next v2 12/12] tools: ynl: add a sample for TC Jakub Kicinski
2025-05-21 22:50 ` [PATCH net-next v2 00/12] tools: ynl-gen: add support for "inherited" selector and therefore TC patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).