* How to display IPv4 array?
@ 2024-03-12 10:08 Hangbin Liu
2024-03-12 12:12 ` Jiri Pirko
0 siblings, 1 reply; 7+ messages in thread
From: Hangbin Liu @ 2024-03-12 10:08 UTC (permalink / raw)
To: Jakub Kicinski; +Cc: Donald Hunter, netdev
Hi Jakub,
I plan to add bond support for Documentation/netlink/specs/rt_link.yaml. While
dealing with the attrs. I got a problem about how to show the bonding arp/ns
targets. Because the arp/ns targets are filled as an array[1]. I tried
something like:
-
name: linkinfo-bond-attrs
name-prefix: ifla-bond-
attributes:
-
name: arp-ip-target
type: nest
nested-attributes: ipv4-addr
-
name: ipv4-addr
attributes:
-
name: addr
type: binary
display-hint: ipv4
But this failed with error: Exception: Space 'ipv4-addr' has no attribute with value '0'
Do you have any suggestion?
[1] https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/tree/drivers/net/bonding/bond_netlink.c#n670
Thanks
Hangbin
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: How to display IPv4 array?
2024-03-12 10:08 How to display IPv4 array? Hangbin Liu
@ 2024-03-12 12:12 ` Jiri Pirko
2024-03-12 12:37 ` Hangbin Liu
2024-03-12 16:04 ` Donald Hunter
0 siblings, 2 replies; 7+ messages in thread
From: Jiri Pirko @ 2024-03-12 12:12 UTC (permalink / raw)
To: Hangbin Liu; +Cc: Jakub Kicinski, Donald Hunter, netdev
Tue, Mar 12, 2024 at 11:08:33AM CET, liuhangbin@gmail.com wrote:
>Hi Jakub,
>
>I plan to add bond support for Documentation/netlink/specs/rt_link.yaml. While
>dealing with the attrs. I got a problem about how to show the bonding arp/ns
>targets. Because the arp/ns targets are filled as an array[1]. I tried
>something like:
>
> -
> name: linkinfo-bond-attrs
> name-prefix: ifla-bond-
> attributes:
> -
> name: arp-ip-target
> type: nest
> nested-attributes: ipv4-addr
> -
> name: ipv4-addr
> attributes:
> -
> name: addr
> type: binary
> display-hint: ipv4
>
>But this failed with error: Exception: Space 'ipv4-addr' has no attribute with value '0'
>Do you have any suggestion?
>
>[1] https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/tree/drivers/net/bonding/bond_netlink.c#n670
Yeah, that's odd use of attr type, here it is an array index. I'm pretty
sure I saw this in the past on different netlink places.
I believe that is not supported with the existing ynl code.
Perhaps something like the following might work:
-
name: arp-ip-target
type: binary
display-hint: ipv4
nested-array: true
"nested-array" would tell the parser to expect a nest that has attr
type of value of array index, "type" is the same for all array members.
The output will be the same as in case of "multi-attr", array index
ignored (I don't see what it would be good for to the user).
Other existing attrs considered:
"nested-attributes" does not make much sense for this usecase IMO as the
attr type is array index, the mapping fails.
"multi-attr" also counts with valid attr type and no nest.
Makes sense?
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: How to display IPv4 array?
2024-03-12 12:12 ` Jiri Pirko
@ 2024-03-12 12:37 ` Hangbin Liu
2024-03-12 12:48 ` Jiri Pirko
2024-03-12 16:04 ` Donald Hunter
1 sibling, 1 reply; 7+ messages in thread
From: Hangbin Liu @ 2024-03-12 12:37 UTC (permalink / raw)
To: Jiri Pirko; +Cc: Jakub Kicinski, Donald Hunter, netdev
Hi Jiri,
On Tue, Mar 12, 2024 at 01:12:30PM +0100, Jiri Pirko wrote:
> Tue, Mar 12, 2024 at 11:08:33AM CET, liuhangbin@gmail.com wrote:
> >Hi Jakub,
> >
> >I plan to add bond support for Documentation/netlink/specs/rt_link.yaml. While
> >dealing with the attrs. I got a problem about how to show the bonding arp/ns
> >targets. Because the arp/ns targets are filled as an array[1]. I tried
> >something like:
> >
> > -
> > name: linkinfo-bond-attrs
> > name-prefix: ifla-bond-
> > attributes:
> > -
> > name: arp-ip-target
> > type: nest
> > nested-attributes: ipv4-addr
> > -
> > name: ipv4-addr
> > attributes:
> > -
> > name: addr
> > type: binary
> > display-hint: ipv4
> >
> >But this failed with error: Exception: Space 'ipv4-addr' has no attribute with value '0'
> >Do you have any suggestion?
> >
> >[1] https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/tree/drivers/net/bonding/bond_netlink.c#n670
>
> Yeah, that's odd use of attr type, here it is an array index. I'm pretty
> sure I saw this in the past on different netlink places.
> I believe that is not supported with the existing ynl code.
>
> Perhaps something like the following might work:
> -
> name: arp-ip-target
> type: binary
> display-hint: ipv4
> nested-array: true
>
> "nested-array" would tell the parser to expect a nest that has attr
> type of value of array index, "type" is the same for all array members.
> The output will be the same as in case of "multi-attr", array index
> ignored (I don't see what it would be good for to the user).
Yes, this looks a do-able way. Although we already have a similar type
'array-nest'...
I also figured out a workaround. e.g.
-
name: linkinfo-bond-attrs
name-prefix: ifla-bond-
attributes:
-
name: arp-ip-target
type: nest
nested-attributes: ipv4-addr
-
name: ipv4-addr
attributes:
-
name: addr0
value: 0
type: u32
byte-order: big-endian
display-hint: ipv4
-
name: addr1
value: 1
type: u32
byte-order: big-endian
display-hint: ipv4
With this we can show the target like:
'arp-ip-target': {'addr0': '192.168.1.1',
'addr1': '192.168.1.2'},
But we need to add all BOND_MAX_ARP_TARGETS attrs. Which doesn't like a good
way. So maybe as you suggested, add a new type "nested-array".
Thanks
Hangbin
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: How to display IPv4 array?
2024-03-12 12:37 ` Hangbin Liu
@ 2024-03-12 12:48 ` Jiri Pirko
0 siblings, 0 replies; 7+ messages in thread
From: Jiri Pirko @ 2024-03-12 12:48 UTC (permalink / raw)
To: Hangbin Liu; +Cc: Jakub Kicinski, Donald Hunter, netdev
Tue, Mar 12, 2024 at 01:37:01PM CET, liuhangbin@gmail.com wrote:
>Hi Jiri,
>On Tue, Mar 12, 2024 at 01:12:30PM +0100, Jiri Pirko wrote:
>> Tue, Mar 12, 2024 at 11:08:33AM CET, liuhangbin@gmail.com wrote:
>> >Hi Jakub,
>> >
>> >I plan to add bond support for Documentation/netlink/specs/rt_link.yaml. While
>> >dealing with the attrs. I got a problem about how to show the bonding arp/ns
>> >targets. Because the arp/ns targets are filled as an array[1]. I tried
>> >something like:
>> >
>> > -
>> > name: linkinfo-bond-attrs
>> > name-prefix: ifla-bond-
>> > attributes:
>> > -
>> > name: arp-ip-target
>> > type: nest
>> > nested-attributes: ipv4-addr
>> > -
>> > name: ipv4-addr
>> > attributes:
>> > -
>> > name: addr
>> > type: binary
>> > display-hint: ipv4
>> >
>> >But this failed with error: Exception: Space 'ipv4-addr' has no attribute with value '0'
>> >Do you have any suggestion?
>> >
>> >[1] https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/tree/drivers/net/bonding/bond_netlink.c#n670
>>
>> Yeah, that's odd use of attr type, here it is an array index. I'm pretty
>> sure I saw this in the past on different netlink places.
>> I believe that is not supported with the existing ynl code.
>>
>> Perhaps something like the following might work:
>> -
>> name: arp-ip-target
>> type: binary
>> display-hint: ipv4
>> nested-array: true
>>
>> "nested-array" would tell the parser to expect a nest that has attr
>> type of value of array index, "type" is the same for all array members.
>> The output will be the same as in case of "multi-attr", array index
>> ignored (I don't see what it would be good for to the user).
>
>Yes, this looks a do-able way. Although we already have a similar type
>'array-nest'...
That is something else. That is you have a nested attribute that holds
multiple nests of the same attr type with attributes inside. Something
completely different from what I see...
>
>I also figured out a workaround. e.g.
>
> -
> name: linkinfo-bond-attrs
> name-prefix: ifla-bond-
> attributes:
> -
> name: arp-ip-target
> type: nest
> nested-attributes: ipv4-addr
>
> -
> name: ipv4-addr
> attributes:
> -
> name: addr0
> value: 0
> type: u32
> byte-order: big-endian
> display-hint: ipv4
> -
> name: addr1
> value: 1
> type: u32
> byte-order: big-endian
> display-hint: ipv4
Or, special value "any" or "all" that would match them all?
>
>With this we can show the target like:
>
> 'arp-ip-target': {'addr0': '192.168.1.1',
> 'addr1': '192.168.1.2'},
>
>But we need to add all BOND_MAX_ARP_TARGETS attrs. Which doesn't like a good
>way. So maybe as you suggested, add a new type "nested-array".
>
>Thanks
>Hangbin
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: How to display IPv4 array?
2024-03-12 12:12 ` Jiri Pirko
2024-03-12 12:37 ` Hangbin Liu
@ 2024-03-12 16:04 ` Donald Hunter
2024-03-12 17:01 ` Jakub Kicinski
1 sibling, 1 reply; 7+ messages in thread
From: Donald Hunter @ 2024-03-12 16:04 UTC (permalink / raw)
To: Jiri Pirko; +Cc: Hangbin Liu, Jakub Kicinski, netdev
On Tue, 12 Mar 2024 at 12:12, Jiri Pirko <jiri@resnulli.us> wrote:
>
> Tue, Mar 12, 2024 at 11:08:33AM CET, liuhangbin@gmail.com wrote:
> >Hi Jakub,
> >
> >I plan to add bond support for Documentation/netlink/specs/rt_link.yaml. While
> >dealing with the attrs. I got a problem about how to show the bonding arp/ns
> >targets. Because the arp/ns targets are filled as an array[1]. I tried
> >something like:
> >
> > -
> > name: linkinfo-bond-attrs
> > name-prefix: ifla-bond-
> > attributes:
> > -
> > name: arp-ip-target
> > type: nest
> > nested-attributes: ipv4-addr
> > -
> > name: ipv4-addr
> > attributes:
> > -
> > name: addr
> > type: binary
> > display-hint: ipv4
> >
> >But this failed with error: Exception: Space 'ipv4-addr' has no attribute with value '0'
> >Do you have any suggestion?
> >
> >[1] https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/tree/drivers/net/bonding/bond_netlink.c#n670
>
> Yeah, that's odd use of attr type, here it is an array index. I'm pretty
> sure I saw this in the past on different netlink places.
> I believe that is not supported with the existing ynl code.
>
> Perhaps something like the following might work:
> -
> name: arp-ip-target
> type: binary
> display-hint: ipv4
> nested-array: true
>
> "nested-array" would tell the parser to expect a nest that has attr
> type of value of array index, "type" is the same for all array members.
> The output will be the same as in case of "multi-attr", array index
> ignored (I don't see what it would be good for to the user).
I'd say that this construct looks more like nest-type-value, except
that it contains a value rather than a set of nested attributes. It is
documented here:
https://docs.kernel.org/userspace-api/netlink/genetlink-legacy.html#type-value
You can see an example of nest-type-value in the nlctrl.yaml in net-next:
-
name: policy
type: nest-type-value
type-value: [ policy-id, attr-id ]
nested-attributes: policy-attrs
It has one or more indices that are stored as nest keys, followed by a
set of nested attributes. Perhaps this could be extended to support an
attribute instead of the nested-attributes ?
> Other existing attrs considered:
>
> "nested-attributes" does not make much sense for this usecase IMO as the
> attr type is array index, the mapping fails.
>
> "multi-attr" also counts with valid attr type and no nest.
>
> Makes sense?
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: How to display IPv4 array?
2024-03-12 16:04 ` Donald Hunter
@ 2024-03-12 17:01 ` Jakub Kicinski
2024-03-13 2:51 ` Hangbin Liu
0 siblings, 1 reply; 7+ messages in thread
From: Jakub Kicinski @ 2024-03-12 17:01 UTC (permalink / raw)
To: Donald Hunter, Jiri Pirko; +Cc: Hangbin Liu, netdev
On Tue, 12 Mar 2024 16:04:56 +0000 Donald Hunter wrote:
> > "nested-array" would tell the parser to expect a nest that has attr
> > type of value of array index, "type" is the same for all array members.
> > The output will be the same as in case of "multi-attr", array index
> > ignored (I don't see what it would be good for to the user).
>
> I'd say that this construct looks more like nest-type-value
type-value is sort of a decomposed array, if we have all the entries
under one nest I reckon array extension may be more appropriate.
My gut feeling is that we should generalize the array-nest type,
when I wrote the initial spec we didn't have sub-type. How about
we replace array-nest with indexed-array (good name TBD), and instead
of assuming the value is always a nest pass the type via sub-type?
For bonding probably something like:
-
name: linkinfo-bond-attrs
name-prefix: ifla-bond-
attributes:
-
name: arp-ip-target
type: indexed-array
sub-type: u32
byte-order: big-endian
how does that sound?
exiting array-nests would change from:
-
name: bla
type: array-nest
nested-attributes: bla-attrs
to
-
name: bla
type: indexed-array
sub-type: nest
nested-attributes: bla-attrs
But that'd mean updating all existing specs and codegen.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: How to display IPv4 array?
2024-03-12 17:01 ` Jakub Kicinski
@ 2024-03-13 2:51 ` Hangbin Liu
0 siblings, 0 replies; 7+ messages in thread
From: Hangbin Liu @ 2024-03-13 2:51 UTC (permalink / raw)
To: Jakub Kicinski; +Cc: Donald Hunter, Jiri Pirko, netdev
On Tue, Mar 12, 2024 at 10:01:05AM -0700, Jakub Kicinski wrote:
> On Tue, 12 Mar 2024 16:04:56 +0000 Donald Hunter wrote:
> > > "nested-array" would tell the parser to expect a nest that has attr
> > > type of value of array index, "type" is the same for all array members.
> > > The output will be the same as in case of "multi-attr", array index
> > > ignored (I don't see what it would be good for to the user).
> >
> > I'd say that this construct looks more like nest-type-value
>
> type-value is sort of a decomposed array, if we have all the entries
> under one nest I reckon array extension may be more appropriate.
>
> My gut feeling is that we should generalize the array-nest type,
> when I wrote the initial spec we didn't have sub-type. How about
> we replace array-nest with indexed-array (good name TBD), and instead
> of assuming the value is always a nest pass the type via sub-type?
>
> For bonding probably something like:
>
> -
> name: linkinfo-bond-attrs
> name-prefix: ifla-bond-
> attributes:
> -
> name: arp-ip-target
> type: indexed-array
> sub-type: u32
> byte-order: big-endian
>
> how does that sound?
>
> exiting array-nests would change from:
>
> -
> name: bla
> type: array-nest
> nested-attributes: bla-attrs
>
> to
>
> -
> name: bla
> type: indexed-array
> sub-type: nest
> nested-attributes: bla-attrs
>
> But that'd mean updating all existing specs and codegen.
This looks good to me.
Thanks
Hangbin
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-03-13 2:51 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-12 10:08 How to display IPv4 array? Hangbin Liu
2024-03-12 12:12 ` Jiri Pirko
2024-03-12 12:37 ` Hangbin Liu
2024-03-12 12:48 ` Jiri Pirko
2024-03-12 16:04 ` Donald Hunter
2024-03-12 17:01 ` Jakub Kicinski
2024-03-13 2:51 ` Hangbin Liu
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).