debian: Introduce and use custom NIC naming scheme

To add some context we start by referencing [1].
More lab tests are enabled now, which reveal more systemd naming
inconsistencies: searching parent slots ([2] vs [3]),
usage of port_name for path and slot ([4] vs [5], [6] vs [7]).
Based on previous observations infer that port_name[8] has to be
dropped from [9], even though it is not yet observed in any lab.
We observe we can't rely on a particular naming scheme already
implemented in systemd, thus we must create a custom one.
Name based on upcoming STX7.0 release.
Align naming to CentOS for discovered differences.

There may be more issues uncovered, as more labs are coverted to
Debian.

[1]: https://review.opendev.org/c/starlingx/kernel/+/841369
[2]: https://github.com/systemd/systemd/blob/v247/src/udev/
udev-builtin-net_id.c#L362,L373
[3]: https://github.com/systemd/systemd/blob/v219/src/udev/
udev-builtin-net_id.c#L229,L237
[4]: https://github.com/systemd/systemd/blob/v247/src/udev/
udev-builtin-net_id.c#L321-L324
[5]: https://github.com/systemd/systemd/blob/v219/src/udev/
udev-builtin-net_id.c#L198-L199
[6]: https://github.com/systemd/systemd/blob/v247/src/udev/
udev-builtin-net_id.c#L391-L394
[7]: https://github.com/systemd/systemd/blob/v219/src/udev/
udev-builtin-net_id.c#L248-L249
[8]: https://github.com/systemd/systemd/commit/
4887b656c22af059d4e833de7b56544f24951184
[9]: https://github.com/systemd/systemd/blob/v247/src/udev/
udev-builtin-net_id.c#L204-L207

Test on AIO-SX Debian:
PASS: Naming in sync with CentOS

Story: 2009964
Task: 45403
Signed-off-by: Dan Voiculeasa <dan.voiculeasa@windriver.com>
Change-Id: Ifdfd098634feaa5cfafa84b72d3308029cfdd70c
This commit is contained in:
Dan Voiculeasa 2022-05-18 14:16:10 +03:00
parent 53da7ef285
commit ce4befaafc
2 changed files with 113 additions and 0 deletions

View File

