Re: [RFC net-next 2/4] ynl: add the schema for the schemas
From: Johannes Berg <johannes@sipsolutions.net>
Date: 2022-08-16 09:06:41
Also in:
linux-doc
On Mon, 2022-08-15 at 17:47 -0700, Jakub Kicinski wrote:
On Mon, 15 Aug 2022 22:09:11 +0200 Johannes Berg wrote:quoted
On Wed, 2022-08-10 at 19:23 -0700, Jakub Kicinski wrote:quoted
+ attributes: + description: List of attributes in the space. + type: array + items: + type: object + required: [ name, type ] + additionalProperties: False + properties: + name: + type: string + type: &attr-type + enum: [ unused, flag, binary, u8, u16, u32, u64, s32, s64, + nul-string, multi-attr, nest, array-nest, nest-type-value ]nest-type-value?It's the incredibly inventive nesting format used in genetlink policy dumps where the type of the sub-attr(s there are actually two levels) carry a value (index of the policy and attribute) rather than denoting a type :S :S :S
Hmm, OK, in the policy dump (not specific to genetlink, btw, can be used
for any policy, but is only generically hooked up for genetlink), we
have
[policy_idx] = {
[attr_idx] = {
[NL_POLICY_TYPE_ATTR_...] = ...
}
}
Is that what you mean?
I guess I never really thought about this format much from a description
POV, no need to have a policy since you simply iterate (for_each_attr)
when reading it, and don't really need to care about the attribute
index, at least.
For future reference, how would you suggest to have done this instead?
quoted
quoted
+ description: + description: Documentation of the attribute. + type: string + type-value: + description: Name of the value extracted from the type of a nest-type-value attribute. + type: array + items: + type: string + len: + oneOf: [ { type: string }, { type: integer }] + sub-type: *attr-type + nested-attributes: + description: Name of the space (sub-space) used inside the attribute. + type: stringMaybe expand that description a bit, it's not really accurate for "array-nest"?Slightly guessing but I think I know what you mean -> the value of the array is a nest with index as the type and then inside that is the entry of the array with its attributes <- and that's where the space is applied, not at the first nest level?
Right.
Right, I should probably put that in the docs rather than the schema, array-nests are expected to strip one layer of nesting and put the value taken from the type (:D) into an @idx member of the struct representing the values of the array. Or at least that's what I do in the C codegen.
Well mostly you're not supposed to care about the 'value'/'type', I guess?
Not that any of these beautiful, precious formats should be encouraged going forward. multi-attr all the way!
multi-attr?
quoted
Do you mean the "name of the enumeration" or the "name of the enumeration constant"? (per C99 concepts) I'm a bit confused? I guess you mean the "name of the enumeration constant" though I agree most people probably don't know the names from C99 (I had to look them up too for the sake of being precise here ...)I meant the type. I think. When u32 carries values of an enum. Enumeration constant for the attribute type is constructed from it's name and the prefix/suffix kludge.
Indeed, I confused myself too ... johannes