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]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/pt_BR/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/netlink/specs/index.rst ` - policy tables for input attribute validation - operation tables h]h bullet_list)}(hhh](h list_item)}(hthe C uAPI headerh]h)}(hj h]hthe C uAPI header}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hgdocumentation of the protocol as a ReST file - see :ref:`Documentation/netlink/specs/index.rst `h]h)}(hj!h](h3documentation of the protocol as a ReST file - see }(hj#hhhNhNubh)}(h4:ref:`Documentation/netlink/specs/index.rst `h]hinline)}(hj,h]h%Documentation/netlink/specs/index.rst}(hj0hhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1j.hj*ubah}(h]h ]h"]h$]h&]refdocuserspace-api/netlink/specs refdomainj;reftyperef refexplicitrefwarn reftargetspecsuh1hhhhKhj#ubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h,policy tables for input attribute validationh]h)}(hj]h]h,policy tables for input attribute validation}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj[ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hoperation tables h]h)}(hoperation tablesh]hoperation tables}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjrubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhKhhubah}(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&]uh1j.hjubah}(h]h ]h"]h$]h&]refdocjG refdomainjreftypedoc refexplicitrefwarnjM 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}(hj hhhNhNubah}(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]j)}(hhh](j)}(hD``genetlink`` - most streamlined, should be used by all new familiesh]h)}(hjBh](j)}(h ``genetlink``h]h genetlink}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh7 - most streamlined, should be used by all new families}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK(hj@ubah}(h]h ]h"]h$]h&]uh1jhj=ubj)}(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}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh - superset of }(hjihhhNhNubj)}(h ``genetlink``h]h genetlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh{ with extra attributes allowing customization of define and enum type and value names; this schema should be equivalent to }(hjihhhNhNubj)}(h ``genetlink``h]h genetlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubhL for all implementations which don’t interact directly with C uAPI headers}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK)hjeubah}(h]h ]h"]h$]h&]uh1jhj=ubj)}(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&]uh1jhj=ubj)}(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&]uh1jhj=ubeh}(h]h ]h"]h$]h&]jjuh1jhhhK(hj9ubah}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) can be found under }(hjhhhNhNubj)}(h``Documentation/netlink/``h]hDocumentation/netlink/}(hj/hhhNhNubah}(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}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhhhhhK6ubh)}(h2YAML schema has the following conceptual sections:h]h2YAML schema has the following conceptual sections:}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK8hjOhhubh)}(hE- globals - definitions - attributes - operations - multicast groups h]j)}(hhh](j)}(hglobalsh]h)}(hjwh]hglobals}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hjuubah}(h]h ]h"]h$]h&]uh1jhjrubj)}(h definitionsh]h)}(hjh]h definitions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hjubah}(h]h ]h"]h$]h&]uh1jhjrubj)}(h attributesh]h)}(hjh]h attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]jjuh1jhhhK:hjnubah}(h]h ]h"]h$]h&]uh1hhhhK:hjOhhubh)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh" schema. See the documentation of }(hjhhhNhNubh)}(h:doc:`genetlink-c `h]j/)}(hj1h]h genetlink-c}(hj3hhhNhNubah}(h]h ](j:stdstd-doceh"]h$]h&]uh1j.hj/ubah}(h]h ]h"]h$]h&]refdocjG refdomainj=reftypedoc refexplicitrefwarnjM c-code-genuh1hhhhKChjubhA for information on how C names are derived from name properties.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKChjOhhubh)}(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 }(hjYhhhNhNubh)}(h::ref:`Documentation/core-api/netlink.rst `h]j/)}(hjch]h"Documentation/core-api/netlink.rst}(hjehhhNhNubah}(h]h ](j:stdstd-refeh"]h$]h&]uh1j.hjaubah}(h]h ]h"]h$]h&]refdocjG refdomainjoreftyperef refexplicitrefwarnjMkernel_netlinkuh1hhhhKGhjYubh for information on the Netlink specification properties that are only relevant to the kernel space and not part of the user space API.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKGhjOhhubeh}(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}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hhhhhK`ubh)}(h'Array of type and constant definitions.h]h'Array of type and constant definitions.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhj>hhubh)}(hhh](h)}(hnameh]hname}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hhhhhKeubh)}(hName of the type / constant.h]hName of the type / constant.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKghj]hhubeh}(h]id1ah ]h"]h$]jah&]uh1hhj>hhhhhKejKubh)}(hhh](h)}(htypeh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKjubh)}(hOne of the following types:h]hOne of the following types:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKlhjhhubh)}(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]j)}(hhh](j)}(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&]uh1jhjubj)}(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&]uh1jhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhhhKnhjubah}(h]h ]h"]h$]h&]uh1hhhhKnhjhhubeh}(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}(hjhhhNhNubah}(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 }(hjNhhhNhNubj)}(h``enum``h]henum}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh and }(hjNhhhNhNubj)}(h ``flags``h]hflags}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh/, allows overriding the default start value of }(hjNhhhNhNubj)}(h``0``h]h0}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh (for }(hjNhhhNhNubj)}(h``enum``h]henum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh) and starting bit (for }(hjNhhhNhNubj)}(h ``flags``h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh). For }(hjNhhhNhNubj)}(h ``flags``h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh }(hjNhhhNhNubj)}(h``value-start``h]h value-start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh1 selects the starting bit, not the shifted value.}(hjNhhhNhNubeh}(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}(hj hhhNhNubah}(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. }(hjLhhhNhNubj)}(h ``IFNAMSIZ``h]hIFNAMSIZ}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh|) code generators for C-compatible languages may prefer to add an appropriate include instead of rendering a new definition.}(hjLhhhNhNubeh}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hhhhhKubh)}(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. }(hjhhhNhNubj)}(h``attribute-sets``h]hattribute-sets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh6 is an array, with each entry describing a single set.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj|hhubh)}(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&]uh1hhhhKhj|hhubh)}(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&]uh1hhhhKhj|hhubh)}(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&]uh1hhj|hhhhhKjKubh)}(hhh](h)}(h subset-ofh]h subset-of}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hhhhhKubh)}(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 }(hj7hhhNhNubj)}(h ``value``h]hvalue}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubhS of each attribute in the fractional set is implicitly the same as in the main set.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj&hhubeh}(h] subset-ofah ]h"] subset-ofah$]h&]uh1hhj|hhhhhKubh)}(hhh](h)}(h attributesh]h attributes}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hhhhhKubh)}(hList of attributes in the set.h]hList of attributes in the set.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj_hhubhtarget)}(h.. _attribute_properties:h]h}(h]h ]h"]h$]h&]refidattribute-propertiesuh1j~hKhj_hhhhubeh}(h] attributesah ]h"] attributesah$]h&]uh1hhj|hhhhhKubeh}(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&]uh1j.hjubah}(h]h ]h"]h$]h&]refdocjG refdomainjreftyperef refexplicitrefwarnjM attr_typesuh1hhhhKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(h.. _assign_val:h]h}(h]h ]h"]h$]h&]j assign-valuh1j~hKhjhhhhubeh}(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}(hjB 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}(hjT 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 }(hjl hhhNhNubj)}(h``1``h]h1}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl ubhX as the default value for the first entry (unlike enums in definitions which start from }(hjl hhhNhNubj)}(h``0``h]h0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl ubh) because entry }(hjl hhhNhNubj)}(h``0``h]h0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl ubhJ is almost always reserved as undefined. Spec can explicitly set value to }(hjl hhhNhNubj)}(h``0``h]h0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl ubh if needed.}(hjl 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}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjK 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 }(hj\ hhhNhNubj)}(h``enum``h]henum}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubh as }(hj\ hhhNhNubj)}(h ``flags``h]hflags}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubh regardless of its type in }(hj\ hhhNhNubj)}(h``definitions``h]h definitions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubh . When both }(hj\ hhhNhNubj)}(h``enum``h]henum}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubh and }(hj\ hhhNhNubj)}(h ``flags``h]hflags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubh forms are needed }(hj\ hhhNhNubj)}(h``definitions``h]h definitions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubh should contain an }(hj\ hhhNhNubj)}(h``enum``h]henum}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubh and attributes which need the }(hj\ hhhNhNubj)}(h ``flags``h]hflags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubh form should use this attribute.}(hj\ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjK 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}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP hhhhhKubh)}(hWFor integer types specifies attribute byte order - ``little-endian`` or ``big-endian``.h](h3For integer types specifies attribute byte order - }(hja hhhNhNubj)}(h``little-endian``h]h little-endian}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja ubh or }(hja hhhNhNubj)}(h``big-endian``h]h big-endian}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja ubh.}(hja hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjP 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}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh and }(hj hhhNhNubj)}(h``sub-type: u32``h]h sub-type: u32}(hjC 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/)}(hjW h]hgenetlink-legacy}(hjY hhhNhNubah}(h]h ](j:stdstd-doceh"]h$]h&]uh1j.hjU ubah}(h]h ]h"]h$]h&]refdocjG refdomainjc reftypedoc refexplicitrefwarnjMgenetlink-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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 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&]uh1hhhhMhj hhubeh}(h] display-hintah ]h"] display-hintah$]h&]uh1hhjhhhhhM ubeh}(h](jid3eh ]h"](attribute propertiesattribute_propertieseh$]h&]uh1hhjhhhhhKj }j jsj }jjsubh)}(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.}(hj6 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 - }(hjD hhhNhNubj)}(h``do``h]hdo}(hjL hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubh and }(hjD hhhNhNubj)}(h``dump``h]hdump}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubh. }(hjD hhhNhNubj)}(h``do``h]hdo}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubh and }hjD sbj)}(h``dump``h]hdump}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubh" in turn contain a combination of }(hjD hhhNhNubj)}(h ``request``h]hrequest}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubh and }(hjD hhhNhNubj)}(h ``response``h]hresponse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubh[ properties. If no explicit message with attributes is passed in a given direction (e.g. a }(hjD hhhNhNubj)}(h``dump``h]hdump}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubh$ which does not accept filter, or a }(hjD hhhNhNubj)}(h``do``h]hdo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubhS of a SET operation to which the kernel responds with just the netlink error code) }(hjD hhhNhNubj)}(h ``request``h]hrequest}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubh or }(hjD hhhNhNubj)}(h ``response``h]hresponse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubh section can be skipped. }(hjD hhhNhNubj)}(h ``request``h]hrequest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubh and }hjD sbj)}(h ``response``h]hresponse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubh sections list the attributes allowed in a message. The list contains only the names of attributes from a set referred to by the }(hjD hhhNhNubj)}(h``attribute-set``h]h attribute-set}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubh property.}(hjD 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}(hjDhhhNhNubah}(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 }(hj\hhhNhNubj)}(h ``event``h]hevent}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubhb property. Events are considered less idiomatic for netlink and notifications should be preferred.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM-hj% hhubh)}(hhh](h)}(hlisth]hlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hhhhhM4ubh)}(hgThe only property of ``operations`` for ``genetlink``, holds the list of operations, notifications etc.h](hThe only property of }(hjhhhNhNubj)}(h``operations``h]h operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh for }(hjhhhNhNubj)}(h ``genetlink``h]h genetlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2, holds the list of operations, notifications etc.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM6hj|hhubeh}(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}(hj hhhNhNubah}(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/)}(hj"h]hattribute values}(hj$hhhNhNubah}(h]h ](j:stdstd-refeh"]h$]h&]uh1j.hj ubah}(h]h ]h"]h$]h&]refdocjG refdomainj.reftyperef refexplicitrefwarnjM assign_valuh1hhhhMDhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMDhjhhubeh}(h]id8ah ]h"]h$]valueah&]uh1hhjhhhhhMBjKubh)}(hhh](h)}(h attribute-seth]h attribute-set}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhhhhhMIubh)}(h9Specifies the attribute set contained within the message.h]h9Specifies the attribute set contained within the message.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMKhjRhhubeh}(h] attribute-setah ]h"] attribute-setah$]h&]uh1hhjhhhhhMIubh)}(hhh](h)}(hdoh]hdo}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhhhhhMNubh)}(hSpecification for the ``doit`` request. Should contain ``request``, ``reply`` or both of these properties, each holding a :ref:`attr_list`.h](hSpecification for the }(hjhhhNhNubj)}(h``doit``h]hdoit}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh- or both of these properties, each holding a }(hjhhhNhNubh)}(h:ref:`attr_list`h]j/)}(hjh]h attr_list}(hjhhhNhNubah}(h]h ](j:stdstd-refeh"]h$]h&]uh1j.hjubah}(h]h ]h"]h$]h&]refdocjG refdomainjreftyperef refexplicitrefwarnjM attr_listuh1hhhhMPhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMPhjyhhubeh}(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 }(hj hhhNhNubj)}(h ``dumpit``h]hdumpit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh request. Should contain }(hj hhhNhNubj)}(h ``request``h]hrequest}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }(hj hhhNhNubj)}(h ``reply``h]hreply}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh- or both of these properties, each holding a }(hj hhhNhNubh)}(h:ref:`attr_list`h]j/)}(hjKh]h attr_list}(hjMhhhNhNubah}(h]h ](j:stdstd-refeh"]h$]h&]uh1j.hjIubah}(h]h ]h"]h$]h&]refdocjG refdomainjWreftyperef refexplicitrefwarnjM attr_listuh1hhhhMVhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMVhjhhubeh}(h]dumpah ]h"]dumpah$]h&]uh1hhjhhhhhMTubh)}(hhh](h)}(hnotifyh]hnotify}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hhhhhMZubh)}(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 (}(hjhhhNhNubj)}(h``do``h]hdo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM\hj{hhubeh}(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&]uh1j.hjubah}(h]h ]h"]h$]h&]refdocjG refdomainjreftyperef refexplicitrefwarnjM 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}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hhhhhMgubh)}(hWUsed with ``event`` and ``notify``, specifies which multicast group message belongs to.h](h Used with }(hj4hhhNhNubj)}(h ``event``h]hevent}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh and }(hj4hhhNhNubj)}(h ``notify``h]hnotify}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh5, specifies which multicast group message belongs to.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMihj#hhubj)}(h.. _attr_list:h]h}(h]h ]h"]h$]h&]j attr-listuh1j~hMlhj#hhhhubeh}(h]mcgrpah ]h"]mcgrpah$]h&]uh1hhjhhhhhMgubeh}(h]operation-propertiesah ]h"]operation propertiesah$]h&]uh1hhjhhhhhM:ubh)}(hhh](h)}(hMessage attribute listh]hMessage attribute list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMoubh)}(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&]uh1jhjubh, }(hjhhhNhNubj)}(h ``reply``h]hreply}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h ``event``h]hevent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh properties have a single }(hjhhhNhNubj)}(h``attributes``h]h attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 property which holds the list of attribute names.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMqhjhhubh)}(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}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhH calls in the kernel (these properties should be ignored by user space).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMthjhhubeh}(h](message-attribute-listjpeh ]h"](message attribute list attr_listeh$]h&]uh1hhjhhhhhMoj }j@jfsj }jpjfsubh)}(hhh](h)}(h mcast-groupsh]h mcast-groups}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhhhhhMyubh)}(h6This section lists the multicast groups of the family.h]h6This section lists the multicast groups of the family.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM{hjEhhubh)}(hhh](h)}(hlisth]hlist}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhhhhhM~ubh)}(hRThe only property of ``mcast-groups`` for ``genetlink``, holds the list of groups.h](hThe only property of }(hjuhhhNhNubj)}(h``mcast-groups``h]h mcast-groups}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh for }(hjuhhhNhNubj)}(h ``genetlink``h]h genetlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh, holds the list of groups.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjdhhubeh}(h]id9ah ]h"]h$]jah&]uh1hhjEhhhhhM~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&]uh1hhhhMhjhhubj)}(h.. _attr_types:h]h}(h]h ]h"]h$]h&]j attr-typesuh1j~hMhjhhhhubeh}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubh)}(hThis section describes the attribute types supported by the ``genetlink`` compatibility level. Refer to documentation of different levels for additional attribute types.h](hhhhNhNubh)}(h:ref:`pad_type`h]j/)}(hjHh]hpad_type}(hjJhhhNhNubah}(h]h ](j:stdstd-refeh"]h$]h&]uh1j.hjFubah}(h]h ]h"]h$]h&]refdocjG refdomainjTreftyperef refexplicitrefwarnjMpad_typeuh1hhhhMhj>ubh" for padding of 64 bit attributes.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hdThe payload of the attribute is the integer in host order unless ``byte-order`` specifies otherwise.h](hAThe payload of the attribute is the integer in host order unless }(hjphhhNhNubj)}(h``byte-order``h]h byte-order}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh specifies otherwise.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(h64 bit values are usually aligned by the kernel but it is recommended that the user space is able to deal with unaligned values.h]h64 bit values are usually aligned by the kernel but it is recommended that the user space is able to deal with unaligned values.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(h .. _pad_type:h]h}(h]h ]h"]h$]h&]jpad-typeuh1j~hMhjhhhhubeh}(h]fix-width-integer-typesah ]h"]fix-width integer typesah$]h&]uh1hhj hhhhhMubh)}(hhh](h)}(hpadh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hX#Special attribute type used for padding attributes which require alignment bigger than standard 4B alignment required by netlink (e.g. 64 bit integers). There can only be a single attribute of the ``pad`` type in any attribute set and it should be automatically used for padding when needed.h](hSpecial attribute type used for padding attributes which require alignment bigger than standard 4B alignment required by netlink (e.g. 64 bit integers). There can only be a single attribute of the }(hjhhhNhNubj)}(h``pad``h]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhW type in any attribute set and it should be automatically used for padding when needed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h](padjeh ]h"](padpad_typeeh$]h&]uh1hhj hhhhhMj }jjsj }jjsubh)}(hhh](h)}(hflagh]hflag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hBAttribute with no payload, its presence is the entire information.h]hBAttribute with no payload, its presence is the entire information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]flagah ]h"]flagah$]h&]uh1hhj hhhhhMubh)}(hhh](h)}(hbinaryh]hbinary}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hCRaw binary data attribute, the contents are opaque to generic code.h]hCRaw binary data attribute, the contents are opaque to generic code.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]binaryah ]h"]binaryah$]h&]uh1hhj hhhhhMubh)}(hhh](h)}(hstringh]hstring}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hhhhhMubh)}(hCharacter string. Unless ``checks`` has ``unterminated-ok`` set to ``true`` the string is required to be null terminated. ``max-len`` in ``checks`` indicates the longest possible string, if not present the length of the string is unbounded.h](hCharacter string. Unless }(hjLhhhNhNubj)}(h ``checks``h]hchecks}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh has }(hjLhhhNhNubj)}(h``unterminated-ok``h]hunterminated-ok}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh set to }(hjLhhhNhNubj)}(h``true``h]htrue}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh/ the string is required to be null terminated. }(hjLhhhNhNubj)}(h ``max-len``h]hmax-len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh in }(hjLhhhNhNubj)}(h ``checks``h]hchecks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh] indicates the longest possible string, if not present the length of the string is unbounded.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj;hhubh)}(h?Note that ``max-len`` does not count the terminating character.h](h Note that }(hjhhhNhNubj)}(h ``max-len``h]hmax-len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh* does not count the terminating character.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj;hhubeh}(h]stringah ]h"]stringah$]h&]uh1hhj hhhhhMubh)}(hhh](h)}(hnesth]hnest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hsAttribute containing other (nested) attributes. ``nested-attributes`` specifies which attribute set is used inside.h](h0Attribute containing other (nested) attributes. }(hjhhhNhNubj)}(h``nested-attributes``h]hnested-attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. specifies which attribute set is used inside.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]nestah ]h"]nestah$]h&]uh1hhj hhhhhMubeh}(h](attribute-typesjeh ]h"](attribute types attr_typeseh$]h&]uh1hhhhhhhhMj }jjsj }jjsubeh}(h]'netlink-protocol-specifications-in-yamlah ]h"])netlink protocol specifications (in yaml)ah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjKerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}(j]jaj! ]j ajp]jfaj]jaj]jaunameids}(j%j"jLjIjjjjj;j8nameNj3j0jyjvtypeNvalueNjjj8j5jqjnjjj\jYjjj jj j j j! jH jE j j j& j# jM jJ j j j j j j j j jjlistNj~j{jvjsjjjxjujjj jjvjsj@jpj?j<jjjjjjjjjjjjjjjjjjj8j5jjjju nametypes}(j%jLjjj;jj3jyjjjj8jqjj\jj j j jH j j& jM j j j j jjj~jvjjxjj jvj@j?jjjjjjjjjj8jjuh}(j"hjIjjjOjjj8jjjj0jjvj>j~j]jjj7jjj=j5jjnj;jj|j jjYj&jj_jjj jjjj$ jj! j) j j) jE j j jK j# j jJ j) j jP j j j j j j jj% jj|j{jjjjLjjsjRjjyjujjj{jjjsj#jpjj<jjjEjjdjjjjjj jj jj:jjjjjjjjj5jjj;jju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jYK 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&]j~alevelKtypeINFOsourcehnjlineKeuh1jhj]hhhhhKeubj)}(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 alevelKtypejsourcehnjlineKuh1jhjhhhhhKubj)}(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&]jalevelKtypejsourcehnjlineKuh1jhjhhhhhKubj)}(hhh]h)}(h'Duplicate implicit target name: "type".h]h+Duplicate implicit target name: “type”.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]j$ alevelKtypejsourcehnjlineKuh1jhjhhhhhKubj)}(hhh]h)}(h(Duplicate implicit target name: "value".h]h,Duplicate implicit target name: “value”.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]j alevelKtypejsourcehnjlineKuh1jhj) hhhhhKubj)}(hhh]h)}(h'Duplicate implicit target name: "name".h]h+Duplicate implicit target name: “name”.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&]jalevelKtypejsourcehnjlineM=uh1jhjhhhhhM=ubj)}(hhh]h)}(h(Duplicate implicit target name: "value".h]h,Duplicate implicit target name: “value”.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&]jLalevelKtypejsourcehnjlineMBuh1jhjhhhhhMBubj)}(hhh]h)}(h'Duplicate implicit target name: "list".h]h+Duplicate implicit target name: “list”.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&]jalevelKtypejsourcehnjlineM~uh1jhjdhhhhhM~ubj)}(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&]jalevelKtypejsourcehnjlineMuh1jhjhhhhhMubetransform_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&]levelKtypejsourcehnjlineKuh1jubj)}(hhh]h)}(hhh]h0Hyperlink target "assign-val" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehnjlineKuh1jubj)}(hhh]h)}(hhh]h/Hyperlink target "attr-list" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehnjlineMluh1jubj)}(hhh]h)}(hhh]h0Hyperlink target "attr-types" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehnjlineMuh1jubj)}(hhh]h)}(hhh]h.Hyperlink target "pad-type" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehnjlineMuh1jube transformerN include_log] decorationNhhub.