Re: [PATCH net-next 10/11] tools: ynl: decode hex input
Sabrina Dubroca <[email protected]> Tue, 9 Sep 2025 20:10:02 +0200
| Newsgroups | com.zx2c4.lists.wireguard,org.kernel.vger.linux-kernel,org.kernel.vger.netdev |
|---|---|
| Message-ID | <aMBteqR5KP9KGcc3@krikkit> |
2025-09-04, 22:01:33 +0000, Asbjørn Sloth Tønnesen wrote:
> This patch add support for decoding hex input, so
> that binary attributes can be read through --json.
>
> Example (using future wireguard.yaml):
> $ sudo ./tools/net/ynl/pyynl/cli.py --family wireguard \
> --do set-device --json '{"ifindex":3,
> "private-key":"2a ae 6c 35 c9 4f cf <... to 32 bytes>"}'
>
> Signed-off-by: Asbjørn Sloth Tønnesen <[email protected]>
> ---
> tools/net/ynl/pyynl/lib/ynl.py | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/tools/net/ynl/pyynl/lib/ynl.py b/tools/net/ynl/pyynl/lib/ynl.py
> index a37294a751da..78c0245ca587 100644
> --- a/tools/net/ynl/pyynl/lib/ynl.py
> +++ b/tools/net/ynl/pyynl/lib/ynl.py
> @@ -973,6 +973,8 @@ class YnlFamily(SpecFamily):
> raw = ip.packed
> else:
> raw = int(ip)
> + elif attr_spec.display_hint == 'hex':
> + raw = bytes.fromhex(string)
I'm working on a spec for macsec and ended up with a similar change,
but doing instead:
+ elif attr_spec.display_hint == 'hex':
+ raw = int(string, 16)
since the destination attribute is u32/u64 and not binary for macsec.
So maybe this should be:
+ if attr_spec['type'] == 'binary':
+ raw = bytes.fromhex(string)
+ else:
+ raw = int(string, 16)
to cover both cases?
I think it matches better what's already in _formatted_string.
(I don't mind having the current patch go in and making this change
together with the macsec spec when it's ready)
> else:
> raise Exception(f"Display hint '{attr_spec.display_hint}' not implemented"
> f" when parsing '{attr_spec['name']}'")
> --
> 2.51.0
>
>
--
Sabrina