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(); +}