Merge pull request #29588 from keszybz/net-naming-scheme-255

Untangle the net-naming-scheme mess with SR-IOV-R "representor" information
This commit is contained in:
Yu Watanabe
2023-10-17 19:18:29 +09:00
committed by GitHub
6 changed files with 57 additions and 28 deletions

14
NEWS
View File

@@ -60,6 +60,13 @@ CHANGES WITH 255 in spe:
is now dropped, as it never worked, hence it should not be used by
anyone.
* The predictable network interface naming logic is extended to include
the SR-IOV-R "representor" information in network interface names.
This feature was intended for v254, but even though the code was
merged, the part that actually enabled the feature was forgotten.
It is now enabled by default and is part of the new "v255" naming
scheme.
Changes in systemd-analyze:
* "systemd-analyze plot" has gained tooltips on each unit name with
@@ -576,8 +583,11 @@ CHANGES WITH 254:
selects the default value of the per-network setting of the same
name.
* The predictable network interface naming logic will now include
SR-IOV-R "representor" information in network interface names.
* The predictable network interface naming logic was extended to
include SR-IOV-R "representor" information in network interface
names. Unfortunately, this feature was not enabled by default and can
only be enabled at compilation time by setting
-Ddefault-net-naming-scheme=v254.
* The DHCPv4 + DHCPv6 + IPv6 RA logic in networkd gained support for
the RFC8910 captive portal option.

View File

@@ -505,13 +505,23 @@
<varlistentry>
<term><constant>v254</constant></term>
<listitem><para>Naming was changed for SR-IOV virtual device representors.</para>
<listitem><para>Naming was changed for SR-IOV virtual device representors, optionally settable at
compilation time. The <literal>r<replaceable>slot</replaceable></literal> suffix was added to
differentiate SR-IOV virtual device representors attached to a single physical device interface.
Because of a mistake, this scheme was <emphasis>not the the default scheme for systemd version
254</emphasis>.</para>
<para>The <literal>r<replaceable>slot</replaceable></literal> suffix was added to differentiate SR-IOV
virtual device representors attached to a single physical device interface.
</para>
<xi:include href="version-info.xml" xpointer="v255"/>
</listitem>
</varlistentry>
<xi:include href="version-info.xml" xpointer="v254"/>
<varlistentry>
<term><constant>v255</constant></term>
<listitem><para>Naming was changed for SR-IOV virtual device representors to enable the
change introduced in <constant>v254</constant> by default.</para>
<xi:include href="version-info.xml" xpointer="v255"/>
</listitem>
</varlistentry>

View File

@@ -767,10 +767,12 @@ conf.set('EXTRA_NET_NAMING_SCHEMES', ' '.join(extra_net_naming_schemes))
conf.set('EXTRA_NET_NAMING_MAP', ' '.join(extra_net_naming_map))
default_net_naming_scheme = get_option('default-net-naming-scheme')
conf.set_quoted('DEFAULT_NET_NAMING_SCHEME', default_net_naming_scheme)
conf.set_quoted('DEFAULT_NET_NAMING_SCHEME', default_net_naming_scheme,
description : 'Default naming scheme as a string')
if default_net_naming_scheme != 'latest'
conf.set('_DEFAULT_NET_NAMING_SCHEME_TEST',
'NAMING_' + default_net_naming_scheme.underscorify().to_upper())
conf.set('_DEFAULT_NET_NAMING_SCHEME',
'NAMING_' + default_net_naming_scheme.underscorify().to_upper(),
description : 'Default naming scheme as a constant')
endif
time_epoch = get_option('time-epoch')

View File

@@ -6,13 +6,6 @@
#include "string-util.h"
#include "string-table.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 },
@@ -27,6 +20,7 @@ static const NamingScheme naming_schemes[] = {
{ "v252", NAMING_V252 },
{ "v253", NAMING_V253 },
{ "v254", NAMING_V254 },
{ "v255", NAMING_V255 },
/* … add more schemes here, as the logic to name devices is updated … */
EXTRA_NET_NAMING_MAP
@@ -87,23 +81,23 @@ const NamingScheme* naming_scheme(void) {
}
static const char* const name_policy_table[_NAMEPOLICY_MAX] = {
[NAMEPOLICY_KERNEL] = "kernel",
[NAMEPOLICY_KEEP] = "keep",
[NAMEPOLICY_KERNEL] = "kernel",
[NAMEPOLICY_KEEP] = "keep",
[NAMEPOLICY_DATABASE] = "database",
[NAMEPOLICY_ONBOARD] = "onboard",
[NAMEPOLICY_SLOT] = "slot",
[NAMEPOLICY_PATH] = "path",
[NAMEPOLICY_MAC] = "mac",
[NAMEPOLICY_ONBOARD] = "onboard",
[NAMEPOLICY_SLOT] = "slot",
[NAMEPOLICY_PATH] = "path",
[NAMEPOLICY_MAC] = "mac",
};
DEFINE_STRING_TABLE_LOOKUP(name_policy, NamePolicy);
static const char* const alternative_names_policy_table[_NAMEPOLICY_MAX] = {
[NAMEPOLICY_DATABASE] = "database",
[NAMEPOLICY_ONBOARD] = "onboard",
[NAMEPOLICY_SLOT] = "slot",
[NAMEPOLICY_PATH] = "path",
[NAMEPOLICY_MAC] = "mac",
[NAMEPOLICY_ONBOARD] = "onboard",
[NAMEPOLICY_SLOT] = "slot",
[NAMEPOLICY_PATH] = "path",
[NAMEPOLICY_MAC] = "mac",
};
DEFINE_STRING_TABLE_LOOKUP(alternative_names_policy, NamePolicy);

View File

@@ -54,7 +54,11 @@ typedef enum NamingSchemeFlags {
NAMING_V251 = NAMING_V250 | NAMING_BRIDGE_MULTIFUNCTION_SLOT,
NAMING_V252 = NAMING_V251 | NAMING_DEVICETREE_ALIASES,
NAMING_V253 = NAMING_V252 | NAMING_USB_HOST,
NAMING_V254 = NAMING_V253 | NAMING_SR_IOV_R,
NAMING_V254 = NAMING_V253 | NAMING_SR_IOV_R, /* Despite the name, "v254" is NOT the default scheme
* for systemd version 254. It was added in a follow-up
* patch later. NAMING_SR_IOV_R is enabled by default in
* systemd version 255, naming scheme "v255". */
NAMING_V255 = NAMING_V254,
EXTRA_NET_NAMING_SCHEMES

View File

@@ -4,10 +4,19 @@
#include "string-util.h"
#include "tests.h"
#ifdef _DEFAULT_NET_NAMING_SCHEME
/* 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 >= 0);
#endif
TEST(default_net_naming_scheme) {
const NamingScheme *n;
assert_se(n = naming_scheme_from_name(DEFAULT_NET_NAMING_SCHEME));
log_info("default → %s", n->name);
assert_se(naming_scheme_from_name(n->name) == n);
}
TEST(naming_scheme_conversions) {