| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508 |
- # 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:
- uint:
- type: integer
- minimum: 0
- len-or-define:
- type: [ string, integer ]
- pattern: ^[0-9A-Za-z_-]+( - 1)?$
- 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:
- type: string
- 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:
- type: string
- 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:
- type: string
- 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, 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.
- type: string
- 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
- # End genetlink-c
- attributes:
- description: List of attributes in the space.
- type: array
- items:
- type: object
- required: [ name ]
- additionalProperties: False
- properties:
- name:
- type: string
- type: &attr-type
- description: The netlink attribute type
- enum: [ unused, pad, flag, binary, bitfield32,
- 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.
- type: integer
- 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.
- type: string
- 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
|