LCOV - code coverage report
Current view: top level - udev/net - naming-scheme.h (source / functions) Hit Total Coverage
Test: systemd_full.info Lines: 0 2 0.0 %
Date: 2019-08-23 13:36:53 Functions: 0 1 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 0 -

           Branch data     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