Commit 1b255e1b authored by Asbjørn Sloth Tønnesen's avatar Asbjørn Sloth Tønnesen Committed by Jakub Kicinski
Browse files

tools: ynl: add ipv4-or-v6 display hint



The attribute WGALLOWEDIP_A_IPADDR can contain either an IPv4
or an IPv6 address depending on WGALLOWEDIP_A_FAMILY, however
in practice it is enough to look at the attribute length.

This patch implements an ipv4-or-v6 display hint, that can
deal with this kind of attribute.

It only implements this display hint for genetlink-legacy, it
can be added to other protocol variants if needed, but we don't
want to encourage it's use.

Signed-off-by: default avatarAsbjørn Sloth Tønnesen <ast@fiberby.net>
Reviewed-by: default avatarDonald Hunter <donald.hunter@gmail.com>
Link: https://patch.msgid.link/20250915144301.725949-12-ast@fiberby.net


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 52550d51
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -154,7 +154,7 @@ properties:
                  Optional format indicator that is intended only for choosing
                  the right formatting mechanism when displaying values of this
                  type.
                enum: [ hex, mac, fddi, ipv4, ipv6, uuid ]
                enum: [ hex, mac, fddi, ipv4, ipv6, ipv4-or-v6, uuid ]
              struct:
                description: Name of the nested struct type.
                type: string
+2 −2
Original line number Diff line number Diff line
@@ -956,7 +956,7 @@ class YnlFamily(SpecFamily):
                formatted = hex(raw)
            else:
                formatted = bytes.hex(raw, ' ')
        elif display_hint in [ 'ipv4', 'ipv6' ]:
        elif display_hint in [ 'ipv4', 'ipv6', 'ipv4-or-v6' ]:
            formatted = format(ipaddress.ip_address(raw))
        elif display_hint == 'uuid':
            formatted = str(uuid.UUID(bytes=raw))
@@ -965,7 +965,7 @@ class YnlFamily(SpecFamily):
        return formatted

    def _from_string(self, string, attr_spec):
        if attr_spec.display_hint in ['ipv4', 'ipv6']:
        if attr_spec.display_hint in ['ipv4', 'ipv6', 'ipv4-or-v6']:
            ip = ipaddress.ip_address(string)
            if attr_spec['type'] == 'binary':
                raw = ip.packed