@ -0,0 +1,110 @@
From 6ba5057d343410d5b5f810974d9f4388cb7a9418 Mon Sep 17 00:00:00 2001
From: Dan Voiculeasa <dan.voiculeasa@windriver.com>
Date: Wed, 18 May 2022 13:20:33 +0300
Subject: [PATCH 14/14] Introduce and use custom NIC naming scheme
To add some context we start by referencing [1].
More lab tests are enabled now, which reveal more systemd naming
inconsistencies: searching parent slots ([2] vs [3]),
usage of port_name for path and slot ([4] vs [5], [6] vs [7]).
Based on previous observations infer that port_name[8] has to be
dropped from [9], even though it is not yet observed in any lab.
We observe we can't rely on a particular naming scheme already
implemented in systemd, thus we must create a custom one.
Name based on upcoming STX7.0 release.
Align naming to CentOS for discovered differences.
[1]: https://review.opendev.org/c/starlingx/kernel/+/841369
[2]: https://github.com/systemd/systemd/blob/v247/src/udev/
udev-builtin-net_id.c#L362,L373
[3]: https://github.com/systemd/systemd/blob/v219/src/udev/
udev-builtin-net_id.c#L229,L237
[4]: https://github.com/systemd/systemd/blob/v247/src/udev/
udev-builtin-net_id.c#L321-L324
[5]: https://github.com/systemd/systemd/blob/v219/src/udev/
udev-builtin-net_id.c#L198-L199
[6]: https://github.com/systemd/systemd/blob/v247/src/udev/
udev-builtin-net_id.c#L391-L394
[7]: https://github.com/systemd/systemd/blob/v219/src/udev/
udev-builtin-net_id.c#L248-L249
[8]: https://github.com/systemd/systemd/commit/
4887b656c22af059d4e833de7b56544f24951184
[9]: https://github.com/systemd/systemd/blob/v247/src/udev/
udev-builtin-net_id.c#L204-L207
Signed-off-by: Dan Voiculeasa <dan.voiculeasa@windriver.com>
---
src/shared/netif-naming-scheme.c | 3 +++
src/shared/netif-naming-scheme.h | 6 ++++++
src/udev/udev-builtin-net_id.c | 6 +++---
3 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/src/shared/netif-naming-scheme.c b/src/shared/netif-naming-scheme.c
index df520ab..150fe0d 100644
--- a/src/shared/netif-naming-scheme.c
+++ b/src/shared/netif-naming-scheme.c
@@ -14,6 +14,9 @@ static const NamingScheme naming_schemes[] = {
{ "v245", NAMING_V245 },
{ "v247", NAMING_V247 },
/* … add more schemes here, as the logic to name devices is updated … */
+ /* Need a custom naming scheme to keep naming the same as on CentOS.
+ * At least for initial release, until upgrade logic is implemented. */
+ { "vSTX7_0", NAMING_VSTX7_0 },
};
static const NamingScheme* naming_scheme_from_name(const char *name) {
diff --git a/src/shared/netif-naming-scheme.h b/src/shared/netif-naming-scheme.h
index 503a74e..5c90416 100644
--- a/src/shared/netif-naming-scheme.h
+++ b/src/shared/netif-naming-scheme.h
@@ -33,6 +33,8 @@ typedef enum NamingSchemeFlags {
NAMING_NSPAWN_LONG_HASH = 1 << 8, /* Shorten nspawn interfaces by including 24bit hash, instead of simple truncation */
NAMING_BRIDGE_NO_SLOT = 1 << 9, /* Don't use PCI hotplug slot information if the corresponding device is a PCI bridge */
+ NAMING_VSTX7_0 = NAMING_BRIDGE_NO_SLOT,
+
/* And now the masks that combine the features above */
NAMING_V238 = 0,
NAMING_V239 = NAMING_V238 | NAMING_SR_IOV_V | NAMING_NPAR_ARI,
@@ -55,3 +57,7 @@ const NamingScheme* naming_scheme(void);
static inline bool naming_scheme_has(NamingSchemeFlags flags) {
return FLAGS_SET(naming_scheme()->flags, flags);
}
+
+static inline bool naming_scheme_is(NamingSchemeFlags flags) {
+ return naming_scheme()->flags == flags;
+}
diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
index d06a8c7..825e9f8 100644
--- a/src/udev/udev-builtin-net_id.c
+++ b/src/udev/udev-builtin-net_id.c
@@ -201,7 +201,7 @@ static int dev_pci_onboard(sd_device *dev, struct netnames *names) {
s = names->pci_onboard;
l = sizeof(names->pci_onboard);
l = strpcpyf(&s, l, "o%lu", idx);
- if (port_name)
+ if (port_name && !naming_scheme_is(NAMING_VSTX7_0))
l = strpcpyf(&s, l, "n%s", port_name);
else if (dev_port > 0)
l = strpcpyf(&s, l, "d%lu", dev_port);
@@ -318,7 +318,7 @@ static int dev_pci_slot(sd_device *dev, struct netnames *names) {
l = strpcpyf(&s, l, "p%us%u", bus, slot);
if (func > 0 || is_pci_multifunction(names->pcidev))
l = strpcpyf(&s, l, "f%u", func);
- if (port_name)
+ if (port_name && !naming_scheme_is(NAMING_VSTX7_0))
l = strpcpyf(&s, l, "n%s", port_name);
else if (dev_port > 0)
l = strpcpyf(&s, l, "d%lu", dev_port);
@@ -388,7 +388,7 @@ static int dev_pci_slot(sd_device *dev, struct netnames *names) {
l = strpcpyf(&s, l, "s%d", hotplug_slot);
if (func > 0 || is_pci_multifunction(names->pcidev))
l = strpcpyf(&s, l, "f%d", func);
- if (port_name)
+ if (port_name && !naming_scheme_is(NAMING_VSTX7_0))
l = strpcpyf(&s, l, "n%s", port_name);
else if (dev_port > 0)
l = strpcpyf(&s, l, "d%lu", dev_port);
--
2.36.1

View File

@ -24,3 +24,6 @@ skip-some-testcases.patch
925-sd-event-use-usec_add.patch
926-sd-event-make-event_source_time_prioq_reshuffle-acce.patch
927-sd-event-always-reshuffle-time-prioq-on-changing-onl.patch
# Keep NIC naming in sync with CentOS
0014-Introduce-and-use-custom-NIC-naming-scheme.patch