xref: /linux/Documentation/netlink/netlink-raw.yaml (revision 0678df8271820bcf8fb4f877129f05d68a237de4)
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/netlink-raw.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
17# Schema for specs
18title: Protocol
19description: Specification of a raw netlink protocol
20type: object
21required: [ name, doc, attribute-sets, operations ]
22additionalProperties: False
23properties:
24  name:
25    description: Name of the netlink family.
26    type: string
27  doc:
28    type: string
29  protocol:
30    description: Schema compatibility level.
31    enum: [ netlink-raw ] # Trim
32  # Start netlink-raw
33  protonum:
34    description: Protocol number to use for netlink-raw
35    type: integer
36  # End netlink-raw
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  # End genetlink-legacy
64
65  definitions:
66    description: List of type and constant definitions (enums, flags, defines).
67    type: array
68    items:
69      type: object
70      required: [ type, name ]
71      additionalProperties: False
72      properties:
73        name:
74          type: string
75        header:
76          description: For C-compatible languages, header which already defines this value.
77          type: string
78        type:
79          enum: [ const, enum, flags, struct ] # Trim
80        doc:
81          type: string
82        # For const
83        value:
84          description: For const - the value.
85          type: [ string, integer ]
86        # For enum and flags
87        value-start:
88          description: For enum or flags the literal initializer for the first value.
89          type: [ string, integer ]
90        entries:
91          description: For enum or flags array of values.
92          type: array
93          items:
94            oneOf:
95              - type: string
96              - type: object
97                required: [ name ]
98                additionalProperties: False
99                properties:
100                  name:
101                    type: string
102                  value:
103                    type: integer
104                  doc:
105                    type: string
106        render-max:
107          description: Render the max members for this enum.
108          type: boolean
109        # Start genetlink-c
110        enum-name:
111          description: Name for enum, if empty no name will be used.
112          type: [ string, "null" ]
113        name-prefix:
114          description: For enum the prefix of the values, optional.
115          type: string
116        # End genetlink-c
117        # Start genetlink-legacy
118        members:
119          description: List of struct members. Only scalars and strings members allowed.
120          type: array
121          items:
122            type: object
123            required: [ name, type ]
124            additionalProperties: False
125            properties:
126              name:
127                type: string
128              type:
129                description: The netlink attribute type
130                enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string, binary ]
131              len:
132                $ref: '#/$defs/len-or-define'
133              byte-order:
134                enum: [ little-endian, big-endian ]
135              doc:
136                description: Documentation for the struct member attribute.
137                type: string
138              enum:
139                description: Name of the enum type used for the attribute.
140                type: string
141              enum-as-flags:
142                description: |
143                  Treat the enum as flags. In most cases enum is either used as flags or as values.
144                  Sometimes, however, both forms are necessary, in which case header contains the enum
145                  form while specific attributes may request to convert the values into a bitfield.
146                type: boolean
147              display-hint: &display-hint
148                description: |
149                  Optional format indicator that is intended only for choosing
150                  the right formatting mechanism when displaying values of this
151                  type.
152                enum: [ hex, mac, fddi, ipv4, ipv6, uuid ]
153        # End genetlink-legacy
154
155  attribute-sets:
156    description: Definition of attribute spaces for this family.
157    type: array
158    items:
159      description: Definition of a single attribute space.
160      type: object
161      required: [ name, attributes ]
162      additionalProperties: False
163      properties:
164        name:
165          description: |
166            Name used when referring to this space in other definitions, not used outside of the spec.
167          type: string
168        name-prefix:
169          description: |
170            Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-
171          type: string
172        enum-name:
173          description: Name for the enum type of the attribute.
174          type: string
175        doc:
176          description: Documentation of the space.
177          type: string
178        subset-of:
179          description: |
180            Name of another space which this is a logical part of. Sub-spaces can be used to define
181            a limited group of attributes which are used in a nest.
182          type: string
183        # Start genetlink-c
184        attr-cnt-name:
185          description: The explicit name for constant holding the count of attributes (last attr + 1).
186          type: string
187        attr-max-name:
188          description: The explicit name for last member of attribute enum.
189          type: string
190        # End genetlink-c
191        attributes:
192          description: List of attributes in the space.
193          type: array
194          items:
195            type: object
196            required: [ name ]
197            additionalProperties: False
198            properties:
199              name:
200                type: string
201              type: &attr-type
202                description: The netlink attribute type
203                enum: [ unused, pad, flag, binary, u8, u16, u32, u64, s32, s64,
204                        string, nest, array-nest, 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                    type: integer
243                  min-len:
244                    description: Min length for a binary attribute.
245                    $ref: '#/$defs/len-or-define'
246                  max-len:
247                    description: Max length for a string or a binary attribute.
248                    $ref: '#/$defs/len-or-define'
249                  exact-len:
250                    description: Exact length for a string or a binary attribute.
251                    $ref: '#/$defs/len-or-define'
252              sub-type: *attr-type
253              display-hint: *display-hint
254              # Start genetlink-c
255              name-prefix:
256                type: string
257              # End genetlink-c
258              # Start genetlink-legacy
259              struct:
260                description: Name of the struct type used for the attribute.
261                type: string
262              # End genetlink-legacy
263
264      # Make sure name-prefix does not appear in subsets (subsets inherit naming)
265      dependencies:
266        name-prefix:
267          not:
268            required: [ subset-of ]
269        subset-of:
270          not:
271            required: [ name-prefix ]
272
273      # type property is only required if not in subset definition
274      if:
275        properties:
276          subset-of:
277            not:
278              type: string
279      then:
280        properties:
281          attributes:
282            items:
283              required: [ type ]
284
285  operations:
286    description: Operations supported by the protocol.
287    type: object
288    required: [ list ]
289    additionalProperties: False
290    properties:
291      enum-model:
292        description: |
293          The model of assigning values to the operations.
294          "unified" is the recommended model where all message types belong
295          to a single enum.
296          "directional" has the messages sent to the kernel and from the kernel
297          enumerated separately.
298        enum: [ unified, directional ] # Trim
299      name-prefix:
300        description: |
301          Prefix for the C enum name of the command. The name is formed by concatenating
302          the prefix with the upper case name of the command, with dashes replaced by underscores.
303        type: string
304      enum-name:
305        description: Name for the enum type with commands.
306        type: string
307      async-prefix:
308        description: Same as name-prefix but used to render notifications and events to separate enum.
309        type: string
310      async-enum:
311        description: Name for the enum type with notifications/events.
312        type: string
313      # Start genetlink-legacy
314      fixed-header: &fixed-header
315        description: |
316          Name of the structure defining the optional fixed-length protocol
317          header. This header is placed in a message after the netlink and
318          genetlink headers and before any attributes.
319        type: string
320      # End genetlink-legacy
321      list:
322        description: List of commands
323        type: array
324        items:
325          type: object
326          additionalProperties: False
327          required: [ name, doc ]
328          properties:
329            name:
330              description: Name of the operation, also defining its C enum value in uAPI.
331              type: string
332            doc:
333              description: Documentation for the command.
334              type: string
335            value:
336              description: Value for the enum in the uAPI.
337              $ref: '#/$defs/uint'
338            attribute-set:
339              description: |
340                Attribute space from which attributes directly in the requests and replies
341                to this command are defined.
342              type: string
343            flags: &cmd_flags
344              description: Command flags.
345              type: array
346              items:
347                enum: [ admin-perm ]
348            dont-validate:
349              description: Kernel attribute validation flags.
350              type: array
351              items:
352                enum: [ strict, dump ]
353            # Start genetlink-legacy
354            fixed-header: *fixed-header
355            # End genetlink-legacy
356            do: &subop-type
357              description: Main command handler.
358              type: object
359              additionalProperties: False
360              properties:
361                request: &subop-attr-list
362                  description: Definition of the request message for a given command.
363                  type: object
364                  additionalProperties: False
365                  properties:
366                    attributes:
367                      description: |
368                        Names of attributes from the attribute-set (not full attribute
369                        definitions, just names).
370                      type: array
371                      items:
372                        type: string
373                    # Start genetlink-legacy
374                    value:
375                      description: |
376                        ID of this message if value for request and response differ,
377                        i.e. requests and responses have different message enums.
378                      $ref: '#/$defs/uint'
379                    # End genetlink-legacy
380                reply: *subop-attr-list
381                pre:
382                  description: Hook for a function to run before the main callback (pre_doit or start).
383                  type: string
384                post:
385                  description: Hook for a function to run after the main callback (post_doit or done).
386                  type: string
387            dump: *subop-type
388            notify:
389              description: Name of the command sharing the reply type with this notification.
390              type: string
391            event:
392              type: object
393              additionalProperties: False
394              properties:
395                attributes:
396                  description: Explicit list of the attributes for the notification.
397                  type: array
398                  items:
399                    type: string
400            mcgrp:
401              description: Name of the multicast group generating given notification.
402              type: string
403  mcast-groups:
404    description: List of multicast groups.
405    type: object
406    required: [ list ]
407    additionalProperties: False
408    properties:
409      list:
410        description: List of groups.
411        type: array
412        items:
413          type: object
414          required: [ name ]
415          additionalProperties: False
416          properties:
417            name:
418              description: |
419                The name for the group, used to form the define and the value of the define.
420              type: string
421            # Start genetlink-c
422            c-define-name:
423              description: Override for the name of the define in C uAPI.
424              type: string
425            # End genetlink-c
426            flags: *cmd_flags
427            # Start netlink-raw
428            value:
429              description: Value of the netlink multicast group in the uAPI.
430              type: integer
431            # End netlink-raw
432