From: Zbigniew Jędrzejewski-Szmek Date: Tue, 28 Sep 2021 07:33:30 +0000 (+0200) Subject: meson: drop the list of valid net naming schemes X-Git-Tag: v250-rc1~602^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=77faadfdd3d2d934f52d1d35b60e774c494d84b8;p=thirdparty%2Fsystemd.git meson: drop the list of valid net naming schemes We used 'combo' type for the scheme list. For a while we forgot to add new names, and recently aa0a23ec86 added v241, v243, v245, and v247. I want to allow defining new values during configuration, which means that we can't use meson to verify the list of options. So any value is allowed, but then two tests are added: one that will fail compilation if some invalid name is given (other than "latest"), and one that converts DEFAULT_NET_NAMING_SCHEME to a NamingScheme pointer. --- diff --git a/meson.build b/meson.build index 9db035c3b79..67695a43682 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 dcd3c01ae4f..15be1959d1f 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 0a80931b0fc..287a942014b 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 119b80178f1..f5d040cc090 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 f58cf2d8436..0223086c690 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 00000000000..693b2f66043 --- /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(); +}