* [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl
@ 2023-12-11 16:40 Donald Hunter
2023-12-11 16:40 ` [PATCH net-next v2 01/11] tools/net/ynl-gen-rst: Use bullet lists for attribute-set entries Donald Hunter
` (11 more replies)
0 siblings, 12 replies; 34+ messages in thread
From: Donald Hunter @ 2023-12-11 16:40 UTC (permalink / raw)
To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller
Cc: donald.hunter, Donald Hunter
This patchset adds a 'sub-message' attribute type to the netlink-raw
schema and implements it in ynl. This provides support for kind-specific
options attributes as used in rt_link and tc raw netlink families.
A description of the new 'sub-message' attribute type and the
corresponding sub-message definitions is provided in patch 5.
The patchset includes updates to the rt_link spec and a new tc spec that
make use of the new 'sub-message' attribute type.
As mentioned in patch 7, encode support is not yet implemented in ynl
and support for sub-message selectors at a different nest level from the
key attribute is not yet supported. I plan to work on these in folloup
patches.
Patches 1-4 are cleanups and fixes in ynl
Patches 5-7 add sub-message support to the schema and ynl with
documentation updates.
Patch 8 adds binary and pad support to structs in netlink-raw.
Patches 9-10 contain specs that use the sub-message attribute type.
Patch 11 updates ynl-gen-rst to include sub-messages
Changes since v1: (all reported by Jakub Kicinski, thanks!)
- Added cleanups for ynl and generated netlink docs
- Describe sub-messages in netlink docs
- Cleaned up unintended indent changes
- Cleaned up rt-link sub-message definitions
- Cleaned up array index expressions to follow python style
- Added sub-messages to generated netlink spec docs
Donald Hunter (11):
tools/net/ynl-gen-rst: Use bullet lists for attribute-set entries
tools/net/ynl-gen-rst: Sort the index of generated netlink specs
doc/netlink: Regenerate netlink .rst files if ynl-gen-rst changes
tools/net/ynl: Use consistent array index expression formatting
doc/netlink: Add sub-message support to netlink-raw
doc/netlink: Document the sub-message format for netlink-raw
tools/net/ynl: Add 'sub-message' attribute decoding to ynl
tools/net/ynl: Add binary and pad support to structs for tc
doc/netlink/specs: add sub-message type to rt_link family
doc/netlink/specs: Add a spec for tc
tools/net/ynl-gen-rst: Add sub-messages to generated docs
Documentation/Makefile | 7 +-
Documentation/netlink/netlink-raw.yaml | 53 +-
Documentation/netlink/specs/rt_link.yaml | 436 +++-
Documentation/netlink/specs/tc.yaml | 2036 +++++++++++++++++
.../userspace-api/netlink/netlink-raw.rst | 75 +-
tools/net/ynl/lib/nlspec.py | 55 +
tools/net/ynl/lib/ynl.py | 94 +-
tools/net/ynl/ynl-gen-rst.py | 27 +-
8 files changed, 2748 insertions(+), 35 deletions(-)
create mode 100644 Documentation/netlink/specs/tc.yaml
--
2.42.0
^ permalink raw reply [flat|nested] 34+ messages in thread
* [PATCH net-next v2 01/11] tools/net/ynl-gen-rst: Use bullet lists for attribute-set entries
2023-12-11 16:40 [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Donald Hunter
@ 2023-12-11 16:40 ` Donald Hunter
2023-12-11 23:28 ` Jakub Kicinski
2023-12-11 16:40 ` [PATCH net-next v2 02/11] tools/net/ynl-gen-rst: Sort the index of generated netlink specs Donald Hunter
` (10 subsequent siblings)
11 siblings, 1 reply; 34+ messages in thread
From: Donald Hunter @ 2023-12-11 16:40 UTC (permalink / raw)
To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller
Cc: donald.hunter, Donald Hunter
The generated .rst for attribute-sets currently uses a sub-sub-heading
for each individual attribute. Change this to use a bullet list the
attributes in an attribute-set. It is more compact and readable.
Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
---
tools/net/ynl/ynl-gen-rst.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/net/ynl/ynl-gen-rst.py b/tools/net/ynl/ynl-gen-rst.py
index b6292109e236..a1d046c60512 100755
--- a/tools/net/ynl/ynl-gen-rst.py
+++ b/tools/net/ynl/ynl-gen-rst.py
@@ -240,7 +240,7 @@ def parse_attr_sets(entries: List[Dict[str, Any]]) -> str:
# Add the attribute type in the same line
attr_line += f" ({inline(type_)})"
- lines.append(rst_subsubsection(attr_line))
+ lines.append(rst_bullet(attr_line))
for k in attr.keys():
if k in preprocessed + ignored:
--
2.42.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH net-next v2 02/11] tools/net/ynl-gen-rst: Sort the index of generated netlink specs
2023-12-11 16:40 [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Donald Hunter
2023-12-11 16:40 ` [PATCH net-next v2 01/11] tools/net/ynl-gen-rst: Use bullet lists for attribute-set entries Donald Hunter
@ 2023-12-11 16:40 ` Donald Hunter
2023-12-11 23:30 ` Jakub Kicinski
2023-12-11 16:40 ` [PATCH net-next v2 03/11] doc/netlink: Regenerate netlink .rst files if ynl-gen-rst changes Donald Hunter
` (9 subsequent siblings)
11 siblings, 1 reply; 34+ messages in thread
From: Donald Hunter @ 2023-12-11 16:40 UTC (permalink / raw)
To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller
Cc: donald.hunter, Donald Hunter
The index of netlink specs was being generated unsorted. Sort the output
before generating the index entries.
Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
---
tools/net/ynl/ynl-gen-rst.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/net/ynl/ynl-gen-rst.py b/tools/net/ynl/ynl-gen-rst.py
index a1d046c60512..f0bb2f4dc4fa 100755
--- a/tools/net/ynl/ynl-gen-rst.py
+++ b/tools/net/ynl/ynl-gen-rst.py
@@ -354,7 +354,7 @@ def generate_main_index_rst(output: str) -> None:
index_dir = os.path.dirname(output)
logging.debug("Looking for .rst files in %s", index_dir)
- for filename in os.listdir(index_dir):
+ for filename in sorted(os.listdir(index_dir)):
if not filename.endswith(".rst") or filename == "index.rst":
continue
lines.append(f" {filename.replace('.rst', '')}\n")
--
2.42.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH net-next v2 03/11] doc/netlink: Regenerate netlink .rst files if ynl-gen-rst changes
2023-12-11 16:40 [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Donald Hunter
2023-12-11 16:40 ` [PATCH net-next v2 01/11] tools/net/ynl-gen-rst: Use bullet lists for attribute-set entries Donald Hunter
2023-12-11 16:40 ` [PATCH net-next v2 02/11] tools/net/ynl-gen-rst: Sort the index of generated netlink specs Donald Hunter
@ 2023-12-11 16:40 ` Donald Hunter
2023-12-11 23:30 ` Jakub Kicinski
2023-12-12 20:39 ` Breno Leitao
2023-12-11 16:40 ` [PATCH net-next v2 04/11] tools/net/ynl: Use consistent array index expression formatting Donald Hunter
` (8 subsequent siblings)
11 siblings, 2 replies; 34+ messages in thread
From: Donald Hunter @ 2023-12-11 16:40 UTC (permalink / raw)
To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller
Cc: donald.hunter, Donald Hunter
Add ynl-gen-rst.py to the dependencies for the netlink .rst files in the
doc Makefile so that the docs get regenerated if the ynl-gen-rst.py
script is modified.
Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
---
Documentation/Makefile | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/Documentation/Makefile b/Documentation/Makefile
index 5c156fbb6cdf..9a31625ea1ff 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -105,11 +105,12 @@ YNL_TOOL:=$(srctree)/tools/net/ynl/ynl-gen-rst.py
YNL_RST_FILES_TMP := $(patsubst %.yaml,%.rst,$(wildcard $(YNL_YAML_DIR)/*.yaml))
YNL_RST_FILES := $(patsubst $(YNL_YAML_DIR)%,$(YNL_RST_DIR)%, $(YNL_RST_FILES_TMP))
-$(YNL_INDEX): $(YNL_RST_FILES)
+$(YNL_INDEX): $(YNL_RST_FILES) $(YNL_TOOL)
@$(YNL_TOOL) -o $@ -x
-$(YNL_RST_DIR)/%.rst: $(YNL_YAML_DIR)/%.yaml
- @$(YNL_TOOL) -i $< -o $@
+$(YNL_RST_DIR)/%.rst: $(YNL_TOOL)
+$(YNL_RST_DIR)/%.rst: $(YNL_YAML_DIR)/%.yaml $(YNL_TOOL)
+ $(YNL_TOOL) -i $< -o $@
htmldocs: $(YNL_INDEX)
@$(srctree)/scripts/sphinx-pre-install --version-check
--
2.42.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH net-next v2 04/11] tools/net/ynl: Use consistent array index expression formatting
2023-12-11 16:40 [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Donald Hunter
` (2 preceding siblings ...)
2023-12-11 16:40 ` [PATCH net-next v2 03/11] doc/netlink: Regenerate netlink .rst files if ynl-gen-rst changes Donald Hunter
@ 2023-12-11 16:40 ` Donald Hunter
2023-12-11 23:30 ` Jakub Kicinski
2023-12-11 16:40 ` [PATCH net-next v2 05/11] doc/netlink: Add sub-message support to netlink-raw Donald Hunter
` (7 subsequent siblings)
11 siblings, 1 reply; 34+ messages in thread
From: Donald Hunter @ 2023-12-11 16:40 UTC (permalink / raw)
To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller
Cc: donald.hunter, Donald Hunter
Use expression formatting that conforms to the python style guide.
Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
---
tools/net/ynl/lib/ynl.py | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py
index 92995bca14e1..5c48f0c9713c 100644
--- a/tools/net/ynl/lib/ynl.py
+++ b/tools/net/ynl/lib/ynl.py
@@ -98,12 +98,12 @@ class NlAttr:
}
def __init__(self, raw, offset):
- self._len, self._type = struct.unpack("HH", raw[offset:offset + 4])
+ self._len, self._type = struct.unpack("HH", raw[offset : offset + 4])
self.type = self._type & ~Netlink.NLA_TYPE_MASK
self.is_nest = self._type & Netlink.NLA_F_NESTED
self.payload_len = self._len
self.full_len = (self.payload_len + 3) & ~3
- self.raw = raw[offset + 4:offset + self.payload_len]
+ self.raw = raw[offset + 4 : offset + self.payload_len]
@classmethod
def get_format(cls, attr_type, byte_order=None):
@@ -154,7 +154,7 @@ class NlAttr:
for m in members:
# TODO: handle non-scalar members
if m.type == 'binary':
- decoded = self.raw[offset:offset+m['len']]
+ decoded = self.raw[offset : offset + m['len']]
offset += m['len']
elif m.type in NlAttr.type_formats:
format = self.get_format(m.type, m.byte_order)
@@ -193,12 +193,12 @@ class NlAttrs:
class NlMsg:
def __init__(self, msg, offset, attr_space=None):
- self.hdr = msg[offset:offset + 16]
+ self.hdr = msg[offset : offset + 16]
self.nl_len, self.nl_type, self.nl_flags, self.nl_seq, self.nl_portid = \
struct.unpack("IHHII", self.hdr)
- self.raw = msg[offset + 16:offset + self.nl_len]
+ self.raw = msg[offset + 16 : offset + self.nl_len]
self.error = 0
self.done = 0
--
2.42.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH net-next v2 05/11] doc/netlink: Add sub-message support to netlink-raw
2023-12-11 16:40 [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Donald Hunter
` (3 preceding siblings ...)
2023-12-11 16:40 ` [PATCH net-next v2 04/11] tools/net/ynl: Use consistent array index expression formatting Donald Hunter
@ 2023-12-11 16:40 ` Donald Hunter
2023-12-11 23:37 ` Jakub Kicinski
2023-12-11 16:40 ` [PATCH net-next v2 06/11] doc/netlink: Document the sub-message format for netlink-raw Donald Hunter
` (6 subsequent siblings)
11 siblings, 1 reply; 34+ messages in thread
From: Donald Hunter @ 2023-12-11 16:40 UTC (permalink / raw)
To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller
Cc: donald.hunter, Donald Hunter
Add a 'sub-message' attribute type with a selector that supports
polymorphic attribute formats for raw netlink families like tc.
A sub-message attribute uses the value of another attribute as a
selector key to choose the right sub-message format. For example if the
following attribute has already been decoded:
{ "kind": "gre" }
and we encounter the following attribute spec:
-
name: data
type: sub-message
sub-message: linkinfo-data-msg
selector: kind
Then we look for a sub-message definition called 'linkinfo-data-msg' and
use the value of the 'kind' attribute i.e. 'gre' as the key to choose
the correct format for the sub-message:
sub-messages:
name: linkinfo-data-msg
formats:
-
value: bridge
attribute-set: linkinfo-bridge-attrs
-
value: gre
attribute-set: linkinfo-gre-attrs
-
value: geneve
attribute-set: linkinfo-geneve-attrs
This would decode the attribute value as a sub-message with the
attribute-set called 'linkinfo-gre-attrs' as the attribute space.
A sub-message can have an optional 'fixed-header' followed by zero or
more attributes from an attribute-set. For example the following
'tc-options-msg' sub-message defines message formats that use a mixture
of fixed-header, attribute-set or both together:
sub-messages:
-
name: tc-options-msg
formats:
-
value: bfifo
fixed-header: tc-fifo-qopt
-
value: cake
attribute-set: tc-cake-attrs
-
value: netem
fixed-header: tc-netem-qopt
attribute-set: tc-netem-attrs
Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
---
Documentation/netlink/netlink-raw.yaml | 51 +++++++++++++++++++++++++-
1 file changed, 50 insertions(+), 1 deletion(-)
diff --git a/Documentation/netlink/netlink-raw.yaml b/Documentation/netlink/netlink-raw.yaml
index ad5395040765..26203282422f 100644
--- a/Documentation/netlink/netlink-raw.yaml
+++ b/Documentation/netlink/netlink-raw.yaml
@@ -202,7 +202,8 @@ properties:
description: The netlink attribute type
enum: [ unused, pad, flag, binary, bitfield32,
u8, u16, u32, u64, s8, s16, s32, s64,
- string, nest, array-nest, nest-type-value ]
+ string, nest, array-nest, nest-type-value,
+ sub-message ]
doc:
description: Documentation of the attribute.
type: string
@@ -261,6 +262,17 @@ properties:
description: Name of the struct type used for the attribute.
type: string
# End genetlink-legacy
+ # Start netlink-raw
+ sub-message:
+ description:
+ Name of the sub-message definition to use for the attribute.
+ type: string
+ selector:
+ description:
+ Name of the attribute to use for dynamic selection of sub-message
+ format specifier.
+ type: string
+ # End netlink-raw
# Make sure name-prefix does not appear in subsets (subsets inherit naming)
dependencies:
@@ -283,6 +295,43 @@ properties:
items:
required: [ type ]
+ # Start netlink-raw
+ sub-messages:
+ description: Definition of sub message attributes
+ type: array
+ items:
+ type: object
+ additionalProperties: False
+ required: [ name, formats ]
+ properties:
+ name:
+ description: Name of the sub-message definition
+ type: string
+ formats:
+ description: Dynamically selected format specifiers
+ type: array
+ items:
+ type: object
+ additionalProperties: False
+ required: [ value ]
+ properties:
+ value:
+ description:
+ Value to match for dynamic selection of sub-message format
+ specifier.
+ type: string
+ fixed-header:
+ description:
+ Name of the struct definition to use as the fixed header
+ for the sub message.
+ type: string
+ attribute-set:
+ description:
+ Name of the attribute space from which to resolve attributes
+ in the sub message.
+ type: string
+ # End netlink-raw
+
operations:
description: Operations supported by the protocol.
type: object
--
2.42.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH net-next v2 06/11] doc/netlink: Document the sub-message format for netlink-raw
2023-12-11 16:40 [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Donald Hunter
` (4 preceding siblings ...)
2023-12-11 16:40 ` [PATCH net-next v2 05/11] doc/netlink: Add sub-message support to netlink-raw Donald Hunter
@ 2023-12-11 16:40 ` Donald Hunter
2023-12-12 1:56 ` Jakub Kicinski
2023-12-11 16:40 ` [PATCH net-next v2 07/11] tools/net/ynl: Add 'sub-message' attribute decoding to ynl Donald Hunter
` (5 subsequent siblings)
11 siblings, 1 reply; 34+ messages in thread
From: Donald Hunter @ 2023-12-11 16:40 UTC (permalink / raw)
To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller
Cc: donald.hunter, Donald Hunter
Document the spec format used by netlink-raw families like rt and tc.
Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
---
.../userspace-api/netlink/netlink-raw.rst | 75 ++++++++++++++++++-
1 file changed, 74 insertions(+), 1 deletion(-)
diff --git a/Documentation/userspace-api/netlink/netlink-raw.rst b/Documentation/userspace-api/netlink/netlink-raw.rst
index f07fb9b9c101..e1d3e5ecfc6a 100644
--- a/Documentation/userspace-api/netlink/netlink-raw.rst
+++ b/Documentation/userspace-api/netlink/netlink-raw.rst
@@ -14,7 +14,8 @@ Specification
The netlink-raw schema extends the :doc:`genetlink-legacy <genetlink-legacy>`
schema with properties that are needed to specify the protocol numbers and
multicast IDs used by raw netlink families. See :ref:`classic_netlink` for more
-information.
+information. The raw netlink families also make use of type-specific
+sub-messages.
Globals
-------
@@ -56,3 +57,75 @@ group registration.
-
name: rtnlgrp-mctp-ifaddr
value: 34
+
+Sub-messages
+------------
+
+Several raw netlink families such as rt_link and tc have type-specific
+sub-messages. These sub-messages can appear as an attribute in a top-level or a
+nested attribute space.
+
+A sub-message attribute uses the value of another attribute as a selector key to
+choose the right sub-message format. For example if the following attribute has
+already been decoded:
+
+.. code-block:: json
+
+ { "kind": "gre" }
+
+and we encounter the following attribute spec:
+
+.. code-block:: yaml
+
+ -
+ name: data
+ type: sub-message
+ sub-message: linkinfo-data-msg
+ selector: kind
+
+Then we look for a sub-message definition called 'linkinfo-data-msg' and use the
+value of the 'kind' attribute i.e. 'gre' as the key to choose the correct format
+for the sub-message:
+
+.. code-block:: yaml
+
+ sub-messages:
+ name: linkinfo-data-msg
+ formats:
+ -
+ value: bridge
+ attribute-set: linkinfo-bridge-attrs
+ -
+ value: gre
+ attribute-set: linkinfo-gre-attrs
+ -
+ value: geneve
+ attribute-set: linkinfo-geneve-attrs
+
+This would decode the attribute value as a sub-message with the attribute-set
+called 'linkinfo-gre-attrs' as the attribute space.
+
+A sub-message can have an optional 'fixed-header' followed by zero or more
+attributes from an attribute-set. For example the following 'tc-options-msg'
+sub-message defines message formats that use a mixture of fixed-header,
+attribute-set or both together:
+
+.. code-block:: yaml
+
+ sub-messages:
+ -
+ name: tc-options-msg
+ formats:
+ -
+ value: bfifo
+ fixed-header: tc-fifo-qopt
+ -
+ value: cake
+ attribute-set: tc-cake-attrs
+ -
+ value: netem
+ fixed-header: tc-netem-qopt
+ attribute-set: tc-netem-attrs
+
+Note that a selector attribute must appear in a netlink message before any
+sub-message attributes that depend on it.
--
2.42.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH net-next v2 07/11] tools/net/ynl: Add 'sub-message' attribute decoding to ynl
2023-12-11 16:40 [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Donald Hunter
` (5 preceding siblings ...)
2023-12-11 16:40 ` [PATCH net-next v2 06/11] doc/netlink: Document the sub-message format for netlink-raw Donald Hunter
@ 2023-12-11 16:40 ` Donald Hunter
2023-12-12 2:00 ` Jakub Kicinski
2023-12-11 16:40 ` [PATCH net-next v2 08/11] tools/net/ynl: Add binary and pad support to structs for tc Donald Hunter
` (4 subsequent siblings)
11 siblings, 1 reply; 34+ messages in thread
From: Donald Hunter @ 2023-12-11 16:40 UTC (permalink / raw)
To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller
Cc: donald.hunter, Donald Hunter
Implement the 'sub-message' attribute type in ynl.
Encode support is not yet implemented. Support for sub-message selectors
at a different nest level from the key attribute is not yet supported.
Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
---
tools/net/ynl/lib/nlspec.py | 55 +++++++++++++++++++++++++++++++++++++
tools/net/ynl/lib/ynl.py | 48 ++++++++++++++++++++++++++------
2 files changed, 95 insertions(+), 8 deletions(-)
diff --git a/tools/net/ynl/lib/nlspec.py b/tools/net/ynl/lib/nlspec.py
index 92889298b197..71b445e26b58 100644
--- a/tools/net/ynl/lib/nlspec.py
+++ b/tools/net/ynl/lib/nlspec.py
@@ -158,6 +158,9 @@ class SpecAttr(SpecElement):
len integer, optional byte length of binary types
display_hint string, hint to help choose format specifier
when displaying the value
+ sub_message string, name of sub message type
+ selector string, name of attribute used to select
+ sub-message type
is_auto_scalar bool, attr is a variable-size scalar
"""
@@ -173,6 +176,8 @@ class SpecAttr(SpecElement):
self.byte_order = yaml.get('byte-order')
self.len = yaml.get('len')
self.display_hint = yaml.get('display-hint')
+ self.sub_message = yaml.get('sub-message')
+ self.selector = yaml.get('selector')
self.is_auto_scalar = self.type == "sint" or self.type == "uint"
@@ -278,6 +283,47 @@ class SpecStruct(SpecElement):
return self.members.items()
+class SpecSubMessage(SpecElement):
+ """ Netlink sub-message definition
+
+ Represents a set of sub-message formats for polymorphic nlattrs
+ that contain type-specific sub messages.
+
+ Attributes:
+ name string, name of sub-message definition
+ formats dict of sub-message formats indexed by match value
+ """
+ def __init__(self, family, yaml):
+ super().__init__(family, yaml)
+
+ self.formats = collections.OrderedDict()
+ for elem in self.yaml['formats']:
+ format = self.new_format(family, elem)
+ self.formats[format.value] = format
+
+ def new_format(self, family, format):
+ return SpecSubMessageFormat(family, format)
+
+
+class SpecSubMessageFormat(SpecElement):
+ """ Netlink sub-message definition
+
+ Represents a set of sub-message formats for polymorphic nlattrs
+ that contain type-specific sub messages.
+
+ Attributes:
+ value attribute value to match against type selector
+ fixed_header string, name of fixed header, or None
+ attr_set string, name of attribute set, or None
+ """
+ def __init__(self, family, yaml):
+ super().__init__(family, yaml)
+
+ self.value = yaml.get('value')
+ self.fixed_header = yaml.get('fixed-header')
+ self.attr_set = yaml.get('attribute-set')
+
+
class SpecOperation(SpecElement):
"""Netlink Operation
@@ -365,6 +411,7 @@ class SpecFamily(SpecElement):
attr_sets dict of attribute sets
msgs dict of all messages (index by name)
+ sub_msgs dict of all sub messages (index by name)
ops dict of all valid requests / responses
ntfs dict of all async events
consts dict of all constants/enums
@@ -405,6 +452,7 @@ class SpecFamily(SpecElement):
jsonschema.validate(self.yaml, schema)
self.attr_sets = collections.OrderedDict()
+ self.sub_msgs = collections.OrderedDict()
self.msgs = collections.OrderedDict()
self.req_by_value = collections.OrderedDict()
self.rsp_by_value = collections.OrderedDict()
@@ -441,6 +489,9 @@ class SpecFamily(SpecElement):
def new_struct(self, elem):
return SpecStruct(self, elem)
+ def new_sub_message(self, elem):
+ return SpecSubMessage(self, elem);
+
def new_operation(self, elem, req_val, rsp_val):
return SpecOperation(self, elem, req_val, rsp_val)
@@ -529,6 +580,10 @@ class SpecFamily(SpecElement):
attr_set = self.new_attr_set(elem)
self.attr_sets[elem['name']] = attr_set
+ for elem in self.yaml['sub-messages']:
+ sub_message = self.new_sub_message(elem)
+ self.sub_msgs[sub_message.name] = sub_message
+
if self.msg_id_model == 'unified':
self._dictify_ops_unified()
elif self.msg_id_model == 'directional':
diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py
index 5c48f0c9713c..a69fb0c9f728 100644
--- a/tools/net/ynl/lib/ynl.py
+++ b/tools/net/ynl/lib/ynl.py
@@ -170,10 +170,9 @@ class NlAttr:
class NlAttrs:
- def __init__(self, msg):
+ def __init__(self, msg, offset=0):
self.attrs = []
- offset = 0
while offset < len(msg):
attr = NlAttr(msg, offset)
offset += attr.full_len
@@ -371,8 +370,8 @@ class NetlinkProtocol:
fixed_header_size = 0
if ynl:
op = ynl.rsp_by_value[msg.cmd()]
- fixed_header_size = ynl._fixed_header_size(op)
- msg.raw_attrs = NlAttrs(msg.raw[fixed_header_size:])
+ fixed_header_size = ynl._fixed_header_size(op.fixed_header)
+ msg.raw_attrs = NlAttrs(msg.raw, fixed_header_size)
return msg
def get_mcast_id(self, mcast_name, mcast_groups):
@@ -549,6 +548,37 @@ class YnlFamily(SpecFamily):
else:
rsp[name] = [decoded]
+ def _resolve_selector(self, attr_spec, vals):
+ sub_msg = attr_spec.sub_message
+ if sub_msg not in self.sub_msgs:
+ raise Exception(f"No sub-message spec named {sub_msg} for {attr_spec.name}")
+ sub_msg_spec = self.sub_msgs[sub_msg]
+
+ selector = attr_spec.selector
+ if selector not in vals:
+ raise Exception(f"There is no value for {selector} to resolve '{attr_spec.name}'")
+ value = vals[selector]
+ if value not in sub_msg_spec.formats:
+ raise Exception(f"No message format for '{value}' in sub-message spec '{sub_msg}'")
+
+ spec = sub_msg_spec.formats[value]
+ return spec
+
+ def _decode_sub_msg(self, attr, attr_spec, rsp):
+ msg_format = self._resolve_selector(attr_spec, rsp)
+ decoded = {}
+ offset = 0
+ if msg_format.fixed_header:
+ decoded.update(self._decode_fixed_header(attr, msg_format.fixed_header));
+ offset = self._fixed_header_size(msg_format.fixed_header)
+ if msg_format.attr_set:
+ if msg_format.attr_set in self.attr_sets:
+ subdict = self._decode(NlAttrs(attr.raw, offset), msg_format.attr_set)
+ decoded.update(subdict)
+ else:
+ raise Exception(f"Unknown attribute-set '{attr_space}' when decoding '{attr_spec.name}'")
+ return decoded
+
def _decode(self, attrs, space):
if space:
attr_space = self.attr_sets[space]
@@ -586,6 +616,8 @@ class YnlFamily(SpecFamily):
value = self._decode_enum(value, attr_spec)
selector = self._decode_enum(selector, attr_spec)
decoded = {"value": value, "selector": selector}
+ elif attr_spec["type"] == 'sub-message':
+ decoded = self._decode_sub_msg(attr, attr_spec, rsp)
else:
if not self.process_unknown:
raise Exception(f'Unknown {attr_spec["type"]} with name {attr_spec["name"]}')
@@ -626,16 +658,16 @@ class YnlFamily(SpecFamily):
return
msg = self.nlproto.decode(self, NlMsg(request, 0, op.attr_set))
- offset = 20 + self._fixed_header_size(op)
+ offset = 20 + self._fixed_header_size(op.fixed_header)
path = self._decode_extack_path(msg.raw_attrs, op.attr_set, offset,
extack['bad-attr-offs'])
if path:
del extack['bad-attr-offs']
extack['bad-attr'] = path
- def _fixed_header_size(self, op):
- if op.fixed_header:
- fixed_header_members = self.consts[op.fixed_header].members
+ def _fixed_header_size(self, name):
+ if name:
+ fixed_header_members = self.consts[name].members
size = 0
for m in fixed_header_members:
format = NlAttr.get_format(m.type, m.byte_order)
--
2.42.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH net-next v2 08/11] tools/net/ynl: Add binary and pad support to structs for tc
2023-12-11 16:40 [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Donald Hunter
` (6 preceding siblings ...)
2023-12-11 16:40 ` [PATCH net-next v2 07/11] tools/net/ynl: Add 'sub-message' attribute decoding to ynl Donald Hunter
@ 2023-12-11 16:40 ` Donald Hunter
2023-12-12 2:04 ` Jakub Kicinski
2023-12-11 16:40 ` [PATCH net-next v2 09/11] doc/netlink/specs: add sub-message type to rt_link family Donald Hunter
` (3 subsequent siblings)
11 siblings, 1 reply; 34+ messages in thread
From: Donald Hunter @ 2023-12-11 16:40 UTC (permalink / raw)
To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller
Cc: donald.hunter, Donald Hunter
The tc netlink-raw family needs binary and pad types for several
qopt C structs. Add support for them to ynl.
Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
---
Documentation/netlink/netlink-raw.yaml | 2 +-
tools/net/ynl/lib/ynl.py | 36 +++++++++++++++++++-------
2 files changed, 27 insertions(+), 11 deletions(-)
diff --git a/Documentation/netlink/netlink-raw.yaml b/Documentation/netlink/netlink-raw.yaml
index 26203282422f..dc3d4eeb67bb 100644
--- a/Documentation/netlink/netlink-raw.yaml
+++ b/Documentation/netlink/netlink-raw.yaml
@@ -127,7 +127,7 @@ properties:
type: string
type:
description: The netlink attribute type
- enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string, binary ]
+ enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string, binary, pad ]
len:
$ref: '#/$defs/len-or-define'
byte-order:
diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py
index a69fb0c9f728..61d672c57fb0 100644
--- a/tools/net/ynl/lib/ynl.py
+++ b/tools/net/ynl/lib/ynl.py
@@ -670,8 +670,11 @@ class YnlFamily(SpecFamily):
fixed_header_members = self.consts[name].members
size = 0
for m in fixed_header_members:
- format = NlAttr.get_format(m.type, m.byte_order)
- size += format.size
+ if m.type in ['pad', 'binary']:
+ size += m.len
+ else:
+ format = NlAttr.get_format(m.type, m.byte_order)
+ size += format.size
return size
else:
return 0
@@ -681,12 +684,20 @@ class YnlFamily(SpecFamily):
fixed_header_attrs = dict()
offset = 0
for m in fixed_header_members:
- format = NlAttr.get_format(m.type, m.byte_order)
- [ value ] = format.unpack_from(msg.raw, offset)
- offset += format.size
- if m.enum:
- value = self._decode_enum(value, m)
- fixed_header_attrs[m.name] = value
+ value = None
+ if m.type == 'pad':
+ offset += m.len
+ elif m.type == 'binary':
+ value = msg.raw[offset : offset + m.len]
+ offset += m.len
+ else:
+ format = NlAttr.get_format(m.type, m.byte_order)
+ [ value ] = format.unpack_from(msg.raw, offset)
+ offset += format.size
+ if value is not None:
+ if m.enum:
+ value = self._decode_enum(value, m)
+ fixed_header_attrs[m.name] = value
return fixed_header_attrs
def handle_ntf(self, decoded):
@@ -753,8 +764,13 @@ class YnlFamily(SpecFamily):
fixed_header_members = self.consts[op.fixed_header].members
for m in fixed_header_members:
value = vals.pop(m.name) if m.name in vals else 0
- format = NlAttr.get_format(m.type, m.byte_order)
- msg += format.pack(value)
+ if m.type == 'pad':
+ msg += bytearray(m.len)
+ elif m.type == 'binary':
+ msg += bytes.fromhex(value)
+ else:
+ format = NlAttr.get_format(m.type, m.byte_order)
+ msg += format.pack(value)
for name, value in vals.items():
msg += self._add_attr(op.attr_set.name, name, value)
msg = _genl_msg_finalize(msg)
--
2.42.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH net-next v2 09/11] doc/netlink/specs: add sub-message type to rt_link family
2023-12-11 16:40 [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Donald Hunter
` (7 preceding siblings ...)
2023-12-11 16:40 ` [PATCH net-next v2 08/11] tools/net/ynl: Add binary and pad support to structs for tc Donald Hunter
@ 2023-12-11 16:40 ` Donald Hunter
2023-12-11 16:40 ` [PATCH net-next v2 10/11] doc/netlink/specs: Add a spec for tc Donald Hunter
` (2 subsequent siblings)
11 siblings, 0 replies; 34+ messages in thread
From: Donald Hunter @ 2023-12-11 16:40 UTC (permalink / raw)
To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller
Cc: donald.hunter, Donald Hunter
Start using sub-message selectors in the rt_link spec for the
link-specific 'data' and 'slave-data' attributes.
Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
---
Documentation/netlink/specs/rt_link.yaml | 436 ++++++++++++++++++++++-
1 file changed, 432 insertions(+), 4 deletions(-)
diff --git a/Documentation/netlink/specs/rt_link.yaml b/Documentation/netlink/specs/rt_link.yaml
index d86a68f8475c..028a0de8edd1 100644
--- a/Documentation/netlink/specs/rt_link.yaml
+++ b/Documentation/netlink/specs/rt_link.yaml
@@ -82,6 +82,18 @@ definitions:
-
name: ifi-change
type: u32
+ -
+ name: ifla-bridge-id
+ type: struct
+ members:
+ -
+ name: prio
+ type: u16
+ -
+ name: addr
+ type: binary
+ len: 6
+ display-hint: mac
-
name: ifla-cacheinfo
type: struct
@@ -966,8 +978,9 @@ attribute-sets:
type: string
-
name: data
- type: binary
- # kind specific nest, e.g. linkinfo-bridge-attrs
+ type: sub-message
+ sub-message: linkinfo-data-msg
+ selector: kind
-
name: xstats
type: binary
@@ -976,10 +989,12 @@ attribute-sets:
type: string
-
name: slave-data
- type: binary
- # kind specific nest
+ type: sub-message
+ sub-message: linkinfo-subordinate-data-msg
+ selector: slave-kind
-
name: linkinfo-bridge-attrs
+ name-prefix: ifla-br-
attributes:
-
name: forward-delay
@@ -1011,9 +1026,11 @@ attribute-sets:
-
name: root-id
type: binary
+ struct: ifla-bridge-id
-
name: bridge-id
type: binary
+ struct: ifla-bridge-id
-
name: root-port
type: u16
@@ -1041,6 +1058,7 @@ attribute-sets:
-
name: group-addr
type: binary
+ display-hint: mac
-
name: fdb-flush
type: binary
@@ -1123,6 +1141,376 @@ attribute-sets:
-
name: mcast-querier-state
type: binary
+ -
+ name: linkinfo-brport-attrs
+ name-prefix: ifla-brport-
+ attributes:
+ -
+ name: state
+ type: u8
+ -
+ name: priority
+ type: u16
+ -
+ name: cost
+ type: u32
+ -
+ name: mode
+ type: flag
+ -
+ name: guard
+ type: flag
+ -
+ name: protect
+ type: flag
+ -
+ name: fast-leave
+ type: flag
+ -
+ name: learning
+ type: flag
+ -
+ name: unicast-flood
+ type: flag
+ -
+ name: proxyarp
+ type: flag
+ -
+ name: learning-sync
+ type: flag
+ -
+ name: proxyarp-wifi
+ type: flag
+ -
+ name: root-id
+ type: binary
+ struct: ifla-bridge-id
+ -
+ name: bridge-id
+ type: binary
+ struct: ifla-bridge-id
+ -
+ name: designated-port
+ type: u16
+ -
+ name: designated-cost
+ type: u16
+ -
+ name: id
+ type: u16
+ -
+ name: "no"
+ type: u16
+ -
+ name: topology-change-ack
+ type: u8
+ -
+ name: config-pending
+ type: u8
+ -
+ name: message-age-timer
+ type: u64
+ -
+ name: forward-delay-timer
+ type: u64
+ -
+ name: hold-timer
+ type: u64
+ -
+ name: flush
+ type: flag
+ -
+ name: multicast-router
+ type: u8
+ -
+ name: pad
+ type: pad
+ -
+ name: mcast-flood
+ type: flag
+ -
+ name: mcast-to-ucast
+ type: flag
+ -
+ name: vlan-tunnel
+ type: flag
+ -
+ name: bcast-flood
+ type: flag
+ -
+ name: group-fwd-mask
+ type: u16
+ -
+ name: neigh-suppress
+ type: flag
+ -
+ name: isolated
+ type: flag
+ -
+ name: backup-port
+ type: u32
+ -
+ name: mrp-ring-open
+ type: flag
+ -
+ name: mrp-in-open
+ type: flag
+ -
+ name: mcast-eht-hosts-limit
+ type: u32
+ -
+ name: mcast-eht-hosts-cnt
+ type: u32
+ -
+ name: locked
+ type: flag
+ -
+ name: mab
+ type: flag
+ -
+ name: mcast-n-groups
+ type: u32
+ -
+ name: mcast-max-groups
+ type: u32
+ -
+ name: neigh-vlan-suppress
+ type: flag
+ -
+ name: backup-nhid
+ type: u32
+ -
+ name: linkinfo-gre-attrs
+ name-prefix: ifla-gre-
+ attributes:
+ -
+ name: link
+ type: u32
+ -
+ name: iflags
+ type: u16
+ -
+ name: oflags
+ type: u16
+ -
+ name: ikey
+ type: u32
+ -
+ name: okey
+ type: u32
+ -
+ name: local
+ type: binary
+ display-hint: ipv4
+ -
+ name: remote
+ type: binary
+ display-hint: ipv4
+ -
+ name: ttl
+ type: u8
+ -
+ name: tos
+ type: u8
+ -
+ name: pmtudisc
+ type: u8
+ -
+ name: encap-limit
+ type: u32
+ -
+ name: flowinfo
+ type: u32
+ -
+ name: flags
+ type: u32
+ -
+ name: encap-type
+ type: u16
+ -
+ name: encap-flags
+ type: u16
+ -
+ name: encap-sport
+ type: u16
+ -
+ name: encap-dport
+ type: u16
+ -
+ name: collect-metadata
+ type: flag
+ -
+ name: ignore-df
+ type: u8
+ -
+ name: fwmark
+ type: u32
+ -
+ name: erspan-index
+ type: u32
+ -
+ name: erspan-ver
+ type: u8
+ -
+ name: erspan-dir
+ type: u8
+ -
+ name: erspan-hwid
+ type: u16
+ -
+ name: linkinfo-geneve-attrs
+ name-prefix: ifla-geneve-
+ attributes:
+ -
+ name: id
+ type: u32
+ -
+ name: remote
+ type: binary
+ display-hint: ipv4
+ -
+ name: ttl
+ type: u8
+ -
+ name: tos
+ type: u8
+ -
+ name: port
+ type: u16
+ -
+ name: collect-metadata
+ type: flag
+ -
+ name: remote6
+ type: binary
+ display-hint: ipv6
+ -
+ name: udp-csum
+ type: u8
+ -
+ name: udp-zero-csum6-tx
+ type: u8
+ -
+ name: udp-zero-csum6-rx
+ type: u8
+ -
+ name: label
+ type: u32
+ -
+ name: ttl-inherit
+ type: u8
+ -
+ name: df
+ type: u8
+ -
+ name: inner-proto-inherit
+ type: flag
+ -
+ name: linkinfo-iptun-attrs
+ name-prefix: ifla-iptun-
+ attributes:
+ -
+ name: link
+ type: u32
+ -
+ name: local
+ type: binary
+ display-hint: ipv4
+ -
+ name: remote
+ type: binary
+ display-hint: ipv4
+ -
+ name: ttl
+ type: u8
+ -
+ name: tos
+ type: u8
+ -
+ name: encap-limit
+ type: u8
+ -
+ name: flowinfo
+ type: u32
+ -
+ name: flags
+ type: u16
+ -
+ name: proto
+ type: u8
+ -
+ name: pmtudisc
+ type: u8
+ -
+ name: 6rd-prefix
+ type: binary
+ display-hint: ipv6
+ -
+ name: 6rd-relay-prefix
+ type: binary
+ display-hint: ipv4
+ -
+ name: 6rd-prefixlen
+ type: u16
+ -
+ name: 6rd-relay-prefixlen
+ type: u16
+ -
+ name: encap-type
+ type: u16
+ -
+ name: encap-flags
+ type: u16
+ -
+ name: encap-sport
+ type: u16
+ -
+ name: encap-dport
+ type: u16
+ -
+ name: collect-metadata
+ type: flag
+ -
+ name: fwmark
+ type: u32
+ -
+ name: linkinfo-tun-attrs
+ name-prefix: ifla-tun-
+ attributes:
+ -
+ name: owner
+ type: u32
+ -
+ name: group
+ type: u32
+ -
+ name: type
+ type: u8
+ -
+ name: pi
+ type: u8
+ -
+ name: vnet-hdr
+ type: u8
+ -
+ name: persist
+ type: u8
+ -
+ name: multi-queue
+ type: u8
+ -
+ name: num-queues
+ type: u32
+ -
+ name: num-disabled-queues
+ type: u32
+ -
+ name: linkinfo-vrf-attrs
+ name-prefix: ifla-vrf-
+ attributes:
+ -
+ name: table
+ type: u32
-
name: xdp-attrs
attributes:
@@ -1241,6 +1629,46 @@ attribute-sets:
name: used
type: u8
+sub-messages:
+ -
+ name: linkinfo-data-msg
+ formats:
+ -
+ value: bridge
+ attribute-set: linkinfo-bridge-attrs
+ -
+ value: erspan
+ attribute-set: linkinfo-gre-attrs
+ -
+ value: gre
+ attribute-set: linkinfo-gre-attrs
+ -
+ value: gretap
+ attribute-set: linkinfo-gre-attrs
+ -
+ value: geneve
+ attribute-set: linkinfo-geneve-attrs
+ -
+ value: ipip
+ attribute-set: linkinfo-iptun-attrs
+ -
+ value: sit
+ attribute-set: linkinfo-iptun-attrs
+ -
+ value: tun
+ attribute-set: linkinfo-tun-attrs
+ -
+ value: vrf
+ attribute-set: linkinfo-vrf-attrs
+ -
+ name: linkinfo-subordinate-data-msg
+ formats:
+ -
+ value: bridge
+ attribute-set: linkinfo-brport-attrs
+ -
+ value: bond
+
operations:
enum-model: directional
list:
--
2.42.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH net-next v2 10/11] doc/netlink/specs: Add a spec for tc
2023-12-11 16:40 [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Donald Hunter
` (8 preceding siblings ...)
2023-12-11 16:40 ` [PATCH net-next v2 09/11] doc/netlink/specs: add sub-message type to rt_link family Donald Hunter
@ 2023-12-11 16:40 ` Donald Hunter
2023-12-11 16:40 ` [PATCH net-next v2 11/11] tools/net/ynl-gen-rst: Add sub-messages to generated docs Donald Hunter
2023-12-11 23:32 ` [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Jakub Kicinski
11 siblings, 0 replies; 34+ messages in thread
From: Donald Hunter @ 2023-12-11 16:40 UTC (permalink / raw)
To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller
Cc: donald.hunter, Donald Hunter
This is a work-in-progress spec for tc that covers:
- most of the qdiscs
- the flower classifier
- new, del, get for qdisc, chain, class and filter
Notable omissions:
- most of the stats attrs are left as binary blobs
- notifications are not yet implemented
Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
---
Documentation/netlink/specs/tc.yaml | 2036 +++++++++++++++++++++++++++
1 file changed, 2036 insertions(+)
create mode 100644 Documentation/netlink/specs/tc.yaml
diff --git a/Documentation/netlink/specs/tc.yaml b/Documentation/netlink/specs/tc.yaml
new file mode 100644
index 000000000000..2737e45c0a26
--- /dev/null
+++ b/Documentation/netlink/specs/tc.yaml
@@ -0,0 +1,2036 @@
+# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
+
+name: tc
+protocol: netlink-raw
+protonum: 0
+
+doc:
+ Netlink raw family for tc qdisc, chain, class and filter configuration
+ over rtnetlink.
+
+definitions:
+ -
+ name: tcmsg
+ type: struct
+ members:
+ -
+ name: family
+ type: u8
+ -
+ name: pad
+ type: pad
+ len: 3
+ -
+ name: ifindex
+ type: s32
+ -
+ name: handle
+ type: u32
+ -
+ name: parent
+ type: u32
+ -
+ name: info
+ type: u32
+ -
+ name: tc-cls-flags
+ type: flags
+ entries:
+ - skip-hw
+ - skip-sw
+ - in-hw
+ - not-in-nw
+ - verbose
+ -
+ name: tc-stats
+ type: struct
+ members:
+ -
+ name: bytes
+ type: u64
+ -
+ name: packets
+ type: u32
+ -
+ name: drops
+ type: u32
+ -
+ name: overlimits
+ type: u32
+ -
+ name: bps
+ type: u32
+ -
+ name: pps
+ type: u32
+ -
+ name: qlen
+ type: u32
+ -
+ name: backlog
+ type: u32
+ -
+ name: tc-cbs-qopt
+ type: struct
+ members:
+ -
+ name: offload
+ type: u8
+ -
+ name: pad
+ type: pad
+ len: 3
+ -
+ name: hicredit
+ type: s32
+ -
+ name: locredit
+ type: s32
+ -
+ name: idleslope
+ type: s32
+ -
+ name: sendslope
+ type: s32
+ -
+ name: tc-etf-qopt
+ type: struct
+ members:
+ -
+ name: delta
+ type: s32
+ -
+ name: clockid
+ type: s32
+ -
+ name: flags
+ type: s32
+ -
+ name: tc-fifo-qopt
+ type: struct
+ members:
+ -
+ name: limit
+ type: u32
+ -
+ name: tc-htb-opt
+ type: struct
+ members:
+ -
+ name: rate
+ type: binary
+ len: 12
+ -
+ name: ceil
+ type: binary
+ len: 12
+ -
+ name: buffer
+ type: u32
+ -
+ name: cbuffer
+ type: u32
+ -
+ name: quantum
+ type: u32
+ -
+ name: level
+ type: u32
+ -
+ name: prio
+ type: u32
+ -
+ name: tc-htb-glob
+ type: struct
+ members:
+ -
+ name: version
+ type: u32
+ -
+ name: rate2quantum
+ type: u32
+ -
+ name: defcls
+ type: u32
+ -
+ name: debug
+ type: u32
+ -
+ name: direct-pkts
+ type: u32
+ -
+ name: tc-gred-qopt
+ type: struct
+ members:
+ -
+ name: limit
+ type: u32
+ -
+ name: qth-min
+ type: u32
+ -
+ name: qth-max
+ type: u32
+ -
+ name: DP
+ type: u32
+ -
+ name: backlog
+ type: u32
+ -
+ name: qave
+ type: u32
+ -
+ name: forced
+ type: u32
+ -
+ name: early
+ type: u32
+ -
+ name: other
+ type: u32
+ -
+ name: pdrop
+ type: u32
+ -
+ name: Wlog
+ type: u8
+ -
+ name: Plog
+ type: u8
+ -
+ name: Scell_log
+ type: u8
+ -
+ name: prio
+ type: u8
+ -
+ name: packets
+ type: u32
+ -
+ name: bytesin
+ type: u32
+ -
+ name: tc-gred-sopt
+ type: struct
+ members:
+ -
+ name: DPs
+ type: u32
+ -
+ name: def_DP
+ type: u32
+ -
+ name: grio
+ type: u8
+ -
+ name: flags
+ type: u8
+ -
+ name: pad1
+ type: u16
+ -
+ name: tc-hfsc-qopt
+ type: struct
+ members:
+ -
+ name: defcls
+ type: u16
+ -
+ name: tc-mqprio-qopt
+ type: struct
+ members:
+ -
+ name: num-tc
+ type: u8
+ -
+ name: prio-tc-map
+ type: binary
+ len: 16
+ -
+ name: hw
+ type: u8
+ -
+ name: count
+ type: binary
+ len: 32
+ -
+ name: offset
+ type: binary
+ len: 32
+ -
+ name: tc-multiq-qopt
+ type: struct
+ members:
+ -
+ name: bands
+ type: u16
+ -
+ name: max-bands
+ type: u16
+ -
+ name: tc-netem-qopt
+ type: struct
+ members:
+ -
+ name: latency
+ type: u32
+ -
+ name: limit
+ type: u32
+ -
+ name: loss
+ type: u32
+ -
+ name: gap
+ type: u32
+ -
+ name: duplicate
+ type: u32
+ -
+ name: jitter
+ type: u32
+ -
+ name: tc-plug-qopt
+ type: struct
+ members:
+ -
+ name: action
+ type: s32
+ -
+ name: limit
+ type: u32
+ -
+ name: tc-prio-qopt
+ type: struct
+ members:
+ -
+ name: bands
+ type: u16
+ -
+ name: priomap
+ type: binary
+ len: 16
+ -
+ name: tc-red-qopt
+ type: struct
+ members:
+ -
+ name: limit
+ type: u32
+ -
+ name: qth-min
+ type: u32
+ -
+ name: qth-max
+ type: u32
+ -
+ name: Wlog
+ type: u8
+ -
+ name: Plog
+ type: u8
+ -
+ name: Scell-log
+ type: u8
+ -
+ name: flags
+ type: u8
+ -
+ name: tc-sfb-qopt
+ type: struct
+ members:
+ -
+ name: rehash-interval
+ type: u32
+ -
+ name: warmup-time
+ type: u32
+ -
+ name: max
+ type: u32
+ -
+ name: bin-size
+ type: u32
+ -
+ name: increment
+ type: u32
+ -
+ name: decrement
+ type: u32
+ -
+ name: limit
+ type: u32
+ -
+ name: penalty-rate
+ type: u32
+ -
+ name: penalty-burst
+ type: u32
+ -
+ name: tc-sfq-qopt-v1 # TODO nested structs
+ type: struct
+ members:
+ -
+ name: quantum
+ type: u32
+ -
+ name: perturb-period
+ type: s32
+ -
+ name: limit
+ type: u32
+ -
+ name: divisor
+ type: u32
+ -
+ name: flows
+ type: u32
+ -
+ name: depth
+ type: u32
+ -
+ name: headdrop
+ type: u32
+ -
+ name: limit
+ type: u32
+ -
+ name: qth-min
+ type: u32
+ -
+ name: qth-mac
+ type: u32
+ -
+ name: Wlog
+ type: u8
+ -
+ name: Plog
+ type: u8
+ -
+ name: Scell-log
+ type: u8
+ -
+ name: flags
+ type: u8
+ -
+ name: max-P
+ type: u32
+ -
+ name: prob-drop
+ type: u32
+ -
+ name: forced-drop
+ type: u32
+ -
+ name: prob-mark
+ type: u32
+ -
+ name: forced-mark
+ type: u32
+ -
+ name: prob-mark-head
+ type: u32
+ -
+ name: forced-mark-head
+ type: u32
+ -
+ name: tc-tbf-qopt
+ type: struct
+ members:
+ -
+ name: rate
+ type: binary # TODO nested struct tc_ratespec
+ len: 12
+ -
+ name: peakrate
+ type: binary # TODO nested struct tc_ratespec
+ len: 12
+ -
+ name: limit
+ type: u32
+ -
+ name: buffer
+ type: u32
+ -
+ name: mtu
+ type: u32
+ -
+ name: tc-sizespec
+ type: struct
+ members:
+ -
+ name: cell-log
+ type: u8
+ -
+ name: size-log
+ type: u8
+ -
+ name: cell-align
+ type: s16
+ -
+ name: overhead
+ type: s32
+ -
+ name: linklayer
+ type: u32
+ -
+ name: mpu
+ type: u32
+ -
+ name: mtu
+ type: u32
+ -
+ name: tsize
+ type: u32
+ -
+ name: gnet-estimator
+ type: struct
+ members:
+ -
+ name: interval
+ type: s8
+ -
+ name: ewma-log
+ type: u8
+attribute-sets:
+ -
+ name: tc-attrs
+ attributes:
+ -
+ name: kind
+ type: string
+ -
+ name: options
+ type: sub-message
+ sub-message: tc-options-msg
+ selector: kind
+ -
+ name: stats
+ type: binary
+ struct: tc-stats
+ -
+ name: xstats
+ type: binary
+ -
+ name: rate
+ type: binary
+ struct: gnet-estimator
+ -
+ name: fcnt
+ type: u32
+ -
+ name: stats2
+ type: nest
+ nested-attributes: tca-stats-attrs
+ -
+ name: stab
+ type: nest
+ nested-attributes: tca-stab-attrs
+ -
+ name: pad
+ type: pad
+ -
+ name: dump-invisible
+ type: flag
+ -
+ name: chain
+ type: u32
+ -
+ name: hw-offload
+ type: u8
+ -
+ name: ingress-block
+ type: u32
+ -
+ name: egress-block
+ type: u32
+ -
+ name: dump-flags
+ type: bitfield32
+ -
+ name: ext-warn-msg
+ type: string
+ -
+ name: tc-cake-attrs
+ attributes:
+ -
+ name: pad
+ type: pad
+ -
+ name: base-rate64
+ type: u64
+ -
+ name: diffserv-mode
+ type: u32
+ -
+ name: atm
+ type: u32
+ -
+ name: flow-mode
+ type: u32
+ -
+ name: overhead
+ type: u32
+ -
+ name: rtt
+ type: u32
+ -
+ name: target
+ type: u32
+ -
+ name: autorate
+ type: u32
+ -
+ name: memory
+ type: u32
+ -
+ name: nat
+ type: u32
+ -
+ name: raw
+ type: u32
+ -
+ name: wash
+ type: u32
+ -
+ name: mpu
+ type: u32
+ -
+ name: ingress
+ type: u32
+ -
+ name: ack-filter
+ type: u32
+ -
+ name: split-gso
+ type: u32
+ -
+ name: fwmark
+ type: u32
+ -
+ name: tc-cake-stats-attrs
+ attributes:
+ -
+ name: pad
+ type: pad
+ -
+ name: capacity-estimate64
+ type: u64
+ -
+ name: memory-limit
+ type: u32
+ -
+ name: memory-used
+ type: u32
+ -
+ name: avg-netoff
+ type: u32
+ -
+ name: min-netlen
+ type: u32
+ -
+ name: max-netlen
+ type: u32
+ -
+ name: min-adjlen
+ type: u32
+ -
+ name: max-adjlen
+ type: u32
+ -
+ name: tin-stats
+ type: binary
+ -
+ name: deficit
+ type: s32
+ -
+ name: cobalt-count
+ type: u32
+ -
+ name: dropping
+ type: u32
+ -
+ name: drop-next-us
+ type: s32
+ -
+ name: p-drop
+ type: u32
+ -
+ name: blue-timer-us
+ type: s32
+ -
+ name: tc-cbs-attrs
+ attributes:
+ -
+ name: parms
+ type: binary
+ struct: tc-cbs-qopt
+ -
+ name: tc-choke-attrs
+ attributes:
+ -
+ name: parms
+ type: binary
+ struct: tc-red-qopt
+ -
+ name: stab
+ type: binary
+ -
+ name: max-p
+ type: u32
+ -
+ name: tc-codel-attrs
+ attributes:
+ -
+ name: target
+ type: u32
+ -
+ name: limit
+ type: u32
+ -
+ name: interval
+ type: u32
+ -
+ name: ecn
+ type: u32
+ -
+ name: ce-threshold
+ type: u32
+ -
+ name: tc-drr-attrs
+ attributes:
+ -
+ name: quantum
+ type: u32
+ -
+ name: tc-flower-attrs
+ attributes:
+ -
+ name: classid
+ type: u32
+ -
+ name: indev
+ type: string
+ -
+ name: act
+ type: array-nest
+ nested-attributes: tc-act-attrs
+ -
+ name: key-eth-dst
+ type: binary
+ display-hint: mac
+ -
+ name: key-eth-dst-mask
+ type: binary
+ display-hint: mac
+ -
+ name: key-eth-src
+ type: binary
+ display-hint: mac
+ -
+ name: key-eth-src-mask
+ type: binary
+ display-hint: mac
+ -
+ name: key-eth-type
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-ip-proto
+ type: u8
+ -
+ name: key-ipv4-src
+ type: u32
+ byte-order: big-endian
+ display-hint: ipv4
+ -
+ name: key-ipv4-src-mask
+ type: u32
+ byte-order: big-endian
+ display-hint: ipv4
+ -
+ name: key-ipv4-dst
+ type: u32
+ byte-order: big-endian
+ display-hint: ipv4
+ -
+ name: key-ipv4-dst-mask
+ type: u32
+ byte-order: big-endian
+ display-hint: ipv4
+ -
+ name: key-ipv6-src
+ type: binary
+ display-hint: ipv6
+ -
+ name: key-ipv6-src-mask
+ type: binary
+ display-hint: ipv6
+ -
+ name: key-ipv6-dst
+ type: binary
+ display-hint: ipv6
+ -
+ name: key-ipv6-dst-mask
+ type: binary
+ display-hint: ipv6
+ -
+ name: key-tcp-src
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-tcp-dst
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-udp-src
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-udp-dst
+ type: u16
+ byte-order: big-endian
+ -
+ name: flags
+ type: u32
+ enum: tc-cls-flags
+ enum-as-flags: true
+ -
+ name: key-vlan-id
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-vlan-prio
+ type: u8
+ -
+ name: key-vlan-eth-type
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-enc-key-id
+ type: u32
+ byte-order: big-endian
+ -
+ name: key-enc-ipv4-src
+ type: u32
+ byte-order: big-endian
+ display-hint: ipv4
+ -
+ name: key-enc-ipv4-src-mask
+ type: u32
+ byte-order: big-endian
+ display-hint: ipv4
+ -
+ name: key-enc-ipv4-dst
+ type: u32
+ byte-order: big-endian
+ display-hint: ipv4
+ -
+ name: key-enc-ipv4-dst-mask
+ type: u32
+ byte-order: big-endian
+ display-hint: ipv4
+ -
+ name: key-enc-ipv6-src
+ type: binary
+ display-hint: ipv6
+ -
+ name: key-enc-ipv6-src-mask
+ type: binary
+ display-hint: ipv6
+ -
+ name: key-enc-ipv6-dst
+ type: binary
+ display-hint: ipv6
+ -
+ name: key-enc-ipv6-dst-mask
+ type: binary
+ display-hint: ipv6
+ -
+ name: key-tcp-src-mask
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-tcp-dst-mask
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-udp-src-mask
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-udp-dst-mask
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-sctp-src-mask
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-sctp-dst-mask
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-sctp-src
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-sctp-dst
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-enc-udp-src-port
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-enc-udp-src-port-mask
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-enc-udp-dst-port
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-enc-udp-dst-port-mask
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-flags
+ type: u32
+ byte-order: big-endian
+ -
+ name: key-flags-mask
+ type: u32
+ byte-order: big-endian
+ -
+ name: key-icmpv4-code
+ type: u8
+ -
+ name: key-icmpv4-code-mask
+ type: u8
+ -
+ name: key-icmpv4-type
+ type: u8
+ -
+ name: key-icmpv4-type-mask
+ type: u8
+ -
+ name: key-icmpv6-code
+ type: u8
+ -
+ name: key-icmpv6-code-mask
+ type: u8
+ -
+ name: key-icmpv6-type
+ type: u8
+ -
+ name: key-icmpv6-type-mask
+ type: u8
+ -
+ name: key-arp-sip
+ type: u32
+ byte-order: big-endian
+ -
+ name: key-arp-sip-mask
+ type: u32
+ byte-order: big-endian
+ -
+ name: key-arp-tip
+ type: u32
+ byte-order: big-endian
+ -
+ name: key-arp-tip-mask
+ type: u32
+ byte-order: big-endian
+ -
+ name: key-arp-op
+ type: u8
+ -
+ name: key-arp-op-mask
+ type: u8
+ -
+ name: key-arp-sha
+ type: binary
+ -
+ name: key-arp-sha-mask
+ type: binary
+ -
+ name: key-arp-tha
+ type: binary
+ -
+ name: key-arp-tha-mask
+ type: binary
+ -
+ name: key-mpls-ttl
+ type: u8
+ -
+ name: key-mpls-bos
+ type: u8
+ -
+ name: key-mpls-tc
+ type: u8
+ -
+ name: key-mpls-label
+ type: u32
+ byte-order: big-endian
+ -
+ name: key-tcp-flags
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-tcp-flags-mask
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-ip-tos
+ type: u8
+ -
+ name: key-ip-tos-mask
+ type: u8
+ -
+ name: key-ip-ttl
+ type: u8
+ -
+ name: key-ip-ttl-mask
+ type: u8
+ -
+ name: key-cvlan-id
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-cvlan-prio
+ type: u8
+ -
+ name: key-cvlan-eth-type
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-enc-ip-tos
+ type: u8
+ -
+ name: key-enc-ip-tos-mask
+ type: u8
+ -
+ name: key-enc-ip-ttl
+ type: u8
+ -
+ name: key-enc-ip-ttl-mask
+ type: u8
+ -
+ name: key-enc-opts
+ type: binary
+ -
+ name: key-enc-opts-mask
+ type: binary
+ -
+ name: in-hw-count
+ type: u32
+ -
+ name: key-port-src-min
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-port-src-max
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-port-dst-min
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-port-dst-max
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-ct-state
+ type: u16
+ -
+ name: key-ct-state-mask
+ type: u16
+ -
+ name: key-ct-zone
+ type: u16
+ -
+ name: key-ct-zone-mask
+ type: u16
+ -
+ name: key-ct-mark
+ type: u32
+ -
+ name: key-ct-mark-mask
+ type: u32
+ -
+ name: key-ct-labels
+ type: binary
+ -
+ name: key-ct-labels-mask
+ type: binary
+ -
+ name: key-mpls-opts
+ type: binary
+ -
+ name: key-hash
+ type: u32
+ -
+ name: key-hash-mask
+ type: u32
+ -
+ name: key-num-of-vlans
+ type: u8
+ -
+ name: key-pppoe-sid
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-ppp-proto
+ type: u16
+ byte-order: big-endian
+ -
+ name: key-l2-tpv3-sid
+ type: u32
+ byte-order: big-endian
+ -
+ name: tc-gred-attrs
+ attributes:
+ -
+ name: parms
+ type: binary # array of struct: tc-gred-qopt
+ -
+ name: stab
+ type: binary
+ sub-type: u8
+ -
+ name: dps
+ type: binary
+ struct: tc-gred-sopt
+ -
+ name: max-p
+ type: binary
+ sub-type: u32
+ -
+ name: limit
+ type: u32
+ -
+ name: vq-list
+ type: nest
+ nested-attributes: tca-gred-vq-list-attrs
+ -
+ name: tca-gred-vq-list-attrs
+ attributes:
+ -
+ name: entry
+ type: nest
+ nested-attributes: tca-gred-vq-entry-attrs
+ multi-attr: true
+ -
+ name: tca-gred-vq-entry-attrs
+ attributes:
+ -
+ name: pad
+ type: pad
+ -
+ name: dp
+ type: u32
+ -
+ name: stat-bytes
+ type: u32
+ -
+ name: stat-packets
+ type: u32
+ -
+ name: stat-backlog
+ type: u32
+ -
+ name: stat-prob-drop
+ type: u32
+ -
+ name: stat-prob-mark
+ type: u32
+ -
+ name: stat-forced-drop
+ type: u32
+ -
+ name: stat-forced-mark
+ type: u32
+ -
+ name: stat-pdrop
+ type: u32
+ -
+ name: stat-other
+ type: u32
+ -
+ name: flags
+ type: u32
+ -
+ name: tc-hfsc-attrs
+ attributes:
+ -
+ name: rsc
+ type: binary
+ -
+ name: fsc
+ type: binary
+ -
+ name: usc
+ type: binary
+ -
+ name: tc-hhf-attrs
+ attributes:
+ -
+ name: backlog-limit
+ type: u32
+ -
+ name: quantum
+ type: u32
+ -
+ name: hh-flows-limit
+ type: u32
+ -
+ name: reset-timeout
+ type: u32
+ -
+ name: admit-bytes
+ type: u32
+ -
+ name: evict-timeout
+ type: u32
+ -
+ name: non-hh-weight
+ type: u32
+ -
+ name: tc-htb-attrs
+ attributes:
+ -
+ name: parms
+ type: binary
+ struct: tc-htb-opt
+ -
+ name: init
+ type: binary
+ struct: tc-htb-glob
+ -
+ name: ctab
+ type: binary
+ -
+ name: rtab
+ type: binary
+ -
+ name: direct-qlen
+ type: u32
+ -
+ name: rate64
+ type: u64
+ -
+ name: ceil64
+ type: u64
+ -
+ name: pad
+ type: pad
+ -
+ name: offload
+ type: flag
+ -
+ name: tc-act-attrs
+ attributes:
+ -
+ name: kind
+ type: string
+ -
+ name: options
+ type: sub-message
+ sub-message: tc-act-options-msg
+ selector: kind
+ -
+ name: index
+ type: u32
+ -
+ name: stats
+ type: binary
+ -
+ name: pad
+ type: pad
+ -
+ name: cookie
+ type: binary
+ -
+ name: flags
+ type: bitfield32
+ -
+ name: hw-stats
+ type: bitfield32
+ -
+ name: used-hw-stats
+ type: bitfield32
+ -
+ name: in-hw-count
+ type: u32
+ -
+ name: tc-etf-attrs
+ attributes:
+ -
+ name: parms
+ type: binary
+ struct: tc-etf-qopt
+ -
+ name: tc-ets-attrs
+ attributes:
+ -
+ name: nbands
+ type: u8
+ -
+ name: nstrict
+ type: u8
+ -
+ name: quanta
+ type: nest
+ nested-attributes: tc-ets-attrs
+ -
+ name: quanta-band
+ type: u32
+ multi-attr: true
+ -
+ name: priomap
+ type: nest
+ nested-attributes: tc-ets-attrs
+ -
+ name: priomap-band
+ type: u8
+ multi-attr: true
+ -
+ name: tc-fq-attrs
+ attributes:
+ -
+ name: plimit
+ type: u32
+ -
+ name: flow-plimit
+ type: u32
+ -
+ name: quantum
+ type: u32
+ -
+ name: initial-quantum
+ type: u32
+ -
+ name: rate-enable
+ type: u32
+ -
+ name: flow-default-rate
+ type: u32
+ -
+ name: flow-max-rate
+ type: u32
+ -
+ name: buckets-log
+ type: u32
+ -
+ name: flow-refill-delay
+ type: u32
+ -
+ name: orphan-mask
+ type: u32
+ -
+ name: low-rate-threshold
+ type: u32
+ -
+ name: ce-threshold
+ type: u32
+ -
+ name: timer-slack
+ type: u32
+ -
+ name: horizon
+ type: u32
+ -
+ name: horizon-drop
+ type: u8
+ -
+ name: tc-fq-codel-attrs
+ attributes:
+ -
+ name: target
+ type: u32
+ -
+ name: limit
+ type: u32
+ -
+ name: interval
+ type: u32
+ -
+ name: ecn
+ type: u32
+ -
+ name: flows
+ type: u32
+ -
+ name: quantum
+ type: u32
+ -
+ name: ce-threshold
+ type: u32
+ -
+ name: drop-batch-size
+ type: u32
+ -
+ name: memory-limit
+ type: u32
+ -
+ name: ce-threshold-selector
+ type: u8
+ -
+ name: ce-threshold-mask
+ type: u8
+ -
+ name: tc-fq-pie-attrs
+ attributes:
+ -
+ name: limit
+ type: u32
+ -
+ name: flows
+ type: u32
+ -
+ name: target
+ type: u32
+ -
+ name: tupdate
+ type: u32
+ -
+ name: alpha
+ type: u32
+ -
+ name: beta
+ type: u32
+ -
+ name: quantum
+ type: u32
+ -
+ name: memory-limit
+ type: u32
+ -
+ name: ecn-prob
+ type: u32
+ -
+ name: ecn
+ type: u32
+ -
+ name: bytemode
+ type: u32
+ -
+ name: dq-rate-estimator
+ type: u32
+ -
+ name: tc-netem-attrs
+ attributes:
+ -
+ name: corr
+ type: binary
+ -
+ name: delay-dist
+ type: binary
+ sub-type: s16
+ -
+ name: reorder
+ type: binary
+ -
+ name: corrupt
+ type: binary
+ -
+ name: loss
+ type: binary
+ -
+ name: rate
+ type: binary
+ -
+ name: ecn
+ type: u32
+ -
+ name: rate64
+ type: u64
+ -
+ name: pad
+ type: u32
+ -
+ name: latency64
+ type: s64
+ -
+ name: jitter64
+ type: s64
+ -
+ name: slot
+ type: binary
+ -
+ name: slot-dist
+ type: binary
+ sub-type: s16
+ -
+ name: tc-pie-attrs
+ attributes:
+ -
+ name: target
+ type: u32
+ -
+ name: limit
+ type: u32
+ -
+ name: tupdate
+ type: u32
+ -
+ name: alpha
+ type: u32
+ -
+ name: beta
+ type: u32
+ -
+ name: ecn
+ type: u32
+ -
+ name: bytemode
+ type: u32
+ -
+ name: dq-rate-estimator
+ type: u32
+ -
+ name: tc-qfq-attrs
+ attributes:
+ -
+ name: weight
+ type: u32
+ -
+ name: lmax
+ type: u32
+ -
+ name: tc-red-attrs
+ attributes:
+ -
+ name: parms
+ type: binary
+ struct: tc-red-qopt
+ -
+ name: stab
+ type: binary
+ -
+ name: max-p
+ type: u32
+ -
+ name: flags
+ type: binary
+ -
+ name: early-drop-block
+ type: u32
+ -
+ name: mark-block
+ type: u32
+ -
+ name: tc-taprio-attrs
+ attributes:
+ -
+ name: priomap
+ type: binary
+ struct: tc-mqprio-qopt
+ -
+ name: sched-entry-list
+ type: nest
+ nested-attributes: tc-taprio-sched-entry-list
+ -
+ name: sched-base-time
+ type: s64
+ -
+ name: sched-single-entry
+ type: nest
+ nested-attributes: tc-taprio-sched-entry
+ -
+ name: sched-clockid
+ type: s32
+ -
+ name: pad
+ type: pad
+ -
+ name: admin-sched
+ type: binary
+ -
+ name: sched-cycle-time
+ type: s64
+ -
+ name: sched-cycle-time-extension
+ type: s64
+ -
+ name: flags
+ type: u32
+ -
+ name: txtime-delay
+ type: u32
+ -
+ name: tc-entry
+ type: nest
+ nested-attributes: tc-taprio-tc-entry-attrs
+ -
+ name: tc-taprio-sched-entry-list
+ attributes:
+ -
+ name: entry
+ type: nest
+ nested-attributes: tc-taprio-sched-entry
+ -
+ name: tc-taprio-sched-entry
+ attributes:
+ -
+ name: index
+ type: u32
+ -
+ name: cmd
+ type: u8
+ -
+ name: gate-mask
+ type: u32
+ -
+ name: interval
+ type: u32
+ -
+ name: tc-taprio-tc-entry-attrs
+ attributes:
+ -
+ name: index
+ type: u32
+ -
+ name: max-sdu
+ type: u32
+ -
+ name: fp
+ type: u32
+ -
+ name: tc-tbf-attrs
+ attributes:
+ -
+ name: parms
+ type: binary
+ struct: tc-tbf-qopt
+ -
+ name: rtab
+ type: binary
+ -
+ name: ptab
+ type: binary
+ -
+ name: rate64
+ type: u64
+ -
+ name: prate4
+ type: u64
+ -
+ name: burst
+ type: u32
+ -
+ name: pburst
+ type: u32
+ -
+ name: pad
+ type: pad
+ -
+ name: tca-gact-attrs
+ attributes:
+ -
+ name: tm
+ type: binary
+ -
+ name: parms
+ type: binary
+ -
+ name: prob
+ type: binary
+ -
+ name: pad
+ type: pad
+ -
+ name: tca-stab-attrs
+ attributes:
+ -
+ name: base
+ type: binary
+ struct: tc-sizespec
+ -
+ name: data
+ type: binary
+ -
+ name: tca-stats-attrs
+ attributes:
+ -
+ name: basic
+ type: binary
+ -
+ name: rate-est
+ type: binary
+ -
+ name: queue
+ type: binary
+ -
+ name: app
+ type: binary # TODO sub-message needs 2+ level deep lookup
+ sub-message: tca-stats-app-msg
+ selector: kind
+ -
+ name: rate-est64
+ type: binary
+ -
+ name: pad
+ type: pad
+ -
+ name: basic-hw
+ type: binary
+ -
+ name: pkt64
+ type: binary
+
+sub-messages:
+ -
+ name: tc-options-msg
+ formats:
+ -
+ value: bfifo
+ fixed-header: tc-fifo-qopt
+ -
+ value: cake
+ attribute-set: tc-cake-attrs
+ -
+ value: cbs
+ attribute-set: tc-cbs-attrs
+ -
+ value: choke
+ attribute-set: tc-choke-attrs
+ -
+ value: clsact # no content
+ -
+ value: codel
+ attribute-set: tc-codel-attrs
+ -
+ value: drr
+ attribute-set: tc-drr-attrs
+ -
+ value: etf
+ attribute-set: tc-etf-attrs
+ -
+ value: ets
+ attribute-set: tc-ets-attrs
+ -
+ value: fq
+ attribute-set: tc-fq-attrs
+ -
+ value: fq_codel
+ attribute-set: tc-fq-codel-attrs
+ -
+ value: fq_pie
+ attribute-set: tc-fq-pie-attrs
+ -
+ value: flower
+ attribute-set: tc-flower-attrs
+ -
+ value: gred
+ attribute-set: tc-gred-attrs
+ -
+ value: hfsc
+ fixed-header: tc-hfsc-qopt
+ -
+ value: hhf
+ attribute-set: tc-hhf-attrs
+ -
+ value: htb
+ attribute-set: tc-htb-attrs
+ -
+ value: ingress # no content
+ -
+ value: mq # no content
+ -
+ value: mqprio
+ fixed-header: tc-mqprio-qopt
+ -
+ value: multiq
+ fixed-header: tc-multiq-qopt
+ -
+ value: netem
+ fixed-header: tc-netem-qopt
+ attribute-set: tc-netem-attrs
+ -
+ value: pfifo
+ fixed-header: tc-fifo-qopt
+ -
+ value: pfifo_fast
+ fixed-header: tc-prio-qopt
+ -
+ value: pfifo_head_drop
+ fixed-header: tc-fifo-qopt
+ -
+ value: pie
+ attribute-set: tc-pie-attrs
+ -
+ value: plug
+ fixed-header: tc-plug-qopt
+ -
+ value: prio
+ fixed-header: tc-prio-qopt
+ -
+ value: qfq
+ attribute-set: tc-qfq-attrs
+ -
+ value: red
+ attribute-set: tc-red-attrs
+ -
+ value: sfb
+ fixed-header: tc-sfb-qopt
+ -
+ value: sfq
+ fixed-header: tc-sfq-qopt-v1
+ -
+ value: taprio
+ attribute-set: tc-taprio-attrs
+ -
+ value: tbf
+ attribute-set: tc-tbf-attrs
+ -
+ name: tc-act-options-msg
+ formats:
+ -
+ value: gact
+ attribute-set: tca-gact-attrs
+ -
+ name: tca-stats-app-msg
+ formats:
+ -
+ value: bfifo
+ -
+ value: blackhole
+ -
+ value: cake
+ attribute-set: tc-cake-stats-attrs
+ -
+ value: cbs
+ -
+ value: choke
+ -
+ value: clsact
+ -
+ value: codel
+ -
+ value: drr
+ -
+ value: etf
+ -
+ value: ets
+ -
+ value: fq
+ -
+ value: fq_codel
+ -
+ value: fq_pie
+ -
+ value: flower
+ -
+ value: gred
+ -
+ value: hfsc
+ -
+ value: hhf
+ -
+ value: htb
+ -
+ value: ingress
+ -
+ value: mq
+ -
+ value: mqprio
+ -
+ value: multiq
+ -
+ value: netem
+ -
+ value: noqueue
+ -
+ value: pfifo
+ -
+ value: pfifo_fast
+ -
+ value: pfifo_head_drop
+ -
+ value: pie
+ -
+ value: plug
+ -
+ value: prio
+ -
+ value: qfq
+ -
+ value: red
+ -
+ value: sfb
+ -
+ value: sfq
+ -
+ value: taprio
+ -
+ value: tbf
+
+operations:
+ enum-model: directional
+ list:
+ -
+ name: newqdisc
+ doc: Create new tc qdisc.
+ attribute-set: tc-attrs
+ fixed-header: tcmsg
+ do:
+ request:
+ value: 36
+ attributes: &create-params
+ - tcm-family
+ - tcm-ifindex
+ - tcm-handle
+ - tcm-parent
+ - tca-kind
+ - tca-options
+ - tca-rate
+ - tca-stab
+ - tca-chain
+ - tca-ingress-block
+ - tca-egress-block
+ -
+ name: delqdisc
+ doc: Delete existing tc qdisc.
+ attribute-set: tc-attrs
+ fixed-header: tcmsg
+ do:
+ request:
+ value: 37
+ attributes: &lookup-params
+ - tcm-family
+ - tcm-ifindex
+ - tcm-handle
+ - tcm-parent
+ -
+ name: getqdisc
+ doc: Get / dump tc qdisc information.
+ attribute-set: tc-attrs
+ fixed-header: tcmsg
+ do:
+ request:
+ value: 38
+ attributes:
+ - tcm-family
+ - tcm-ifindex
+ - tcm-handle
+ - tcm-parent
+ - tca-dump-invisible
+ - tca-dump-flags
+ reply:
+ value: 36
+ attributes: &tc-all
+ - tcm-family
+ - tcm-ifindex
+ - tcm-handle
+ - tcm-parent
+ - tca-kind
+ - tca-options
+ - tca-stats
+ - tca-xstats
+ - tca-rate
+ - tca-fcnt
+ - tca-stats2
+ - tca-stab
+ - tca-chain
+ - tca-ingress-block
+ - tca-egress-block
+ -
+ name: newtclass
+ doc: Get / dump tc traffic class information.
+ attribute-set: tc-attrs
+ fixed-header: tcmsg
+ do:
+ request:
+ value: 40
+ attributes: *create-params
+ -
+ name: deltclass
+ doc: Get / dump tc traffic class information.
+ attribute-set: tc-attrs
+ fixed-header: tcmsg
+ do:
+ request:
+ value: 41
+ attributes: *lookup-params
+ -
+ name: gettclass
+ doc: Get / dump tc traffic class information.
+ attribute-set: tc-attrs
+ fixed-header: tcmsg
+ do:
+ request:
+ value: 42
+ attributes: *lookup-params
+ reply:
+ value: 40
+ attributes: *tc-all
+ -
+ name: newtfilter
+ doc: Get / dump tc filter information.
+ attribute-set: tc-attrs
+ fixed-header: tcmsg
+ do:
+ request:
+ value: 44
+ attributes: *create-params
+ -
+ name: deltfilter
+ doc: Get / dump tc filter information.
+ attribute-set: tc-attrs
+ fixed-header: tcmsg
+ do:
+ request:
+ value: 45
+ attributes: *lookup-params
+ -
+ name: gettfilter
+ doc: Get / dump tc filter information.
+ attribute-set: tc-attrs
+ fixed-header: tcmsg
+ do:
+ request:
+ value: 46
+ attributes: *lookup-params
+ reply:
+ value: 44
+ attributes: *tc-all
+ -
+ name: newchain
+ doc: Get / dump tc chain information.
+ attribute-set: tc-attrs
+ fixed-header: tcmsg
+ do:
+ request:
+ value: 100
+ attributes: *create-params
+ -
+ name: delchain
+ doc: Get / dump tc chain information.
+ attribute-set: tc-attrs
+ fixed-header: tcmsg
+ do:
+ request:
+ value: 101
+ attributes: *lookup-params
+ -
+ name: getchain
+ doc: Get / dump tc chain information.
+ attribute-set: tc-attrs
+ fixed-header: tcmsg
+ do:
+ request:
+ value: 102
+ attributes: *lookup-params
+ reply:
+ value: 100
+ attributes: *tc-all
+
+mcast-groups:
+ list:
+ -
+ name: rtnlgrp-tc
+ value: 4
--
2.42.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH net-next v2 11/11] tools/net/ynl-gen-rst: Add sub-messages to generated docs
2023-12-11 16:40 [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Donald Hunter
` (9 preceding siblings ...)
2023-12-11 16:40 ` [PATCH net-next v2 10/11] doc/netlink/specs: Add a spec for tc Donald Hunter
@ 2023-12-11 16:40 ` Donald Hunter
2023-12-12 20:42 ` Breno Leitao
2023-12-11 23:32 ` [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Jakub Kicinski
11 siblings, 1 reply; 34+ messages in thread
From: Donald Hunter @ 2023-12-11 16:40 UTC (permalink / raw)
To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller
Cc: donald.hunter, Donald Hunter
Add a section for sub-messages to the generated .rst files.
Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
---
tools/net/ynl/ynl-gen-rst.py | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/tools/net/ynl/ynl-gen-rst.py b/tools/net/ynl/ynl-gen-rst.py
index f0bb2f4dc4fa..c030233fdcbb 100755
--- a/tools/net/ynl/ynl-gen-rst.py
+++ b/tools/net/ynl/ynl-gen-rst.py
@@ -251,6 +251,24 @@ def parse_attr_sets(entries: List[Dict[str, Any]]) -> str:
return "\n".join(lines)
+def parse_sub_messages(entries: List[Dict[str, Any]]) -> str:
+ """Parse sub-message definitions"""
+ lines = []
+
+ for entry in entries:
+ lines.append(rst_section(entry["name"]))
+ for fmt in entry["formats"]:
+ value = fmt["value"]
+
+ lines.append(rst_bullet(bold(value)))
+ for attr in ['fixed-header', 'attribute-set']:
+ if attr in fmt:
+ lines.append(rst_fields(attr, fmt[attr], 2))
+ lines.append("\n")
+
+ return "\n".join(lines)
+
+
def parse_yaml(obj: Dict[str, Any]) -> str:
"""Format the whole YAML into a RST string"""
lines = []
@@ -287,6 +305,11 @@ def parse_yaml(obj: Dict[str, Any]) -> str:
lines.append(rst_subtitle("Attribute sets"))
lines.append(parse_attr_sets(obj["attribute-sets"]))
+ # Sub-messages
+ if "sub-messages" in obj:
+ lines.append(rst_subtitle("Sub-messages"))
+ lines.append(parse_sub_messages(obj["sub-messages"]))
+
return "\n".join(lines)
--
2.42.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 01/11] tools/net/ynl-gen-rst: Use bullet lists for attribute-set entries
2023-12-11 16:40 ` [PATCH net-next v2 01/11] tools/net/ynl-gen-rst: Use bullet lists for attribute-set entries Donald Hunter
@ 2023-12-11 23:28 ` Jakub Kicinski
2023-12-12 11:27 ` Donald Hunter
0 siblings, 1 reply; 34+ messages in thread
From: Jakub Kicinski @ 2023-12-11 23:28 UTC (permalink / raw)
To: Donald Hunter
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter
On Mon, 11 Dec 2023 16:40:29 +0000 Donald Hunter wrote:
> The generated .rst for attribute-sets currently uses a sub-sub-heading
> for each individual attribute. Change this to use a bullet list the
> attributes in an attribute-set. It is more compact and readable.
This is on purpose, we want to be able to link to the attributes.
And AFAIU we can only link to headings.
The documentation for attrs is currently a bit sparse so the docs
end up looking awkward. But that's a problem with people not writing
enough doc comments, not with the render, innit? :(
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 02/11] tools/net/ynl-gen-rst: Sort the index of generated netlink specs
2023-12-11 16:40 ` [PATCH net-next v2 02/11] tools/net/ynl-gen-rst: Sort the index of generated netlink specs Donald Hunter
@ 2023-12-11 23:30 ` Jakub Kicinski
2023-12-12 11:30 ` Donald Hunter
2023-12-12 20:42 ` Breno Leitao
0 siblings, 2 replies; 34+ messages in thread
From: Jakub Kicinski @ 2023-12-11 23:30 UTC (permalink / raw)
To: Donald Hunter
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter, leitao
On Mon, 11 Dec 2023 16:40:30 +0000 Donald Hunter wrote:
> The index of netlink specs was being generated unsorted. Sort the output
> before generating the index entries.
>
> Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Please do CC Breno on tools/net/ynl/ynl-gen-rst.py changes.
https://lore.kernel.org/all/20231211164039.83034-3-donald.hunter@gmail.com/
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 03/11] doc/netlink: Regenerate netlink .rst files if ynl-gen-rst changes
2023-12-11 16:40 ` [PATCH net-next v2 03/11] doc/netlink: Regenerate netlink .rst files if ynl-gen-rst changes Donald Hunter
@ 2023-12-11 23:30 ` Jakub Kicinski
2023-12-12 20:39 ` Breno Leitao
1 sibling, 0 replies; 34+ messages in thread
From: Jakub Kicinski @ 2023-12-11 23:30 UTC (permalink / raw)
To: Donald Hunter
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter
On Mon, 11 Dec 2023 16:40:31 +0000 Donald Hunter wrote:
> Add ynl-gen-rst.py to the dependencies for the netlink .rst files in the
> doc Makefile so that the docs get regenerated if the ynl-gen-rst.py
> script is modified.
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 04/11] tools/net/ynl: Use consistent array index expression formatting
2023-12-11 16:40 ` [PATCH net-next v2 04/11] tools/net/ynl: Use consistent array index expression formatting Donald Hunter
@ 2023-12-11 23:30 ` Jakub Kicinski
0 siblings, 0 replies; 34+ messages in thread
From: Jakub Kicinski @ 2023-12-11 23:30 UTC (permalink / raw)
To: Donald Hunter
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter
On Mon, 11 Dec 2023 16:40:32 +0000 Donald Hunter wrote:
> Use expression formatting that conforms to the python style guide.
>
> Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl
2023-12-11 16:40 [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Donald Hunter
` (10 preceding siblings ...)
2023-12-11 16:40 ` [PATCH net-next v2 11/11] tools/net/ynl-gen-rst: Add sub-messages to generated docs Donald Hunter
@ 2023-12-11 23:32 ` Jakub Kicinski
2023-12-12 11:38 ` Donald Hunter
11 siblings, 1 reply; 34+ messages in thread
From: Jakub Kicinski @ 2023-12-11 23:32 UTC (permalink / raw)
To: Donald Hunter
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter
On Mon, 11 Dec 2023 16:40:28 +0000 Donald Hunter wrote:
> This patchset adds a 'sub-message' attribute type to the netlink-raw
> schema and implements it in ynl. This provides support for kind-specific
> options attributes as used in rt_link and tc raw netlink families.
>
> A description of the new 'sub-message' attribute type and the
> corresponding sub-message definitions is provided in patch 5.
>
> The patchset includes updates to the rt_link spec and a new tc spec that
> make use of the new 'sub-message' attribute type.
>
> As mentioned in patch 7, encode support is not yet implemented in ynl
> and support for sub-message selectors at a different nest level from the
> key attribute is not yet supported. I plan to work on these in folloup
> patches.
Seems to break C codegen:
Traceback (most recent call last):
File "net-next/tools/net/ynl/ynl-gen-c.py", line 2802, in <module>
main()
File "net-next/tools/net/ynl/ynl-gen-c.py", line 2531, in main
parsed = Family(args.spec, exclude_ops)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "net-next/tools/net/ynl/ynl-gen-c.py", line 889, in __init__
super().__init__(file_name, exclude_ops=exclude_ops)
File "net-next/tools/net/ynl/lib/nlspec.py", line 481, in __init__
raise last_exception
File "net-next/tools/net/ynl/lib/nlspec.py", line 472, in __init__
elem.resolve()
File "net-next/tools/net/ynl/ynl-gen-c.py", line 907, in resolve
self.resolve_up(super())
File "net-next/tools/net/ynl/lib/nlspec.py", line 53, in resolve_up
up.resolve()
File "net-next/tools/net/ynl/lib/nlspec.py", line 583, in resolve
for elem in self.yaml['sub-messages']:
~~~~~~~~~^^^^^^^^^^^^^^^^
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 05/11] doc/netlink: Add sub-message support to netlink-raw
2023-12-11 16:40 ` [PATCH net-next v2 05/11] doc/netlink: Add sub-message support to netlink-raw Donald Hunter
@ 2023-12-11 23:37 ` Jakub Kicinski
2023-12-12 11:30 ` Donald Hunter
0 siblings, 1 reply; 34+ messages in thread
From: Jakub Kicinski @ 2023-12-11 23:37 UTC (permalink / raw)
To: Donald Hunter
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter
On Mon, 11 Dec 2023 16:40:33 +0000 Donald Hunter wrote:
> Add a 'sub-message' attribute type with a selector that supports
> polymorphic attribute formats for raw netlink families like tc.
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
nit: I tend to throw a | for all multi-line strings, I either
read somewhere it makes YAML parsers happier, or Rob recommended
it. Don't recall now.
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 06/11] doc/netlink: Document the sub-message format for netlink-raw
2023-12-11 16:40 ` [PATCH net-next v2 06/11] doc/netlink: Document the sub-message format for netlink-raw Donald Hunter
@ 2023-12-12 1:56 ` Jakub Kicinski
2023-12-12 11:32 ` Donald Hunter
0 siblings, 1 reply; 34+ messages in thread
From: Jakub Kicinski @ 2023-12-12 1:56 UTC (permalink / raw)
To: Donald Hunter
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter
On Mon, 11 Dec 2023 16:40:34 +0000 Donald Hunter wrote:
> +Sub-messages
> +------------
> +
> +Several raw netlink families such as rt_link and tc have type-specific
> +sub-messages. These sub-messages can appear as an attribute in a top-level or a
> +nested attribute space.
> +
> +A sub-message attribute uses the value of another attribute as a selector key to
> +choose the right sub-message format. For example if the following attribute has
> +already been decoded:
We may want to explain why we call this thing "sub-message". How about:
Several raw netlink families such as rt_link and tc use attribute
nesting as an abstraction to carry module specific information.
Conceptually it looks as follows::
[OUTER NEST OR MESSAGE LEVEL]
[GENERIC ATTR 1]
[GENERIC ATTR 2]
[GENERIC ATTR 3]
[GENERIC ATTR - wrapper]
[MODULE SPECIFIC ATTR 1]
[MODULE SPECIFIC ATTR 2]
The GENERIC ATTRs at the outer level are defined in the core (or rt_link
or core TC), while specific drivers / TC classifiers, qdiscs etc. can
carry their own information wrapped in the "GENERIC ATTR - wrapper".
Even though the example above shows attributes nesting inside the wrapper,
the modules generally have full freedom of defining the format of the nest.
In practice payload of the wrapper attr has very similar characteristics
to a netlink message. It may contain a fixed header / structure, netlink
attributes, or both. Because of those shared characteristics we refer
to the payload of the wrapper attribute as a sub-message.
> +A sub-message attribute uses the value of another attribute as a selector key to
> +choose the right sub-message format. For example if the following attribute has
> +already been decoded:
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 07/11] tools/net/ynl: Add 'sub-message' attribute decoding to ynl
2023-12-11 16:40 ` [PATCH net-next v2 07/11] tools/net/ynl: Add 'sub-message' attribute decoding to ynl Donald Hunter
@ 2023-12-12 2:00 ` Jakub Kicinski
0 siblings, 0 replies; 34+ messages in thread
From: Jakub Kicinski @ 2023-12-12 2:00 UTC (permalink / raw)
To: Donald Hunter
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter
On Mon, 11 Dec 2023 16:40:35 +0000 Donald Hunter wrote:
> Implement the 'sub-message' attribute type in ynl.
>
> Encode support is not yet implemented. Support for sub-message selectors
> at a different nest level from the key attribute is not yet supported.
Other than the fact that I think this is the patch which breaks
C codegen, looks good ;)
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 08/11] tools/net/ynl: Add binary and pad support to structs for tc
2023-12-11 16:40 ` [PATCH net-next v2 08/11] tools/net/ynl: Add binary and pad support to structs for tc Donald Hunter
@ 2023-12-12 2:04 ` Jakub Kicinski
2023-12-12 11:36 ` Donald Hunter
0 siblings, 1 reply; 34+ messages in thread
From: Jakub Kicinski @ 2023-12-12 2:04 UTC (permalink / raw)
To: Donald Hunter
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter
On Mon, 11 Dec 2023 16:40:36 +0000 Donald Hunter wrote:
> description: The netlink attribute type
We should perhaps "touch up" this doc, and add that for the use of pad
within structs len is required. Would be even better if you could
convince json schema to validate that. The example that starts with
a comment:
# type property is only required if not in subset definition
should be pretty close to what we need here?
> - enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string, binary ]
> + enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string, binary, pad ]
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 01/11] tools/net/ynl-gen-rst: Use bullet lists for attribute-set entries
2023-12-11 23:28 ` Jakub Kicinski
@ 2023-12-12 11:27 ` Donald Hunter
2023-12-12 16:11 ` Jakub Kicinski
0 siblings, 1 reply; 34+ messages in thread
From: Donald Hunter @ 2023-12-12 11:27 UTC (permalink / raw)
To: Jakub Kicinski
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter,
Breno Leitao
Jakub Kicinski <kuba@kernel.org> writes:
> On Mon, 11 Dec 2023 16:40:29 +0000 Donald Hunter wrote:
>> The generated .rst for attribute-sets currently uses a sub-sub-heading
>> for each individual attribute. Change this to use a bullet list the
>> attributes in an attribute-set. It is more compact and readable.
>
> This is on purpose, we want to be able to link to the attributes.
> And AFAIU we can only link to headings.
>
> The documentation for attrs is currently a bit sparse so the docs
> end up looking awkward. But that's a problem with people not writing
> enough doc comments, not with the render, innit? :(
Okay, then I think we need to try and improve the formatting. Currently
h3 and h4 both have font-size: 130% and the attribute headings get
rendered in bold so they stand out more than the attribute-set headings
they are under. I suggest:
- Removing the bold markup from the attribute headings
- Changing h4 to font-size: 110% in sphinx-static/custom.css
That improves things a bit but I feel that the attribute-set headings
still get a bit lost. Not sure if there is anything we can do about
that. The devlink spec is a fairly extreme example because it has a lot
of subset definitions that look especially bleak.
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 02/11] tools/net/ynl-gen-rst: Sort the index of generated netlink specs
2023-12-11 23:30 ` Jakub Kicinski
@ 2023-12-12 11:30 ` Donald Hunter
2023-12-12 16:13 ` Jakub Kicinski
2023-12-12 20:42 ` Breno Leitao
1 sibling, 1 reply; 34+ messages in thread
From: Donald Hunter @ 2023-12-12 11:30 UTC (permalink / raw)
To: Jakub Kicinski
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter, leitao
Jakub Kicinski <kuba@kernel.org> writes:
> On Mon, 11 Dec 2023 16:40:30 +0000 Donald Hunter wrote:
>> The index of netlink specs was being generated unsorted. Sort the output
>> before generating the index entries.
>>
>> Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
>
> Reviewed-by: Jakub Kicinski <kuba@kernel.org>
>
> Please do CC Breno on tools/net/ynl/ynl-gen-rst.py changes.
> https://lore.kernel.org/all/20231211164039.83034-3-donald.hunter@gmail.com/
Ack, will do.
Is there a streamlined way to apply output from get_maintainer.pl to
individual patches in a series, or do I just add specific names by hand?
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 05/11] doc/netlink: Add sub-message support to netlink-raw
2023-12-11 23:37 ` Jakub Kicinski
@ 2023-12-12 11:30 ` Donald Hunter
0 siblings, 0 replies; 34+ messages in thread
From: Donald Hunter @ 2023-12-12 11:30 UTC (permalink / raw)
To: Jakub Kicinski
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter
Jakub Kicinski <kuba@kernel.org> writes:
> On Mon, 11 Dec 2023 16:40:33 +0000 Donald Hunter wrote:
>> Add a 'sub-message' attribute type with a selector that supports
>> polymorphic attribute formats for raw netlink families like tc.
>
> Reviewed-by: Jakub Kicinski <kuba@kernel.org>
>
> nit: I tend to throw a | for all multi-line strings, I either
> read somewhere it makes YAML parsers happier, or Rob recommended
> it. Don't recall now.
I'll fix that up in the next revision.
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 06/11] doc/netlink: Document the sub-message format for netlink-raw
2023-12-12 1:56 ` Jakub Kicinski
@ 2023-12-12 11:32 ` Donald Hunter
0 siblings, 0 replies; 34+ messages in thread
From: Donald Hunter @ 2023-12-12 11:32 UTC (permalink / raw)
To: Jakub Kicinski
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter
Jakub Kicinski <kuba@kernel.org> writes:
> On Mon, 11 Dec 2023 16:40:34 +0000 Donald Hunter wrote:
>> +Sub-messages
>> +------------
>> +
>> +Several raw netlink families such as rt_link and tc have type-specific
>> +sub-messages. These sub-messages can appear as an attribute in a top-level or a
>> +nested attribute space.
>> +
>> +A sub-message attribute uses the value of another attribute as a selector key to
>> +choose the right sub-message format. For example if the following attribute has
>> +already been decoded:
>
> We may want to explain why we call this thing "sub-message". How about:
>
> Several raw netlink families such as rt_link and tc use attribute
> nesting as an abstraction to carry module specific information.
> Conceptually it looks as follows::
>
> [OUTER NEST OR MESSAGE LEVEL]
> [GENERIC ATTR 1]
> [GENERIC ATTR 2]
> [GENERIC ATTR 3]
> [GENERIC ATTR - wrapper]
> [MODULE SPECIFIC ATTR 1]
> [MODULE SPECIFIC ATTR 2]
>
> The GENERIC ATTRs at the outer level are defined in the core (or rt_link
> or core TC), while specific drivers / TC classifiers, qdiscs etc. can
> carry their own information wrapped in the "GENERIC ATTR - wrapper".
> Even though the example above shows attributes nesting inside the wrapper,
> the modules generally have full freedom of defining the format of the nest.
> In practice payload of the wrapper attr has very similar characteristics
> to a netlink message. It may contain a fixed header / structure, netlink
> attributes, or both. Because of those shared characteristics we refer
> to the payload of the wrapper attribute as a sub-message.
I'll incorporate into next revision. Thanks!
>> +A sub-message attribute uses the value of another attribute as a selector key to
>> +choose the right sub-message format. For example if the following attribute has
>> +already been decoded:
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 08/11] tools/net/ynl: Add binary and pad support to structs for tc
2023-12-12 2:04 ` Jakub Kicinski
@ 2023-12-12 11:36 ` Donald Hunter
0 siblings, 0 replies; 34+ messages in thread
From: Donald Hunter @ 2023-12-12 11:36 UTC (permalink / raw)
To: Jakub Kicinski
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter
Jakub Kicinski <kuba@kernel.org> writes:
> On Mon, 11 Dec 2023 16:40:36 +0000 Donald Hunter wrote:
>> description: The netlink attribute type
>
> We should perhaps "touch up" this doc, and add that for the use of pad
> within structs len is required. Would be even better if you could
> convince json schema to validate that. The example that starts with
> a comment:
>
> # type property is only required if not in subset definition
>
> should be pretty close to what we need here?
Yep, I'll update the description and see if I can get the schema
validation to play nice.
>
>> - enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string, binary ]
>> + enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string, binary, pad ]
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl
2023-12-11 23:32 ` [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Jakub Kicinski
@ 2023-12-12 11:38 ` Donald Hunter
2023-12-12 16:14 ` Jakub Kicinski
0 siblings, 1 reply; 34+ messages in thread
From: Donald Hunter @ 2023-12-12 11:38 UTC (permalink / raw)
To: Jakub Kicinski
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter
Jakub Kicinski <kuba@kernel.org> writes:
> On Mon, 11 Dec 2023 16:40:28 +0000 Donald Hunter wrote:
>> This patchset adds a 'sub-message' attribute type to the netlink-raw
>> schema and implements it in ynl. This provides support for kind-specific
>> options attributes as used in rt_link and tc raw netlink families.
>>
>> A description of the new 'sub-message' attribute type and the
>> corresponding sub-message definitions is provided in patch 5.
>>
>> The patchset includes updates to the rt_link spec and a new tc spec that
>> make use of the new 'sub-message' attribute type.
>>
>> As mentioned in patch 7, encode support is not yet implemented in ynl
>> and support for sub-message selectors at a different nest level from the
>> key attribute is not yet supported. I plan to work on these in folloup
>> patches.
>
> Seems to break C codegen:
Ick. Sorry about that. How do you test/validate the C codegen?
> Traceback (most recent call last):
> File "net-next/tools/net/ynl/ynl-gen-c.py", line 2802, in <module>
> main()
> File "net-next/tools/net/ynl/ynl-gen-c.py", line 2531, in main
> parsed = Family(args.spec, exclude_ops)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File "net-next/tools/net/ynl/ynl-gen-c.py", line 889, in __init__
> super().__init__(file_name, exclude_ops=exclude_ops)
> File "net-next/tools/net/ynl/lib/nlspec.py", line 481, in __init__
> raise last_exception
> File "net-next/tools/net/ynl/lib/nlspec.py", line 472, in __init__
> elem.resolve()
> File "net-next/tools/net/ynl/ynl-gen-c.py", line 907, in resolve
> self.resolve_up(super())
> File "net-next/tools/net/ynl/lib/nlspec.py", line 53, in resolve_up
> up.resolve()
> File "net-next/tools/net/ynl/lib/nlspec.py", line 583, in resolve
> for elem in self.yaml['sub-messages']:
> ~~~~~~~~~^^^^^^^^^^^^^^^^
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 01/11] tools/net/ynl-gen-rst: Use bullet lists for attribute-set entries
2023-12-12 11:27 ` Donald Hunter
@ 2023-12-12 16:11 ` Jakub Kicinski
0 siblings, 0 replies; 34+ messages in thread
From: Jakub Kicinski @ 2023-12-12 16:11 UTC (permalink / raw)
To: Donald Hunter
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter,
Breno Leitao
On Tue, 12 Dec 2023 11:27:18 +0000 Donald Hunter wrote:
> Okay, then I think we need to try and improve the formatting. Currently
> h3 and h4 both have font-size: 130% and the attribute headings get
> rendered in bold so they stand out more than the attribute-set headings
> they are under. I suggest:
>
> - Removing the bold markup from the attribute headings
> - Changing h4 to font-size: 110% in sphinx-static/custom.css
SG, but probably as a separate change directed at linux-doc tree?
> That improves things a bit but I feel that the attribute-set headings
> still get a bit lost. Not sure if there is anything we can do about
> that. The devlink spec is a fairly extreme example because it has a lot
> of subset definitions that look especially bleak.
Right.. nobody bothers documenting in the old families.
netdev is probably the example to look at when deciding on what looks
okay, hopefully it's closer to what new/documented families would look
like.
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 02/11] tools/net/ynl-gen-rst: Sort the index of generated netlink specs
2023-12-12 11:30 ` Donald Hunter
@ 2023-12-12 16:13 ` Jakub Kicinski
0 siblings, 0 replies; 34+ messages in thread
From: Jakub Kicinski @ 2023-12-12 16:13 UTC (permalink / raw)
To: Donald Hunter
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter, leitao
On Tue, 12 Dec 2023 11:30:11 +0000 Donald Hunter wrote:
> Jakub Kicinski <kuba@kernel.org> writes:
> > On Mon, 11 Dec 2023 16:40:30 +0000 Donald Hunter wrote:
> >> The index of netlink specs was being generated unsorted. Sort the output
> >> before generating the index entries.
> >>
> >> Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
> >
> > Reviewed-by: Jakub Kicinski <kuba@kernel.org>
> >
> > Please do CC Breno on tools/net/ynl/ynl-gen-rst.py changes.
> > https://lore.kernel.org/all/20231211164039.83034-3-donald.hunter@gmail.com/
>
> Ack, will do.
>
> Is there a streamlined way to apply output from get_maintainer.pl to
> individual patches in a series, or do I just add specific names by hand?
Some people have a CC command as a git send-email hook.
Others have scripts to insert CCs into the commits themselves.
I think there was an attempt to add a relevant code to scripts/
but I think it was rejected. You gotta look around :(
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl
2023-12-12 11:38 ` Donald Hunter
@ 2023-12-12 16:14 ` Jakub Kicinski
0 siblings, 0 replies; 34+ messages in thread
From: Jakub Kicinski @ 2023-12-12 16:14 UTC (permalink / raw)
To: Donald Hunter
Cc: netdev, David S. Miller, Eric Dumazet, Paolo Abeni,
Jonathan Corbet, linux-doc, Jacob Keller, donald.hunter
On Tue, 12 Dec 2023 11:38:07 +0000 Donald Hunter wrote:
> > Seems to break C codegen:
>
> Ick. Sorry about that. How do you test/validate the C codegen?
make -C tools/net/ynl -j 8
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 03/11] doc/netlink: Regenerate netlink .rst files if ynl-gen-rst changes
2023-12-11 16:40 ` [PATCH net-next v2 03/11] doc/netlink: Regenerate netlink .rst files if ynl-gen-rst changes Donald Hunter
2023-12-11 23:30 ` Jakub Kicinski
@ 2023-12-12 20:39 ` Breno Leitao
2023-12-12 21:48 ` Donald Hunter
1 sibling, 1 reply; 34+ messages in thread
From: Breno Leitao @ 2023-12-12 20:39 UTC (permalink / raw)
To: Donald Hunter
Cc: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller,
donald.hunter
On Mon, Dec 11, 2023 at 04:40:31PM +0000, Donald Hunter wrote:
> Add ynl-gen-rst.py to the dependencies for the netlink .rst files in the
> doc Makefile so that the docs get regenerated if the ynl-gen-rst.py
> script is modified.
>
> Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
> ---
> Documentation/Makefile | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/Makefile b/Documentation/Makefile
> index 5c156fbb6cdf..9a31625ea1ff 100644
> --- a/Documentation/Makefile
> +++ b/Documentation/Makefile
> @@ -105,11 +105,12 @@ YNL_TOOL:=$(srctree)/tools/net/ynl/ynl-gen-rst.py
> YNL_RST_FILES_TMP := $(patsubst %.yaml,%.rst,$(wildcard $(YNL_YAML_DIR)/*.yaml))
> YNL_RST_FILES := $(patsubst $(YNL_YAML_DIR)%,$(YNL_RST_DIR)%, $(YNL_RST_FILES_TMP))
>
> -$(YNL_INDEX): $(YNL_RST_FILES)
> +$(YNL_INDEX): $(YNL_RST_FILES) $(YNL_TOOL)
> @$(YNL_TOOL) -o $@ -x
>
> -$(YNL_RST_DIR)/%.rst: $(YNL_YAML_DIR)/%.yaml
> - @$(YNL_TOOL) -i $< -o $@
> +$(YNL_RST_DIR)/%.rst: $(YNL_TOOL)
> +$(YNL_RST_DIR)/%.rst: $(YNL_YAML_DIR)/%.yaml $(YNL_TOOL)
> + $(YNL_TOOL) -i $< -o $@
Why do you need both lines here? Isn't the last line enough?
$(YNL_RST_DIR)/%.rst: $(YNL_YAML_DIR)/%.yaml $(YNL_TOOL)
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 11/11] tools/net/ynl-gen-rst: Add sub-messages to generated docs
2023-12-11 16:40 ` [PATCH net-next v2 11/11] tools/net/ynl-gen-rst: Add sub-messages to generated docs Donald Hunter
@ 2023-12-12 20:42 ` Breno Leitao
0 siblings, 0 replies; 34+ messages in thread
From: Breno Leitao @ 2023-12-12 20:42 UTC (permalink / raw)
To: Donald Hunter
Cc: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller,
donald.hunter
On Mon, Dec 11, 2023 at 04:40:39PM +0000, Donald Hunter wrote:
> Add a section for sub-messages to the generated .rst files.
>
> Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
Reviewed-by: Breno Leitao <leitao@debian.org>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 02/11] tools/net/ynl-gen-rst: Sort the index of generated netlink specs
2023-12-11 23:30 ` Jakub Kicinski
2023-12-12 11:30 ` Donald Hunter
@ 2023-12-12 20:42 ` Breno Leitao
1 sibling, 0 replies; 34+ messages in thread
From: Breno Leitao @ 2023-12-12 20:42 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Donald Hunter, netdev, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller,
donald.hunter
On Mon, Dec 11, 2023 at 03:30:00PM -0800, Jakub Kicinski wrote:
> On Mon, 11 Dec 2023 16:40:30 +0000 Donald Hunter wrote:
> > The index of netlink specs was being generated unsorted. Sort the output
> > before generating the index entries.
> >
> > Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
>
> Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Breno Leitao <leitao@debian.org>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH net-next v2 03/11] doc/netlink: Regenerate netlink .rst files if ynl-gen-rst changes
2023-12-12 20:39 ` Breno Leitao
@ 2023-12-12 21:48 ` Donald Hunter
0 siblings, 0 replies; 34+ messages in thread
From: Donald Hunter @ 2023-12-12 21:48 UTC (permalink / raw)
To: Breno Leitao
Cc: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
Paolo Abeni, Jonathan Corbet, linux-doc, Jacob Keller,
donald.hunter
On Tue, 12 Dec 2023 at 20:39, Breno Leitao <leitao@debian.org> wrote:
>
> > +$(YNL_RST_DIR)/%.rst: $(YNL_TOOL)
> > +$(YNL_RST_DIR)/%.rst: $(YNL_YAML_DIR)/%.yaml $(YNL_TOOL)
> > + $(YNL_TOOL) -i $< -o $@
>
> Why do you need both lines here? Isn't the last line enough?
>
> $(YNL_RST_DIR)/%.rst: $(YNL_YAML_DIR)/%.yaml $(YNL_TOOL)
Good catch. I didn't intend to leave that first line in.
Thanks!
^ permalink raw reply [flat|nested] 34+ messages in thread
end of thread, other threads:[~2023-12-12 21:48 UTC | newest]
Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-11 16:40 [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Donald Hunter
2023-12-11 16:40 ` [PATCH net-next v2 01/11] tools/net/ynl-gen-rst: Use bullet lists for attribute-set entries Donald Hunter
2023-12-11 23:28 ` Jakub Kicinski
2023-12-12 11:27 ` Donald Hunter
2023-12-12 16:11 ` Jakub Kicinski
2023-12-11 16:40 ` [PATCH net-next v2 02/11] tools/net/ynl-gen-rst: Sort the index of generated netlink specs Donald Hunter
2023-12-11 23:30 ` Jakub Kicinski
2023-12-12 11:30 ` Donald Hunter
2023-12-12 16:13 ` Jakub Kicinski
2023-12-12 20:42 ` Breno Leitao
2023-12-11 16:40 ` [PATCH net-next v2 03/11] doc/netlink: Regenerate netlink .rst files if ynl-gen-rst changes Donald Hunter
2023-12-11 23:30 ` Jakub Kicinski
2023-12-12 20:39 ` Breno Leitao
2023-12-12 21:48 ` Donald Hunter
2023-12-11 16:40 ` [PATCH net-next v2 04/11] tools/net/ynl: Use consistent array index expression formatting Donald Hunter
2023-12-11 23:30 ` Jakub Kicinski
2023-12-11 16:40 ` [PATCH net-next v2 05/11] doc/netlink: Add sub-message support to netlink-raw Donald Hunter
2023-12-11 23:37 ` Jakub Kicinski
2023-12-12 11:30 ` Donald Hunter
2023-12-11 16:40 ` [PATCH net-next v2 06/11] doc/netlink: Document the sub-message format for netlink-raw Donald Hunter
2023-12-12 1:56 ` Jakub Kicinski
2023-12-12 11:32 ` Donald Hunter
2023-12-11 16:40 ` [PATCH net-next v2 07/11] tools/net/ynl: Add 'sub-message' attribute decoding to ynl Donald Hunter
2023-12-12 2:00 ` Jakub Kicinski
2023-12-11 16:40 ` [PATCH net-next v2 08/11] tools/net/ynl: Add binary and pad support to structs for tc Donald Hunter
2023-12-12 2:04 ` Jakub Kicinski
2023-12-12 11:36 ` Donald Hunter
2023-12-11 16:40 ` [PATCH net-next v2 09/11] doc/netlink/specs: add sub-message type to rt_link family Donald Hunter
2023-12-11 16:40 ` [PATCH net-next v2 10/11] doc/netlink/specs: Add a spec for tc Donald Hunter
2023-12-11 16:40 ` [PATCH net-next v2 11/11] tools/net/ynl-gen-rst: Add sub-messages to generated docs Donald Hunter
2023-12-12 20:42 ` Breno Leitao
2023-12-11 23:32 ` [PATCH net-next v2 00/11] tools/net/ynl: Add 'sub-message' support to ynl Jakub Kicinski
2023-12-12 11:38 ` Donald Hunter
2023-12-12 16:14 ` Jakub Kicinski
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.