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"
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 … */
16 static const NamingScheme
* naming_scheme_from_name(const char *name
) {
19 if (streq(name
, "latest"))
20 return naming_schemes
+ ELEMENTSOF(naming_schemes
) - 1;
22 for (i
= 0; i
< ELEMENTSOF(naming_schemes
); i
++)
23 if (streq(naming_schemes
[i
].name
, name
))
24 return naming_schemes
+ i
;
29 const NamingScheme
* naming_scheme(void) {
30 static const NamingScheme
*cache
= NULL
;
31 _cleanup_free_
char *buffer
= NULL
;
37 /* Acquire setting from the kernel command line */
38 (void) proc_cmdline_get_key("net.naming-scheme", 0, &buffer
);
40 /* Also acquire it from an env var */
41 e
= getenv("NET_NAMING_SCHEME");
44 /* If prefixed with ':' the kernel cmdline takes precedence */
47 k
= e
; /* Otherwise the env var takes precedence */
52 cache
= naming_scheme_from_name(k
);
54 log_info("Using interface naming scheme '%s'.", cache
->name
);
58 log_warning("Unknown interface naming scheme '%s' requested, ignoring.", k
);
61 cache
= naming_scheme_from_name(DEFAULT_NET_NAMING_SCHEME
);
63 log_info("Using default interface naming scheme '%s'.", cache
->name
);