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

          Line data    Source code
       1             : /* SPDX-License-Identifier: LGPL-2.1+ */
       2             : #include "alloc-util.h"
       3             : #include "naming-scheme.h"
       4             : #include "proc-cmdline.h"
       5             : #include "string-util.h"
       6             : 
       7             : static const NamingScheme naming_schemes[] = {
       8             :         { "v238", NAMING_V238 },
       9             :         { "v239", NAMING_V239 },
      10             :         { "v240", NAMING_V240 },
      11             :         { "v241", NAMING_V241 },
      12             :         { "v243", NAMING_V243 },
      13             :         /* … add more schemes here, as the logic to name devices is updated … */
      14             : };
      15             : 
      16           0 : static const NamingScheme* naming_scheme_from_name(const char *name) {
      17             :         size_t i;
      18             : 
      19           0 :         if (streq(name, "latest"))
      20           0 :                 return naming_schemes + ELEMENTSOF(naming_schemes) - 1;
      21             : 
      22           0 :         for (i = 0; i < ELEMENTSOF(naming_schemes); i++)
      23           0 :                 if (streq(naming_schemes[i].name, name))
      24           0 :                         return naming_schemes + i;
      25             : 
      26           0 :         return NULL;
      27             : }
      28             : 
      29           0 : const NamingScheme* naming_scheme(void) {
      30             :         static const NamingScheme *cache = NULL;
      31           0 :         _cleanup_free_ char *buffer = NULL;
      32             :         const char *e, *k;
      33             : 
      34           0 :         if (cache)
      35           0 :                 return cache;
      36             : 
      37             :         /* Acquire setting from the kernel command line */
      38           0 :         (void) proc_cmdline_get_key("net.naming-scheme", 0, &buffer);
      39             : 
      40             :         /* Also acquire it from an env var */
      41           0 :         e = getenv("NET_NAMING_SCHEME");
      42           0 :         if (e) {
      43           0 :                 if (*e == ':') {
      44             :                         /* If prefixed with ':' the kernel cmdline takes precedence */
      45           0 :                         k = buffer ?: e + 1;
      46             :                 } else
      47           0 :                         k = e; /* Otherwise the env var takes precedence */
      48             :         } else
      49           0 :                 k = buffer;
      50             : 
      51           0 :         if (k) {
      52           0 :                 cache = naming_scheme_from_name(k);
      53           0 :                 if (cache) {
      54           0 :                         log_info("Using interface naming scheme '%s'.", cache->name);
      55           0 :                         return cache;
      56             :                 }
      57             : 
      58           0 :                 log_warning("Unknown interface naming scheme '%s' requested, ignoring.", k);
      59             :         }
      60             : 
      61           0 :         cache = naming_scheme_from_name(DEFAULT_NET_NAMING_SCHEME);
      62           0 :         assert(cache);
      63           0 :         log_info("Using default interface naming scheme '%s'.", cache->name);
      64             : 
      65           0 :         return cache;
      66             : }

Generated by: LCOV version 1.14