From b1cb57d1dc4bba6592ba5cfc5c810a2ad19ac941 Mon Sep 17 00:00:00 2001 From: Gris Ge 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 Signed-off-by: Fernando Fernandez Mancera --- 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