Blame SOURCES/0002-nm-ethtool-Preserve-existing-ethtool-settings-when-u.patch

e3e53c
From b1cb57d1dc4bba6592ba5cfc5c810a2ad19ac941 Mon Sep 17 00:00:00 2001
e3e53c
From: Gris Ge <fge@redhat.com>
e3e53c
Date: Thu, 22 Jul 2021 18:40:50 +0800
e6c094
Subject: [PATCH 2/4] nm ethtool: Preserve existing ethtool settings when
e3e53c
 undesired
e3e53c
e3e53c
When user does not define ethtool settings in desire state,
e3e53c
we should preserve existing ethtool setting.
e3e53c
e3e53c
Integration test case included.
e3e53c
e3e53c
Signed-off-by: Gris Ge <fge@redhat.com>
e3e53c
Signed-off-by: Fernando Fernandez Mancera <ffmancera@riseup.net>
e3e53c
---
e3e53c
 libnmstate/nm/connection.py | 18 +++---------------
e3e53c
 libnmstate/nm/ethtool.py    | 26 +++++++++++++++++++++++++-
e3e53c
 2 files changed, 28 insertions(+), 16 deletions(-)
e3e53c
e3e53c
diff --git a/libnmstate/nm/connection.py b/libnmstate/nm/connection.py
e3e53c
index 5d60f6d..5a79c6f 100644
e3e53c
--- a/libnmstate/nm/connection.py
e3e53c
+++ b/libnmstate/nm/connection.py
e3e53c
@@ -22,8 +22,6 @@
e3e53c
 import uuid
e3e53c
 
e3e53c
 from libnmstate.error import NmstatePluginError
e3e53c
-from libnmstate.ifaces import IfaceEthtool
e3e53c
-from libnmstate.schema import Ethtool
e3e53c
 from libnmstate.schema import Interface
e3e53c
 from libnmstate.schema import InterfaceType
e3e53c
 from libnmstate.schema import LinuxBridge as LB
e3e53c
@@ -240,19 +238,9 @@ def create_new_nm_simple_conn(iface, nm_profile):
e3e53c
     if iface.ieee_802_1x_conf:
e3e53c
         settings.append(create_802_1x_setting(iface.ieee_802_1x_conf))
e3e53c
 
e3e53c
-    if Ethtool.CONFIG_SUBTREE in iface.original_desire_dict:
e3e53c
-        iface_ethtool = IfaceEthtool(
e3e53c
-            iface.original_desire_dict[Ethtool.CONFIG_SUBTREE]
e3e53c
-        )
e3e53c
-        iface_ethtool.canonicalize(
e3e53c
-            iface.original_desire_dict[Ethtool.CONFIG_SUBTREE]
e3e53c
-        )
e3e53c
-        setting = create_ethtool_setting(
e3e53c
-            iface_ethtool,
e3e53c
-            nm_profile,
e3e53c
-        )
e3e53c
-        if setting:
e3e53c
-            settings.append(setting)
e3e53c
+    ethtool_setting = create_ethtool_setting(iface, nm_profile)
e3e53c
+    if ethtool_setting:
e3e53c
+        settings.append(ethtool_setting)
e3e53c
 
e3e53c
     nm_simple_conn = NM.SimpleConnection.new()
e3e53c
     for setting in settings:
e3e53c
diff --git a/libnmstate/nm/ethtool.py b/libnmstate/nm/ethtool.py
e3e53c
index 466f4f9..3cad1bf 100644
e3e53c
--- a/libnmstate/nm/ethtool.py
e3e53c
+++ b/libnmstate/nm/ethtool.py
e3e53c
@@ -22,6 +22,7 @@ import logging
e3e53c
 from .common import NM
e3e53c
 from .common import GLib
e3e53c
 
e3e53c
+from libnmstate.ifaces import IfaceEthtool
e3e53c
 from libnmstate.schema import Ethtool
e3e53c
 
e3e53c
 
e3e53c
@@ -59,7 +60,7 @@ _NM_COALESCE_OPT_NAME_MAP = {
e3e53c
 }
e3e53c
 
e3e53c
 
e3e53c
-def create_ethtool_setting(iface_ethtool, base_con_profile):
e3e53c
+def _create_ethtool_setting(iface_ethtool, base_con_profile):
e3e53c
     nm_setting = None
e3e53c
 
e3e53c
     if base_con_profile:
e3e53c
@@ -159,3 +160,26 @@ def nm_set_pause(nm_setting, autoneg, rx, tx):
e3e53c
         tx_value,
e3e53c
     )
e3e53c
     # pylint: enable=no-member
e3e53c
+
e3e53c
+
e3e53c
+def create_ethtool_setting(iface, base_con_profile):
e3e53c
+    if Ethtool.CONFIG_SUBTREE in iface.original_desire_dict:
e3e53c
+        iface_ethtool = IfaceEthtool(
e3e53c
+            iface.original_desire_dict[Ethtool.CONFIG_SUBTREE]
e3e53c
+        )
e3e53c
+        iface_ethtool.canonicalize(
e3e53c
+            iface.original_desire_dict[Ethtool.CONFIG_SUBTREE]
e3e53c
+        )
e3e53c
+        return _create_ethtool_setting(
e3e53c
+            iface_ethtool,
e3e53c
+            base_con_profile,
e3e53c
+        )
e3e53c
+    else:
e3e53c
+        # Preserve existing setting but not create new
e3e53c
+        if base_con_profile:
e3e53c
+            ethtool_setting = base_con_profile.get_setting_by_name(
e3e53c
+                NM.SETTING_ETHTOOL_SETTING_NAME
e3e53c
+            )
e3e53c
+            if ethtool_setting:
e3e53c
+                return ethtool_setting.duplicate()
e3e53c
+        return None
e3e53c
-- 
e3e53c
2.32.0
e3e53c