Coverage Report

Created: 2019-06-19 13:33

/src/systemd/src/udev/net/naming-scheme.h
Line
Count
Source (jump to first uncovered line)
1
/* SPDX-License-Identifier: LGPL-2.1+ */
2
#pragma once
3
4
#include <stdbool.h>
5
6
#include "macro.h"
7
8
/* So here's the deal: net_id is supposed to be an exercise in providing stable names for network devices. However, we
9
 * also want to keep updating the naming scheme used in future versions of net_id. These two goals of course are
10
 * contradictory: on one hand we want things to not change and on the other hand we want them to improve. Our way out
11
 * of this dilemma is to introduce the "naming scheme" concept: each time we improve the naming logic we define a new
12
 * flag for it. Then, we keep a list of schemes, each identified by a name associated with the flags it implements. Via
13
 * a kernel command line and environment variable we then allow the user to pick the scheme they want us to follow:
14
 * installers could "freeze" the used scheme at the moment of installation this way.
15
 *
16
 * Developers: each time you tweak the naming logic here, define a new flag below, and condition the tweak with
17
 * it. Each time we do a release we'll then add a new scheme entry and include all newly defined flags.
18
 *
19
 * Note that this is only half a solution to the problem though: not only udev/net_id gets updated all the time, the
20
 * kernel gets too. And thus a kernel that previously didn't expose some sysfs attribute we look for might eventually
21
 * do, and thus affect our naming scheme too. Thus, enforcing a naming scheme will make interfacing more stable across
22
 * OS versions, but not fully stabilize them. */
23
typedef enum NamingSchemeFlags {
24
        /* First, the individual features */
25
        NAMING_SR_IOV_V            = 1 << 0, /* Use "v" suffix for SR-IOV, see 609948c7043a */
26
        NAMING_NPAR_ARI            = 1 << 1, /* Use NPAR "ARI", see 6bc04997b6ea */
27
        NAMING_INFINIBAND          = 1 << 2, /* Use "ib" prefix for infiniband, see 938d30aa98df */
28
        NAMING_ZERO_ACPI_INDEX     = 1 << 3, /* Use zero acpi_index field, see d81186ef4f6a */
29
        NAMING_ALLOW_RERENAMES     = 1 << 4, /* Allow re-renaming of devices, see #9006 */
30
        NAMING_STABLE_VIRTUAL_MACS = 1 << 5, /* Use device name to generate MAC, see 6d3646406560 */
31
        NAMING_NETDEVSIM           = 1 << 6, /* Generate names for netdevsim devices, see eaa9d507d855 */
32
        NAMING_LABEL_NOPREFIX      = 1 << 7, /* Don't prepend ID_NET_LABEL_ONBOARD with interface type prefix */
33
34
        /* And now the masks that combine the features above */
35
        NAMING_V238 = 0,
36
        NAMING_V239 = NAMING_V238 | NAMING_SR_IOV_V | NAMING_NPAR_ARI,
37
        NAMING_V240 = NAMING_V239 | NAMING_INFINIBAND | NAMING_ZERO_ACPI_INDEX | NAMING_ALLOW_RERENAMES,
38
        NAMING_V241 = NAMING_V240 | NAMING_STABLE_VIRTUAL_MACS,
39
        NAMING_V243 = NAMING_V241 | NAMING_NETDEVSIM | NAMING_LABEL_NOPREFIX,
40
41
        _NAMING_SCHEME_FLAGS_INVALID = -1,
42
} NamingSchemeFlags;
43
44
typedef struct NamingScheme {
45
        const char *name;
46
        NamingSchemeFlags flags;
47
} NamingScheme;
48
49
const NamingScheme* naming_scheme(void);
50
51
0
static inline bool naming_scheme_has(NamingSchemeFlags flags) {
52
0
        return FLAGS_SET(naming_scheme()->flags, flags);
53
0
}
Unexecuted instantiation: udev-builtin-net_id.c:naming_scheme_has
Unexecuted instantiation: link-config.c:naming_scheme_has
Unexecuted instantiation: naming-scheme.c:naming_scheme_has