netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 0/3] tools: ynl: decode link types present in tests
@ 2025-01-05  1:25 Jakub Kicinski
  2025-01-05  1:25 ` [PATCH net-next 1/3] tools: ynl: correctly handle overrides of fields in subset Jakub Kicinski
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Jakub Kicinski @ 2025-01-05  1:25 UTC (permalink / raw)
  To: davem; +Cc: donald.hunter, netdev, edumazet, pabeni, Jakub Kicinski

Using a kernel built for the net selftest target to run drivers/net
tests currently fails, because the net kernel automatically spawns
a handful of tunnel devices which YNL can't decode.

Fill in those missing link types in rt_link. We need to extend subset
support a bit for it to work.

Jakub Kicinski (3):
  tools: ynl: correctly handle overrides of fields in subset
  tools: ynl: print some information about attribute we can't parse
  netlink: specs: rt_link: decode ip6tnl, vti and vti6 link attrs

 Documentation/netlink/specs/rt_link.yaml | 87 ++++++++++++++++++++++++
 tools/net/ynl/lib/nlspec.py              |  5 +-
 tools/net/ynl/lib/ynl.py                 | 72 +++++++++++---------
 3 files changed, 129 insertions(+), 35 deletions(-)

-- 
2.47.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH net-next 1/3] tools: ynl: correctly handle overrides of fields in subset
  2025-01-05  1:25 [PATCH net-next 0/3] tools: ynl: decode link types present in tests Jakub Kicinski
@ 2025-01-05  1:25 ` Jakub Kicinski
  2025-01-06 13:27   ` Donald Hunter
  2025-01-05  1:25 ` [PATCH net-next 2/3] tools: ynl: print some information about attribute we can't parse Jakub Kicinski
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 10+ messages in thread
From: Jakub Kicinski @ 2025-01-05  1:25 UTC (permalink / raw)
  To: davem; +Cc: donald.hunter, netdev, edumazet, pabeni, Jakub Kicinski

We stated in documentation [1] and previous discussions [2]
that the need for overriding fields in members of subsets
is anticipated. Implement it.

[1] https://docs.kernel.org/next/userspace-api/netlink/specs.html#subset-of
[2] https://lore.kernel.org/netdev/20231004171350.1f59cd1d@kernel.org/

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
 tools/net/ynl/lib/nlspec.py | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tools/net/ynl/lib/nlspec.py b/tools/net/ynl/lib/nlspec.py
index a745739655ad..314ec8007496 100644
--- a/tools/net/ynl/lib/nlspec.py
+++ b/tools/net/ynl/lib/nlspec.py
@@ -219,7 +219,10 @@ jsonschema = None
         else:
             real_set = family.attr_sets[self.subset_of]
             for elem in self.yaml['attributes']:
-                attr = real_set[elem['name']]
+                real_attr = real_set[elem['name']]
+                combined_elem = real_attr.yaml | elem
+                attr = self.new_attr(combined_elem, real_attr.value)
+
                 self.attrs[attr.name] = attr
                 self.attrs_by_val[attr.value] = attr
 
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH net-next 2/3] tools: ynl: print some information about attribute we can't parse
  2025-01-05  1:25 [PATCH net-next 0/3] tools: ynl: decode link types present in tests Jakub Kicinski
  2025-01-05  1:25 ` [PATCH net-next 1/3] tools: ynl: correctly handle overrides of fields in subset Jakub Kicinski
@ 2025-01-05  1:25 ` Jakub Kicinski
  2025-01-06 13:30   ` Donald Hunter
  2025-01-05  1:25 ` [PATCH net-next 3/3] netlink: specs: rt_link: decode ip6tnl, vti and vti6 link attrs Jakub Kicinski
  2025-01-06 15:53 ` [PATCH net-next 0/3] tools: ynl: decode link types present in tests Stanislav Fomichev
  3 siblings, 1 reply; 10+ messages in thread
From: Jakub Kicinski @ 2025-01-05  1:25 UTC (permalink / raw)
  To: davem; +Cc: donald.hunter, netdev, edumazet, pabeni, Jakub Kicinski

When parsing throws an exception one often has to figure out which
attribute couldn't be parsed from first principles. For families
with large message parsing trees like rtnetlink guessing the
attribute can be hard.

Print a bit of information as the exception travels out, e.g.:

  # when dumping rt links
  Error decoding 'flags' from 'linkinfo-ip6tnl-attrs'
  Error decoding 'data' from 'linkinfo-attrs'
  Error decoding 'linkinfo' from 'link-attrs'
  Traceback (most recent call last):
    File "/home/kicinski/linux/./tools/net/ynl/cli.py", line 119, in <module>
      main()
    File "/home/kicinski/linux/./tools/net/ynl/cli.py", line 100, in main
      reply = ynl.dump(args.dump, attrs)
    File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 1064, in dump
      return self._op(method, vals, dump=True)
    File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 1058, in _op
      return self._ops(ops)[0]
    File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 1045, in _ops
      rsp_msg = self._decode(decoded.raw_attrs, op.attr_set.name)
    File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 738, in _decode
      subdict = self._decode(NlAttrs(attr.raw), attr_spec['nested-attributes'], search_attrs)
    File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 763, in _decode
      decoded = self._decode_sub_msg(attr, attr_spec, search_attrs)
    File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 714, in _decode_sub_msg
      subdict = self._decode(NlAttrs(attr.raw, offset), msg_format.attr_set)
    File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 749, in _decode
      decoded = attr.as_scalar(attr_spec['type'], attr_spec.byte_order)
    File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 147, in as_scalar
      return format.unpack(self.raw)[0]
  struct.error: unpack requires a buffer of 2 bytes

The Traceback is what we would previously see, the "Error..."
messages are new. We print a message per level (in the stack
order). Printing single combined message gets tricky quickly
given sub-messages etc.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
 tools/net/ynl/lib/ynl.py | 72 +++++++++++++++++++++-------------------
 1 file changed, 38 insertions(+), 34 deletions(-)

diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py
index eea29359a899..08f8bf89cfc2 100644
--- a/tools/net/ynl/lib/ynl.py
+++ b/tools/net/ynl/lib/ynl.py
@@ -733,41 +733,45 @@ genl_family_name_to_id = None
                 self._rsp_add(rsp, attr_name, None, self._decode_unknown(attr))
                 continue
 
-            if attr_spec["type"] == 'nest':
-                subdict = self._decode(NlAttrs(attr.raw), attr_spec['nested-attributes'], search_attrs)
-                decoded = subdict
-            elif attr_spec["type"] == 'string':
-                decoded = attr.as_strz()
-            elif attr_spec["type"] == 'binary':
-                decoded = self._decode_binary(attr, attr_spec)
-            elif attr_spec["type"] == 'flag':
-                decoded = True
-            elif attr_spec.is_auto_scalar:
-                decoded = attr.as_auto_scalar(attr_spec['type'], attr_spec.byte_order)
-            elif attr_spec["type"] in NlAttr.type_formats:
-                decoded = attr.as_scalar(attr_spec['type'], attr_spec.byte_order)
-                if 'enum' in attr_spec:
-                    decoded = self._decode_enum(decoded, attr_spec)
-                elif attr_spec.display_hint:
-                    decoded = self._formatted_string(decoded, attr_spec.display_hint)
-            elif attr_spec["type"] == 'indexed-array':
-                decoded = self._decode_array_attr(attr, attr_spec)
-            elif attr_spec["type"] == 'bitfield32':
-                value, selector = struct.unpack("II", attr.raw)
-                if 'enum' in attr_spec:
-                    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, search_attrs)
-            elif attr_spec["type"] == 'nest-type-value':
-                decoded = self._decode_nest_type_value(attr, attr_spec)
-            else:
-                if not self.process_unknown:
-                    raise Exception(f'Unknown {attr_spec["type"]} with name {attr_spec["name"]}')
-                decoded = self._decode_unknown(attr)
+            try:
+                if attr_spec["type"] == 'nest':
+                    subdict = self._decode(NlAttrs(attr.raw), attr_spec['nested-attributes'], search_attrs)
+                    decoded = subdict
+                elif attr_spec["type"] == 'string':
+                    decoded = attr.as_strz()
+                elif attr_spec["type"] == 'binary':
+                    decoded = self._decode_binary(attr, attr_spec)
+                elif attr_spec["type"] == 'flag':
+                    decoded = True
+                elif attr_spec.is_auto_scalar:
+                    decoded = attr.as_auto_scalar(attr_spec['type'], attr_spec.byte_order)
+                elif attr_spec["type"] in NlAttr.type_formats:
+                    decoded = attr.as_scalar(attr_spec['type'], attr_spec.byte_order)
+                    if 'enum' in attr_spec:
+                        decoded = self._decode_enum(decoded, attr_spec)
+                    elif attr_spec.display_hint:
+                        decoded = self._formatted_string(decoded, attr_spec.display_hint)
+                elif attr_spec["type"] == 'indexed-array':
+                    decoded = self._decode_array_attr(attr, attr_spec)
+                elif attr_spec["type"] == 'bitfield32':
+                    value, selector = struct.unpack("II", attr.raw)
+                    if 'enum' in attr_spec:
+                        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, search_attrs)
+                elif attr_spec["type"] == 'nest-type-value':
+                    decoded = self._decode_nest_type_value(attr, attr_spec)
+                else:
+                    if not self.process_unknown:
+                        raise Exception(f'Unknown {attr_spec["type"]} with name {attr_spec["name"]}')
+                    decoded = self._decode_unknown(attr)
 
-            self._rsp_add(rsp, attr_spec["name"], attr_spec.is_multi, decoded)
+                self._rsp_add(rsp, attr_spec["name"], attr_spec.is_multi, decoded)
+            except:
+                print(f"Error decoding '{attr_spec.name}' from '{space}'")
+                raise
 
         return rsp
 
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH net-next 3/3] netlink: specs: rt_link: decode ip6tnl, vti and vti6 link attrs
  2025-01-05  1:25 [PATCH net-next 0/3] tools: ynl: decode link types present in tests Jakub Kicinski
  2025-01-05  1:25 ` [PATCH net-next 1/3] tools: ynl: correctly handle overrides of fields in subset Jakub Kicinski
  2025-01-05  1:25 ` [PATCH net-next 2/3] tools: ynl: print some information about attribute we can't parse Jakub Kicinski
@ 2025-01-05  1:25 ` Jakub Kicinski
  2025-01-06 13:38   ` Donald Hunter
  2025-01-06 15:53 ` [PATCH net-next 0/3] tools: ynl: decode link types present in tests Stanislav Fomichev
  3 siblings, 1 reply; 10+ messages in thread
