sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget//translations/zh_CN/userspace-api/netlink/specsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/zh_TW/userspace-api/netlink/specsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/it_IT/userspace-api/netlink/specsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/ja_JP/userspace-api/netlink/specsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/ko_KR/userspace-api/netlink/specsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/sp_SP/userspace-api/netlink/specsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h%SPDX-License-Identifier: BSD-3-Clauseh]h%SPDX-License-Identifier: BSD-3-Clause}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhI/var/lib/git/docbuild/linux/Documentation/userspace-api/netlink/specs.rsthKubhsection)}(hhh](htitle)}(h)Netlink protocol specifications (in YAML)h]h)Netlink protocol specifications (in YAML)}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hXNetlink protocol specifications are complete, machine readable descriptions of Netlink protocols written in YAML. The goal of the specifications is to allow separating Netlink parsing from user space logic and minimize the amount of hand written Netlink code for each new family, command, attribute. Netlink specs should be complete and not depend on any other spec or C header file, making it easy to use in languages which can't include kernel headers directly.h]hXNetlink protocol specifications are complete, machine readable descriptions of Netlink protocols written in YAML. The goal of the specifications is to allow separating Netlink parsing from user space logic and minimize the amount of hand written Netlink code for each new family, command, attribute. Netlink specs should be complete and not depend on any other spec or C header file, making it easy to use in languages which can’t include kernel headers directly.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h2Internally kernel uses the YAML specs to generate:h]h2Internally kernel uses the YAML specs to generate:}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh block_quote)}(h- the C uAPI header - documentation of the protocol as a ReST file - see :ref:`Documentation/networking/netlink_spec/index.rst ` - policy tables for input attribute validation - operation tables h]h bullet_list)}(hhh](h list_item)}(hthe C uAPI headerh]h)}(hhh]hthe C uAPI header}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hqdocumentation of the protocol as a ReST file - see :ref:`Documentation/networking/netlink_spec/index.rst `h]h)}(hj h](h3documentation of the protocol as a ReST file - see }(hjhhhNhNubh)}(h>:ref:`Documentation/networking/netlink_spec/index.rst `h]hinline)}(hjh]h/Documentation/networking/netlink_spec/index.rst}(hjhhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocuserspace-api/netlink/specs refdomainj'reftyperef refexplicitrefwarn reftargetspecsuh1hhhhKhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhhubh)}(h,policy tables for input attribute validationh]h)}(hjIh]h,policy tables for input attribute validation}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjGubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hoperation tables h]h)}(hoperation tablesh]hoperation tables}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj^ubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]bullet-uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hGYAML specifications can be found under ``Documentation/netlink/specs/``h](h'YAML specifications can be found under }(hjhhhNhNubhliteral)}(h ``Documentation/netlink/specs/``h]hDocumentation/netlink/specs/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(heThis document describes details of the schema. See :doc:`intro-specs` for a practical starting guide.h](h3This document describes details of the schema. See }(hjhhhNhNubh)}(h:doc:`intro-specs`h]j)}(hjh]h intro-specs}(hjhhhNhNubah}(h]h ](j&stdstd-doceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj3 refdomainjreftypedoc refexplicitrefwarnj9 intro-specsuh1hhhhKhjubh for a practical starting guide.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hAll specs must be licensed under ``((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)`` to allow for easy adoption in user space code.h](h!All specs must be licensed under }(hjhhhNhNubj)}(h7``((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)``h]h3((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh/ to allow for easy adoption in user space code.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(hCompatibility levelsh]hCompatibility levels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK ubh)}(hXPThere are four schema levels for Netlink specs, from the simplest used by new families to the most complex covering all the quirks of the old ones. Each next level inherits the attributes of the previous level, meaning that user capable of parsing more complex ``genetlink`` schemas is also compatible with simpler ones. The levels are:h](hXThere are four schema levels for Netlink specs, from the simplest used by new families to the most complex covering all the quirks of the old ones. Each next level inherits the attributes of the previous level, meaning that user capable of parsing more complex }(hjhhhNhNubj)}(h ``genetlink``h]h genetlink}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh> schemas is also compatible with simpler ones. The levels are:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK"hjhhubh)}(hXV- ``genetlink`` - most streamlined, should be used by all new families - ``genetlink-c`` - superset of ``genetlink`` with extra attributes allowing customization of define and enum type and value names; this schema should be equivalent to ``genetlink`` for all implementations which don't interact directly with C uAPI headers - ``genetlink-legacy`` - Generic Netlink catch all schema supporting quirks of all old genetlink families, strange attribute formats, binary structures etc. - ``netlink-raw`` - catch all schema supporting pre-Generic Netlink protocols such as ``NETLINK_ROUTE`` h]h)}(hhh](h)}(hD``genetlink`` - most streamlined, should be used by all new familiesh]h)}(hj.h](j)}(h ``genetlink``h]h genetlink}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh7 - most streamlined, should be used by all new families}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK(hj,ubah}(h]h ]h"]h$]h&]uh1hhj)ubh)}(h``genetlink-c`` - superset of ``genetlink`` with extra attributes allowing customization of define and enum type and value names; this schema should be equivalent to ``genetlink`` for all implementations which don't interact directly with C uAPI headersh]h)}(h``genetlink-c`` - superset of ``genetlink`` with extra attributes allowing customization of define and enum type and value names; this schema should be equivalent to ``genetlink`` for all implementations which don't interact directly with C uAPI headersh](j)}(h``genetlink-c``h]h genetlink-c}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh - superset of }(hjUhhhNhNubj)}(h ``genetlink``h]h genetlink}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh{ with extra attributes allowing customization of define and enum type and value names; this schema should be equivalent to }(hjUhhhNhNubj)}(h ``genetlink``h]h genetlink}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubhL for all implementations which don’t interact directly with C uAPI headers}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK)hjQubah}(h]h ]h"]h$]h&]uh1hhj)ubh)}(h``genetlink-legacy`` - Generic Netlink catch all schema supporting quirks of all old genetlink families, strange attribute formats, binary structures etc.h]h)}(h``genetlink-legacy`` - Generic Netlink catch all schema supporting quirks of all old genetlink families, strange attribute formats, binary structures etc.h](j)}(h``genetlink-legacy``h]hgenetlink-legacy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - Generic Netlink catch all schema supporting quirks of all old genetlink families, strange attribute formats, binary structures etc.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK-hjubah}(h]h ]h"]h$]h&]uh1hhj)ubh)}(hf``netlink-raw`` - catch all schema supporting pre-Generic Netlink protocols such as ``NETLINK_ROUTE`` h]h)}(he``netlink-raw`` - catch all schema supporting pre-Generic Netlink protocols such as ``NETLINK_ROUTE``h](j)}(h``netlink-raw``h]h netlink-raw}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhE - catch all schema supporting pre-Generic Netlink protocols such as }(hjhhhNhNubj)}(h``NETLINK_ROUTE``h]h NETLINK_ROUTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhhhK/hjubah}(h]h ]h"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]j|j}uh1hhhhK(hj%ubah}(h]h ]h"]h$]h&]uh1hhhhK(hjhhubh)}(h`The definition of the schemas (in ``jsonschema``) can be found under ``Documentation/netlink/``.h](h"The definition of the schemas (in }(hjhhhNhNubj)}(h``jsonschema``h]h jsonschema}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) can be found under }(hjhhhNhNubj)}(h``Documentation/netlink/``h]hDocumentation/netlink/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK2hjhhubeh}(h]compatibility-levelsah ]h"]compatibility levelsah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hSchema structureh]hSchema structure}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hhhhhK6ubh)}(h2YAML schema has the following conceptual sections:h]h2YAML schema has the following conceptual sections:}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK8hj;hhubh)}(hE- globals - definitions - attributes - operations - multicast groups h]h)}(hhh](h)}(hglobalsh]h)}(hjch]hglobals}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hjaubah}(h]h ]h"]h$]h&]uh1hhj^ubh)}(h definitionsh]h)}(hjzh]h definitions}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hjxubah}(h]h ]h"]h$]h&]uh1hhj^ubh)}(h attributesh]h)}(hjh]h attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]j|j}uh1hhhhK:hjZubah}(h]h ]h"]h$]h&]uh1hhhhK:hj;hhubh)}(hpMost properties in the schema accept (or in fact require) a ``doc`` sub-property documenting the defined object.h](h` for information on how C names are derived from name properties.h](hBThe following sections describe the properties of the most modern }(hjhhhNhNubj)}(h ``genetlink``h]h genetlink}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh" schema. See the documentation of }(hjhhhNhNubh)}(h:doc:`genetlink-c `h]j)}(hjh]h genetlink-c}(hjhhhNhNubah}(h]h ](j&stdstd-doceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj3 refdomainj)reftypedoc refexplicitrefwarnj9 c-code-genuh1hhhhKChjubhA for information on how C names are derived from name properties.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKChj;hhubh)}(hSee also :ref:`Documentation/core-api/netlink.rst ` for information on the Netlink specification properties that are only relevant to the kernel space and not part of the user space API.h](h See also }(hjEhhhNhNubh)}(h::ref:`Documentation/core-api/netlink.rst `h]j)}(hjOh]h"Documentation/core-api/netlink.rst}(hjQhhhNhNubah}(h]h ](j&stdstd-refeh"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]refdocj3 refdomainj[reftyperef refexplicitrefwarnj9kernel_netlinkuh1hhhhKGhjEubh for information on the Netlink specification properties that are only relevant to the kernel space and not part of the user space API.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKGhj;hhubeh}(h]schema-structureah ]h"]schema structureah$]h&]uh1hhhhhhhhK6ubh)}(hhh](h)}(h genetlinkh]h genetlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKLubh)}(hhh](h)}(hGlobalsh]hGlobals}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKOubh)}(h>Attributes listed directly at the root level of the spec file.h]h>Attributes listed directly at the root level of the spec file.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKQhjhhubh)}(hhh](h)}(hnameh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKTubh)}(hoName of the family. Name identifies the family in a unique way, since the Family IDs are allocated dynamically.h]hoName of the family. Name identifies the family in a unique way, since the Family IDs are allocated dynamically.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhjhhubeh}(h]nameah ]h"]h$]nameah&]uh1hhjhhhhhKT referencedKubh)}(hhh](h)}(hprotocolh]hprotocol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKZubh)}(hkThe schema level, default is ``genetlink``, which is the only value allowed for new ``genetlink`` families.h](hThe schema level, default is }(hjhhhNhNubj)}(h ``genetlink``h]h genetlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh*, which is the only value allowed for new }(hjhhhNhNubj)}(h ``genetlink``h]h genetlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh families.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK\hjhhubeh}(h]protocolah ]h"]protocolah$]h&]uh1hhjhhhhhKZubeh}(h]globalsah ]h"]globalsah$]h&]uh1hhjhhhhhKOubh)}(hhh](h)}(h definitionsh]h definitions}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hhhhhK`ubh)}(h'Array of type and constant definitions.h]h'Array of type and constant definitions.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhj*hhubh)}(hhh](h)}(hnameh]hname}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhhhhhKeubh)}(hName of the type / constant.h]hName of the type / constant.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKghjIhhubeh}(h]id1ah ]h"]h$]jah&]uh1hhj*hhhhhKejKubh)}(hhh](h)}(htypeh]htype}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohhhhhKjubh)}(hOne of the following types:h]hOne of the following types:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKlhjohhubh)}(hX- const - a single, standalone constant - enum - defines an integer enumeration, with values for each entry incrementing by 1, (e.g. 0, 1, 2, 3) - flags - defines an integer enumeration, with values for each entry occupying a bit, starting from bit 0, (e.g. 1, 2, 4, 8) h]h)}(hhh](h)}(h%const - a single, standalone constanth]h)}(hjh]h%const - a single, standalone constant}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKnhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hfenum - defines an integer enumeration, with values for each entry incrementing by 1, (e.g. 0, 1, 2, 3)h]h)}(hfenum - defines an integer enumeration, with values for each entry incrementing by 1, (e.g. 0, 1, 2, 3)h]hfenum - defines an integer enumeration, with values for each entry incrementing by 1, (e.g. 0, 1, 2, 3)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKohjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h{flags - defines an integer enumeration, with values for each entry occupying a bit, starting from bit 0, (e.g. 1, 2, 4, 8) h]h)}(hzflags - defines an integer enumeration, with values for each entry occupying a bit, starting from bit 0, (e.g. 1, 2, 4, 8)h]hzflags - defines an integer enumeration, with values for each entry occupying a bit, starting from bit 0, (e.g. 1, 2, 4, 8)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKqhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]j|j}uh1hhhhKnhjubah}(h]h ]h"]h$]h&]uh1hhhhKnhjohhubeh}(h]typeah ]h"]h$]typeah&]uh1hhj*hhhhhKjjKubh)}(hhh](h)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKuubh)}(hThe value for the ``const``.h](hThe value for the }(hjhhhNhNubj)}(h ``const``h]hconst}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKwhjhhubeh}(h]valueah ]h"]h$]valueah&]uh1hhj*hhhhhKujKubh)}(hhh](h)}(h value-starth]h value-start}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hhhhhKzubh)}(hThe first value for ``enum`` and ``flags``, allows overriding the default start value of ``0`` (for ``enum``) and starting bit (for ``flags``). For ``flags`` ``value-start`` selects the starting bit, not the shifted value.h](hThe first value for }(hj:hhhNhNubj)}(h``enum``h]henum}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh and }(hj:hhhNhNubj)}(h ``flags``h]hflags}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh/, allows overriding the default start value of }(hj:hhhNhNubj)}(h``0``h]h0}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh (for }(hj:hhhNhNubj)}(h``enum``h]henum}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh) and starting bit (for }(hj:hhhNhNubj)}(h ``flags``h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh). For }(hj:hhhNhNubj)}(h ``flags``h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh }(hj:hhhNhNubj)}(h``value-start``h]h value-start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh1 selects the starting bit, not the shifted value.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK|hj)hhubh)}(h&Sparse enumerations are not supported.h]h&Sparse enumerations are not supported.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj)hhubeh}(h] value-startah ]h"] value-startah$]h&]uh1hhj*hhhhhKzubh)}(hhh](h)}(hentriesh]hentries}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h9Array of names of the entries for ``enum`` and ``flags``.h](h"Array of names of the entries for }(hjhhhNhNubj)}(h``enum``h]henum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h ``flags``h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]entriesah ]h"]entriesah$]h&]uh1hhj*hhhhhKubh)}(hhh](h)}(hheaderh]hheader}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hhhhhKubh)}(hX For C-compatible languages, header which already defines this value. In case the definition is shared by multiple families (e.g. ``IFNAMSIZ``) code generators for C-compatible languages may prefer to add an appropriate include instead of rendering a new definition.h](hFor C-compatible languages, header which already defines this value. In case the definition is shared by multiple families (e.g. }(hj8hhhNhNubj)}(h ``IFNAMSIZ``h]hIFNAMSIZ}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh|) code generators for C-compatible languages may prefer to add an appropriate include instead of rendering a new definition.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj'hhubeh}(h]headerah ]h"]headerah$]h&]uh1hhj*hhhhhKubeh}(h] definitionsah ]h"] definitionsah$]h&]uh1hhjhhhhhK`ubh)}(hhh](h)}(hattribute-setsh]hattribute-sets}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhhKubh)}(hThis property contains information about netlink attributes of the family. All families have at least one attribute set, most have multiple. ``attribute-sets`` is an array, with each entry describing a single set.h](hThis property contains information about netlink attributes of the family. All families have at least one attribute set, most have multiple. }(hjyhhhNhNubj)}(h``attribute-sets``h]hattribute-sets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh6 is an array, with each entry describing a single set.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhhubh)}(hXfNote that the spec is "flattened" and is not meant to visually resemble the format of the netlink messages (unlike certain ad-hoc documentation formats seen in kernel comments). In the spec subordinate attribute sets are not defined inline as a nest, but defined in a separate attribute set referred to with a ``nested-attributes`` property of the container.h](hX:Note that the spec is “flattened” and is not meant to visually resemble the format of the netlink messages (unlike certain ad-hoc documentation formats seen in kernel comments). In the spec subordinate attribute sets are not defined inline as a nest, but defined in a separate attribute set referred to with a }(hjhhhNhNubj)}(h``nested-attributes``h]hnested-attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh property of the container.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhhubh)}(hXASpec may also contain fractional sets - sets which contain a ``subset-of`` property. Such sets describe a section of a full set, allowing narrowing down which attributes are allowed in a nest or refining the validation criteria. Fractional sets can only be used in nests. They are not rendered to the uAPI in any fashion.h](h=Spec may also contain fractional sets - sets which contain a }(hjhhhNhNubj)}(h ``subset-of``h]h subset-of}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh property. Such sets describe a section of a full set, allowing narrowing down which attributes are allowed in a nest or refining the validation criteria. Fractional sets can only be used in nests. They are not rendered to the uAPI in any fashion.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhhubh)}(hhh](h)}(hnameh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hjUniquely identifies the attribute set, operations and nested attributes refer to the sets by the ``name``.h](haUniquely identifies the attribute set, operations and nested attributes refer to the sets by the }(hjhhhNhNubj)}(h``name``h]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id2ah ]h"]h$]nameah&]uh1hhjhhhhhhKjKubh)}(hhh](h)}(h subset-ofh]h subset-of}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hX%Re-defines a portion of another set (a fractional set). Allows narrowing down fields and changing validation criteria or even types of attributes depending on the nest in which they are contained. The ``value`` of each attribute in the fractional set is implicitly the same as in the main set.h](hRe-defines a portion of another set (a fractional set). Allows narrowing down fields and changing validation criteria or even types of attributes depending on the nest in which they are contained. The }(hj#hhhNhNubj)}(h ``value``h]hvalue}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubhS of each attribute in the fractional set is implicitly the same as in the main set.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h] subset-ofah ]h"] subset-ofah$]h&]uh1hhjhhhhhhKubh)}(hhh](h)}(h attributesh]h attributes}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhhhhhKubh)}(hList of attributes in the set.h]hList of attributes in the set.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjKhhubhtarget)}(h.. _attribute_properties:h]h}(h]h ]h"]h$]h&]refidattribute-propertiesuh1jjhKhjKhhhhubeh}(h] attributesah ]h"] attributesah$]h&]uh1hhjhhhhhhKubeh}(h]attribute-setsah ]h"]attribute-setsah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hAttribute propertiesh]hAttribute properties}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hnameh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h0Identifies the attribute, unique within the set.h]h0Identifies the attribute, unique within the set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id4ah ]h"]h$]nameah&]uh1hhjhhhhhKjKubh)}(hhh](h)}(htypeh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h.Netlink attribute type, see :ref:`attr_types`.h](hNetlink attribute type, see }(hjhhhNhNubh)}(h:ref:`attr_types`h]j)}(hjh]h attr_types}(hjhhhNhNubah}(h]h ](j&stdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj3 refdomainjreftyperef refexplicitrefwarnj9 attr_typesuh1hhhhKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjk)}(h.. _assign_val:h]h}(h]h ]h"]h$]h&]jv assign-valuh1jjhKhjhhhhubeh}(h]id5ah ]h"]h$]jah&]uh1hhjhhhhhKjKubh)}(hhh](h)}(hvalueh]hvalue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hNumerical attribute ID, used in serialized Netlink messages. The ``value`` property can be skipped, in which case the attribute ID will be the value of the previous attribute plus one (recursively) and ``1`` for the first attribute in the attribute set.h](hANumerical attribute ID, used in serialized Netlink messages. The }(hj& hhhNhNubj)}(h ``value``h]hvalue}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj& ubh property can be skipped, in which case the attribute ID will be the value of the previous attribute plus one (recursively) and }(hj& hhhNhNubj)}(h``1``h]h1}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj& ubh. for the first attribute in the attribute set.}(hj& hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hAttributes (and operations) use ``1`` as the default value for the first entry (unlike enums in definitions which start from ``0``) because entry ``0`` is almost always reserved as undefined. Spec can explicitly set value to ``0`` if needed.h](h Attributes (and operations) use }(hjX hhhNhNubj)}(h``1``h]h1}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX ubhX as the default value for the first entry (unlike enums in definitions which start from }(hjX hhhNhNubj)}(h``0``h]h0}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX ubh) because entry }(hjX hhhNhNubj)}(h``0``h]h0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX ubhJ is almost always reserved as undefined. Spec can explicitly set value to }(hjX hhhNhNubj)}(h``0``h]h0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX ubh if needed.}(hjX hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hYNote that the ``value`` of an attribute is defined only in its main set (not in subsets).h](hNote that the }(hj hhhNhNubj)}(h ``value``h]hvalue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhB of an attribute is defined only in its main set (not in subsets).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h](j id6eh ]h"] assign_valah$]j'ah&]uh1hhjhhhhhKjKexpect_referenced_by_name}j j sexpect_referenced_by_id}j j subh)}(hhh](h)}(henumh]henum}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(h}For integer types specifies that values in the attribute belong to an ``enum`` or ``flags`` from the ``definitions`` section.h](hFFor integer types specifies that values in the attribute belong to an }(hj hhhNhNubj)}(h``enum``h]henum}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh or }(hj hhhNhNubj)}(h ``flags``h]hflags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh from the }(hj hhhNhNubj)}(h``definitions``h]h definitions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh section.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]enumah ]h"]enumah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h enum-as-flagsh]h enum-as-flags}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7 hhhhhKubh)}(hTreat ``enum`` as ``flags`` regardless of its type in ``definitions``. When both ``enum`` and ``flags`` forms are needed ``definitions`` should contain an ``enum`` and attributes which need the ``flags`` form should use this attribute.h](hTreat }(hjH hhhNhNubj)}(h``enum``h]henum}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH ubh as }(hjH hhhNhNubj)}(h ``flags``h]hflags}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH ubh regardless of its type in }(hjH hhhNhNubj)}(h``definitions``h]h definitions}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH ubh . When both }(hjH hhhNhNubj)}(h``enum``h]henum}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH ubh and }(hjH hhhNhNubj)}(h ``flags``h]hflags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH ubh forms are needed }(hjH hhhNhNubj)}(h``definitions``h]h definitions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH ubh should contain an }(hjH hhhNhNubj)}(h``enum``h]henum}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH ubh and attributes which need the }(hjH hhhNhNubj)}(h ``flags``h]hflags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH ubh form should use this attribute.}(hjH hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj7 hhubeh}(h] enum-as-flagsah ]h"] enum-as-flagsah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hnested-attributesh]hnested-attributes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hIdentifies the attribute space for attributes nested within given attribute. Only valid for complex attributes which may have sub-attributes.h]hIdentifies the attribute space for attributes nested within given attribute. Only valid for complex attributes which may have sub-attributes.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]nested-attributesah ]h"]nested-attributesah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hmulti-attr (arrays)h]hmulti-attr (arrays)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hBoolean property signifying that the attribute may be present multiple times. Allowing an attribute to repeat is the recommended way of implementing arrays (no extra nesting).h]hBoolean property signifying that the attribute may be present multiple times. Allowing an attribute to repeat is the recommended way of implementing arrays (no extra nesting).}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]multi-attr-arraysah ]h"]multi-attr (arrays)ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h byte-orderh]h byte-order}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj< hhhhhKubh)}(hWFor integer types specifies attribute byte order - ``little-endian`` or ``big-endian``.h](h3For integer types specifies attribute byte order - }(hjM hhhNhNubj)}(h``little-endian``h]h little-endian}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM ubh or }(hjM hhhNhNubj)}(h``big-endian``h]h big-endian}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM ubh.}(hjM hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj< hhubeh}(h] byte-orderah ]h"] byte-orderah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hchecksh]hchecks}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hInput validation constraints used by the kernel. User space should query the policy of the running kernel using Generic Netlink introspection, rather than depend on what is specified in the spec file.h]hInput validation constraints used by the kernel. User space should query the policy of the running kernel using Generic Netlink introspection, rather than depend on what is specified in the spec file.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hThe validation policy in the kernel is formed by combining the type definition (``type`` and ``nested-attributes``) and the ``checks``.h](hPThe validation policy in the kernel is formed by combining the type definition (}(hj hhhNhNubj)}(h``type``h]htype}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh and }(hj hhhNhNubj)}(h``nested-attributes``h]hnested-attributes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh ) and the }(hj hhhNhNubj)}(h ``checks``h]hchecks}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]checksah ]h"]checksah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hsub-typeh]hsub-type}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubh)}(hXLegacy families have special ways of expressing arrays. ``sub-type`` can be used to define the type of array members in case array members are not fully defined as attributes (in a bona fide attribute space). For instance a C array of u32 values can be specified with ``type: binary`` and ``sub-type: u32``. Binary types and legacy array formats are described in more detail in :doc:`genetlink-legacy`.h](h8Legacy families have special ways of expressing arrays. }(hj hhhNhNubj)}(h ``sub-type``h]hsub-type}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh can be used to define the type of array members in case array members are not fully defined as attributes (in a bona fide attribute space). For instance a C array of u32 values can be specified with }(hj hhhNhNubj)}(h``type: binary``h]h type: binary}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh and }(hj hhhNhNubj)}(h``sub-type: u32``h]h sub-type: u32}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhH. Binary types and legacy array formats are described in more detail in }(hj hhhNhNubh)}(h:doc:`genetlink-legacy`h]j)}(hjC h]hgenetlink-legacy}(hjE hhhNhNubah}(h]h ](j&stdstd-doceh"]h$]h&]uh1jhjA ubah}(h]h ]h"]h$]h&]refdocj3 refdomainjO reftypedoc refexplicitrefwarnj9genetlink-legacyuh1hhhhMhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h]sub-typeah ]h"]sub-typeah$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(h display-hinth]h display-hint}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs hhhhhM ubh)}(hOptional format indicator that is intended only for choosing the right formatting mechanism when displaying values of this type. Currently supported hints are ``hex``, ``mac``, ``fddi``, ``ipv4``, ``ipv6`` and ``uuid``.h](hOptional format indicator that is intended only for choosing the right formatting mechanism when displaying values of this type. Currently supported hints are }(hj hhhNhNubj)}(h``hex``h]hhex}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }(hj hhhNhNubj)}(h``mac``h]hmac}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h``fddi``h]hfddi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h``ipv4``h]hipv4}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h``ipv6``h]hipv6}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh and }(hj hhhNhNubj)}(h``uuid``h]huuid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjs hhubeh}(h] display-hintah ]h"] display-hintah$]h&]uh1hhjhhhhhM ubeh}(h](jwid3eh ]h"](attribute propertiesattribute_propertieseh$]h&]uh1hhjhhhhhKj }j jlsj }jwjlsubh)}(hhh](h)}(h operationsh]h operations}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubh)}(hThis section describes messages passed between the kernel and the user space. There are three types of entries in this section - operations, notifications and events.h]hThis section describes messages passed between the kernel and the user space. There are three types of entries in this section - operations, notifications and events.}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(hXOperations describe the most common request - response communication. User sends a request and kernel replies. Each operation may contain any combination of the two modes familiar to netlink users - ``do`` and ``dump``. ``do`` and ``dump`` in turn contain a combination of ``request`` and ``response`` properties. If no explicit message with attributes is passed in a given direction (e.g. a ``dump`` which does not accept filter, or a ``do`` of a SET operation to which the kernel responds with just the netlink error code) ``request`` or ``response`` section can be skipped. ``request`` and ``response`` sections list the attributes allowed in a message. The list contains only the names of attributes from a set referred to by the ``attribute-set`` property.h](hOperations describe the most common request - response communication. User sends a request and kernel replies. Each operation may contain any combination of the two modes familiar to netlink users - }(hj0 hhhNhNubj)}(h``do``h]hdo}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubh and }(hj0 hhhNhNubj)}(h``dump``h]hdump}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubh. }(hj0 hhhNhNubj)}(h``do``h]hdo}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubh and }hj0 sbj)}(h``dump``h]hdump}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubh" in turn contain a combination of }(hj0 hhhNhNubj)}(h ``request``h]hrequest}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubh and }(hj0 hhhNhNubj)}(h ``response``h]hresponse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubh[ properties. If no explicit message with attributes is passed in a given direction (e.g. a }(hj0 hhhNhNubj)}(h``dump``h]hdump}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubh$ which does not accept filter, or a }(hj0 hhhNhNubj)}(h``do``h]hdo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubhS of a SET operation to which the kernel responds with just the netlink error code) }(hj0 hhhNhNubj)}(h ``request``h]hrequest}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubh or }(hj0 hhhNhNubj)}(h ``response``h]hresponse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubh section can be skipped. }(hj0 hhhNhNubj)}(h ``request``h]hrequest}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubh and }hj0 sbj)}(h ``response``h]hresponse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubh sections list the attributes allowed in a message. The list contains only the names of attributes from a set referred to by the }(hj0 hhhNhNubj)}(h``attribute-set``h]h attribute-set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubh property.}(hj0 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(hXNotifications and events both refer to the asynchronous messages sent by the kernel to members of a multicast group. The difference between the two is that a notification shares its contents with a GET operation (the name of the GET operation is specified in the ``notify`` property). This arrangement is commonly used for notifications about objects where the notification carries the full object definition.h](hXNotifications and events both refer to the asynchronous messages sent by the kernel to members of a multicast group. The difference between the two is that a notification shares its contents with a GET operation (the name of the GET operation is specified in the }(hj(hhhNhNubj)}(h ``notify``h]hnotify}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh property). This arrangement is commonly used for notifications about objects where the notification carries the full object definition.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM&hj hhubh)}(hXGEvents are more focused and carry only a subset of information rather than full object state (a made up example would be a link state change event with just the interface name and the new link state). Events contain the ``event`` property. Events are considered less idiomatic for netlink and notifications should be preferred.h](hEvents are more focused and carry only a subset of information rather than full object state (a made up example would be a link state change event with just the interface name and the new link state). Events contain the }(hjHhhhNhNubj)}(h ``event``h]hevent}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubhb property. Events are considered less idiomatic for netlink and notifications should be preferred.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM-hj hhubh)}(hhh](h)}(hlisth]hlist}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhhM4ubh)}(hgThe only property of ``operations`` for ``genetlink``, holds the list of operations, notifications etc.h](hThe only property of }(hjyhhhNhNubj)}(h``operations``h]h operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh for }(hjyhhhNhNubj)}(h ``genetlink``h]h genetlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh2, holds the list of operations, notifications etc.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM6hjhhhubeh}(h]listah ]h"]h$]listah&]uh1hhj hhhhhM4jKubeh}(h] operationsah ]h"] operationsah$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(hOperation propertiesh]hOperation properties}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM:ubh)}(hhh](h)}(hnameh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM=ubh)}(hIdentifies the operation.h]hIdentifies the operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM?hjhhubeh}(h]id7ah ]h"]h$]nameah&]uh1hhjhhhhhM=jKubh)}(hhh](h)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMBubh)}(hNumerical message ID, used in serialized Netlink messages. The same enumeration rules are applied as to :ref:`attribute values`.h](hhNumerical message ID, used in serialized Netlink messages. The same enumeration rules are applied as to }(hjhhhNhNubh)}(h#:ref:`attribute values`h]j)}(hjh]hattribute values}(hjhhhNhNubah}(h]h ](j&stdstd-refeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj3 refdomainjreftyperef refexplicitrefwarnj9 assign_valuh1hhhhMDhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMDhjhhubeh}(h]id8ah ]h"]h$]valueah&]uh1hhjhhhhhMBjKubh)}(hhh](h)}(h attribute-seth]h attribute-set}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hhhhhMIubh)}(h9Specifies the attribute set contained within the message.h]h9Specifies the attribute set contained within the message.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMKhj>hhubeh}(h] attribute-setah ]h"] attribute-setah$]h&]uh1hhjhhhhhMIubh)}(hhh](h)}(hdoh]hdo}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehhhhhMNubh)}(hSpecification for the ``doit`` request. Should contain ``request``, ``reply`` or both of these properties, each holding a :ref:`attr_list`.h](hSpecification for the }(hjvhhhNhNubj)}(h``doit``h]hdoit}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh request. Should contain }(hjvhhhNhNubj)}(h ``request``h]hrequest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh, }(hjvhhhNhNubj)}(h ``reply``h]hreply}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh- or both of these properties, each holding a }(hjvhhhNhNubh)}(h:ref:`attr_list`h]j)}(hjh]h attr_list}(hjhhhNhNubah}(h]h ](j&stdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj3 refdomainjreftyperef refexplicitrefwarnj9 attr_listuh1hhhhMPhjvubh.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMPhjehhubeh}(h]doah ]h"]doah$]h&]uh1hhjhhhhhMNubh)}(hhh](h)}(hdumph]hdump}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMTubh)}(hSpecification for the ``dumpit`` request. Should contain ``request``, ``reply`` or both of these properties, each holding a :ref:`attr_list`.h](hSpecification for the }(hjhhhNhNubj)}(h ``dumpit``h]hdumpit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh request. Should contain }(hjhhhNhNubj)}(h ``request``h]hrequest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h ``reply``h]hreply}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh- or both of these properties, each holding a }(hjhhhNhNubh)}(h:ref:`attr_list`h]j)}(hj7h]h attr_list}(hj9hhhNhNubah}(h]h ](j&stdstd-refeh"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]refdocj3 refdomainjCreftyperef refexplicitrefwarnj9 attr_listuh1hhhhMVhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMVhjhhubeh}(h]dumpah ]h"]dumpah$]h&]uh1hhjhhhhhMTubh)}(hhh](h)}(hnotifyh]hnotify}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghhhhhMZubh)}(hDesignates the message as a notification. Contains the name of the operation (possibly the same as the operation holding this property) which shares the contents with the notification (``do``).h](hDesignates the message as a notification. Contains the name of the operation (possibly the same as the operation holding this property) which shares the contents with the notification (}(hjxhhhNhNubj)}(h``do``h]hdo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh).}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM\hjghhubeh}(h]notifyah ]h"]notifyah$]h&]uh1hhjhhhhhMZubh)}(hhh](h)}(heventh]hevent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMaubh)}(h}Specification of attributes in the event, holds a :ref:`attr_list`. ``event`` property is mutually exclusive with ``notify``.h](h2Specification of attributes in the event, holds a }(hjhhhNhNubh)}(h:ref:`attr_list`h]j)}(hjh]h attr_list}(hjhhhNhNubah}(h]h ](j&stdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj3 refdomainjreftyperef refexplicitrefwarnj9 attr_listuh1hhhhMchjubh. }(hjhhhNhNubj)}(h ``event``h]hevent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% property is mutually exclusive with }(hjhhhNhNubj)}(h ``notify``h]hnotify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMchjhhubeh}(h]eventah ]h"]eventah$]h&]uh1hhjhhhhhMaubh)}(hhh](h)}(hmcgrph]hmcgrp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMgubh)}(hWUsed with ``event`` and ``notify``, specifies which multicast group message belongs to.h](h Used with }(hj hhhNhNubj)}(h ``event``h]hevent}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh and }(hj hhhNhNubj)}(h ``notify``h]hnotify}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh5, specifies which multicast group message belongs to.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMihjhhubjk)}(h.. _attr_list:h]h}(h]h ]h"]h$]h&]jv attr-listuh1jjhMlhjhhhhubeh}(h]mcgrpah ]h"]mcgrpah$]h&]uh1hhjhhhhhMgubeh}(h]operation-propertiesah ]h"]operation propertiesah$]h&]uh1hhjhhhhhM:ubh)}(hhh](h)}(hMessage attribute listh]hMessage attribute list}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhhhhhMoubh)}(h~``request``, ``reply`` and ``event`` properties have a single ``attributes`` property which holds the list of attribute names.h](j)}(h ``request``h]hrequest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh, }(hj~hhhNhNubj)}(h ``reply``h]hreply}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh and }(hj~hhhNhNubj)}(h ``event``h]hevent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh properties have a single }(hj~hhhNhNubj)}(h``attributes``h]h attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh2 property which holds the list of attribute names.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMqhjmhhubh)}(hMessages can also define ``pre`` and ``post`` properties which will be rendered as ``pre_doit`` and ``post_doit`` calls in the kernel (these properties should be ignored by user space).h](hMessages can also define }(hjhhhNhNubj)}(h``pre``h]hpre}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h``post``h]hpost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& properties which will be rendered as }(hjhhhNhNubj)}(h ``pre_doit``h]hpre_doit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }hjsbj)}(h ``post_doit``h]h post_doit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhH calls in the kernel (these properties should be ignored by user space).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMthjmhhubeh}(h](message-attribute-listj\eh ]h"](message attribute list attr_listeh$]h&]uh1hhjhhhhhMoj }j,jRsj }j\jRsubh)}(hhh](h)}(h mcast-groupsh]h mcast-groups}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hhhhhMyubh)}(h6This section lists the multicast groups of the family.h]h6This section lists the multicast groups of the family.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM{hj1hhubh)}(hhh](h)}(hlisth]hlist}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhhhhhM~ubh)}(hRThe only property of ``mcast-groups`` for ``genetlink``, holds the list of groups.h](hThe only property of }(hjahhhNhNubj)}(h``mcast-groups``h]h mcast-groups}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh for }(hjahhhNhNubj)}(h ``genetlink``h]h genetlink}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh, holds the list of groups.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjPhhubeh}(h]id9ah ]h"]h$]jah&]uh1hhj1hhhhhM~jKubeh}(h] mcast-groupsah ]h"] mcast-groupsah$]h&]uh1hhjhhhhhMyubh)}(hhh](h)}(hMulticast group propertiesh]hMulticast group properties}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(hnameh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hUniquely identifies the multicast group in the family. Similarly to Family ID, Multicast Group ID needs to be resolved at runtime, based on the name.h]hUniquely identifies the multicast group in the family. Similarly to Family ID, Multicast Group ID needs to be resolved at runtime, based on the name.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubjk)}(h.. _attr_types:h]h}(h]h ]h"]h$]h&]jv attr-typesuh1jjhMhjhhhhubeh}(h]id10ah ]h"]h$]nameah&]uh1hhjhhhhhMjKubeh}(h]multicast-group-propertiesah ]h"]multicast group propertiesah$]h&]uh1hhjhhhhhMubeh}(h] genetlinkah ]h"] genetlinkah$]h&]uh1hhhhhhhhKLubh)}(hhh](h)}(hAttribute typesh]hAttribute types}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hThis section describes the attribute types supported by the ``genetlink`` compatibility level. Refer to documentation of different levels for additional attribute types.h](hjjejajjjgj jj_jj\jmj(jmjj1jjPjjjjjjjjjuj&jj{jjjjjjj!jjj'jju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jEK sRparse_messages](hsystem_message)}(hhh]h)}(h'Duplicate implicit target name: "name".h]h+Duplicate implicit target name: “name”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jjalevelKtypeINFOsourcehlineKeuh1jhjIhhhhhKeubj)}(hhh]h)}(h'Duplicate implicit target name: "name".h]h+Duplicate implicit target name: “name”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]j alevelKtypejsourcehlineKuh1jhjhhhhhKubj)}(hhh]h)}(h'Duplicate implicit target name: "name".h]h+Duplicate implicit target name: “name”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jalevelKtypejsourcehlineKuh1jhjhhhhhKubj)}(hhh]h)}(h'Duplicate implicit target name: "type".h]h+Duplicate implicit target name: “type”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]j alevelKtypejsourcehlineKuh1jhjhhhhhKubj)}(hhh]h)}(h(Duplicate implicit target name: "value".h]h,Duplicate implicit target name: “value”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]j alevelKtypejsourcehlineKuh1jhj hhhhhKubj)}(hhh]h)}(h'Duplicate implicit target name: "name".h]h+Duplicate implicit target name: “name”.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&]jalevelKtypejsourcehlineM=uh1jhjhhhhhM=ubj)}(hhh]h)}(h(Duplicate implicit target name: "value".h]h,Duplicate implicit target name: “value”.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&]j8alevelKtypejsourcehlineMBuh1jhjhhhhhMBubj)}(hhh]h)}(h'Duplicate implicit target name: "list".h]h+Duplicate implicit target name: “list”.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&]jalevelKtypejsourcehlineM~uh1jhjPhhhhhM~ubj)}(hhh]h)}(h'Duplicate implicit target name: "name".h]h+Duplicate implicit target name: “name”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&]jalevelKtypejsourcehlineMuh1jhjhhhhhMubetransform_messages](j)}(hhh]h)}(hhh]h:Hyperlink target "attribute-properties" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineKuh1jubj)}(hhh]h)}(hhh]h0Hyperlink target "assign-val" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineKuh1jubj)}(hhh]h)}(hhh]h/Hyperlink target "attr-list" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineMluh1jubj)}(hhh]h)}(hhh]h0Hyperlink target "attr-types" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineMuh1jubj)}(hhh]h)}(hhh]h.Hyperlink target "pad-type" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineMuh1jube transformerN include_log] decorationNhhub.