Based on kernel version 6.8
. Page generated on 2024-03-11 21:26 EST
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | .. SPDX-License-Identifier: BSD-3-Clause ============================== Netlink spec C code generation ============================== This document describes how Netlink specifications are used to render C code (uAPI, policies etc.). It also defines the additional properties allowed in older families by the ``genetlink-c`` protocol level, to control the naming. For brevity this document refers to ``name`` properties of various objects by the object type. For example ``$attr`` is the value of ``name`` in an attribute, and ``$family`` is the name of the family (the global ``name`` property). The upper case is used to denote literal values, e.g. ``$family-CMD`` means the concatenation of ``$family``, a dash character, and the literal ``CMD``. The names of ``#defines`` and enum values are always converted to upper case, and with dashes (``-``) replaced by underscores (``_``). If the constructed name is a C keyword, an extra underscore is appended (``do`` -> ``do_``). Globals ======= ``c-family-name`` controls the name of the ``#define`` for the family name, default is ``$family-FAMILY-NAME``. ``c-version-name`` controls the name of the ``#define`` for the version of the family, default is ``$family-FAMILY-VERSION``. ``max-by-define`` selects if max values for enums are defined as a ``#define`` rather than inside the enum. Definitions =========== Constants --------- Every constant is rendered as a ``#define``. The name of the constant is ``$family-$constant`` and the value is rendered as a string or integer according to its type in the spec. Enums and flags --------------- Enums are named ``$family-$enum``. The full name can be set directly or suppressed by specifying the ``enum-name`` property. Default entry name is ``$family-$enum-$entry``. If ``name-prefix`` is specified it replaces the ``$family-$enum`` portion of the entry name. Boolean ``render-max`` controls creation of the max values (which are enabled by default for attribute enums). Attributes ========== Each attribute set (excluding fractional sets) is rendered as an enum. Attribute enums are traditionally unnamed in netlink headers. If naming is desired ``enum-name`` can be used to specify the name. The default attribute name prefix is ``$family-A`` if the name of the set is the same as the name of the family and ``$family-A-$set`` if the names differ. The prefix can be overridden by the ``name-prefix`` property of a set. The rest of the section will refer to the prefix as ``$pfx``. Attributes are named ``$pfx-$attribute``. Attribute enums end with two special values ``__$pfx-MAX`` and ``$pfx-MAX`` which are used for sizing attribute tables. These two names can be specified directly with the ``attr-cnt-name`` and ``attr-max-name`` properties respectively. If ``max-by-define`` is set to ``true`` at the global level ``attr-max-name`` will be specified as a ``#define`` rather than an enum value. Operations ========== Operations are named ``$family-CMD-$operation``. If ``name-prefix`` is specified it replaces the ``$family-CMD`` portion of the name. Similarly to attribute enums operation enums end with special count and max attributes. For operations those attributes can be renamed with ``cmd-cnt-name`` and ``cmd-max-name``. Max will be a define if ``max-by-define`` is ``true``. Multicast groups ================ Each multicast group gets a define rendered into the kernel uAPI header. The name of the define is ``$family-MCGRP-$group``, and can be overwritten with the ``c-define-name`` property. Code generation =============== uAPI header is assumed to come from ``<linux/$family.h>`` in the default header search path. It can be changed using the ``uapi-header`` global property. |