summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meson.build4
-rw-r--r--meson_options.txt3
-rw-r--r--src/shared/netif-naming-scheme.c10
-rw-r--r--src/shared/netif-naming-scheme.h1
-rw-r--r--src/test/meson.build2
-rw-r--r--src/test/test-net-naming-scheme.c31
6 files changed, 47 insertions, 4 deletions
diff --git a/meson.build b/meson.build
index 9db035c3b7..67695a4368 100644
--- a/meson.build
+++ b/meson.build
@@ -709,6 +709,10 @@ endif
default_net_naming_scheme = get_option('default-net-naming-scheme')
conf.set_quoted('DEFAULT_NET_NAMING_SCHEME', default_net_naming_scheme)
+if default_net_naming_scheme != 'latest'
+ conf.set('_DEFAULT_NET_NAMING_SCHEME_TEST',
+ 'NAMING_' + default_net_naming_scheme.underscorify().to_upper())
+endif
time_epoch = get_option('time-epoch')
if time_epoch == -1
diff --git a/meson_options.txt b/meson_options.txt
index dcd3c01ae4..15be1959d1 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -200,8 +200,7 @@ option('fallback-hostname', type : 'string', value : 'localhost',
option('default-hierarchy', type : 'combo',
choices : ['legacy', 'hybrid', 'unified'], value : 'unified',
description : 'default cgroup hierarchy')
-option('default-net-naming-scheme', type : 'combo',
- choices : ['latest', 'v238', 'v239', 'v240', 'v241', 'v243', 'v245', 'v247', 'v249'],
+option('default-net-naming-scheme', type : 'string', value : 'latest',
description : 'default net.naming-scheme= value')
option('status-unit-format-default', type : 'combo',
choices : ['description', 'name', 'combined'],
diff --git a/src/shared/netif-naming-scheme.c b/src/shared/netif-naming-scheme.c
index 0a80931b0f..287a942014 100644
--- a/src/shared/netif-naming-scheme.c
+++ b/src/shared/netif-naming-scheme.c
@@ -5,6 +5,13 @@
#include "proc-cmdline.h"
#include "string-util.h"
+#ifdef _DEFAULT_NET_NAMING_SCHEME_TEST
+/* The primary purpose of this check is to verify that _DEFAULT_NET_NAMING_SCHEME_TEST
+ * is a valid identifier. If an invalid name is given during configuration, this will
+ * fail with a name error. */
+assert_cc(_DEFAULT_NET_NAMING_SCHEME_TEST >= 0);
+#endif
+
static const NamingScheme naming_schemes[] = {
{ "v238", NAMING_V238 },
{ "v239", NAMING_V239 },
@@ -15,10 +22,9 @@ static const NamingScheme naming_schemes[] = {
{ "v247", NAMING_V247 },
{ "v249", NAMING_V249 },
/* … add more schemes here, as the logic to name devices is updated … */
- /* also remember to update the list of options in meson_options.txt */
};
-static const NamingScheme* naming_scheme_from_name(const char *name) {
+const NamingScheme* naming_scheme_from_name(const char *name) {
if (streq(name, "latest"))
return naming_schemes + ELEMENTSOF(naming_schemes) - 1;
diff --git a/src/shared/netif-naming-scheme.h b/src/shared/netif-naming-scheme.h
index 119b80178f..f5d040cc09 100644
--- a/src/shared/netif-naming-scheme.h
+++ b/src/shared/netif-naming-scheme.h
@@ -54,6 +54,7 @@ typedef struct NamingScheme {
NamingSchemeFlags flags;
} NamingScheme;
+const NamingScheme* naming_scheme_from_name(const char *name);
const NamingScheme* naming_scheme(void);
static inline bool naming_scheme_has(NamingSchemeFlags flags) {
diff --git a/src/test/meson.build b/src/test/meson.build
index f58cf2d843..0223086c69 100644
--- a/src/test/meson.build
+++ b/src/test/meson.build
@@ -429,6 +429,8 @@ tests += [
[['src/test/test-firewall-util.c']],
+ [['src/test/test-net-naming-scheme.c']],
+
[['src/test/test-netlink-manual.c'],
[],
[libkmod],
diff --git a/src/test/test-net-naming-scheme.c b/src/test/test-net-naming-scheme.c
new file mode 100644
index 0000000000..693b2f6604
--- /dev/null
+++ b/src/test/test-net-naming-scheme.c
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "netif-naming-scheme.h"
+#include "string-util.h"
+#include "tests.h"
+
+static void test_default_net_naming_scheme(void) {
+ log_info("/* %s */", __func__);
+
+ const NamingScheme *n;
+ assert_se(n = naming_scheme_from_name(DEFAULT_NET_NAMING_SCHEME));
+ log_info("default → %s", n->name);
+}
+
+static void test_naming_scheme_conversions(void) {
+ log_info("/* %s */", __func__);
+
+ const NamingScheme *n;
+ assert_se(n = naming_scheme_from_name("latest"));
+ log_info("latest → %s", n->name);
+
+ assert_se(n = naming_scheme_from_name("v238"));
+ assert_se(streq(n->name, "v238"));
+}
+
+int main(int argc, char **argv) {
+ test_setup_logging(LOG_INFO);
+
+ test_default_net_naming_scheme();
+ test_naming_scheme_conversions();
+}