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