projects/linux·blob master · refs

482 lines · 17.4 KiB

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