19d6a6507SJakub Kicinski.. SPDX-License-Identifier: BSD-3-Clause 29d6a6507SJakub Kicinski 39d6a6507SJakub Kicinski========================================= 49d6a6507SJakub KicinskiNetlink protocol specifications (in YAML) 59d6a6507SJakub Kicinski========================================= 69d6a6507SJakub Kicinski 79d6a6507SJakub KicinskiNetlink protocol specifications are complete, machine readable descriptions of 89d6a6507SJakub KicinskiNetlink protocols written in YAML. The goal of the specifications is to allow 99d6a6507SJakub Kicinskiseparating Netlink parsing from user space logic and minimize the amount of 109d6a6507SJakub Kicinskihand written Netlink code for each new family, command, attribute. 119d6a6507SJakub KicinskiNetlink specs should be complete and not depend on any other spec 129d6a6507SJakub Kicinskior C header file, making it easy to use in languages which can't include 139d6a6507SJakub Kicinskikernel headers directly. 149d6a6507SJakub Kicinski 159d6a6507SJakub KicinskiInternally kernel uses the YAML specs to generate: 169d6a6507SJakub Kicinski 179d6a6507SJakub Kicinski - the C uAPI header 189d6a6507SJakub Kicinski - documentation of the protocol as a ReST file 199d6a6507SJakub Kicinski - policy tables for input attribute validation 209d6a6507SJakub Kicinski - operation tables 219d6a6507SJakub Kicinski 229d6a6507SJakub KicinskiYAML specifications can be found under ``Documentation/netlink/specs/`` 239d6a6507SJakub Kicinski 2401e47a37SJakub KicinskiThis document describes details of the schema. 2501e47a37SJakub KicinskiSee :doc:`intro-specs` for a practical starting guide. 2601e47a37SJakub Kicinski 274e16b6a7SJakub KicinskiAll specs must be licensed under 284e16b6a7SJakub Kicinski``((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)`` 2937d9df22SJakub Kicinskito allow for easy adoption in user space code. 3037d9df22SJakub Kicinski 319d6a6507SJakub KicinskiCompatibility levels 329d6a6507SJakub Kicinski==================== 339d6a6507SJakub Kicinski 349d6a6507SJakub KicinskiThere are four schema levels for Netlink specs, from the simplest used 359d6a6507SJakub Kicinskiby new families to the most complex covering all the quirks of the old ones. 369d6a6507SJakub KicinskiEach next level inherits the attributes of the previous level, meaning that 379d6a6507SJakub Kicinskiuser capable of parsing more complex ``genetlink`` schemas is also compatible 389d6a6507SJakub Kicinskiwith simpler ones. The levels are: 399d6a6507SJakub Kicinski 409d6a6507SJakub Kicinski - ``genetlink`` - most streamlined, should be used by all new families 419d6a6507SJakub Kicinski - ``genetlink-c`` - superset of ``genetlink`` with extra attributes allowing 429d6a6507SJakub Kicinski customization of define and enum type and value names; this schema should 439d6a6507SJakub Kicinski be equivalent to ``genetlink`` for all implementations which don't interact 449d6a6507SJakub Kicinski directly with C uAPI headers 459d6a6507SJakub Kicinski - ``genetlink-legacy`` - Generic Netlink catch all schema supporting quirks of 469d6a6507SJakub Kicinski all old genetlink families, strange attribute formats, binary structures etc. 479d6a6507SJakub Kicinski - ``netlink-raw`` - catch all schema supporting pre-Generic Netlink protocols 489d6a6507SJakub Kicinski such as ``NETLINK_ROUTE`` 499d6a6507SJakub Kicinski 509d6a6507SJakub KicinskiThe definition of the schemas (in ``jsonschema``) can be found 519d6a6507SJakub Kicinskiunder ``Documentation/netlink/``. 529d6a6507SJakub Kicinski 539d6a6507SJakub KicinskiSchema structure 549d6a6507SJakub Kicinski================ 559d6a6507SJakub Kicinski 569d6a6507SJakub KicinskiYAML schema has the following conceptual sections: 579d6a6507SJakub Kicinski 589d6a6507SJakub Kicinski - globals 599d6a6507SJakub Kicinski - definitions 609d6a6507SJakub Kicinski - attributes 619d6a6507SJakub Kicinski - operations 629d6a6507SJakub Kicinski - multicast groups 639d6a6507SJakub Kicinski 649d6a6507SJakub KicinskiMost properties in the schema accept (or in fact require) a ``doc`` 659d6a6507SJakub Kicinskisub-property documenting the defined object. 669d6a6507SJakub Kicinski 679d6a6507SJakub KicinskiThe following sections describe the properties of the most modern ``genetlink`` 689d6a6507SJakub Kicinskischema. See the documentation of :doc:`genetlink-c <c-code-gen>` 699d6a6507SJakub Kicinskifor information on how C names are derived from name properties. 709d6a6507SJakub Kicinski 71*294f37fcSDonald HunterSee also :ref:`Documentation/core-api/netlink.rst <kernel_netlink>` for 72*294f37fcSDonald Hunterinformation on the Netlink specification properties that are only relevant to 73*294f37fcSDonald Hunterthe kernel space and not part of the user space API. 74*294f37fcSDonald Hunter 759d6a6507SJakub Kicinskigenetlink 769d6a6507SJakub Kicinski========= 779d6a6507SJakub Kicinski 789d6a6507SJakub KicinskiGlobals 799d6a6507SJakub Kicinski------- 809d6a6507SJakub Kicinski 819d6a6507SJakub KicinskiAttributes listed directly at the root level of the spec file. 829d6a6507SJakub Kicinski 839d6a6507SJakub Kicinskiname 849d6a6507SJakub Kicinski~~~~ 859d6a6507SJakub Kicinski 869d6a6507SJakub KicinskiName of the family. Name identifies the family in a unique way, since 879d6a6507SJakub Kicinskithe Family IDs are allocated dynamically. 889d6a6507SJakub Kicinski 899d6a6507SJakub Kicinskiversion 909d6a6507SJakub Kicinski~~~~~~~ 919d6a6507SJakub Kicinski 929d6a6507SJakub KicinskiGeneric Netlink family version, default is 1. 939d6a6507SJakub Kicinski 949d6a6507SJakub Kicinskiprotocol 959d6a6507SJakub Kicinski~~~~~~~~ 969d6a6507SJakub Kicinski 979d6a6507SJakub KicinskiThe schema level, default is ``genetlink``, which is the only value 989d6a6507SJakub Kicinskiallowed for new ``genetlink`` families. 999d6a6507SJakub Kicinski 1009d6a6507SJakub Kicinskidefinitions 1019d6a6507SJakub Kicinski----------- 1029d6a6507SJakub Kicinski 1039d6a6507SJakub KicinskiArray of type and constant definitions. 1049d6a6507SJakub Kicinski 1059d6a6507SJakub Kicinskiname 1069d6a6507SJakub Kicinski~~~~ 1079d6a6507SJakub Kicinski 1089d6a6507SJakub KicinskiName of the type / constant. 1099d6a6507SJakub Kicinski 1109d6a6507SJakub Kicinskitype 1119d6a6507SJakub Kicinski~~~~ 1129d6a6507SJakub Kicinski 1139d6a6507SJakub KicinskiOne of the following types: 1149d6a6507SJakub Kicinski 1159d6a6507SJakub Kicinski - const - a single, standalone constant 1169d6a6507SJakub Kicinski - enum - defines an integer enumeration, with values for each entry 1179d6a6507SJakub Kicinski incrementing by 1, (e.g. 0, 1, 2, 3) 1189d6a6507SJakub Kicinski - flags - defines an integer enumeration, with values for each entry 1199d6a6507SJakub Kicinski occupying a bit, starting from bit 0, (e.g. 1, 2, 4, 8) 1209d6a6507SJakub Kicinski 1219d6a6507SJakub Kicinskivalue 1229d6a6507SJakub Kicinski~~~~~ 1239d6a6507SJakub Kicinski 1249d6a6507SJakub KicinskiThe value for the ``const``. 1259d6a6507SJakub Kicinski 1269d6a6507SJakub Kicinskivalue-start 1279d6a6507SJakub Kicinski~~~~~~~~~~~ 1289d6a6507SJakub Kicinski 1299d6a6507SJakub KicinskiThe first value for ``enum`` and ``flags``, allows overriding the default 1309d6a6507SJakub Kicinskistart value of ``0`` (for ``enum``) and starting bit (for ``flags``). 1319d6a6507SJakub KicinskiFor ``flags`` ``value-start`` selects the starting bit, not the shifted value. 1329d6a6507SJakub Kicinski 1339d6a6507SJakub KicinskiSparse enumerations are not supported. 1349d6a6507SJakub Kicinski 1359d6a6507SJakub Kicinskientries 1369d6a6507SJakub Kicinski~~~~~~~ 1379d6a6507SJakub Kicinski 1389d6a6507SJakub KicinskiArray of names of the entries for ``enum`` and ``flags``. 1399d6a6507SJakub Kicinski 1409d6a6507SJakub Kicinskiheader 1419d6a6507SJakub Kicinski~~~~~~ 1429d6a6507SJakub Kicinski 1439d6a6507SJakub KicinskiFor C-compatible languages, header which already defines this value. 1449d6a6507SJakub KicinskiIn case the definition is shared by multiple families (e.g. ``IFNAMSIZ``) 1459d6a6507SJakub Kicinskicode generators for C-compatible languages may prefer to add an appropriate 1469d6a6507SJakub Kicinskiinclude instead of rendering a new definition. 1479d6a6507SJakub Kicinski 1489d6a6507SJakub Kicinskiattribute-sets 1499d6a6507SJakub Kicinski-------------- 1509d6a6507SJakub Kicinski 1519d6a6507SJakub KicinskiThis property contains information about netlink attributes of the family. 1529d6a6507SJakub KicinskiAll families have at least one attribute set, most have multiple. 1539d6a6507SJakub Kicinski``attribute-sets`` is an array, with each entry describing a single set. 1549d6a6507SJakub Kicinski 1559d6a6507SJakub KicinskiNote that the spec is "flattened" and is not meant to visually resemble 1569d6a6507SJakub Kicinskithe format of the netlink messages (unlike certain ad-hoc documentation 1579d6a6507SJakub Kicinskiformats seen in kernel comments). In the spec subordinate attribute sets 1589d6a6507SJakub Kicinskiare not defined inline as a nest, but defined in a separate attribute set 1599d6a6507SJakub Kicinskireferred to with a ``nested-attributes`` property of the container. 1609d6a6507SJakub Kicinski 1619d6a6507SJakub KicinskiSpec may also contain fractional sets - sets which contain a ``subset-of`` 1629d6a6507SJakub Kicinskiproperty. Such sets describe a section of a full set, allowing narrowing down 1639d6a6507SJakub Kicinskiwhich attributes are allowed in a nest or refining the validation criteria. 1649d6a6507SJakub KicinskiFractional sets can only be used in nests. They are not rendered to the uAPI 1659d6a6507SJakub Kicinskiin any fashion. 1669d6a6507SJakub Kicinski 1679d6a6507SJakub Kicinskiname 1689d6a6507SJakub Kicinski~~~~ 1699d6a6507SJakub Kicinski 1709d6a6507SJakub KicinskiUniquely identifies the attribute set, operations and nested attributes 1719d6a6507SJakub Kicinskirefer to the sets by the ``name``. 1729d6a6507SJakub Kicinski 1739d6a6507SJakub Kicinskisubset-of 1749d6a6507SJakub Kicinski~~~~~~~~~ 1759d6a6507SJakub Kicinski 1769d6a6507SJakub KicinskiRe-defines a portion of another set (a fractional set). 1779d6a6507SJakub KicinskiAllows narrowing down fields and changing validation criteria 1789d6a6507SJakub Kicinskior even types of attributes depending on the nest in which they 1799d6a6507SJakub Kicinskiare contained. The ``value`` of each attribute in the fractional 1809d6a6507SJakub Kicinskiset is implicitly the same as in the main set. 1819d6a6507SJakub Kicinski 1829d6a6507SJakub Kicinskiattributes 1839d6a6507SJakub Kicinski~~~~~~~~~~ 1849d6a6507SJakub Kicinski 1859d6a6507SJakub KicinskiList of attributes in the set. 1869d6a6507SJakub Kicinski 187*294f37fcSDonald Hunter.. _attribute_properties: 188*294f37fcSDonald Hunter 1899d6a6507SJakub KicinskiAttribute properties 1909d6a6507SJakub Kicinski-------------------- 1919d6a6507SJakub Kicinski 1929d6a6507SJakub Kicinskiname 1939d6a6507SJakub Kicinski~~~~ 1949d6a6507SJakub Kicinski 1959d6a6507SJakub KicinskiIdentifies the attribute, unique within the set. 1969d6a6507SJakub Kicinski 1979d6a6507SJakub Kicinskitype 1989d6a6507SJakub Kicinski~~~~ 1999d6a6507SJakub Kicinski 2009d6a6507SJakub KicinskiNetlink attribute type, see :ref:`attr_types`. 2019d6a6507SJakub Kicinski 2029d6a6507SJakub Kicinski.. _assign_val: 2039d6a6507SJakub Kicinski 2049d6a6507SJakub Kicinskivalue 2059d6a6507SJakub Kicinski~~~~~ 2069d6a6507SJakub Kicinski 2079d6a6507SJakub KicinskiNumerical attribute ID, used in serialized Netlink messages. 2089d6a6507SJakub KicinskiThe ``value`` property can be skipped, in which case the attribute ID 2099d6a6507SJakub Kicinskiwill be the value of the previous attribute plus one (recursively) 210ad4fafcdSJakub Kicinskiand ``1`` for the first attribute in the attribute set. 211ad4fafcdSJakub Kicinski 212ad4fafcdSJakub KicinskiAttributes (and operations) use ``1`` as the default value for the first 213ad4fafcdSJakub Kicinskientry (unlike enums in definitions which start from ``0``) because 214ad4fafcdSJakub Kicinskientry ``0`` is almost always reserved as undefined. Spec can explicitly 215ad4fafcdSJakub Kicinskiset value to ``0`` if needed. 2169d6a6507SJakub Kicinski 2177cf93538SJakub KicinskiNote that the ``value`` of an attribute is defined only in its main set 2187cf93538SJakub Kicinski(not in subsets). 2199d6a6507SJakub Kicinski 2209d6a6507SJakub Kicinskienum 2219d6a6507SJakub Kicinski~~~~ 2229d6a6507SJakub Kicinski 2239d6a6507SJakub KicinskiFor integer types specifies that values in the attribute belong 2249d6a6507SJakub Kicinskito an ``enum`` or ``flags`` from the ``definitions`` section. 2259d6a6507SJakub Kicinski 2269d6a6507SJakub Kicinskienum-as-flags 2279d6a6507SJakub Kicinski~~~~~~~~~~~~~ 2289d6a6507SJakub Kicinski 2299d6a6507SJakub KicinskiTreat ``enum`` as ``flags`` regardless of its type in ``definitions``. 2309d6a6507SJakub KicinskiWhen both ``enum`` and ``flags`` forms are needed ``definitions`` should 2319d6a6507SJakub Kicinskicontain an ``enum`` and attributes which need the ``flags`` form should 2329d6a6507SJakub Kicinskiuse this attribute. 2339d6a6507SJakub Kicinski 2349d6a6507SJakub Kicinskinested-attributes 2359d6a6507SJakub Kicinski~~~~~~~~~~~~~~~~~ 2369d6a6507SJakub Kicinski 2379d6a6507SJakub KicinskiIdentifies the attribute space for attributes nested within given attribute. 2389d6a6507SJakub KicinskiOnly valid for complex attributes which may have sub-attributes. 2399d6a6507SJakub Kicinski 2409d6a6507SJakub Kicinskimulti-attr (arrays) 2419d6a6507SJakub Kicinski~~~~~~~~~~~~~~~~~~~ 2429d6a6507SJakub Kicinski 2439d6a6507SJakub KicinskiBoolean property signifying that the attribute may be present multiple times. 2449d6a6507SJakub KicinskiAllowing an attribute to repeat is the recommended way of implementing arrays 2459d6a6507SJakub Kicinski(no extra nesting). 2469d6a6507SJakub Kicinski 2479d6a6507SJakub Kicinskibyte-order 2489d6a6507SJakub Kicinski~~~~~~~~~~ 2499d6a6507SJakub Kicinski 2509d6a6507SJakub KicinskiFor integer types specifies attribute byte order - ``little-endian`` 2519d6a6507SJakub Kicinskior ``big-endian``. 2529d6a6507SJakub Kicinski 2539d6a6507SJakub Kicinskichecks 2549d6a6507SJakub Kicinski~~~~~~ 2559d6a6507SJakub Kicinski 2569d6a6507SJakub KicinskiInput validation constraints used by the kernel. User space should query 2579d6a6507SJakub Kicinskithe policy of the running kernel using Generic Netlink introspection, 2589d6a6507SJakub Kicinskirather than depend on what is specified in the spec file. 2599d6a6507SJakub Kicinski 2609d6a6507SJakub KicinskiThe validation policy in the kernel is formed by combining the type 2619d6a6507SJakub Kicinskidefinition (``type`` and ``nested-attributes``) and the ``checks``. 2629d6a6507SJakub Kicinski 26304eac393SDonald Huntersub-type 26404eac393SDonald Hunter~~~~~~~~ 26504eac393SDonald Hunter 26604eac393SDonald HunterLegacy families have special ways of expressing arrays. ``sub-type`` can be 26704eac393SDonald Hunterused to define the type of array members in case array members are not 26804eac393SDonald Hunterfully defined as attributes (in a bona fide attribute space). For instance 26904eac393SDonald Huntera C array of u32 values can be specified with ``type: binary`` and 27004eac393SDonald Hunter``sub-type: u32``. Binary types and legacy array formats are described in 27104eac393SDonald Huntermore detail in :doc:`genetlink-legacy`. 27204eac393SDonald Hunter 273*294f37fcSDonald Hunterdisplay-hint 274*294f37fcSDonald Hunter~~~~~~~~~~~~ 275*294f37fcSDonald Hunter 276*294f37fcSDonald HunterOptional format indicator that is intended only for choosing the right 277*294f37fcSDonald Hunterformatting mechanism when displaying values of this type. Currently supported 278*294f37fcSDonald Hunterhints are ``hex``, ``mac``, ``fddi``, ``ipv4``, ``ipv6`` and ``uuid``. 279*294f37fcSDonald Hunter 2809d6a6507SJakub Kicinskioperations 2819d6a6507SJakub Kicinski---------- 2829d6a6507SJakub Kicinski 2839d6a6507SJakub KicinskiThis section describes messages passed between the kernel and the user space. 2849d6a6507SJakub KicinskiThere are three types of entries in this section - operations, notifications 2859d6a6507SJakub Kicinskiand events. 2869d6a6507SJakub Kicinski 2879d6a6507SJakub KicinskiOperations describe the most common request - response communication. User 2889d6a6507SJakub Kicinskisends a request and kernel replies. Each operation may contain any combination 2899d6a6507SJakub Kicinskiof the two modes familiar to netlink users - ``do`` and ``dump``. 2909d6a6507SJakub Kicinski``do`` and ``dump`` in turn contain a combination of ``request`` and 2919d6a6507SJakub Kicinski``response`` properties. If no explicit message with attributes is passed 2929d6a6507SJakub Kicinskiin a given direction (e.g. a ``dump`` which does not accept filter, or a ``do`` 2939d6a6507SJakub Kicinskiof a SET operation to which the kernel responds with just the netlink error 2949d6a6507SJakub Kicinskicode) ``request`` or ``response`` section can be skipped. 2959d6a6507SJakub Kicinski``request`` and ``response`` sections list the attributes allowed in a message. 2969d6a6507SJakub KicinskiThe list contains only the names of attributes from a set referred 2979d6a6507SJakub Kicinskito by the ``attribute-set`` property. 2989d6a6507SJakub Kicinski 2999d6a6507SJakub KicinskiNotifications and events both refer to the asynchronous messages sent by 3009d6a6507SJakub Kicinskithe kernel to members of a multicast group. The difference between the 3019d6a6507SJakub Kicinskitwo is that a notification shares its contents with a GET operation 3029d6a6507SJakub Kicinski(the name of the GET operation is specified in the ``notify`` property). 3039d6a6507SJakub KicinskiThis arrangement is commonly used for notifications about 3049d6a6507SJakub Kicinskiobjects where the notification carries the full object definition. 3059d6a6507SJakub Kicinski 3069d6a6507SJakub KicinskiEvents are more focused and carry only a subset of information rather than full 3079d6a6507SJakub Kicinskiobject state (a made up example would be a link state change event with just 3089d6a6507SJakub Kicinskithe interface name and the new link state). Events contain the ``event`` 3099d6a6507SJakub Kicinskiproperty. Events are considered less idiomatic for netlink and notifications 3109d6a6507SJakub Kicinskishould be preferred. 3119d6a6507SJakub Kicinski 3129d6a6507SJakub Kicinskilist 3139d6a6507SJakub Kicinski~~~~ 3149d6a6507SJakub Kicinski 3159d6a6507SJakub KicinskiThe only property of ``operations`` for ``genetlink``, holds the list of 3169d6a6507SJakub Kicinskioperations, notifications etc. 3179d6a6507SJakub Kicinski 3189d6a6507SJakub KicinskiOperation properties 3199d6a6507SJakub Kicinski-------------------- 3209d6a6507SJakub Kicinski 3219d6a6507SJakub Kicinskiname 3229d6a6507SJakub Kicinski~~~~ 3239d6a6507SJakub Kicinski 3249d6a6507SJakub KicinskiIdentifies the operation. 3259d6a6507SJakub Kicinski 3269d6a6507SJakub Kicinskivalue 3279d6a6507SJakub Kicinski~~~~~ 3289d6a6507SJakub Kicinski 3299d6a6507SJakub KicinskiNumerical message ID, used in serialized Netlink messages. 3309d6a6507SJakub KicinskiThe same enumeration rules are applied as to 3319d6a6507SJakub Kicinski:ref:`attribute values<assign_val>`. 3329d6a6507SJakub Kicinski 3339d6a6507SJakub Kicinskiattribute-set 3349d6a6507SJakub Kicinski~~~~~~~~~~~~~ 3359d6a6507SJakub Kicinski 3369d6a6507SJakub KicinskiSpecifies the attribute set contained within the message. 3379d6a6507SJakub Kicinski 3389d6a6507SJakub Kicinskido 3399d6a6507SJakub Kicinski~~~ 3409d6a6507SJakub Kicinski 3419d6a6507SJakub KicinskiSpecification for the ``doit`` request. Should contain ``request``, ``reply`` 3429d6a6507SJakub Kicinskior both of these properties, each holding a :ref:`attr_list`. 3439d6a6507SJakub Kicinski 3449d6a6507SJakub Kicinskidump 3459d6a6507SJakub Kicinski~~~~ 3469d6a6507SJakub Kicinski 3479d6a6507SJakub KicinskiSpecification for the ``dumpit`` request. Should contain ``request``, ``reply`` 3489d6a6507SJakub Kicinskior both of these properties, each holding a :ref:`attr_list`. 3499d6a6507SJakub Kicinski 3509d6a6507SJakub Kicinskinotify 3519d6a6507SJakub Kicinski~~~~~~ 3529d6a6507SJakub Kicinski 3539d6a6507SJakub KicinskiDesignates the message as a notification. Contains the name of the operation 3549d6a6507SJakub Kicinski(possibly the same as the operation holding this property) which shares 3559d6a6507SJakub Kicinskithe contents with the notification (``do``). 3569d6a6507SJakub Kicinski 3579d6a6507SJakub Kicinskievent 3589d6a6507SJakub Kicinski~~~~~ 3599d6a6507SJakub Kicinski 3609d6a6507SJakub KicinskiSpecification of attributes in the event, holds a :ref:`attr_list`. 3619d6a6507SJakub Kicinski``event`` property is mutually exclusive with ``notify``. 3629d6a6507SJakub Kicinski 3639d6a6507SJakub Kicinskimcgrp 3649d6a6507SJakub Kicinski~~~~~ 3659d6a6507SJakub Kicinski 3669d6a6507SJakub KicinskiUsed with ``event`` and ``notify``, specifies which multicast group 3679d6a6507SJakub Kicinskimessage belongs to. 3689d6a6507SJakub Kicinski 3699d6a6507SJakub Kicinski.. _attr_list: 3709d6a6507SJakub Kicinski 3719d6a6507SJakub KicinskiMessage attribute list 3729d6a6507SJakub Kicinski---------------------- 3739d6a6507SJakub Kicinski 3749d6a6507SJakub Kicinski``request``, ``reply`` and ``event`` properties have a single ``attributes`` 3759d6a6507SJakub Kicinskiproperty which holds the list of attribute names. 3769d6a6507SJakub Kicinski 3779d6a6507SJakub KicinskiMessages can also define ``pre`` and ``post`` properties which will be rendered 3789d6a6507SJakub Kicinskias ``pre_doit`` and ``post_doit`` calls in the kernel (these properties should 3799d6a6507SJakub Kicinskibe ignored by user space). 3809d6a6507SJakub Kicinski 3819d6a6507SJakub Kicinskimcast-groups 3829d6a6507SJakub Kicinski------------ 3839d6a6507SJakub Kicinski 3849d6a6507SJakub KicinskiThis section lists the multicast groups of the family. 3859d6a6507SJakub Kicinski 3869d6a6507SJakub Kicinskilist 3879d6a6507SJakub Kicinski~~~~ 3889d6a6507SJakub Kicinski 3899d6a6507SJakub KicinskiThe only property of ``mcast-groups`` for ``genetlink``, holds the list 3909d6a6507SJakub Kicinskiof groups. 3919d6a6507SJakub Kicinski 3929d6a6507SJakub KicinskiMulticast group properties 3939d6a6507SJakub Kicinski-------------------------- 3949d6a6507SJakub Kicinski 3959d6a6507SJakub Kicinskiname 3969d6a6507SJakub Kicinski~~~~ 3979d6a6507SJakub Kicinski 3989d6a6507SJakub KicinskiUniquely identifies the multicast group in the family. Similarly to 3999d6a6507SJakub KicinskiFamily ID, Multicast Group ID needs to be resolved at runtime, based 4009d6a6507SJakub Kicinskion the name. 4019d6a6507SJakub Kicinski 4029d6a6507SJakub Kicinski.. _attr_types: 4039d6a6507SJakub Kicinski 4049d6a6507SJakub KicinskiAttribute types 4059d6a6507SJakub Kicinski=============== 4069d6a6507SJakub Kicinski 4079d6a6507SJakub KicinskiThis section describes the attribute types supported by the ``genetlink`` 4089d6a6507SJakub Kicinskicompatibility level. Refer to documentation of different levels for additional 4099d6a6507SJakub Kicinskiattribute types. 4109d6a6507SJakub Kicinski 4119d6a6507SJakub KicinskiScalar integer types 4129d6a6507SJakub Kicinski-------------------- 4139d6a6507SJakub Kicinski 4149d6a6507SJakub KicinskiFixed-width integer types: 4159d6a6507SJakub Kicinski``u8``, ``u16``, ``u32``, ``u64``, ``s8``, ``s16``, ``s32``, ``s64``. 4169d6a6507SJakub Kicinski 4179d6a6507SJakub KicinskiNote that types smaller than 32 bit should be avoided as using them 4189d6a6507SJakub Kicinskidoes not save any memory in Netlink messages (due to alignment). 4199d6a6507SJakub KicinskiSee :ref:`pad_type` for padding of 64 bit attributes. 4209d6a6507SJakub Kicinski 4219d6a6507SJakub KicinskiThe payload of the attribute is the integer in host order unless ``byte-order`` 4229d6a6507SJakub Kicinskispecifies otherwise. 4239d6a6507SJakub Kicinski 4249d6a6507SJakub Kicinski.. _pad_type: 4259d6a6507SJakub Kicinski 4269d6a6507SJakub Kicinskipad 4279d6a6507SJakub Kicinski--- 4289d6a6507SJakub Kicinski 4299d6a6507SJakub KicinskiSpecial attribute type used for padding attributes which require alignment 4309d6a6507SJakub Kicinskibigger than standard 4B alignment required by netlink (e.g. 64 bit integers). 4319d6a6507SJakub KicinskiThere can only be a single attribute of the ``pad`` type in any attribute set 4329d6a6507SJakub Kicinskiand it should be automatically used for padding when needed. 4339d6a6507SJakub Kicinski 4349d6a6507SJakub Kicinskiflag 4359d6a6507SJakub Kicinski---- 4369d6a6507SJakub Kicinski 4379d6a6507SJakub KicinskiAttribute with no payload, its presence is the entire information. 4389d6a6507SJakub Kicinski 4399d6a6507SJakub Kicinskibinary 4409d6a6507SJakub Kicinski------ 4419d6a6507SJakub Kicinski 4429d6a6507SJakub KicinskiRaw binary data attribute, the contents are opaque to generic code. 4439d6a6507SJakub Kicinski 4449d6a6507SJakub Kicinskistring 4459d6a6507SJakub Kicinski------ 4469d6a6507SJakub Kicinski 4479d6a6507SJakub KicinskiCharacter string. Unless ``checks`` has ``unterminated-ok`` set to ``true`` 4489d6a6507SJakub Kicinskithe string is required to be null terminated. 4499d6a6507SJakub Kicinski``max-len`` in ``checks`` indicates the longest possible string, 4509d6a6507SJakub Kicinskiif not present the length of the string is unbounded. 4519d6a6507SJakub Kicinski 4529d6a6507SJakub KicinskiNote that ``max-len`` does not count the terminating character. 4539d6a6507SJakub Kicinski 4549d6a6507SJakub Kicinskinest 4559d6a6507SJakub Kicinski---- 4569d6a6507SJakub Kicinski 4579d6a6507SJakub KicinskiAttribute containing other (nested) attributes. 4589d6a6507SJakub Kicinski``nested-attributes`` specifies which attribute set is used inside. 459