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