xref: /linux/Documentation/netlink/genetlink-legacy.yaml (revision c532de5a67a70f8533d495f8f2aaa9a0491c3ad0)
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
461