netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 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).