Thread (44 messages) 44 messages, 10 authors, 2022-09-28

Re: [RFC net-next 2/4] ynl: add the schema for the schemas

From: Johannes Berg <johannes@sipsolutions.net>
Date: 2022-08-16 19:31:15
Also in: linux-doc

On Tue, 2022-08-16 at 08:53 -0700, Jakub Kicinski wrote:
My guess was that some of the wrapping was for ease of canceling here
(cancel is used both on skip and on error). 
Not sure I'd say that, but can't say I really remember why I did it this
way.
What I think we should push
for is multi-attr, so the same attribute happens multiple times.

[msg]
 [ATTR1]
 [ATTR2] // elem 1
   [SubATTR1]
   [SubATTR2]
 [ATTR2] // elem 2
   [SubATTR1]
   [SubATTR2]
 [ATTR2] // elem 3
   [SubATTR1]
   [SubATTR2]
 [ATTR3]
 [ATTR4]

Instead of wrapping into an array and then elements.
Hmm, ok, I guess that works.
As Michal pointed out a number of times - the wrapping ends up limiting 
the size of the array to U16_MAX,
True.
and I have a suspicion that most of
wrapping is done because we tend to parse into a pointer array, which
makes multi-attr a little tricky. But we shouldn't let one parsing
technique in a relatively uncommon language like C dictate the format :)
:-)

To be fair, for cases where today we use nla_for_each_nested() we could
also invent an "nlmsg_for_each_attr_of_type()" macro:

#define nlmsg_for_each_attr_of_type(type, pos, nlh, hdrlen, rem) \
	nlmsg_for_each_attr(pos, nlh, hdrlen, rem)               \
		if (pos->nla_type == type)

and then that's basically all you need?

In the policy we'd declare it as a normal nested (not array), and I
think that's it because today if you give the same attribute type twice,
the last one wins in the normal parsing anyway (IIRC)...
I'm leaning heavily towards defining a subset of the YAML spec as 
"the way to do things in new family" which will allow only one form 
of arrays.
Fair enough.

johannes
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help