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