From: Jakub Kicinski @ 2025-01-05  1:25 UTC (permalink / raw)
  To: davem; +Cc: donald.hunter, netdev, edumazet, pabeni, Jakub Kicinski

Some of our tests load vti and ip6tnl so not being able to decode
the link attrs gets in the way of using Python YNL for testing.

Decode link attributes for ip6tnl, vti and vti6.

ip6tnl uses IFLA_IPTUN_FLAGS as u32, while ipv4 and sit expect
a u16 attribute, so we have a (first?) subset type override...

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
 Documentation/netlink/specs/rt_link.yaml | 87 ++++++++++++++++++++++++
 1 file changed, 87 insertions(+)

diff --git a/Documentation/netlink/specs/rt_link.yaml b/Documentation/netlink/specs/rt_link.yaml
index 96465376d6fe..363c4d4f0779 100644
--- a/Documentation/netlink/specs/rt_link.yaml
+++ b/Documentation/netlink/specs/rt_link.yaml
@@ -1825,6 +1825,48 @@ protonum: 0
       -
         name: erspan-hwid
         type: u16
+  -
+    name: linkinfo-vti-attrs
+    name-prefix: ifla-vti-
+    attributes:
+      -
+        name: link
+        type: u32
+      -
+        name: ikey
+        type: u32
+      -
+        name: okey
+        type: u32
+      -
+        name: local
+        type: binary
+        display-hint: ipv4
+      -
+        name: remote
+        type: binary
+        display-hint: ipv4
+      -
+        name: fwmark
+        type: u32
+  -
+    name: linkinfo-vti6-attrs
+    subset-of: linkinfo-vti-attrs
+    attributes:
+      -
+        name: link
+      -
+        name: ikey
+      -
+        name: okey
+      -
+        name: local
+        display-hint: ipv6
+      -
+        name: remote
+        display-hint: ipv6
+      -
+        name: fwmark
   -
     name: linkinfo-geneve-attrs
     name-prefix: ifla-geneve-
