From e7116d6800595cf0eba4c54ca9971787cc980f74 Mon Sep 17 00:00:00 2001 From: Leonard Yu Date: Tue, 5 Dec 2023 17:28:34 +0100 Subject: [PATCH] Add LT timeout option --- xoa_driver/__init__.py | 2 +- xoa_driver/functions/anlt.py | 20 ++++++++++++++++++-- xoa_driver/functions/tools.py | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/xoa_driver/__init__.py b/xoa_driver/__init__.py index 109b60c0..134abd3d 100644 --- a/xoa_driver/__init__.py +++ b/xoa_driver/__init__.py @@ -1,2 +1,2 @@ -__version__ = "2.4.0" +__version__ = "2.4.3" __short_version__ = "2.0" diff --git a/xoa_driver/functions/anlt.py b/xoa_driver/functions/anlt.py index e670e518..ae44a8a4 100644 --- a/xoa_driver/functions/anlt.py +++ b/xoa_driver/functions/anlt.py @@ -43,6 +43,8 @@ class DoAnlt: """should perform link training manually?""" lt_algorithm: dict[str, enums.LinkTrainAlgorithm] """link training algorithm should be used?""" + should_enable_lt_timeout: bool + """should the port do link training with timeout enabled?""" _group: tuple["itf.IConnection", int, int] = field(init=False, repr=False) @@ -81,12 +83,21 @@ def __pl1_cfg_tmp( ) def __select_modes(self) -> tuple[enums.LinkTrainingMode, enums.TimeoutMode]: - if self.should_do_an == True and self.should_lt_interactive == False: + if self.should_do_an == True and self.should_lt_interactive == False and self.should_enable_lt_timeout == False: + lt_mode = enums.LinkTrainingMode.START_AFTER_AUTONEG + timeout_mode = enums.TimeoutMode.DISABLED + elif self.should_do_an == True and self.should_lt_interactive == False and self.should_enable_lt_timeout == True: lt_mode = enums.LinkTrainingMode.START_AFTER_AUTONEG timeout_mode = enums.TimeoutMode.DEFAULT elif self.should_do_an == True and self.should_lt_interactive == True: lt_mode = enums.LinkTrainingMode.INTERACTIVE timeout_mode = enums.TimeoutMode.DISABLED + elif self.should_do_an == False and self.should_lt_interactive == False and self.should_enable_lt_timeout == False: + lt_mode = enums.LinkTrainingMode.STANDALONE + timeout_mode = enums.TimeoutMode.DISABLED + elif self.should_do_an == False and self.should_lt_interactive == False and self.should_enable_lt_timeout == True: + lt_mode = enums.LinkTrainingMode.STANDALONE + timeout_mode = enums.TimeoutMode.DEFAULT elif self.should_do_an == False and self.should_lt_interactive == True: lt_mode = enums.LinkTrainingMode.INTERACTIVE timeout_mode = enums.TimeoutMode.DISABLED @@ -150,6 +161,7 @@ async def anlt_start( lt_initial_modulations: dict[str, enums.LinkTrainEncoding], should_lt_interactive: bool, lt_algorithm: dict[str, enums.LinkTrainAlgorithm], + should_enable_lt_timeout: bool, ) -> None: """ .. versionadded:: 1.1 @@ -172,6 +184,8 @@ async def anlt_start( :type should_lt_interactive: bool :param lt_algorithm: Link training algorithm to use :type lt_algorithm: Dict[str, enums.LinkTrainAlgorithm] + :param should_enable_lt_timeout: should run link training with timeout? + :type should_enable_lt_timeout: bool """ anlt = DoAnlt( @@ -183,6 +197,7 @@ async def anlt_start( lt_initial_modulations, should_lt_interactive, lt_algorithm, + should_enable_lt_timeout, ) await anlt.run() @@ -546,7 +561,8 @@ async def anlt_stop(port: GenericL23Port) -> None: lt_preset0=enums.NRZPreset.NRZ_NO_PRESET, lt_initial_modulations={}, should_lt_interactive=False, - lt_algorithm={} + lt_algorithm={}, + should_enable_lt_timeout=True, ) await anlt.run() diff --git a/xoa_driver/functions/tools.py b/xoa_driver/functions/tools.py index 2459d58b..9e605e16 100644 --- a/xoa_driver/functions/tools.py +++ b/xoa_driver/functions/tools.py @@ -138,7 +138,7 @@ def dictionize_anlt_status( return { "autoneg_enabled": enums.AutoNegMode(autoneg.mode).name.lower().lstrip("aneg_"), "link_training_mode": enums.LinkTrainingMode(linktrain.mode).name.lower(), - "link_training_timeout": enums.TimeoutMode(linktrain.timeout_mode).name.lower(), + "link_training_timeout": "enable" if linktrain.timeout_mode == enums.TimeoutMode.DEFAULT else "disable", "restart_link_down": "on" if link_recovery.values[0] == 1 or link_recovery.values[0] == 3 else "off", "restart_lt_fail": "on" if link_recovery.values[0] == 2 or link_recovery.values[0] == 3 else "off", "serdes_count": capabilities.serdes_count,