Loading...
Note: File does not exist in v4.17.
1# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
2%YAML 1.2
3---
4$id: http://kernel.org/schemas/netlink/genetlink-legacy.yaml#
5$schema: https://json-schema.org/draft-07/schema
6
7# Common defines
8$defs:
9 uint:
10 type: integer
11 minimum: 0
12 len-or-define:
13 type: [ string, integer ]
14 pattern: ^[0-9A-Za-z_-]+( - 1)?$
15 minimum: 0
16 len-or-limit:
17 # literal int or limit based on fixed-width type e.g. u8-min, u16-max, etc.
18 type: [ string, integer ]
19 pattern: ^[su](8|16|32|64)-(min|max)$
20 minimum: 0
21
22# Schema for specs
23title: Protocol
24description: Specification of a genetlink protocol
25type: object
26required: [ name, doc, attribute-sets, operations ]
27additionalProperties: False
28properties:
29 name:
30 description: Name of the genetlink family.
31 type: string
32 doc:
33 type: string
34 protocol:
35 description: Schema compatibility level. Default is "genetlink".
36 enum: [ genetlink, genetlink-c, genetlink-legacy ] # Trim
37 uapi-header:
38 description: Path to the uAPI header, default is linux/${family-name}.h
39 type: string
40 # Start genetlink-c
41 c-family-name:
42 description: Name of the define for the family name.
43 type: string
44 c-version-name:
45 description: Name of the define for the version of the family.
46 type: string
47 max-by-define:
48 description: Makes the number of attributes and commands be specified by a define, not an enum value.
49 type: boolean
50 cmd-max-name:
51 description: Name of the define for the last operation in the list.
52 type: string
53 cmd-cnt-name:
54 description: The explicit name for constant holding the count of operations (last operation + 1).
55 type: string
56 # End genetlink-c
57 # Start genetlink-legacy
58 kernel-policy:
59 description: |
60 Defines if the input policy in the kernel is global, per-operation, or split per operation type.
61 Default is split.
62 enum: [ split, per-op, global ]
63 version:
64 description: Generic Netlink family version. Default is 1.
65 type: integer
66 minimum: 1
67 # End genetlink-legacy
68
69 definitions:
70 description: List of type and constant definitions (enums, flags, defines).
71 type: array
72 items:
73 type: object
74 required: [ type, name ]
75 additionalProperties: False
76 properties:
77 name:
78 type: string
79 header:
80 description: For C-compatible languages, header which already defines this value.
81 type: string
82 type:
83 enum: [ const, enum, flags, struct ] # Trim
84 doc:
85 type: string
86 # For const
87 value:
88 description: For const - the value.
89 type: [ string, integer ]
90 # For enum and flags
91 value-start:
92 description: For enum or flags the literal initializer for the first value.
93 type: [ string, integer ]
94 entries:
95 description: For enum or flags array of values.
96 type: array
97 items:
98 oneOf:
99 - type: string
100 - type: object
101 required: [ name ]
102 additionalProperties: False
103 properties:
104 name:
105 type: string
106 value:
107 type: integer
108 doc:
109 type: string
110 render-max:
111 description: Render the max members for this enum.
112 type: boolean
113 # Start genetlink-c
114 enum-name:
115 description: Name for enum, if empty no name will be used.
116 type: [ string, "null" ]
117 name-prefix:
118 description: For enum the prefix of the values, optional.
119 type: string
120 # End genetlink-c
121 # Start genetlink-legacy
122 members:
123 description: List of struct members. Only scalars and strings members allowed.
124 type: array
125 items:
126 type: object
127 required: [ name, type ]
128 additionalProperties: False
129 properties:
130 name:
131 type: string
132 type:
133 description: The netlink attribute type
134 enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string, binary ]
135 len:
136 $ref: '#/$defs/len-or-define'
137 byte-order:
138 enum: [ little-endian, big-endian ]
139 doc:
140 description: Documentation for the struct member attribute.
141 type: string
142 enum:
143 description: Name of the enum type used for the attribute.
144 type: string
145 display-hint: &display-hint
146 description: |
147 Optional format indicator that is intended only for choosing
148 the right formatting mechanism when displaying values of this
149 type.
150 enum: [ hex, mac, fddi, ipv4, ipv6, uuid ]
151 # End genetlink-legacy
152
153 attribute-sets:
154 description: Definition of attribute spaces for this family.
155 type: array
156 items:
157 description: Definition of a single attribute space.
158 type: object
159 required: [ name, attributes ]
160 additionalProperties: False
161 properties:
162 name:
163 description: |
164 Name used when referring to this space in other definitions, not used outside of the spec.
165 type: string
166 name-prefix:
167 description: |
168 Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-
169 type: string
170 enum-name:
171 description: |
172 Name for the enum type of the attribute, if empty no name will be used.
173 type: [ string, "null" ]
174 doc:
175 description: Documentation of the space.
176 type: string
177 subset-of:
178 description: |
179 Name of another space which this is a logical part of. Sub-spaces can be used to define
180 a limited group of attributes which are used in a nest.
181 type: string
182 # Start genetlink-c
183 attr-cnt-name:
184 description: The explicit name for constant holding the count of attributes (last attr + 1).
185 type: string
186 attr-max-name:
187 description: The explicit name for last member of attribute enum.
188 type: string
189 # End genetlink-c
190 attributes:
191 description: List of attributes in the space.
192 type: array
193 items:
194 type: object
195 required: [ name ]
196 additionalProperties: False
197 properties:
198 name:
199 type: string
200 type: &attr-type
201 description: The netlink attribute type
202 enum: [ unused, pad, flag, binary, bitfield32,
203 uint, sint, u8, u16, u32, u64, s32, s64,
204 string, nest, indexed-array, nest-type-value ]
205 doc:
206 description: Documentation of the attribute.
207 type: string
208 value:
209 description: Value for the enum item representing this attribute in the uAPI.
210 $ref: '#/$defs/uint'
211 type-value:
212 description: Name of the value extracted from the type of a nest-type-value attribute.
213 type: array
214 items:
215 type: string
216 byte-order:
217 enum: [ little-endian, big-endian ]
218 multi-attr:
219 type: boolean
220 nested-attributes:
221 description: Name of the space (sub-space) used inside the attribute.
222 type: string
223 enum:
224 description: Name of the enum type used for the attribute.
225 type: string
226 enum-as-flags:
227 description: |
228 Treat the enum as flags. In most cases enum is either used as flags or as values.
229 Sometimes, however, both forms are necessary, in which case header contains the enum
230 form while specific attributes may request to convert the values into a bitfield.
231 type: boolean
232 checks:
233 description: Kernel input validation.
234 type: object
235 additionalProperties: False
236 properties:
237 flags-mask:
238 description: Name of the flags constant on which to base mask (unsigned scalar types only).
239 type: string
240 min:
241 description: Min value for an integer attribute.
242 $ref: '#/$defs/len-or-limit'
243 max:
244 description: Max value for an integer attribute.
245 $ref: '#/$defs/len-or-limit'
246 min-len:
247 description: Min length for a binary attribute.
248 $ref: '#/$defs/len-or-define'
249 max-len:
250 description: Max length for a string or a binary attribute.
251 $ref: '#/$defs/len-or-define'
252 exact-len:
253 description: Exact length for a string or a binary attribute.
254 $ref: '#/$defs/len-or-define'
255 unterminated-ok:
256 description: |
257 For string attributes, do not check whether attribute
258 contains the terminating null character.
259 type: boolean
260 sub-type: *attr-type
261 display-hint: *display-hint
262 # Start genetlink-c
263 name-prefix:
264 type: string
265 # End genetlink-c
266 # Start genetlink-legacy
267 struct:
268 description: Name of the struct type used for the attribute.
269 type: string
270 # End genetlink-legacy
271
272 # Make sure name-prefix does not appear in subsets (subsets inherit naming)
273 dependencies:
274 name-prefix:
275 not:
276 required: [ subset-of ]
277 subset-of:
278 not:
279 required: [ name-prefix ]
280
281 # type property is only required if not in subset definition
282 if:
283 properties:
284 subset-of:
285 not:
286 type: string
287 then:
288 properties:
289 attributes:
290 items:
291 required: [ type ]
292
293 operations:
294 description: Operations supported by the protocol.
295 type: object
296 required: [ list ]
297 additionalProperties: False
298 properties:
299 enum-model:
300 description: |
301 The model of assigning values to the operations.
302 "unified" is the recommended model where all message types belong
303 to a single enum.
304 "directional" has the messages sent to the kernel and from the kernel
305 enumerated separately.
306 enum: [ unified, directional ] # Trim
307 name-prefix:
308 description: |
309 Prefix for the C enum name of the command. The name is formed by concatenating
310 the prefix with the upper case name of the command, with dashes replaced by underscores.
311 type: string
312 enum-name:
313 description: |
314 Name for the enum type with commands, if empty no name will be used.
315 type: [ string, "null" ]
316 async-prefix:
317 description: Same as name-prefix but used to render notifications and events to separate enum.
318 type: string
319 async-enum:
320 description: |
321 Name for the enum type with commands, if empty no name will be used.
322 type: [ string, "null" ]
323 # Start genetlink-legacy
324 fixed-header: &fixed-header
325 description: |
326 Name of the structure defining the optional fixed-length protocol
327 header. This header is placed in a message after the netlink and
328 genetlink headers and before any attributes.
329 type: string
330 # End genetlink-legacy
331 list:
332 description: List of commands
333 type: array
334 items:
335 type: object
336 additionalProperties: False
337 required: [ name, doc ]
338 properties:
339 name:
340 description: Name of the operation, also defining its C enum value in uAPI.
341 type: string
342 doc:
343 description: Documentation for the command.
344 type: string
345 value:
346 description: Value for the enum in the uAPI.
347 $ref: '#/$defs/uint'
348 attribute-set:
349 description: |
350 Attribute space from which attributes directly in the requests and replies
351 to this command are defined.
352 type: string
353 flags: &cmd_flags
354 description: Command flags.
355 type: array
356 items:
357 enum: [ admin-perm, uns-admin-perm ]
358 dont-validate:
359 description: Kernel attribute validation flags.
360 type: array
361 items:
362 enum: [ strict, dump, dump-strict ]
363 config-cond:
364 description: |
365 Name of the kernel config option gating the presence of
366 the operation, without the 'CONFIG_' prefix.
367 type: string
368 # Start genetlink-legacy
369 fixed-header: *fixed-header
370 # End genetlink-legacy
371 do: &subop-type
372 description: Main command handler.
373 type: object
374 additionalProperties: False
375 properties:
376 request: &subop-attr-list
377 description: Definition of the request message for a given command.
378 type: object
379 additionalProperties: False
380 properties:
381 attributes:
382 description: |
383 Names of attributes from the attribute-set (not full attribute
384 definitions, just names).
385 type: array
386 items:
387 type: string
388 # Start genetlink-legacy
389 value:
390 description: |
391 ID of this message if value for request and response differ,
392 i.e. requests and responses have different message enums.
393 $ref: '#/$defs/uint'
394 # End genetlink-legacy
395 reply: *subop-attr-list
396 pre:
397 description: Hook for a function to run before the main callback (pre_doit or start).
398 type: string
399 post:
400 description: Hook for a function to run after the main callback (post_doit or done).
401 type: string
402 dump: *subop-type
403 notify:
404 description: Name of the command sharing the reply type with this notification.
405 type: string
406 event:
407 type: object
408 additionalProperties: False
409 properties:
410 attributes:
411 description: Explicit list of the attributes for the notification.
412 type: array
413 items:
414 type: string
415 mcgrp:
416 description: Name of the multicast group generating given notification.
417 type: string
418 mcast-groups:
419 description: List of multicast groups.
420 type: object
421 required: [ list ]
422 additionalProperties: False
423 properties:
424 list:
425 description: List of groups.
426 type: array
427 items:
428 type: object
429 required: [ name ]
430 additionalProperties: False
431 properties:
432 name:
433 description: |
434 The name for the group, used to form the define and the value of the define.
435 type: string
436 # Start genetlink-c
437 c-define-name:
438 description: Override for the name of the define in C uAPI.
439 type: string
440 # End genetlink-c
441 flags: *cmd_flags
442
443 kernel-family:
444 description: Additional global attributes used for kernel C code generation.
445 type: object
446 additionalProperties: False
447 properties:
448 headers:
449 description: |
450 List of extra headers which should be included in the source
451 of the generated code.
452 type: array
453 items:
454 type: string
455 sock-priv:
456 description: |
457 Literal name of the type which is used within the kernel
458 to store the socket state. The type / structure is internal
459 to the kernel, and is not defined in the spec.
460 type: string