@@ -1941,6 +1983,42 @@ protonum: 0
       -
         name: fwmark
         type: u32
+  -
+    name: linkinfo-ip6tnl-attrs
+    subset-of: linkinfo-iptun-attrs
+    attributes:
+      -
+        name: link
+      -
+        name: local
+        display-hint: ipv6
+      -
+        name: remote
+        display-hint: ipv6
+      -
+        name: ttl
+      -
+        name: encap-limit
+      -
+        name: flowinfo
+      -
+        name: flags
+        # ip6tnl unlike ipip and sit has 32b flags
+        type: u32
+      -
+        name: proto
+      -
+        name: encap-type
+      -
+        name: encap-flags
+      -
+        name: encap-sport
+      -
+        name: encap-dport
+      -
+        name: collect-metadata
+      -
+        name: fwmark
   -
     name: linkinfo-tun-attrs
     name-prefix: ifla-tun-
@@ -2195,6 +2273,9 @@ protonum: 0
       -
         value: ipip
         attribute-set: linkinfo-iptun-attrs
+      -
+        value: ip6tnl
+        attribute-set: linkinfo-ip6tnl-attrs
       -
         value: sit
         attribute-set: linkinfo-iptun-attrs
@@ -2207,6 +2288,12 @@ protonum: 0
       -
         value: vrf
         attribute-set: linkinfo-vrf-attrs
+      -
+        value: vti
+        attribute-set: linkinfo-vti-attrs
+      -
+        value: vti6
+        attribute-set: linkinfo-vti6-attrs
       -
         value: netkit
         attribute-set: linkinfo-netkit-attrs
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 1/3] tools: ynl: correctly handle overrides of fields in subset
  2025-01-05  1:25 ` [PATCH net-next 1/3] tools: ynl: correctly handle overrides of fields in subset Jakub Kicinski
@ 2025-01-06 13:27   ` Donald Hunter
  2025-01-06 15:36     ` Jakub Kicinski
  0 siblings, 1 reply; 10+ messages in thread
From: Donald Hunter @ 2025-01-06 13:27 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: davem, netdev, edumazet, pabeni

Jakub Kicinski <kuba@kernel.org> writes:

> We stated in documentation [1] and previous discussions [2]
> that the need for overriding fields in members of subsets
> is anticipated. Implement it.
>
> [1] https://docs.kernel.org/next/userspace-api/netlink/specs.html#subset-of
> [2] https://lore.kernel.org/netdev/20231004171350.1f59cd1d@kernel.org/
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>

I guess we're okay with requiring Python >= 3.9 for combining
dicts with |

Reviewed-by: Donald Hunter <donald.hunter@gmail.com>

> ---
>  tools/net/ynl/lib/nlspec.py | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/tools/net/ynl/lib/nlspec.py b/tools/net/ynl/lib/nlspec.py
> index a745739655ad..314ec8007496 100644
> --- a/tools/net/ynl/lib/nlspec.py
> +++ b/tools/net/ynl/lib/nlspec.py
> @@ -219,7 +219,10 @@ jsonschema = None
>          else:
>              real_set = family.attr_sets[self.subset_of]
>              for elem in self.yaml['attributes']:
> -                attr = real_set[elem['name']]
> +                real_attr = real_set[elem['name']]
> +                combined_elem = real_attr.yaml | elem
> +                attr = self.new_attr(combined_elem, real_attr.value)
> +
>                  self.attrs[attr.name] = attr
>                  self.attrs_by_val[attr.value] = attr

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 2/3] tools: ynl: print some information about attribute we can't parse
  2025-01-05  1:25 ` [PATCH net-next 2/3] tools: ynl: print some information about attribute we can't parse Jakub Kicinski
