| # SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) | |
| %YAML 1.2 | |
| --- | |
| $id: http://kernel.org/schemas/netlink/netlink-raw.yaml# | |
| $schema: https://json-schema.org/draft-07/schema | |
| # Common defines | |
| $defs: | |
| name: | |
| type: string | |
| pattern: ^[0-9a-z-]+$ | |
| name-cap: | |
| type: string | |
| pattern: ^[0-9a-zA-Z-]+$ | |
| uint: | |
| type: integer | |
| minimum: 0 | |
| len-or-define: | |
| type: [ string, integer ] | |
| pattern: ^[0-9A-Za-z_-]+( - 1)?$ | |
| minimum: 0 | |
| len-or-limit: | |
| # literal int, const name, or limit based on fixed-width type | |
| # e.g. u8-min, u16-max, etc. | |
| type: [ string, integer ] | |
| pattern: ^[0-9A-Za-z_-]+$ | |
| minimum: 0 | |
| # Schema for specs | |
| title: Protocol | |
| description: Specification of a raw netlink protocol | |
| type: object | |
| required: [ name, doc, attribute-sets, operations ] | |
| additionalProperties: False | |
| properties: | |
| name: | |
| description: Name of the netlink family. | |
| type: string | |
| doc: | |
| type: string | |
| protocol: | |
| description: Schema compatibility level. | |
| enum: [ netlink-raw ] # Trim | |
| # Start netlink-raw | |
| protonum: | |
| description: Protocol number to use for netlink-raw | |
| type: integer | |
| # End netlink-raw | |
| uapi-header: | |
| description: Path to the uAPI header, default is linux/${family-name}.h | |
| type: string | |
| # Start genetlink-c | |
| c-family-name: | |
| description: Name of the define for the family name. | |
| type: string | |
| c-version-name: | |
| description: Name of the define for the version of the family. | |
| type: string | |
| max-by-define: | |
| description: Makes the number of attributes and commands be specified by a define, not an enum value. | |
| type: boolean | |
| cmd-max-name: | |
| description: Name of the define for the last operation in the list. | |
| type: string | |
| cmd-cnt-name: | |
| description: The explicit name for constant holding the count of operations (last operation + 1). | |
| type: string | |
| # End genetlink-c | |
| # Start genetlink-legacy | |
| kernel-policy: | |
| description: | | |
| Defines if the input policy in the kernel is global, per-operation, or split per operation type. | |
| Default is split. | |
| enum: [ split, per-op, global ] | |
| # End genetlink-legacy | |
| definitions: | |
| description: List of type and constant definitions (enums, flags, defines). | |
| type: array | |
| items: | |
| type: object | |
| required: [ type, name ] | |
| additionalProperties: False | |
| properties: | |
| name: | |
| $ref: '#/$defs/name' | |
| header: | |
| description: For C-compatible languages, header which already defines this value. | |
| type: string | |
| type: | |
| enum: [ const, enum, flags, struct ] # Trim | |
| doc: | |
| type: string | |
| # For const | |
| value: | |
| description: For const - the value. | |
| type: [ string, integer ] | |
| # For enum and flags | |
| value-start: | |
| description: For enum or flags the literal initializer for the first value. | |
| type: [ string, integer ] | |
| entries: | |
| description: For enum or flags array of values. | |
| type: array | |
| items: | |
| oneOf: | |
| - type: string | |
| - type: object | |
| required: [ name ] | |
| additionalProperties: False | |
| properties: | |
| name: | |
| $ref: '#/$defs/name' | |
| value: | |
| type: integer | |
| doc: | |
| type: string | |
| render-max: | |
| description: Render the max members for this enum. | |
| type: boolean | |
| # Start genetlink-c | |
| enum-name: | |
| description: Name for enum, if empty no name will be used. | |
| type: [ string, "null" ] | |
| name-prefix: | |
| description: For enum the prefix of the values, optional. | |
| type: string | |
| # End genetlink-c | |
| # Start genetlink-legacy | |
| members: | |
| description: List of struct members. Only scalars and strings members allowed. | |
| type: array | |
| items: | |
| type: object | |
| required: [ name, type ] | |
| additionalProperties: False | |
| properties: | |
| name: | |
| $ref: '#/$defs/name-cap' | |
| type: | |
| description: | | |
| The netlink attribute type. Members of type 'binary' or 'pad' | |
| must also have the 'len' property set. | |
| enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string, binary, pad ] | |
| len: | |
| $ref: '#/$defs/len-or-define' | |
| byte-order: | |
| enum: [ little-endian, big-endian ] | |
| doc: | |
| description: Documentation for the struct member attribute. | |
| type: string | |
| enum: | |
| description: Name of the enum type used for the attribute. | |
| type: string | |
| enum-as-flags: | |
| description: | | |
| Treat the enum as flags. In most cases enum is either used as flags or as values. | |
| Sometimes, however, both forms are necessary, in which case header contains the enum | |
| form while specific attributes may request to convert the values into a bitfield. | |
| type: boolean | |
| display-hint: &display-hint | |
| description: | | |
| Optional format indicator that is intended only for choosing | |
| the right formatting mechanism when displaying values of this | |
| type. | |
| enum: [ hex, mac, fddi, ipv4, ipv6, ipv4-or-v6, uuid ] | |
| struct: | |
| description: Name of the nested struct type. | |
| type: string | |
| if: | |
| properties: | |
| type: | |
| const: pad | |
| then: | |
| required: [ len ] | |
| if: | |
| properties: | |
| type: | |
| const: binary | |
| then: | |
| oneOf: | |
| - required: [ len ] | |
| - required: [ struct ] | |
| # End genetlink-legacy | |
| attribute-sets: | |
| description: Definition of attribute spaces for this family. | |
| type: array | |
| items: | |
| description: Definition of a single attribute space. | |
| type: object | |
| required: [ name, attributes ] | |
| additionalProperties: False | |
| properties: | |
| name: | |
| description: | | |
| Name used when referring to this space in other definitions, not used outside of the spec. | |
| $ref: '#/$defs/name' | |
| name-prefix: | |
| description: | | |
| Prefix for the C enum name of the attributes. Default family[name]-set[name]-a- | |
| type: string | |
| enum-name: | |
| description: | | |
| Name for the enum type of the attribute, if empty no name will be used. | |
| type: [ string, "null" ] | |
| doc: | |
| description: Documentation of the space. | |
| type: string | |
| subset-of: | |
| description: | | |
| Name of another space which this is a logical part of. Sub-spaces can be used to define | |
| a limited group of attributes which are used in a nest. | |
| type: string | |
| # Start genetlink-c | |
| attr-cnt-name: | |
| description: The explicit name for constant holding the count of attributes (last attr + 1). | |
| type: string | |
| attr-max-name: | |
| description: The explicit name for last member of attribute enum. | |
| type: string | |
| header: | |
| description: For C-compatible languages, header which already defines this attribute set. | |
| type: string | |
| # End genetlink-c | |
| attributes: | |
| description: List of attributes in the space. | |
| type: array | |
| items: | |
| type: object | |
| required: [ name ] | |
| additionalProperties: False | |
| properties: | |
| name: | |
| $ref: '#/$defs/name' | |
| type: &attr-type | |
| description: The netlink attribute type | |
| enum: [ unused, pad, flag, binary, bitfield32, | |
| uint, sint, u8, u16, u32, u64, s8, s16, s32, s64, | |
| string, nest, indexed-array, nest-type-value, | |
| sub-message ] | |
| doc: | |
| description: Documentation of the attribute. | |
| type: string | |
| value: | |
| description: Value for the enum item representing this attribute in the uAPI. | |
| $ref: '#/$defs/uint' | |
| type-value: | |
| description: Name of the value extracted from the type of a nest-type-value attribute. | |
| type: array | |
| items: | |
| type: string | |
| byte-order: | |
| enum: [ little-endian, big-endian ] | |
| multi-attr: | |
| type: boolean | |
| nested-attributes: | |
| description: Name of the space (sub-space) used inside the attribute. | |
| type: string | |
| enum: | |
| description: Name of the enum type used for the attribute. | |
| type: string | |
| enum-as-flags: | |
| description: | | |
| Treat the enum as flags. In most cases enum is either used as flags or as values. | |
| Sometimes, however, both forms are necessary, in which case header contains the enum | |
| form while specific attributes may request to convert the values into a bitfield. | |
| type: boolean | |
| checks: | |
| description: Kernel input validation. | |
| type: object | |
| additionalProperties: False | |
| properties: | |
| flags-mask: | |
| description: Name of the flags constant on which to base mask (unsigned scalar types only). | |
| type: string | |
| min: | |
| description: Min value for an integer attribute. | |
| $ref: '#/$defs/len-or-limit' | |
| max: | |
| description: Max value for an integer attribute. | |
| $ref: '#/$defs/len-or-limit' | |
| min-len: | |
| description: Min length for a binary attribute. | |
| $ref: '#/$defs/len-or-define' | |
| max-len: | |
| description: Max length for a string or a binary attribute. | |
| $ref: '#/$defs/len-or-define' | |
| exact-len: | |
| description: Exact length for a string or a binary attribute. | |
| $ref: '#/$defs/len-or-define' | |
| unterminated-ok: | |
| description: | | |
| For string attributes, do not check whether attribute | |
| contains the terminating null character. | |
| type: boolean | |
| sub-type: *attr-type | |
| display-hint: *display-hint | |
| # Start genetlink-c | |
| name-prefix: | |
| type: string | |
| # End genetlink-c | |
| # Start genetlink-legacy | |
| struct: | |
| description: Name of the struct type used for the attribute. | |
| type: string | |
| # End genetlink-legacy | |
| # Start netlink-raw | |
| sub-message: | |
| description: | | |
| Name of the sub-message definition to use for the attribute. | |
| type: string | |
| selector: | |
| description: | | |
| Name of the attribute to use for dynamic selection of sub-message | |
| format specifier. | |
| type: string | |
| # End netlink-raw | |
| # Make sure name-prefix does not appear in subsets (subsets inherit naming) | |
| dependencies: | |
| name-prefix: | |
| not: | |
| required: [ subset-of ] | |
| subset-of: | |
| not: | |
| required: [ name-prefix ] | |
| # type property is only required if not in subset definition | |
| if: | |
| properties: | |
| subset-of: | |
| not: | |
| type: string | |
| then: | |
| properties: | |
| attributes: | |
| items: | |
| required: [ type ] | |
| # Start netlink-raw | |
| sub-messages: | |
| description: Definition of sub message attributes | |
| type: array | |
| items: | |
| type: object | |
| additionalProperties: False | |
| required: [ name, formats ] | |
| properties: | |
| name: | |
| description: Name of the sub-message definition | |
| type: string | |
| formats: | |
| description: Dynamically selected format specifiers | |
| type: array | |
| items: | |
| type: object | |
| additionalProperties: False | |
| required: [ value ] | |
| properties: | |
| value: | |
| description: | | |
| Value to match for dynamic selection of sub-message format | |
| specifier. | |
| type: string | |
| fixed-header: | |
| description: | | |
| Name of the struct definition to use as the fixed header | |
| for the sub message. | |
| type: string | |
| attribute-set: | |
| description: | | |
| Name of the attribute space from which to resolve attributes | |
| in the sub message. | |
| type: string | |
| # End netlink-raw | |
| operations: | |
| description: Operations supported by the protocol. | |
| type: object | |
| required: [ list ] | |
| additionalProperties: False | |
| properties: | |
| enum-model: | |
| description: | | |
| The model of assigning values to the operations. | |
| "unified" is the recommended model where all message types belong | |
| to a single enum. | |
| "directional" has the messages sent to the kernel and from the kernel | |
| enumerated separately. | |
| enum: [ unified, directional ] # Trim | |
| name-prefix: | |
| description: | | |
| Prefix for the C enum name of the command. The name is formed by concatenating | |
| the prefix with the upper case name of the command, with dashes replaced by underscores. | |
| type: string | |
| enum-name: | |
| description: | | |
| Name for the enum type with commands, if empty no name will be used. | |
| type: [ string, "null" ] | |
| async-prefix: | |
| description: Same as name-prefix but used to render notifications and events to separate enum. | |
| type: string | |
| async-enum: | |
| description: | | |
| Name for the enum type with commands, if empty no name will be used. | |
| type: [ string, "null" ] | |
| # Start genetlink-legacy | |
| fixed-header: &fixed-header | |
| description: | | |
| Name of the structure defining the optional fixed-length protocol | |
| header. This header is placed in a message after the netlink and | |
| genetlink headers and before any attributes. | |
| type: string | |
| # End genetlink-legacy | |
| list: | |
| description: List of commands | |
| type: array | |
| items: | |
| type: object | |
| additionalProperties: False | |
| required: [ name, doc ] | |
| properties: | |
| name: | |
| description: Name of the operation, also defining its C enum value in uAPI. | |
| $ref: '#/$defs/name' | |
| doc: | |
| description: Documentation for the command. | |
| type: string | |
| value: | |
| description: Value for the enum in the uAPI. | |
| $ref: '#/$defs/uint' | |
| attribute-set: | |
| description: | | |
| Attribute space from which attributes directly in the requests and replies | |
| to this command are defined. | |
| type: string | |
| flags: &cmd_flags | |
| description: Command flags. | |
| type: array | |
| items: | |
| enum: [ admin-perm ] | |
| dont-validate: | |
| description: Kernel attribute validation flags. | |
| type: array | |
| items: | |
| enum: [ strict, dump ] | |
| # Start genetlink-legacy | |
| fixed-header: *fixed-header | |
| # End genetlink-legacy | |
| do: &subop-type | |
| description: Main command handler. | |
| type: object | |
| additionalProperties: False | |
| properties: | |
| request: &subop-attr-list | |
| description: Definition of the request message for a given command. | |
| type: object | |
| additionalProperties: False | |
| properties: | |
| attributes: | |
| description: | | |
| Names of attributes from the attribute-set (not full attribute | |
| definitions, just names). | |
| type: array | |
| items: | |
| type: string | |
| # Start genetlink-legacy | |
| value: | |
| description: | | |
| ID of this message if value for request and response differ, | |
| i.e. requests and responses have different message enums. | |
| $ref: '#/$defs/uint' | |
| # End genetlink-legacy | |
| reply: *subop-attr-list | |
| pre: | |
| description: Hook for a function to run before the main callback (pre_doit or start). | |
| type: string | |
| post: | |
| description: Hook for a function to run after the main callback (post_doit or done). | |
| type: string | |
| dump: *subop-type | |
| notify: | |
| description: Name of the command sharing the reply type with this notification. | |
| type: string | |
| event: | |
| type: object | |
| additionalProperties: False | |
| properties: | |
| attributes: | |
| description: Explicit list of the attributes for the notification. | |
| type: array | |
| items: | |
| type: string | |
| mcgrp: | |
| description: Name of the multicast group generating given notification. | |
| type: string | |
| mcast-groups: | |
| description: List of multicast groups. | |
| type: object | |
| required: [ list ] | |
| additionalProperties: False | |
| properties: | |
| list: | |
| description: List of groups. | |
| type: array | |
| items: | |
| type: object | |
| required: [ name ] | |
| additionalProperties: False | |
| properties: | |
| name: | |
| description: | | |
| The name for the group, used to form the define and the value of the define. | |
| type: string | |
| # Start genetlink-c | |
| c-define-name: | |
| description: Override for the name of the define in C uAPI. | |
| type: string | |
| # End genetlink-c | |
| flags: *cmd_flags | |
| # Start netlink-raw | |
| value: | |
| description: Value of the netlink multicast group in the uAPI. | |
| type: integer | |
| # End netlink-raw |