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