LCOV - code coverage report
Current view: top level - udev/net - naming-scheme.h (source / functions) Hit Total Coverage
Test: main_coverage.info Lines: 0 2 0.0 %
Date: 2019-08-22 15:41:25 Functions: 0 1 0.0 %

          Line data    Source code
       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             : }

Generated by: LCOV version 1.14