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