Update to 1.54.0 (rc2)

- Support deactivating a connection without resetting SRIOV sriov_numvfs (RHEL-69125)
- Fix a race condition in ovs tun interface (RHEL-17358)

Resolves: RHEL-69125
Resolves: RHEL-17358
This commit is contained in:
Filip Pokryvka 2025-06-20 12:48:04 +02:00
parent 7129b05282
commit 1763b7d962
5 changed files with 362 additions and 214 deletions

1
.gitignore vendored
View File

@ -459,3 +459,4 @@ network-manager-applet-0.8.1.tar.bz2
/NetworkManager-1.53.3.tar.xz /NetworkManager-1.53.3.tar.xz
/NetworkManager-1.53.4.tar.xz /NetworkManager-1.53.4.tar.xz
/NetworkManager-1.53.90.tar.xz /NetworkManager-1.53.90.tar.xz
/NetworkManager-1.53.91.tar.xz

View File

@ -0,0 +1,351 @@
From 8a5e7014d6e46511f8b394eef7a6abea04b44cb3 Mon Sep 17 00:00:00 2001
From: Beniamino Galvani <bgalvani@redhat.com>
Date: Mon, 19 May 2025 14:15:27 +0200
Subject: [PATCH 1/4] libnm,nmcli: add sriov.preserve-on-down property
Add a new "sriov.preserve-on-down" property that controls whether
NetworkManager preserves the SR-IOV parameters set on the device when
the connection is deactivated, or whether it resets them to their
default value. The SR-IOV parameters are those specified in the
"sriov" setting, like the number of VFs to create, the eswitch
configuration, etc.
(cherry picked from commit eb0a22a162a57658156abceb252b3c115fd645fe)
---
src/libnm-client-impl/libnm.ver | 2 +
...gen-metadata-nm-settings-libnm-core.xml.in | 4 ++
src/libnm-core-impl/nm-setting-sriov.c | 47 +++++++++++++++++++
src/libnm-core-public/nm-setting-sriov.h | 19 ++++++++
src/libnmc-setting/nm-meta-setting-desc.c | 3 ++
src/libnmc-setting/settings-docs.h.in | 1 +
.../gen-metadata-nm-settings-nmcli.xml.in | 4 ++
7 files changed, 80 insertions(+)
diff --git a/src/libnm-client-impl/libnm.ver b/src/libnm-client-impl/libnm.ver
index 6a093a0658..ad05a4e29c 100644
--- a/src/libnm-client-impl/libnm.ver
+++ b/src/libnm-client-impl/libnm.ver
@@ -2073,4 +2073,6 @@ global:
nm_setting_prefix_delegation_get_subnet_id;
nm_setting_prefix_delegation_get_type;
nm_setting_prefix_delegation_new;
+ nm_setting_sriov_get_preserve_on_down;
+ nm_sriov_preserve_on_down_get_type;
} libnm_1_52_0;
diff --git a/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in b/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in
index d165957179..c764f53568 100644
--- a/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in
+++ b/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in
@@ -2386,6 +2386,10 @@
dbus-type="i"
gprop-type="gint"
/>
+ <property name="preserve-on-down"
+ dbus-type="i"
+ gprop-type="gint"
+ />
<property name="total-vfs"
dbus-type="u"
gprop-type="guint"
diff --git a/src/libnm-core-impl/nm-setting-sriov.c b/src/libnm-core-impl/nm-setting-sriov.c
index 4dc61d8232..d6be0ec1d3 100644
--- a/src/libnm-core-impl/nm-setting-sriov.c
+++ b/src/libnm-core-impl/nm-setting-sriov.c
@@ -22,6 +22,7 @@
NM_GOBJECT_PROPERTIES_DEFINE(NMSettingSriov,
PROP_TOTAL_VFS,
PROP_VFS,
+ PROP_PRESERVE_ON_DOWN,
PROP_AUTOPROBE_DRIVERS,
PROP_ESWITCH_MODE,
PROP_ESWITCH_INLINE_MODE,
@@ -39,6 +40,7 @@ struct _NMSettingSriov {
GPtrArray *vfs;
int autoprobe_drivers;
guint32 total_vfs;
+ int preserve_on_down;
int eswitch_mode;
int eswitch_inline_mode;
int eswitch_encap_mode;
@@ -826,6 +828,22 @@ nm_setting_sriov_clear_vfs(NMSettingSriov *setting)
}
}
+/**
+ * nm_setting_sriov_get_preserve_on_down:
+ * @setting: the #NMSettingSriov
+ *
+ * Returns: the value contained in the #NMSettingSriov:preserve-on-down property.
+ *
+ * Since: 1.54
+ */
+NMSriovPreserveOnDown
+nm_setting_sriov_get_preserve_on_down(NMSettingSriov *setting)
+{
+ g_return_val_if_fail(NM_IS_SETTING_SRIOV(setting), NM_SRIOV_PRESERVE_ON_DOWN_DEFAULT);
+
+ return setting->preserve_on_down;
+}
+
/**
* nm_setting_sriov_get_autoprobe_drivers:
* @setting: the #NMSettingSriov
@@ -1462,6 +1480,35 @@ nm_setting_sriov_class_init(NMSettingSriovClass *klass)
NMSettingSriov,
eswitch_encap_mode);
+ /**
+ * NMSettingSriov:preserve-on-down
+ *
+ * This controls whether NetworkManager preserves the SR-IOV parameters set on
+ * the device when the connection is deactivated, or whether it resets them to
+ * their default value. The SR-IOV parameters are those specified in this setting
+ * (the "sriov" setting), like the number of VFs to create, the eswitch
+ * configuration, etc.
+ *
+ * If set to %NM_SRIOV_PRESERVE_ON_DOWN_NO, NetworkManager resets the SR-IOV
+ * parameters when the connection is deactivated. When set to
+ * %NM_SRIOV_PRESERVE_ON_DOWN_YES, NetworkManager preserves those parameters
+ * on the device. If the value is %NM_SRIOV_PRESERVE_ON_DOWN_DEFAULT, NetworkManager
+ * looks up a global default value in the configuration; in case no such value is
+ * defined, it uses %NM_SRIOV_PRESERVE_ON_DOWN_NO as fallback.
+ *
+ * Since: 1.54
+ */
+ _nm_setting_property_define_direct_enum(properties_override,
+ obj_properties,
+ NM_SETTING_SRIOV_PRESERVE_ON_DOWN,
+ PROP_PRESERVE_ON_DOWN,
+ NM_TYPE_SRIOV_PRESERVE_ON_DOWN,
+ NM_SRIOV_PRESERVE_ON_DOWN_DEFAULT,
+ NM_SETTING_PARAM_FUZZY_IGNORE,
+ NULL,
+ NMSettingSriov,
+ preserve_on_down);
+
g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties);
_nm_setting_class_commit(setting_class,
diff --git a/src/libnm-core-public/nm-setting-sriov.h b/src/libnm-core-public/nm-setting-sriov.h
index affccc4892..60c5005c0b 100644
--- a/src/libnm-core-public/nm-setting-sriov.h
+++ b/src/libnm-core-public/nm-setting-sriov.h
@@ -28,6 +28,7 @@ G_BEGIN_DECLS
#define NM_SETTING_SRIOV_TOTAL_VFS "total-vfs"
#define NM_SETTING_SRIOV_VFS "vfs"
+#define NM_SETTING_SRIOV_PRESERVE_ON_DOWN "preserve-on-down"
#define NM_SETTING_SRIOV_AUTOPROBE_DRIVERS "autoprobe-drivers"
#define NM_SETTING_SRIOV_ESWITCH_MODE "eswitch-mode"
#define NM_SETTING_SRIOV_ESWITCH_INLINE_MODE "eswitch-inline-mode"
@@ -56,6 +57,22 @@ typedef enum {
NM_SRIOV_VF_VLAN_PROTOCOL_802_1AD = 1,
} NMSriovVFVlanProtocol;
+/**
+ * NMSriovPreserveOnDown:
+ * @NM_SRIOV_PRESERVE_ON_DOWN_DEFAULT: use the default value
+ * @NM_SRIOV_PRESERVE_ON_DOWN_NO: reset the SR-IOV parameters when the
+ * connection is deactivated
+ * @NM_SRIOV_PRESERVE_ON_DOWN_YES: preserve the SR-IOV parameters set on
+ * the device when the connection is deactivated
+ *
+ * Since: 1.54
+ */
+typedef enum {
+ NM_SRIOV_PRESERVE_ON_DOWN_DEFAULT = -1,
+ NM_SRIOV_PRESERVE_ON_DOWN_NO = 0,
+ NM_SRIOV_PRESERVE_ON_DOWN_YES = 1,
+} NMSriovPreserveOnDown;
+
/**
* NMSriovEswitchMode:
* @NM_SRIOV_ESWITCH_MODE_PRESERVE: don't modify current eswitch mode
@@ -123,6 +140,8 @@ NM_AVAILABLE_IN_1_14
gboolean nm_setting_sriov_remove_vf_by_index(NMSettingSriov *setting, guint index);
NM_AVAILABLE_IN_1_14
void nm_setting_sriov_clear_vfs(NMSettingSriov *setting);
+NM_AVAILABLE_IN_1_54
+NMSriovPreserveOnDown nm_setting_sriov_get_preserve_on_down(NMSettingSriov *setting);
NM_AVAILABLE_IN_1_14
NMTernary nm_setting_sriov_get_autoprobe_drivers(NMSettingSriov *setting);
NM_AVAILABLE_IN_1_46
diff --git a/src/libnmc-setting/nm-meta-setting-desc.c b/src/libnmc-setting/nm-meta-setting-desc.c
index 9b11cd4a17..aa290b9f10 100644
--- a/src/libnmc-setting/nm-meta-setting-desc.c
+++ b/src/libnmc-setting/nm-meta-setting-desc.c
@@ -7630,6 +7630,9 @@ static const NMMetaPropertyInfo *const property_infos_SRIOV[] = {
PROPERTY_INFO_WITH_DESC (NM_SETTING_SRIOV_ESWITCH_ENCAP_MODE,
.property_type = &_pt_gobject_enum,
),
+ PROPERTY_INFO_WITH_DESC (NM_SETTING_SRIOV_PRESERVE_ON_DOWN,
+ .property_type = &_pt_gobject_enum,
+ ),
NULL
};
diff --git a/src/libnmc-setting/settings-docs.h.in b/src/libnmc-setting/settings-docs.h.in
index 84c1b790ad..56c7c29cd5 100644
--- a/src/libnmc-setting/settings-docs.h.in
+++ b/src/libnmc-setting/settings-docs.h.in
@@ -353,6 +353,7 @@
#define DESCRIBE_DOC_NM_SETTING_SRIOV_ESWITCH_ENCAP_MODE N_("Select the eswitch encapsulation support. Currently it's only supported for PCI PF devices, and only if the eswitch device is managed from the same PCI address than the PF. If set to \"preserve\" (-1) (default) the eswitch encap-mode won't be modified by NetworkManager.")
#define DESCRIBE_DOC_NM_SETTING_SRIOV_ESWITCH_INLINE_MODE N_("Select the eswitch inline-mode of the device. Some HWs need the VF driver to put part of the packet headers on the TX descriptor so the e-switch can do proper matching and steering. Currently it's only supported for PCI PF devices, and only if the eswitch device is managed from the same PCI address than the PF. If set to \"preserve\" (-1) (default) the eswitch inline-mode won't be modified by NetworkManager.")
#define DESCRIBE_DOC_NM_SETTING_SRIOV_ESWITCH_MODE N_("Select the eswitch mode of the device. Currently it's only supported for PCI PF devices, and only if the eswitch device is managed from the same PCI address than the PF. If set to \"preserve\" (-1) (default) the eswitch mode won't be modified by NetworkManager.")
+#define DESCRIBE_DOC_NM_SETTING_SRIOV_PRESERVE_ON_DOWN N_("This controls whether NetworkManager preserves the SR-IOV parameters set on the device when the connection is deactivated, or whether it resets them to their default value. The SR-IOV parameters are those specified in this setting (the \"sriov\" setting), like the number of VFs to create, the eswitch configuration, etc. If set to \"no\" (0), NetworkManager resets the SR-IOV parameters when the connection is deactivated. When set to \"yes\" (1), NetworkManager preserves those parameters on the device. If the value is \"default\" (-1), NetworkManager looks up a global default value in the configuration; in case no such value is defined, it uses \"no\" (0) as fallback.")
#define DESCRIBE_DOC_NM_SETTING_SRIOV_TOTAL_VFS N_("The total number of virtual functions to create. Note that when the sriov setting is present NetworkManager enforces the number of virtual functions on the interface (also when it is zero) during activation and resets it upon deactivation. To prevent any changes to SR-IOV parameters don't add a sriov setting to the connection.")
#define DESCRIBE_DOC_NM_SETTING_SRIOV_VFS N_("Array of virtual function descriptors. Each VF descriptor is a dictionary mapping attribute names to GVariant values. The 'index' entry is mandatory for each VF. When represented as string a VF is in the form: \"INDEX [ATTR=VALUE[ ATTR=VALUE]...]\". for example: \"2 mac=00:11:22:33:44:55 spoof-check=true\". Multiple VFs can be specified using a comma as separator. Currently, the following attributes are supported: mac, spoof-check, trust, min-tx-rate, max-tx-rate, vlans. The \"vlans\" attribute is represented as a semicolon-separated list of VLAN descriptors, where each descriptor has the form \"ID[.PRIORITY[.PROTO]]\". PROTO can be either 'q' for 802.1Q (the default) or 'ad' for 802.1ad.")
#define DESCRIBE_DOC_NM_SETTING_TC_CONFIG_QDISCS N_("Array of TC queueing disciplines. When the \"tc\" setting is present, qdiscs from this property are applied upon activation. If the property is empty, all qdiscs are removed and the device will only have the default qdisc assigned by kernel according to the \"net.core.default_qdisc\" sysctl. If the \"tc\" setting is not present, NetworkManager doesn't touch the qdiscs present on the interface.")
diff --git a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in
index bbfbf79d84..67b14d4c6e 100644
--- a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in
+++ b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in
@@ -1984,6 +1984,10 @@
nmcli-description="Select the eswitch encapsulation support. Currently it&apos;s only supported for PCI PF devices, and only if the eswitch device is managed from the same PCI address than the PF. If set to &quot;preserve&quot; (-1) (default) the eswitch encap-mode won&apos;t be modified by NetworkManager."
format="choice (NMSriovEswitchEncapMode)"
values="preserve (-1), none (0), basic (1)" />
+ <property name="preserve-on-down"
+ nmcli-description="This controls whether NetworkManager preserves the SR-IOV parameters set on the device when the connection is deactivated, or whether it resets them to their default value. The SR-IOV parameters are those specified in this setting (the &quot;sriov&quot; setting), like the number of VFs to create, the eswitch configuration, etc. If set to &quot;no&quot; (0), NetworkManager resets the SR-IOV parameters when the connection is deactivated. When set to &quot;yes&quot; (1), NetworkManager preserves those parameters on the device. If the value is &quot;default&quot; (-1), NetworkManager looks up a global default value in the configuration; in case no such value is defined, it uses &quot;no&quot; (0) as fallback."
+ format="choice (NMSriovPreserveOnDown)"
+ values="default (-1), no (0), yes (1)" />
</setting>
<setting name="tc" >
<property name="qdiscs"
--
2.47.1
From c88d75ac6ae685dbda628999cd2260044e029824 Mon Sep 17 00:00:00 2001
From: Beniamino Galvani <bgalvani@redhat.com>
Date: Mon, 19 May 2025 15:39:45 +0200
Subject: [PATCH 2/4] core: use the sriov.preserve-on-down property
(cherry picked from commit c70b4a98a33c5be4e025461a3aafcb42a049fdb5)
---
man/NetworkManager.conf.xml | 6 ++++++
src/core/devices/nm-device.c | 26 ++++++++++++++++++++++++--
2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/man/NetworkManager.conf.xml b/man/NetworkManager.conf.xml
index 93e7b016cf..2b42755971 100644
--- a/man/NetworkManager.conf.xml
+++ b/man/NetworkManager.conf.xml
@@ -1093,6 +1093,12 @@ ipv6.ip6-privacy=0
<term><varname>sriov.autoprobe-drivers</varname></term>
<listitem><para>If left unspecified, drivers are autoprobed when the SR-IOV VF gets created.</para></listitem>
</varlistentry>
+ <varlistentry>
+ <term><varname>sriov.preserve-on-down</varname></term>
+ <listitem><para>Set to 0 or 1 to select whether the SR-IOV parameters are
+ preserved when the connection is deactivated. If left unspecified, default
+ to 0 (parameters are not preserved). </para></listitem>
+ </varlistentry>
<varlistentry>
<term><varname>vpn.timeout</varname></term>
<listitem><para>If left unspecified, default value of 60 seconds is used.</para></listitem>
diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
index f099e16fb5..35df66ced6 100644
--- a/src/core/devices/nm-device.c
+++ b/src/core/devices/nm-device.c
@@ -1416,6 +1416,26 @@ _prop_get_connection_mdns(NMDevice *self)
NM_SETTING_CONNECTION_MDNS_DEFAULT);
}
+static gboolean
+_prop_get_sriov_preserve_on_down(NMDevice *self, NMSettingSriov *s_sriov)
+{
+ NMSriovPreserveOnDown preserve;
+
+ g_return_val_if_fail(NM_IS_DEVICE(self), FALSE);
+ g_return_val_if_fail(NM_IS_SETTING_SRIOV(s_sriov), FALSE);
+
+ preserve = nm_setting_sriov_get_preserve_on_down(s_sriov);
+ if (NM_IN_SET(preserve, NM_SRIOV_PRESERVE_ON_DOWN_NO, NM_SRIOV_PRESERVE_ON_DOWN_YES))
+ return preserve;
+
+ return nm_config_data_get_connection_default_int64(NM_CONFIG_GET_DATA,
+ NM_CON_DEFAULT("sriov.preserve-on-down"),
+ self,
+ NM_SRIOV_PRESERVE_ON_DOWN_NO,
+ NM_SRIOV_PRESERVE_ON_DOWN_YES,
+ NM_SRIOV_PRESERVE_ON_DOWN_NO);
+}
+
static NMSettingConnectionLlmnr
_prop_get_connection_llmnr(NMDevice *self)
{
@@ -17478,7 +17498,8 @@ _set_state_full(NMDevice *self, NMDeviceState state, NMDeviceStateReason reason,
}
if (priv->ifindex > 0
- && (s_sriov = nm_device_get_applied_setting(self, NM_TYPE_SETTING_SRIOV))) {
+ && (s_sriov = nm_device_get_applied_setting(self, NM_TYPE_SETTING_SRIOV))
+ && (!_prop_get_sriov_preserve_on_down(self, s_sriov))) {
priv->sriov_reset_pending++;
sriov_op_queue(self,
0,
@@ -17533,7 +17554,8 @@ _set_state_full(NMDevice *self, NMDeviceState state, NMDeviceStateReason reason,
nm_settings_connection_update_timestamp(sett_conn, (guint64) 0);
if (priv->ifindex > 0
- && (s_sriov = nm_device_get_applied_setting(self, NM_TYPE_SETTING_SRIOV))) {
+ && (s_sriov = nm_device_get_applied_setting(self, NM_TYPE_SETTING_SRIOV))
+ && (!_prop_get_sriov_preserve_on_down(self, s_sriov))) {
priv->sriov_reset_pending++;
sriov_op_queue(self,
0,
--
2.47.1
From ddfc2696e3bbed41b952e75daef00a4629b4f342 Mon Sep 17 00:00:00 2001
From: Beniamino Galvani <bgalvani@redhat.com>
Date: Thu, 5 Jun 2025 10:28:07 +0200
Subject: [PATCH 3/4] device: allow reapplying the sriov.preserve-on-down
property
It is useful when there is an already active device and we want to
bring it down preserving the SR-IOV VFs. For example:
$ nmcli connection add type ethernet ifname eni1np1 sriov.total-vfs 2 ipv4.method disabled ipv6.method disabled
$ nmcli connection up ethernet-eni1np1
$ ip link show eni1np1
342: eni1np1: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 6e:cf:f0:08:74:f4 brd ff:ff:ff:ff:ff:ff
vf 0 link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, ...
vf 1 link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, ...
$ nmcli device modify eni1np1 sriov.preserve-on-down yes
$ nmcli connection down ethernet-eni1np1
$ ip link show eni1np1
342: eni1np1: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 6e:cf:f0:08:74:f4 brd ff:ff:ff:ff:ff:ff
vf 0 link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, ...
vf 1 link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, ...
(cherry picked from commit 6f219aa649090152388da5f893ea3f0b4f6852ab)
---
src/core/devices/nm-device.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
index 35df66ced6..96cacca78e 100644
--- a/src/core/devices/nm-device.c
+++ b/src/core/devices/nm-device.c
@@ -14050,6 +14050,13 @@ can_reapply_change(NMDevice *self,
goto out_fail;
}
+ if (nm_streq(setting_name, NM_SETTING_SRIOV_SETTING_NAME)) {
+ return nm_device_hash_check_invalid_keys(diffs,
+ NM_SETTING_SRIOV_SETTING_NAME,
+ error,
+ NM_SETTING_SRIOV_PRESERVE_ON_DOWN);
+ }
+
out_fail:
g_set_error(error,
NM_DEVICE_ERROR,
--
2.47.1

View File

@ -1,210 +0,0 @@
From 736c6c7930c74c653c61379d7258cc1d93973e0a Mon Sep 17 00:00:00 2001
From: Beniamino Galvani <bgalvani@redhat.com>
Date: Wed, 12 Feb 2025 20:54:51 +0100
Subject: [PATCH 1/3] dnsconfd: fix handling of the update-pending flag
After every state change of the plugin there should be an invocation
of _nm_dns_plugin_update_pending_maybe_changed() to re-evaluate
whether we are waiting for an update. send_dnsconfd_update() doesn't
change the state and so there is need to check again afterwards.
(cherry picked from commit 8ff1cbf38b53950a6f12239326a1f41eca573915)
(cherry picked from commit dc0ff10efb2b9ea370fbe98d0a5720e9e9f15173)
---
src/core/dns/nm-dns-dnsconfd.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/core/dns/nm-dns-dnsconfd.c b/src/core/dns/nm-dns-dnsconfd.c
index b356c2f9ca..38b7558a12 100644
--- a/src/core/dns/nm-dns-dnsconfd.c
+++ b/src/core/dns/nm-dns-dnsconfd.c
@@ -61,7 +61,11 @@ G_DEFINE_TYPE(NMDnsDnsconfd, nm_dns_dnsconfd, NM_TYPE_DNS_PLUGIN)
#define DNSCONFD_DBUS_SERVICE "com.redhat.dnsconfd"
-typedef enum { CONNECTION_FAIL, CONNECTION_SUCCESS, CONNECTION_WAIT } ConnectionState;
+typedef enum {
+ CONNECTION_FAIL,
+ CONNECTION_SUCCESS,
+ CONNECTION_WAIT,
+} ConnectionState;
/*****************************************************************************/
@@ -704,6 +708,8 @@ update(NMDnsPlugin *plugin,
_LOGT("connected, waiting for update to finish");
}
+ _nm_dns_plugin_update_pending_maybe_changed(plugin);
+
if (all_connected == CONNECTION_FAIL) {
nm_utils_error_set(error,
NM_UTILS_ERROR_UNKNOWN,
@@ -717,8 +723,6 @@ update(NMDnsPlugin *plugin,
send_dnsconfd_update(self);
- _nm_dns_plugin_update_pending_maybe_changed(NM_DNS_PLUGIN(self));
-
return TRUE;
}
--
2.48.1
From 3784576e6f967b1c70c7364fe55ee0b73a06dd8b Mon Sep 17 00:00:00 2001
From: Beniamino Galvani <bgalvani@redhat.com>
Date: Wed, 12 Feb 2025 20:58:27 +0100
Subject: [PATCH 2/3] dnsconfd: set the state to idle when connection fails
If the plugin can't connect to D-Bus, it is not waiting for an update;
set the state to idle.
(cherry picked from commit 2bfd27f74d869a529a14e478019399075ca37d03)
(cherry picked from commit e20794989b0bea80a120888a34d4d9915cbd8529)
---
src/core/dns/nm-dns-dnsconfd.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/core/dns/nm-dns-dnsconfd.c b/src/core/dns/nm-dns-dnsconfd.c
index 38b7558a12..b4c935db62 100644
--- a/src/core/dns/nm-dns-dnsconfd.c
+++ b/src/core/dns/nm-dns-dnsconfd.c
@@ -700,7 +700,10 @@ update(NMDnsPlugin *plugin,
/* We need to consider only whether we are connected, because newer update call
* overrides the old one */
- if (all_connected != CONNECTION_SUCCESS) {
+ if (all_connected == CONNECTION_FAIL) {
+ priv->plugin_state = DNSCONFD_PLUGIN_IDLE;
+ _LOGT("failed to connect");
+ } else if (all_connected == CONNECTION_WAIT) {
priv->plugin_state = DNSCONFD_PLUGIN_WAIT_CONNECT;
_LOGT("not connected, waiting to connect");
} else {
--
2.48.1
From cc90aa81383d816ff9bb2dcd2080868787d3e776 Mon Sep 17 00:00:00 2001
From: Beniamino Galvani <bgalvani@redhat.com>
Date: Thu, 13 Feb 2025 09:54:21 +0100
Subject: [PATCH 3/3] dnsconfd: drop "connection-*" entries from the update
method
Stop passing "connection-*" entries in the update method to
dnsconfd. The plugin tries to determine the connection from the
ifindex, but it's not possible to do it right at the moment because
the same ifindex can be used at the same time e.g. by a policy-based
VPN like ipsec and a normal device. Instead, it should be NM that
explicitly passes the information about the connection to the DNS
plugin. Anyway, these variables are not used at the moment by
dnsconfd.
Fixes: c6e1925decd8 ('dns: Add dnsconfd DNS plugin')
(cherry picked from commit 4d84e6cddf38754e04ca112f79b2e8937f60b01e)
(cherry picked from commit 5e18da31a45971a11fa0c12978f9685cca429862)
---
src/core/dns/nm-dns-dnsconfd.c | 65 +++++-----------------------------
1 file changed, 8 insertions(+), 57 deletions(-)
diff --git a/src/core/dns/nm-dns-dnsconfd.c b/src/core/dns/nm-dns-dnsconfd.c
index b4c935db62..ea23760634 100644
--- a/src/core/dns/nm-dns-dnsconfd.c
+++ b/src/core/dns/nm-dns-dnsconfd.c
@@ -333,29 +333,8 @@ get_networks(NMDnsConfigIPData *ip_data, char ***networks)
static void
server_builder_append_interface_info(GVariantBuilder *argument_builder,
const char *interface,
- char **networks,
- const char *connection_id,
- const char *connection_uuid,
- const char *dbus_path)
+ char **networks)
{
- if (connection_id) {
- g_variant_builder_add(argument_builder,
- "{sv}",
- "connection-id",
- g_variant_new("s", connection_id));
- }
- if (connection_uuid) {
- g_variant_builder_add(argument_builder,
- "{sv}",
- "connection-uuid",
- g_variant_new("s", connection_uuid));
- }
- if (dbus_path) {
- g_variant_builder_add(argument_builder,
- "{sv}",
- "connection-object",
- g_variant_new("s", dbus_path));
- }
if (interface) {
g_variant_builder_add(argument_builder, "{sv}", "interface", g_variant_new("s", interface));
}
@@ -593,18 +572,11 @@ parse_all_interface_config(GVariantBuilder *argument_builder,
const CList *ip_data_lst_head,
const char *ca)
{
- NMDnsConfigIPData *ip_data;
- const char *const *dns_server_strings;
- guint nameserver_count;
- const char *ifname;
- NMDevice *device;
- NMActiveConnection *active_connection;
- NMSettingsConnection *settings_connection;
- NMActRequest *act_request;
- const char *connection_id;
- const char *connection_uuid;
- const char *dbus_path;
- gboolean explicit_default = is_default_interface_explicit(ip_data_lst_head);
+ NMDnsConfigIPData *ip_data;
+ const char *const *dns_server_strings;
+ guint nameserver_count;
+ const char *ifname;
+ gboolean explicit_default = is_default_interface_explicit(ip_data_lst_head);
c_list_for_each_entry (ip_data, ip_data_lst_head, ip_data_lst) {
/* No need to free insides of routing and search domains, as they point to data
@@ -619,23 +591,7 @@ parse_all_interface_config(GVariantBuilder *argument_builder,
&nameserver_count);
if (!nameserver_count)
continue;
- ifname = nm_platform_link_get_name(NM_PLATFORM_GET, ip_data->data->ifindex);
- device = nm_manager_get_device_by_ifindex(NM_MANAGER_GET, ip_data->data->ifindex);
- act_request = nm_device_get_act_request(device);
- active_connection = NM_ACTIVE_CONNECTION(act_request);
-
- /* Presume that when we have server of this interface then the interface has to have
- * an active connection */
- nm_assert(active_connection);
-
- settings_connection = nm_active_connection_get_settings_connection(active_connection);
- connection_id = nm_settings_connection_get_id(settings_connection);
- connection_uuid = nm_settings_connection_get_uuid(settings_connection);
- dbus_path = nm_dbus_object_get_path_still_exported(NM_DBUS_OBJECT(act_request));
-
- /* dbus_path also should be set, because if we are parsing this connection then we
- * expect it to be active and exported on dbus */
- nm_assert(dbus_path && dbus_path[0] != 0);
+ ifname = nm_platform_link_get_name(NM_PLATFORM_GET, ip_data->data->ifindex);
gather_interface_domains(ip_data, explicit_default, &routing_domains, &search_domains);
get_networks(ip_data, &networks);
@@ -647,12 +603,7 @@ parse_all_interface_config(GVariantBuilder *argument_builder,
routing_domains,
search_domains,
ca)) {
- server_builder_append_interface_info(argument_builder,
- ifname,
- networks,
- connection_id,
- connection_uuid,
- dbus_path);
+ server_builder_append_interface_info(argument_builder, ifname, networks);
}
}
}
--
2.48.1

View File

@ -4,8 +4,8 @@
%global glib2_version %(pkg-config --modversion glib-2.0 2>/dev/null || echo bad) %global glib2_version %(pkg-config --modversion glib-2.0 2>/dev/null || echo bad)
%global epoch_version 1 %global epoch_version 1
%global real_version 1.53.90 %global real_version 1.53.91
%global git_tag_version 1.54-rc1 %global git_tag_version 1.54-rc2
%global rpm_version %{real_version} %global rpm_version %{real_version}
%global release_version 1 %global release_version 1
%global snapshot %{nil} %global snapshot %{nil}
@ -189,6 +189,7 @@ Source9: readme-ifcfg-rh-migrated.txt
# Bugfixes that are only relevant until next rebase of the package. # Bugfixes that are only relevant until next rebase of the package.
# Patch1001: 1001-some.patch # Patch1001: 1001-some.patch
Patch1001: 1001-add-sriov-preserve-on-down-property-rhel98728.patch
Requires(post): systemd Requires(post): systemd
Requires(post): systemd-udev Requires(post): systemd-udev
@ -1086,7 +1087,12 @@ fi
%changelog %changelog
* Fri May 30 2025 Vladimír Beneš <vbenes@redhat.com> - 1:1.54.0-1 * Fri Jun 20 2025 Filip Pokryvka <fpokryvk@redhat.com> - 1:1.53.91-1
- Update to 1.54.0 (rc2)
- Support deactivating a connection without resetting SRIOV sriov_numvfs (RHEL-69125)
- Fix a race condition in ovs tun interface (RHEL-17358)
* Fri May 30 2025 Vladimír Beneš <vbenes@redhat.com> - 1:1.53.90-1
- Update to 1.54.0 (rc1) - Update to 1.54.0 (rc1)
- Devices not becoming managed sometimes (RHEL-89914) - Devices not becoming managed sometimes (RHEL-89914)
- Crash on _l3cfg_notify_cb (RHEL-92020) - Crash on _l3cfg_notify_cb (RHEL-92020)

View File

@ -1 +1 @@
SHA512 (NetworkManager-1.53.90.tar.xz) = e16a1c07561db5ab4c5b011247264604bda977c539e4850b6258b7cbfde33a0274880e72e5a3eff0087198f086c049907596ea3f93231bb5c028317445d6db33 SHA512 (NetworkManager-1.53.91.tar.xz) = 0fbbf4af1681aa57d2960ab4deb53ee40267019e5658fad664f62b06d104f78177232ebecd97330cc29b013bb867942cd56f0c028473bdee7c1ab382f63a9571