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-c.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 ]
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
58 definitions:
59 description: List of type and constant definitions (enums, flags, defines).
60 type: array
61 items:
62 type: object
63 required: [ type, name ]
64 additionalProperties: False
65 properties:
66 name:
67 type: string
68 header:
69 description: For C-compatible languages, header which already defines this value.
70 type: string
71 type:
72 enum: [ const, enum, flags ]
73 doc:
74 type: string
75 # For const
76 value:
77 description: For const - the value.
78 type: [ string, integer ]
79 # For enum and flags
80 value-start:
81 description: For enum or flags the literal initializer for the first value.
82 type: [ string, integer ]
83 entries:
84 description: For enum or flags array of values.
85 type: array
86 items:
87 oneOf:
88 - type: string
89 - type: object
90 required: [ name ]
91 additionalProperties: False
92 properties:
93 name:
94 type: string
95 value:
96 type: integer
97 doc:
98 type: string
99 render-max:
100 description: Render the max members for this enum.
101 type: boolean
102 # Start genetlink-c
103 enum-name:
104 description: Name for enum, if empty no name will be used.
105 type: [ string, "null" ]
106 name-prefix:
107 description: For enum the prefix of the values, optional.
108 type: string
109 # End genetlink-c
110
111 attribute-sets:
112 description: Definition of attribute spaces for this family.
113 type: array
114 items:
115 description: Definition of a single attribute space.
116 type: object
117 required: [ name, attributes ]
118 additionalProperties: False
119 properties:
120 name:
121 description: |
122 Name used when referring to this space in other definitions, not used outside of the spec.
123 type: string
124 name-prefix:
125 description: |
126 Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-
127 type: string
128 enum-name:
129 description: |
130 Name for the enum type of the attribute, if empty no name will be used.
131 type: [ string, "null" ]
132 doc:
133 description: Documentation of the space.
134 type: string
135 subset-of:
136 description: |
137 Name of another space which this is a logical part of. Sub-spaces can be used to define
138 a limited group of attributes which are used in a nest.
139 type: string
140 # Start genetlink-c
141 attr-cnt-name:
142 description: The explicit name for constant holding the count of attributes (last attr + 1).
143 type: string
144 attr-max-name:
145 description: The explicit name for last member of attribute enum.
146 type: string
147 # End genetlink-c
148 attributes:
149 description: List of attributes in the space.
150 type: array
151 items:
152 type: object
153 required: [ name ]
154 additionalProperties: False
155 properties:
156 name:
157 type: string
158 type: &attr-type
159 enum: [ unused, pad, flag, binary,
160 uint, sint, u8, u16, u32, u64, s32, s64,
161 string, nest, indexed-array, nest-type-value ]
162 doc:
163 description: Documentation of the attribute.
164 type: string
165 value:
166 description: Value for the enum item representing this attribute in the uAPI.
167 $ref: '#/$defs/uint'
168 type-value:
169 description: Name of the value extracted from the type of a nest-type-value attribute.
170 type: array
171 items:
172 type: string
173 byte-order:
174 enum: [ little-endian, big-endian ]
175 multi-attr:
176 type: boolean
177 nested-attributes:
178 description: Name of the space (sub-space) used inside the attribute.
179 type: string
180 enum:
181 description: Name of the enum type used for the attribute.
182 type: string
183 enum-as-flags:
184 description: |
185 Treat the enum as flags. In most cases enum is either used as flags or as values.
186 Sometimes, however, both forms are necessary, in which case header contains the enum
187 form while specific attributes may request to convert the values into a bitfield.
188 type: boolean
189 checks:
190 description: Kernel input validation.
191 type: object
192 additionalProperties: False
193 properties:
194 flags-mask:
195 description: Name of the flags constant on which to base mask (unsigned scalar types only).
196 type: string
197 min:
198 description: Min value for an integer attribute.
199 $ref: '#/$defs/len-or-limit'
200 max:
201 description: Max value for an integer attribute.
202 $ref: '#/$defs/len-or-limit'
203 min-len:
204 description: Min length for a binary attribute.
205 $ref: '#/$defs/len-or-define'
206 max-len:
207 description: Max length for a string or a binary attribute.
208 $ref: '#/$defs/len-or-define'
209 exact-len:
210 description: Exact length for a string or a binary attribute.
211 $ref: '#/$defs/len-or-define'
212 unterminated-ok:
213 description: |
214 For string attributes, do not check whether attribute
215 contains the terminating null character.
216 type: boolean
217 sub-type: *attr-type
218 display-hint: &display-hint
219 description: |
220 Optional format indicator that is intended only for choosing
221 the right formatting mechanism when displaying values of this
222 type.
223 enum: [ hex, mac, fddi, ipv4, ipv6, uuid ]
224 # Start genetlink-c
225 name-prefix:
226 type: string
227 # End genetlink-c
228
229 # Make sure name-prefix does not appear in subsets (subsets inherit naming)
230 dependencies:
231 name-prefix:
232 not:
233 required: [ subset-of ]
234 subset-of:
235 not:
236 required: [ name-prefix ]
237
238 # type property is only required if not in subset definition
239 if:
240 properties:
241 subset-of:
242 not:
243 type: string
244 then:
245 properties:
246 attributes:
247 items:
248 required: [ type ]
249
250 operations:
251 description: Operations supported by the protocol.
252 type: object
253 required: [ list ]
254 additionalProperties: False
255 properties:
256 enum-model:
257 description: |
258 The model of assigning values to the operations.
259 "unified" is the recommended model where all message types belong
260 to a single enum.
261 "directional" has the messages sent to the kernel and from the kernel
262 enumerated separately.
263 enum: [ unified ]
264 name-prefix:
265 description: |
266 Prefix for the C enum name of the command. The name is formed by concatenating
267 the prefix with the upper case name of the command, with dashes replaced by underscores.
268 type: string
269 enum-name:
270 description: |
271 Name for the enum type with commands, if empty no name will be used.
272 type: [ string, "null" ]
273 async-prefix:
274 description: Same as name-prefix but used to render notifications and events to separate enum.
275 type: string
276 async-enum:
277 description: |
278 Name for the enum type with commands, if empty no name will be used.
279 type: [ string, "null" ]
280 list:
281 description: List of commands
282 type: array
283 items:
284 type: object
285 additionalProperties: False
286 required: [ name, doc ]
287 properties:
288 name:
289 description: Name of the operation, also defining its C enum value in uAPI.
290 type: string
291 doc:
292 description: Documentation for the command.
293 type: string
294 value:
295 description: Value for the enum in the uAPI.
296 $ref: '#/$defs/uint'
297 attribute-set:
298 description: |
299 Attribute space from which attributes directly in the requests and replies
300 to this command are defined.
301 type: string
302 flags: &cmd_flags
303 description: Command flags.
304 type: array
305 items:
306 enum: [ admin-perm ]
307 dont-validate:
308 description: Kernel attribute validation flags.
309 type: array
310 items:
311 enum: [ strict, dump, dump-strict ]
312 config-cond:
313 description: |
314 Name of the kernel config option gating the presence of
315 the operation, without the 'CONFIG_' prefix.
316 type: string
317 do: &subop-type
318 description: Main command handler.
319 type: object
320 additionalProperties: False
321 properties:
322 request: &subop-attr-list
323 description: Definition of the request message for a given command.
324 type: object
325 additionalProperties: False
326 properties:
327 attributes:
328 description: |
329 Names of attributes from the attribute-set (not full attribute
330 definitions, just names).
331 type: array
332 items:
333 type: string
334 reply: *subop-attr-list
335 pre:
336 description: Hook for a function to run before the main callback (pre_doit or start).
337 type: string
338 post:
339 description: Hook for a function to run after the main callback (post_doit or done).
340 type: string
341 dump: *subop-type
342 notify:
343 description: Name of the command sharing the reply type with this notification.
344 type: string
345 event:
346 type: object
347 additionalProperties: False
348 properties:
349 attributes:
350 description: Explicit list of the attributes for the notification.
351 type: array
352 items:
353 type: string
354 mcgrp:
355 description: Name of the multicast group generating given notification.
356 type: string
357 mcast-groups:
358 description: List of multicast groups.
359 type: object
360 required: [ list ]
361 additionalProperties: False
362 properties:
363 list:
364 description: List of groups.
365 type: array
366 items:
367 type: object
368 required: [ name ]
369 additionalProperties: False
370 properties:
371 name:
372 description: |
373 The name for the group, used to form the define and the value of the define.
374 type: string
375 # Start genetlink-c
376 c-define-name:
377 description: Override for the name of the define in C uAPI.
378 type: string
379 # End genetlink-c
380 flags: *cmd_flags
381
382 kernel-family:
383 description: Additional global attributes used for kernel C code generation.
384 type: object
385 additionalProperties: False
386 properties:
387 headers:
388 description: |
389 List of extra headers which should be included in the source
390 of the generated code.
391 type: array
392 items:
393 type: string
394 sock-priv:
395 description: |
396 Literal name of the type which is used within the kernel
397 to store the socket state. The type / structure is internal
398 to the kernel, and is not defined in the spec.
399 type: string