@ 2025-01-06 13:30   ` Donald Hunter
  0 siblings, 0 replies; 10+ messages in thread
From: Donald Hunter @ 2025-01-06 13:30 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: davem, netdev, edumazet, pabeni

Jakub Kicinski <kuba@kernel.org> writes:

> When parsing throws an exception one often has to figure out which
> attribute couldn't be parsed from first principles. For families
> with large message parsing trees like rtnetlink guessing the
> attribute can be hard.
>
> Print a bit of information as the exception travels out, e.g.:
>
>   # when dumping rt links
>   Error decoding 'flags' from 'linkinfo-ip6tnl-attrs'
>   Error decoding 'data' from 'linkinfo-attrs'
>   Error decoding 'linkinfo' from 'link-attrs'
>   Traceback (most recent call last):
>     File "/home/kicinski/linux/./tools/net/ynl/cli.py", line 119, in <module>
>       main()
>     File "/home/kicinski/linux/./tools/net/ynl/cli.py", line 100, in main
>       reply = ynl.dump(args.dump, attrs)
>     File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 1064, in dump
>       return self._op(method, vals, dump=True)
>     File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 1058, in _op
>       return self._ops(ops)[0]
>     File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 1045, in _ops
>       rsp_msg = self._decode(decoded.raw_attrs, op.attr_set.name)
>     File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 738, in _decode
>       subdict = self._decode(NlAttrs(attr.raw), attr_spec['nested-attributes'], search_attrs)
>     File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 763, in _decode
>       decoded = self._decode_sub_msg(attr, attr_spec, search_attrs)
>     File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 714, in _decode_sub_msg
>       subdict = self._decode(NlAttrs(attr.raw, offset), msg_format.attr_set)
>     File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 749, in _decode
>       decoded = attr.as_scalar(attr_spec['type'], attr_spec.byte_order)
>     File "/home/kicinski/linux/tools/net/ynl/lib/ynl.py", line 147, in as_scalar
>       return format.unpack(self.raw)[0]
>   struct.error: unpack requires a buffer of 2 bytes
>
> The Traceback is what we would previously see, the "Error..."
> messages are new. We print a message per level (in the stack
> order). Printing single combined message gets tricky quickly
> given sub-messages etc.
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Reviewed-by: Donald Hunter <donald.hunter@gmail.com>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 3/3] netlink: specs: rt_link: decode ip6tnl, vti and vti6 link attrs
  2025-01-05  1:25 ` [PATCH net-next 3/3] netlink: specs: rt_link: decode ip6tnl, vti and vti6 link attrs Jakub Kicinski
@ 2025-01-06 13:38   ` Donald Hunter
  0 siblings, 0 replies; 10+ messages in thread
From: Donald Hunter @ 2025-01-06 13:38 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: davem, netdev, edumazet, pabeni

Jakub Kicinski <kuba@kernel.org> writes:

> Some of our tests load vti and ip6tnl so not being able to decode
> the link attrs gets in the way of using Python YNL for testing.
>
> Decode link attributes for ip6tnl, vti and vti6.
>
> ip6tnl uses IFLA_IPTUN_FLAGS as u32, while ipv4 and sit expect
> a u16 attribute, so we have a (first?) subset type override...
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Reviewed-by: Donald Hunter <donald.hunter@gmail.com>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 1/3] tools: ynl: correctly handle overrides of fields in subset
  2025-01-06 13:27   ` Donald Hunter
@ 2025-01-06 15:36     ` Jakub Kicinski
  2025-01-06 17:33       ` Donald Hunter
  0 siblings, 1 reply; 10+ messages in thread
From: Jakub Kicinski @ 2025-01-06 15:36 UTC (permalink / raw)
  To: Donald Hunter; +Cc: davem, netdev, edumazet, pabeni

On Mon, 06 Jan 2025 13:27:49 +0000 Donald Hunter wrote:
> > We stated in documentation [1] and previous discussions [2]
> > that the need for overriding fields in members of subsets
> > is anticipated. Implement it.
> >
> > [1] https://docs.kernel.org/next/userspace-api/netlink/specs.html#subset-of
> > [2] https://lore.kernel.org/netdev/20231004171350.1f59cd1d@kernel.org/
> >
> > Signed-off-by: Jakub Kicinski <kuba@kernel.org>  
> 
> I guess we're okay with requiring Python >= 3.9 for combining
> dicts with |

Ah, I didn't realize. Does YNL work on older versions today?
I thought we already narrowed down to 3.9+. That may have
been tests not YNL itself.

