xref: /openbmc/linux/Documentation/userspace-api/netlink/specs.rst (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
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