14e16b6a7SJakub Kicinski# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
2e616c07cSJakub Kicinski%YAML 1.2
3e616c07cSJakub Kicinski---
4e616c07cSJakub Kicinski$id: http://kernel.org/schemas/netlink/genetlink-c.yaml#
5e616c07cSJakub Kicinski$schema: https://json-schema.org/draft-07/schema
6e616c07cSJakub Kicinski
7e616c07cSJakub Kicinski# Common defines
8e616c07cSJakub Kicinski$defs:
9e616c07cSJakub Kicinski  uint:
10e616c07cSJakub Kicinski    type: integer
11e616c07cSJakub Kicinski    minimum: 0
12e616c07cSJakub Kicinski  len-or-define:
13e616c07cSJakub Kicinski    type: [ string, integer ]
14e616c07cSJakub Kicinski    pattern: ^[0-9A-Za-z_]+( - 1)?$
15e616c07cSJakub Kicinski    minimum: 0
16e616c07cSJakub Kicinski
17e616c07cSJakub Kicinski# Schema for specs
18e616c07cSJakub Kicinskititle: Protocol
19e616c07cSJakub Kicinskidescription: Specification of a genetlink protocol
20e616c07cSJakub Kicinskitype: object
21e616c07cSJakub Kicinskirequired: [ name, doc, attribute-sets, operations ]
22e616c07cSJakub KicinskiadditionalProperties: False
23e616c07cSJakub Kicinskiproperties:
24e616c07cSJakub Kicinski  name:
25e616c07cSJakub Kicinski    description: Name of the genetlink family.
26e616c07cSJakub Kicinski    type: string
27e616c07cSJakub Kicinski  doc:
28e616c07cSJakub Kicinski    type: string
29e616c07cSJakub Kicinski  version:
30e616c07cSJakub Kicinski    description: Generic Netlink family version. Default is 1.
31e616c07cSJakub Kicinski    type: integer
32e616c07cSJakub Kicinski    minimum: 1
33e616c07cSJakub Kicinski  protocol:
34e616c07cSJakub Kicinski    description: Schema compatibility level. Default is "genetlink".
35e616c07cSJakub Kicinski    enum: [ genetlink, genetlink-c ]
36e616c07cSJakub Kicinski  uapi-header:
37e616c07cSJakub Kicinski    description: Path to the uAPI header, default is linux/${family-name}.h
38e616c07cSJakub Kicinski    type: string
3982b32970SJakub Kicinski  # Start genetlink-c
40e616c07cSJakub Kicinski  c-family-name:
41e616c07cSJakub Kicinski    description: Name of the define for the family name.
42e616c07cSJakub Kicinski    type: string
43e616c07cSJakub Kicinski  c-version-name:
44*c4e1ab07SDonald Hunter    description: Name of the define for the version of the family.
45e616c07cSJakub Kicinski    type: string
46e616c07cSJakub Kicinski  max-by-define:
47e616c07cSJakub Kicinski    description: Makes the number of attributes and commands be specified by a define, not an enum value.
48e616c07cSJakub Kicinski    type: boolean
49e616c07cSJakub Kicinski  # End genetlink-c
50e616c07cSJakub Kicinski
51e616c07cSJakub Kicinski  definitions:
52e616c07cSJakub Kicinski    description: List of type and constant definitions (enums, flags, defines).
53e616c07cSJakub Kicinski    type: array
54e616c07cSJakub Kicinski    items:
55e616c07cSJakub Kicinski      type: object
56e616c07cSJakub Kicinski      required: [ type, name ]
57e616c07cSJakub Kicinski      additionalProperties: False
58e616c07cSJakub Kicinski      properties:
59e616c07cSJakub Kicinski        name:
60e616c07cSJakub Kicinski          type: string
61e616c07cSJakub Kicinski        header:
62e616c07cSJakub Kicinski          description: For C-compatible languages, header which already defines this value.
63e616c07cSJakub Kicinski          type: string
64e616c07cSJakub Kicinski        type:
65e616c07cSJakub Kicinski          enum: [ const, enum, flags ]
66e616c07cSJakub Kicinski        doc:
67e616c07cSJakub Kicinski          type: string
68e616c07cSJakub Kicinski        # For const
69e616c07cSJakub Kicinski        value:
70e616c07cSJakub Kicinski          description: For const - the value.
71e616c07cSJakub Kicinski          type: [ string, integer ]
72e616c07cSJakub Kicinski        # For enum and flags
73e616c07cSJakub Kicinski        value-start:
74e616c07cSJakub Kicinski          description: For enum or flags the literal initializer for the first value.
75e616c07cSJakub Kicinski          type: [ string, integer ]
76e616c07cSJakub Kicinski        entries:
77e616c07cSJakub Kicinski          description: For enum or flags array of values.
78e616c07cSJakub Kicinski          type: array
79e616c07cSJakub Kicinski          items:
80e616c07cSJakub Kicinski            oneOf:
81e616c07cSJakub Kicinski              - type: string
82e616c07cSJakub Kicinski              - type: object
83e616c07cSJakub Kicinski                required: [ name ]
84e616c07cSJakub Kicinski                additionalProperties: False
85e616c07cSJakub Kicinski                properties:
86e616c07cSJakub Kicinski                  name:
87e616c07cSJakub Kicinski                    type: string
88e616c07cSJakub Kicinski                  value:
89e616c07cSJakub Kicinski                    type: integer
90e616c07cSJakub Kicinski                  doc:
91e616c07cSJakub Kicinski                    type: string
92e616c07cSJakub Kicinski        render-max:
93e616c07cSJakub Kicinski          description: Render the max members for this enum.
94e616c07cSJakub Kicinski          type: boolean
95e616c07cSJakub Kicinski        # Start genetlink-c
96e616c07cSJakub Kicinski        enum-name:
97e616c07cSJakub Kicinski          description: Name for enum, if empty no name will be used.
98e616c07cSJakub Kicinski          type: [ string, "null" ]
99e616c07cSJakub Kicinski        name-prefix:
100e616c07cSJakub Kicinski          description: For enum the prefix of the values, optional.
101e616c07cSJakub Kicinski          type: string
102e616c07cSJakub Kicinski        # End genetlink-c
103e616c07cSJakub Kicinski
104e616c07cSJakub Kicinski  attribute-sets:
105e616c07cSJakub Kicinski    description: Definition of attribute spaces for this family.
106e616c07cSJakub Kicinski    type: array
107e616c07cSJakub Kicinski    items:
108e616c07cSJakub Kicinski      description: Definition of a single attribute space.
109e616c07cSJakub Kicinski      type: object
110e616c07cSJakub Kicinski      required: [ name, attributes ]
111e616c07cSJakub Kicinski      additionalProperties: False
112e616c07cSJakub Kicinski      properties:
113e616c07cSJakub Kicinski        name:
114e616c07cSJakub Kicinski          description: |
115e616c07cSJakub Kicinski            Name used when referring to this space in other definitions, not used outside of the spec.
116e616c07cSJakub Kicinski          type: string
117e616c07cSJakub Kicinski        name-prefix:
118e616c07cSJakub Kicinski          description: |
119e616c07cSJakub Kicinski            Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-
120e616c07cSJakub Kicinski          type: string
121e616c07cSJakub Kicinski        enum-name:
122e616c07cSJakub Kicinski          description: Name for the enum type of the attribute.
123e616c07cSJakub Kicinski          type: string
124e616c07cSJakub Kicinski        doc:
125e616c07cSJakub Kicinski          description: Documentation of the space.
126e616c07cSJakub Kicinski          type: string
127e616c07cSJakub Kicinski        subset-of:
128e616c07cSJakub Kicinski          description: |
129e616c07cSJakub Kicinski            Name of another space which this is a logical part of. Sub-spaces can be used to define
130e616c07cSJakub Kicinski            a limited group of attributes which are used in a nest.
131e616c07cSJakub Kicinski          type: string
132e616c07cSJakub Kicinski        # Start genetlink-c
133e616c07cSJakub Kicinski        attr-cnt-name:
134e616c07cSJakub Kicinski          description: The explicit name for constant holding the count of attributes (last attr + 1).
135e616c07cSJakub Kicinski          type: string
136e616c07cSJakub Kicinski        attr-max-name:
137e616c07cSJakub Kicinski          description: The explicit name for last member of attribute enum.
138e616c07cSJakub Kicinski          type: string
139e616c07cSJakub Kicinski        # End genetlink-c
140e616c07cSJakub Kicinski        attributes:
141e616c07cSJakub Kicinski          description: List of attributes in the space.
142e616c07cSJakub Kicinski          type: array
143e616c07cSJakub Kicinski          items:
144e616c07cSJakub Kicinski            type: object
145e616c07cSJakub Kicinski            required: [ name, type ]
146e616c07cSJakub Kicinski            additionalProperties: False
147e616c07cSJakub Kicinski            properties:
148e616c07cSJakub Kicinski              name:
149e616c07cSJakub Kicinski                type: string
150e616c07cSJakub Kicinski              type: &attr-type
151e616c07cSJakub Kicinski                enum: [ unused, pad, flag, binary, u8, u16, u32, u64, s32, s64,
152e616c07cSJakub Kicinski                        string, nest, array-nest, nest-type-value ]
153e616c07cSJakub Kicinski              doc:
154e616c07cSJakub Kicinski                description: Documentation of the attribute.
155e616c07cSJakub Kicinski                type: string
156e616c07cSJakub Kicinski              value:
157e616c07cSJakub Kicinski                description: Value for the enum item representing this attribute in the uAPI.
158e616c07cSJakub Kicinski                $ref: '#/$defs/uint'
159e616c07cSJakub Kicinski              type-value:
160e616c07cSJakub Kicinski                description: Name of the value extracted from the type of a nest-type-value attribute.
161e616c07cSJakub Kicinski                type: array
162e616c07cSJakub Kicinski                items:
163e616c07cSJakub Kicinski                  type: string
164e616c07cSJakub Kicinski              byte-order:
165e616c07cSJakub Kicinski                enum: [ little-endian, big-endian ]
166e616c07cSJakub Kicinski              multi-attr:
167e616c07cSJakub Kicinski                type: boolean
168e616c07cSJakub Kicinski              nested-attributes:
169e616c07cSJakub Kicinski                description: Name of the space (sub-space) used inside the attribute.
170e616c07cSJakub Kicinski                type: string
171e616c07cSJakub Kicinski              enum:
172e616c07cSJakub Kicinski                description: Name of the enum type used for the attribute.
173e616c07cSJakub Kicinski                type: string
174e616c07cSJakub Kicinski              enum-as-flags:
175e616c07cSJakub Kicinski                description: |
176e616c07cSJakub Kicinski                  Treat the enum as flags. In most cases enum is either used as flags or as values.
177e616c07cSJakub Kicinski                  Sometimes, however, both forms are necessary, in which case header contains the enum
178e616c07cSJakub Kicinski                  form while specific attributes may request to convert the values into a bitfield.
179e616c07cSJakub Kicinski                type: boolean
180e616c07cSJakub Kicinski              checks:
181e616c07cSJakub Kicinski                description: Kernel input validation.
182e616c07cSJakub Kicinski                type: object
183e616c07cSJakub Kicinski                additionalProperties: False
184e616c07cSJakub Kicinski                properties:
185e616c07cSJakub Kicinski                  flags-mask:
186e616c07cSJakub Kicinski                    description: Name of the flags constant on which to base mask (unsigned scalar types only).
187e616c07cSJakub Kicinski                    type: string
188e616c07cSJakub Kicinski                  min:
189e616c07cSJakub Kicinski                    description: Min value for an integer attribute.
190e616c07cSJakub Kicinski                    type: integer
191e616c07cSJakub Kicinski                  min-len:
192e616c07cSJakub Kicinski                    description: Min length for a binary attribute.
193e616c07cSJakub Kicinski                    $ref: '#/$defs/len-or-define'
194e616c07cSJakub Kicinski                  max-len:
195e616c07cSJakub Kicinski                    description: Max length for a string or a binary attribute.
196e616c07cSJakub Kicinski                    $ref: '#/$defs/len-or-define'
197e616c07cSJakub Kicinski              sub-type: *attr-type
198737eab77SDonald Hunter              display-hint: &display-hint
199737eab77SDonald Hunter                description: |
200737eab77SDonald Hunter                  Optional format indicator that is intended only for choosing
201737eab77SDonald Hunter                  the right formatting mechanism when displaying values of this
202737eab77SDonald Hunter                  type.
203737eab77SDonald Hunter                enum: [ hex, mac, fddi, ipv4, ipv6, uuid ]
204ed2042ccSJakub Kicinski              # Start genetlink-c
205ed2042ccSJakub Kicinski              name-prefix:
206ed2042ccSJakub Kicinski                type: string
207ed2042ccSJakub Kicinski              # End genetlink-c
208e616c07cSJakub Kicinski
209e616c07cSJakub Kicinski      # Make sure name-prefix does not appear in subsets (subsets inherit naming)
210e616c07cSJakub Kicinski      dependencies:
211e616c07cSJakub Kicinski        name-prefix:
212e616c07cSJakub Kicinski          not:
213e616c07cSJakub Kicinski            required: [ subset-of ]
214e616c07cSJakub Kicinski        subset-of:
215e616c07cSJakub Kicinski          not:
216e616c07cSJakub Kicinski            required: [ name-prefix ]
217e616c07cSJakub Kicinski
218e616c07cSJakub Kicinski  operations:
219e616c07cSJakub Kicinski    description: Operations supported by the protocol.
220e616c07cSJakub Kicinski    type: object
221e616c07cSJakub Kicinski    required: [ list ]
222e616c07cSJakub Kicinski    additionalProperties: False
223e616c07cSJakub Kicinski    properties:
224e616c07cSJakub Kicinski      enum-model:
225e616c07cSJakub Kicinski        description: |
226e616c07cSJakub Kicinski          The model of assigning values to the operations.
227e616c07cSJakub Kicinski          "unified" is the recommended model where all message types belong
228e616c07cSJakub Kicinski          to a single enum.
229e616c07cSJakub Kicinski          "directional" has the messages sent to the kernel and from the kernel
230e616c07cSJakub Kicinski          enumerated separately.
2318403bf04SJakub Kicinski        enum: [ unified ]
232e616c07cSJakub Kicinski      name-prefix:
233e616c07cSJakub Kicinski        description: |
234e616c07cSJakub Kicinski          Prefix for the C enum name of the command. The name is formed by concatenating
235e616c07cSJakub Kicinski          the prefix with the upper case name of the command, with dashes replaced by underscores.
236e616c07cSJakub Kicinski        type: string
237e616c07cSJakub Kicinski      enum-name:
238e616c07cSJakub Kicinski        description: Name for the enum type with commands.
239e616c07cSJakub Kicinski        type: string
240e616c07cSJakub Kicinski      async-prefix:
241e616c07cSJakub Kicinski        description: Same as name-prefix but used to render notifications and events to separate enum.
242e616c07cSJakub Kicinski        type: string
243e616c07cSJakub Kicinski      async-enum:
244e616c07cSJakub Kicinski        description: Name for the enum type with notifications/events.
245e616c07cSJakub Kicinski        type: string
246e616c07cSJakub Kicinski      list:
247e616c07cSJakub Kicinski        description: List of commands
248e616c07cSJakub Kicinski        type: array
249e616c07cSJakub Kicinski        items:
250e616c07cSJakub Kicinski          type: object
251e616c07cSJakub Kicinski          additionalProperties: False
252e616c07cSJakub Kicinski          required: [ name, doc ]
253e616c07cSJakub Kicinski          properties:
254e616c07cSJakub Kicinski            name:
255e616c07cSJakub Kicinski              description: Name of the operation, also defining its C enum value in uAPI.
256e616c07cSJakub Kicinski              type: string
257e616c07cSJakub Kicinski            doc:
258e616c07cSJakub Kicinski              description: Documentation for the command.
259e616c07cSJakub Kicinski              type: string
260e616c07cSJakub Kicinski            value:
261e616c07cSJakub Kicinski              description: Value for the enum in the uAPI.
262e616c07cSJakub Kicinski              $ref: '#/$defs/uint'
263e616c07cSJakub Kicinski            attribute-set:
264e616c07cSJakub Kicinski              description: |
265e616c07cSJakub Kicinski                Attribute space from which attributes directly in the requests and replies
266e616c07cSJakub Kicinski                to this command are defined.
267e616c07cSJakub Kicinski              type: string
268e616c07cSJakub Kicinski            flags: &cmd_flags
269e616c07cSJakub Kicinski              description: Command flags.
270e616c07cSJakub Kicinski              type: array
271e616c07cSJakub Kicinski              items:
272e616c07cSJakub Kicinski                enum: [ admin-perm ]
273e616c07cSJakub Kicinski            dont-validate:
274e616c07cSJakub Kicinski              description: Kernel attribute validation flags.
275e616c07cSJakub Kicinski              type: array
276e616c07cSJakub Kicinski              items:
27778c96d7bSJiri Pirko                enum: [ strict, dump, dump-strict ]
278e616c07cSJakub Kicinski            do: &subop-type
279e616c07cSJakub Kicinski              description: Main command handler.
280e616c07cSJakub Kicinski              type: object
281e616c07cSJakub Kicinski              additionalProperties: False
282e616c07cSJakub Kicinski              properties:
283e616c07cSJakub Kicinski                request: &subop-attr-list
284e616c07cSJakub Kicinski                  description: Definition of the request message for a given command.
285e616c07cSJakub Kicinski                  type: object
286e616c07cSJakub Kicinski                  additionalProperties: False
287e616c07cSJakub Kicinski                  properties:
288e616c07cSJakub Kicinski                    attributes:
289e616c07cSJakub Kicinski                      description: |
290e616c07cSJakub Kicinski                        Names of attributes from the attribute-set (not full attribute
291e616c07cSJakub Kicinski                        definitions, just names).
292e616c07cSJakub Kicinski                      type: array
293e616c07cSJakub Kicinski                      items:
294e616c07cSJakub Kicinski                        type: string
295e616c07cSJakub Kicinski                reply: *subop-attr-list
296e616c07cSJakub Kicinski                pre:
297e616c07cSJakub Kicinski                  description: Hook for a function to run before the main callback (pre_doit or start).
298e616c07cSJakub Kicinski                  type: string
299e616c07cSJakub Kicinski                post:
300e616c07cSJakub Kicinski                  description: Hook for a function to run after the main callback (post_doit or done).
301e616c07cSJakub Kicinski                  type: string
302e616c07cSJakub Kicinski            dump: *subop-type
303e616c07cSJakub Kicinski            notify:
304e616c07cSJakub Kicinski              description: Name of the command sharing the reply type with this notification.
305e616c07cSJakub Kicinski              type: string
306e616c07cSJakub Kicinski            event:
307e616c07cSJakub Kicinski              type: object
308e616c07cSJakub Kicinski              additionalProperties: False
309e616c07cSJakub Kicinski              properties:
310e616c07cSJakub Kicinski                attributes:
311e616c07cSJakub Kicinski                  description: Explicit list of the attributes for the notification.
312e616c07cSJakub Kicinski                  type: array
313e616c07cSJakub Kicinski                  items:
314e616c07cSJakub Kicinski                    type: string
315e616c07cSJakub Kicinski            mcgrp:
316e616c07cSJakub Kicinski              description: Name of the multicast group generating given notification.
317e616c07cSJakub Kicinski              type: string
318e616c07cSJakub Kicinski  mcast-groups:
319e616c07cSJakub Kicinski    description: List of multicast groups.
320e616c07cSJakub Kicinski    type: object
321e616c07cSJakub Kicinski    required: [ list ]
322e616c07cSJakub Kicinski    additionalProperties: False
323e616c07cSJakub Kicinski    properties:
324e616c07cSJakub Kicinski      list:
325e616c07cSJakub Kicinski        description: List of groups.
326e616c07cSJakub Kicinski        type: array
327e616c07cSJakub Kicinski        items:
328e616c07cSJakub Kicinski          type: object
329e616c07cSJakub Kicinski          required: [ name ]
330e616c07cSJakub Kicinski          additionalProperties: False
331e616c07cSJakub Kicinski          properties:
332e616c07cSJakub Kicinski            name:
333e616c07cSJakub Kicinski              description: |
334e616c07cSJakub Kicinski                The name for the group, used to form the define and the value of the define.
335e616c07cSJakub Kicinski              type: string
336e616c07cSJakub Kicinski            # Start genetlink-c
337e616c07cSJakub Kicinski            c-define-name:
338e616c07cSJakub Kicinski              description: Override for the name of the define in C uAPI.
339e616c07cSJakub Kicinski              type: string
340e616c07cSJakub Kicinski            # End genetlink-c
341e616c07cSJakub Kicinski            flags: *cmd_flags
342