The "oldest" OS I have is CentOS 9(-derived) and has 3.9,
so from my selfish perspective 3.9+ is perfectly fine :)

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 0/3] tools: ynl: decode link types present in tests
  2025-01-05  1:25 [PATCH net-next 0/3] tools: ynl: decode link types present in tests Jakub Kicinski
                   ` (2 preceding siblings ...)
  2025-01-05  1:25 ` [PATCH net-next 3/3] netlink: specs: rt_link: decode ip6tnl, vti and vti6 link attrs Jakub Kicinski
@ 2025-01-06 15:53 ` Stanislav Fomichev
  3 siblings, 0 replies; 10+ messages in thread
From: Stanislav Fomichev @ 2025-01-06 15:53 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: davem, donald.hunter, netdev, edumazet, pabeni

On 01/04, Jakub Kicinski wrote:
> Using a kernel built for the net selftest target to run drivers/net
> tests currently fails, because the net kernel automatically spawns
> a handful of tunnel devices which YNL can't decode.
> 
> Fill in those missing link types in rt_link. We need to extend subset
> support a bit for it to work.
> 
> Jakub Kicinski (3):
>   tools: ynl: correctly handle overrides of fields in subset
>   tools: ynl: print some information about attribute we can't parse
>   netlink: specs: rt_link: decode ip6tnl, vti and vti6 link attrs
> 
>  Documentation/netlink/specs/rt_link.yaml | 87 ++++++++++++++++++++++++
>  tools/net/ynl/lib/nlspec.py              |  5 +-
>  tools/net/ynl/lib/ynl.py                 | 72 +++++++++++---------
>  3 files changed, 129 insertions(+), 35 deletions(-)

I've seen similar issues with (builtin) ip6tnl in my VMs, thanks for
fixing!

Acked-by: Stanislav Fomichev <sdf@fomichev.me>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 1/3] tools: ynl: correctly handle overrides of fields in subset
  2025-01-06 15:36     ` Jakub Kicinski
@ 2025-01-06 17:33       ` Donald Hunter
  0 siblings, 0 replies; 10+ messages in thread
From: Donald Hunter @ 2025-01-06 17:33 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: davem, netdev, edumazet, pabeni

On Mon, 6 Jan 2025 at 15:36, Jakub Kicinski <kuba@kernel.org> wrote:
>
> On Mon, 06 Jan 2025 13:27:49 +0000 Donald Hunter wrote:
> > > We stated in documentation [1] and previous discussions [2]
> > > that the need for overriding fields in members of subsets
> > > is anticipated. Implement it.
> > >
> > > [1] https://docs.kernel.org/next/userspace-api/netlink/specs.html#subset-of
> > > [2] https://lore.kernel.org/netdev/20231004171350.1f59cd1d@kernel.org/
> > >
> > > Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> >
> > I guess we're okay with requiring Python >= 3.9 for combining
> > dicts with |
>
> Ah, I didn't realize. Does YNL work on older versions today?
> I thought we already narrowed down to 3.9+. That may have
> been tests not YNL itself.

You're right, we may already be committed to 3.9+

> The "oldest" OS I have is CentOS 9(-derived) and has 3.9,
> so from my selfish perspective 3.9+ is perfectly fine :)

To be fair, on a previous commit you mentioned that it affected CentOS
8 which EOLed back in May 2024 so we shouldn't feel compelled to
support it any more.

https://lore.kernel.org/all/20230524170712.2036128-1-kuba@kernel.org/

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2025-01-06 17:33 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-05  1:25 [PATCH net-next 0/3] tools: ynl: decode link types present in tests Jakub Kicinski
2025-01-05  1:25 ` [PATCH net-next 1/3] tools: ynl: correctly handle overrides of fields in subset Jakub Kicinski
2025-01-06 13:27   ` Donald Hunter
2025-01-06 15:36     ` Jakub Kicinski
2025-01-06 17:33       ` Donald Hunter
2025-01-05  1:25 ` [PATCH net-next 2/3] tools: ynl: print some information about attribute we can't parse Jakub Kicinski
2025-01-06 13:30   ` Donald Hunter
2025-01-05  1:25 ` [PATCH net-next 3/3] netlink: specs: rt_link: decode ip6tnl, vti and vti6 link attrs Jakub Kicinski
2025-01-06 13:38   ` Donald Hunter
2025-01-06 15:53 ` [PATCH net-next 0/3] tools: ynl: decode link types present in tests Stanislav Fomichev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).