tdl-xoa-driver 1.6.2__tar.gz → 1.7.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tdl_xoa_driver-1.6.2/tdl_xoa_driver.egg-info → tdl_xoa_driver-1.7.1}/PKG-INFO +2 -2
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/setup.py +1 -1
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1/tdl_xoa_driver.egg-info}/PKG-INFO +2 -2
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/tdl_xoa_driver.egg-info/SOURCES.txt +8 -0
- tdl_xoa_driver-1.7.1/xoa_driver/__init__.py +2 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/enums.py +2 -0
- tdl_xoa_driver-1.7.1/xoa_driver/functions/async_wrapper.py +130 -0
- tdl_xoa_driver-1.7.1/xoa_driver/functions/layer1_adv.py +340 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/mgmt.py +96 -34
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/hlfuncs.py +4 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/__init__.py +1 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/enums.py +11 -1
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/pl1_commands.py +1 -1
- tdl_xoa_driver-1.7.1/xoa_driver/internals/commands/pl1ad_commands.py +702 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/family_freya.py +5 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/family_odin.py +1 -1
- tdl_xoa_driver-1.7.1/xoa_driver/internals/hli/ports/port_l23/layer1_adv/freq.py +38 -0
- tdl_xoa_driver-1.7.1/xoa_driver/internals/hli/ports/port_l23/layer1_adv/pcs_fec.py +214 -0
- tdl_xoa_driver-1.7.1/xoa_driver/internals/hli/ports/port_l23/layer1_adv/rs_fault.py +24 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1_freya.py +5 -0
- tdl_xoa_driver-1.7.1/xoa_driver/internals/hli/ports/port_l23/layer1_freya_adv.py +61 -0
- tdl_xoa_driver-1.7.1/xoa_driver/internals/utils/managers/__init__.py +0 -0
- tdl_xoa_driver-1.6.2/xoa_driver/__init__.py +0 -2
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/LICENSE +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/README.md +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/pyproject.toml +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/setup.cfg +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/tdl_xoa_driver.egg-info/dependency_links.txt +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/tdl_xoa_driver.egg-info/top_level.txt +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/exceptions.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/anlt.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/anlt_ll_debug.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/cli/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/cli/_cli_manager.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/cli/_config_block.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/cli/_socket_driver.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/cli/port_config.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/cli/testbed_config.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/cmis/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/cmis/_constants.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/cmis/_replies.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/cmis/_utils.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/cmis/cdb.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/exceptions.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/headers.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/functions/tools.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/c_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/m4_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/m4e_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/m_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/p4_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/p4e_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/p4g_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/p_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/pc_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/pd_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/pe_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/pec_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/ped_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/pef_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/pf_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/pl_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/pm_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/pp_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/pr_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/ps_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/pt_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/px_commands.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/commands/subtypes.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/builders.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/exceptions.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/funcs.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/funcs.pyi +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/interfaces.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/token.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/_processor.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/_publisher.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/_request_id_counter.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/_stream.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/_typings.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/exceptions.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/handler.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/logger/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/logger/__logger.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/logger/__state_off.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/logger/__state_on_default.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/logger/__state_on_loguru.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/logger/__state_on_user.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/protocol/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/protocol/_constants.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/protocol/_utils.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/protocol/exceptions.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/protocol/payload/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/protocol/payload/base_struct.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/protocol/payload/descriptor.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/protocol/payload/exceptions.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/protocol/payload/field.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/protocol/payload/types.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/protocol/payload/utils.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/protocol/struct_header.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/protocol/struct_request.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/protocol/struct_response.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/core/transporter/registry.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/exceptions/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/exceptions/modules.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/exceptions/testers.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/base_index.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/connection_group/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/connection_group/cg.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/connection_group/histogram.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/connection_group/l2.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/connection_group/l3.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/connection_group/raw.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/connection_group/replay.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/connection_group/tcp.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/connection_group/tls.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/connection_group/udp.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/connection_group/user_state.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/filter/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/filter/base_filter.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/filter/genuine_filter.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/length_term.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/macsecscs/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/macsecscs/base_macsecsc.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/macsecscs/genuine_macsecsc.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/match_term.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/port_dataset.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/streams/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/streams/base_stream.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/indices/streams/genuine_stream.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/modules/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/modules/__interfaces.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/modules/base_module.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/modules/module_chimera.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/modules/module_l23ve.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/modules/module_l47.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/modules/module_l47ve.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/modules/modules_l23/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/modules/modules_l23/family_combi.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/modules/modules_l23/family_edun.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/modules/modules_l23/family_freya.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/modules/modules_l23/family_loki.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/modules/modules_l23/family_odin.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/modules/modules_l23/family_thor.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/modules/modules_l23/module_l23_base.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/base_port.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/bases/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/bases/port_l23.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/bases/port_l23_genuine.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/bases/port_l23ve.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/chimera/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/chimera/filter_definition/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/chimera/filter_definition/_utils.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/chimera/filter_definition/general.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/chimera/filter_definition/shadow.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/chimera/filter_definition/working.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/chimera/pe_custom_distribution.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/chimera/pe_distribution.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/chimera/port_chimera.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/chimera/port_emulation.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/chimera/reception_statistics.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/chimera/transmission_statistics.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/family_edun.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/family_loki.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/family_thor.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1/anlt.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1/brr.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1/eye_diagram.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1/impair.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1/laser_power.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1/lower_power.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1/medium.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1/pcs_fec.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1/pma.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1/prbs.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1/preamble.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1/rs_fault.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1/siv.py +0 -0
- {tdl_xoa_driver-1.6.2/xoa_driver/internals/hli/ports/port_l23/sec → tdl_xoa_driver-1.7.1/xoa_driver/internals/hli/ports/port_l23/layer1_adv}/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1_edun.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1_loki.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/layer1_thor.py +0 -0
- {tdl_xoa_driver-1.6.2/xoa_driver/internals/hli/ports/port_l23/tcvr → tdl_xoa_driver-1.7.1/xoa_driver/internals/hli/ports/port_l23/sec}/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/sec/macsec.py +0 -0
- {tdl_xoa_driver-1.6.2/xoa_driver/internals/hli/ports/port_l23/trafficgen → tdl_xoa_driver-1.7.1/xoa_driver/internals/hli/ports/port_l23/tcvr}/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/tcvr/cmis.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/tcvr/transceiver.py +0 -0
- {tdl_xoa_driver-1.6.2/xoa_driver/internals/hli/ports/port_l47 → tdl_xoa_driver-1.7.1/xoa_driver/internals/hli/ports/port_l23/trafficgen}/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/trafficgen/capture.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/trafficgen/runt.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/trafficgen/rx_stats.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/trafficgen/tgen.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l23/trafficgen/tx_stats.py +0 -0
- {tdl_xoa_driver-1.6.2/xoa_driver/internals/hli/testers → tdl_xoa_driver-1.7.1/xoa_driver/internals/hli/ports/port_l47}/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l47/counters.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l47/main.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/ports/port_l47/packet_engine.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/revisions.py +0 -0
- {tdl_xoa_driver-1.6.2/xoa_driver/internals/hli/testers/genuine → tdl_xoa_driver-1.7.1/xoa_driver/internals/hli/testers}/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/testers/_base_tester.py +0 -0
- {tdl_xoa_driver-1.6.2/xoa_driver/internals/hli/testers/genuine/l_23 → tdl_xoa_driver-1.7.1/xoa_driver/internals/hli/testers/genuine}/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2/xoa_driver/internals/state_storage → tdl_xoa_driver-1.7.1/xoa_driver/internals/hli/testers/genuine/l_23}/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/testers/genuine/l_23/health.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/testers/genuine/l_23/rest_api.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/testers/genuine/l_23/time_keeper.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/testers/genuine/l_23/upload_file.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/testers/genuine/management_interface.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/testers/l23_tester.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/testers/l23ve_tester.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/testers/l47_tester.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/hli/testers/l47ve_tester.py +0 -0
- {tdl_xoa_driver-1.6.2/xoa_driver/internals/utils → tdl_xoa_driver-1.7.1/xoa_driver/internals/state_storage}/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/state_storage/_speed_detector.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/state_storage/modules_state.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/state_storage/ports_state.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/state_storage/testers_state.py +0 -0
- {tdl_xoa_driver-1.6.2/xoa_driver/internals/utils/indices → tdl_xoa_driver-1.7.1/xoa_driver/internals/utils}/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/utils/attributes.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/utils/cap_id.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/utils/con_traffic_light.py +0 -0
- {tdl_xoa_driver-1.6.2/xoa_driver/internals/utils/managers → tdl_xoa_driver-1.7.1/xoa_driver/internals/utils/indices}/__init__.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/utils/indices/_interfaces.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/utils/indices/header_modifier_manager.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/utils/indices/index_manager.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/utils/indices/observer.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/utils/kind.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/utils/managers/abc.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/utils/managers/exceptions.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/utils/managers/modules_manager.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/utils/managers/ports_manager.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/utils/rev_tool.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/utils/session.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/internals/warn.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/lli.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/misc.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/modules.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/ports.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/testers.py +0 -0
- {tdl_xoa_driver-1.6.2 → tdl_xoa_driver-1.7.1}/xoa_driver/utils.py +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tdl-xoa-driver
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.7.1
|
|
4
4
|
Summary: TDL XOA Python API is a Python library providing user-friendly communication interfaces to Teledyne LeCroy Xena Ethernet traffic generation test equipment. It provides a rich collection of APIs that can be used to either write test scripts or develop applications.
|
|
5
5
|
Home-page: https://github.com/xenanetworks/tdl-xoa-driver
|
|
6
6
|
Author: Leonard Yu, Zoltan Hanisch
|
|
7
7
|
Author-email: Leonard.Yu@teledyne.com, Zoltan.Hanisch@teledyne.com
|
|
8
|
-
Maintainer: Teledyne LeCroy
|
|
8
|
+
Maintainer: Teledyne LeCroy
|
|
9
9
|
Maintainer-email: xena-sales@teledyne.com
|
|
10
10
|
License: Apache 2.0
|
|
11
11
|
Classifier: Development Status :: 5 - Production/Stable
|
|
@@ -17,7 +17,7 @@ def main():
|
|
|
17
17
|
long_description_content_type="text/markdown",
|
|
18
18
|
author="Leonard Yu, Zoltan Hanisch",
|
|
19
19
|
author_email="Leonard.Yu@teledyne.com, Zoltan.Hanisch@teledyne.com",
|
|
20
|
-
maintainer="Teledyne LeCroy
|
|
20
|
+
maintainer="Teledyne LeCroy",
|
|
21
21
|
maintainer_email="xena-sales@teledyne.com",
|
|
22
22
|
url="https://github.com/xenanetworks/tdl-xoa-driver",
|
|
23
23
|
packages=setuptools.find_packages(),
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tdl-xoa-driver
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.7.1
|
|
4
4
|
Summary: TDL XOA Python API is a Python library providing user-friendly communication interfaces to Teledyne LeCroy Xena Ethernet traffic generation test equipment. It provides a rich collection of APIs that can be used to either write test scripts or develop applications.
|
|
5
5
|
Home-page: https://github.com/xenanetworks/tdl-xoa-driver
|
|
6
6
|
Author: Leonard Yu, Zoltan Hanisch
|
|
7
7
|
Author-email: Leonard.Yu@teledyne.com, Zoltan.Hanisch@teledyne.com
|
|
8
|
-
Maintainer: Teledyne LeCroy
|
|
8
|
+
Maintainer: Teledyne LeCroy
|
|
9
9
|
Maintainer-email: xena-sales@teledyne.com
|
|
10
10
|
License: Apache 2.0
|
|
11
11
|
Classifier: Development Status :: 5 - Production/Stable
|
|
@@ -20,8 +20,10 @@ xoa_driver/utils.py
|
|
|
20
20
|
xoa_driver/functions/__init__.py
|
|
21
21
|
xoa_driver/functions/anlt.py
|
|
22
22
|
xoa_driver/functions/anlt_ll_debug.py
|
|
23
|
+
xoa_driver/functions/async_wrapper.py
|
|
23
24
|
xoa_driver/functions/exceptions.py
|
|
24
25
|
xoa_driver/functions/headers.py
|
|
26
|
+
xoa_driver/functions/layer1_adv.py
|
|
25
27
|
xoa_driver/functions/mgmt.py
|
|
26
28
|
xoa_driver/functions/tools.py
|
|
27
29
|
xoa_driver/functions/cli/__init__.py
|
|
@@ -55,6 +57,7 @@ xoa_driver/internals/commands/ped_commands.py
|
|
|
55
57
|
xoa_driver/internals/commands/pef_commands.py
|
|
56
58
|
xoa_driver/internals/commands/pf_commands.py
|
|
57
59
|
xoa_driver/internals/commands/pl1_commands.py
|
|
60
|
+
xoa_driver/internals/commands/pl1ad_commands.py
|
|
58
61
|
xoa_driver/internals/commands/pl_commands.py
|
|
59
62
|
xoa_driver/internals/commands/pm_commands.py
|
|
60
63
|
xoa_driver/internals/commands/pp_commands.py
|
|
@@ -154,6 +157,7 @@ xoa_driver/internals/hli/ports/port_l23/family_odin.py
|
|
|
154
157
|
xoa_driver/internals/hli/ports/port_l23/family_thor.py
|
|
155
158
|
xoa_driver/internals/hli/ports/port_l23/layer1_edun.py
|
|
156
159
|
xoa_driver/internals/hli/ports/port_l23/layer1_freya.py
|
|
160
|
+
xoa_driver/internals/hli/ports/port_l23/layer1_freya_adv.py
|
|
157
161
|
xoa_driver/internals/hli/ports/port_l23/layer1_loki.py
|
|
158
162
|
xoa_driver/internals/hli/ports/port_l23/layer1_thor.py
|
|
159
163
|
xoa_driver/internals/hli/ports/port_l23/bases/__init__.py
|
|
@@ -186,6 +190,10 @@ xoa_driver/internals/hli/ports/port_l23/layer1/prbs.py
|
|
|
186
190
|
xoa_driver/internals/hli/ports/port_l23/layer1/preamble.py
|
|
187
191
|
xoa_driver/internals/hli/ports/port_l23/layer1/rs_fault.py
|
|
188
192
|
xoa_driver/internals/hli/ports/port_l23/layer1/siv.py
|
|
193
|
+
xoa_driver/internals/hli/ports/port_l23/layer1_adv/__init__.py
|
|
194
|
+
xoa_driver/internals/hli/ports/port_l23/layer1_adv/freq.py
|
|
195
|
+
xoa_driver/internals/hli/ports/port_l23/layer1_adv/pcs_fec.py
|
|
196
|
+
xoa_driver/internals/hli/ports/port_l23/layer1_adv/rs_fault.py
|
|
189
197
|
xoa_driver/internals/hli/ports/port_l23/sec/__init__.py
|
|
190
198
|
xoa_driver/internals/hli/ports/port_l23/sec/macsec.py
|
|
191
199
|
xoa_driver/internals/hli/ports/port_l23/tcvr/__init__.py
|
|
@@ -200,6 +200,7 @@ from .internals.commands.enums import (
|
|
|
200
200
|
ModifierEndianness,
|
|
201
201
|
MACSecPNMode,
|
|
202
202
|
ModuleConfigStatus,
|
|
203
|
+
TrueFalse,
|
|
203
204
|
)
|
|
204
205
|
|
|
205
206
|
__all__ = (
|
|
@@ -400,4 +401,5 @@ __all__ = (
|
|
|
400
401
|
"ModifierEndianness",
|
|
401
402
|
"MACSecPNMode",
|
|
402
403
|
"ModuleConfigStatus",
|
|
404
|
+
"TrueFalse",
|
|
403
405
|
)
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
|
|
2
|
+
"""
|
|
3
|
+
ASYNC WRAPPER
|
|
4
|
+
|
|
5
|
+
The APIs provided by tdl-xoa-driver are async functions.
|
|
6
|
+
This means any function that uses the tdl-xoa-driver must be
|
|
7
|
+
declared as async.
|
|
8
|
+
|
|
9
|
+
This might be a problem for you if your existing framework
|
|
10
|
+
doesn't support async functions. To solve this "incompatibility"
|
|
11
|
+
issue, we have made an async wrapper class **XenaAsyncWrapper**
|
|
12
|
+
for you to wrap tdl-xoa-driver's async function inside and use it
|
|
13
|
+
as a regular Python function.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from typing import Any, Awaitable, Callable, TypeVar
|
|
17
|
+
import asyncio
|
|
18
|
+
import threading
|
|
19
|
+
import queue
|
|
20
|
+
|
|
21
|
+
T = TypeVar("T")
|
|
22
|
+
|
|
23
|
+
class XenaAsyncWrapper:
|
|
24
|
+
"""This is a wrapper class that encapsulates XOA asyncio functions
|
|
25
|
+
so you can use the APIs in a non-async fashion.
|
|
26
|
+
|
|
27
|
+
Example:
|
|
28
|
+
|
|
29
|
+
.. code-block:: python
|
|
30
|
+
|
|
31
|
+
import asyncio
|
|
32
|
+
from xoa_driver import testers, modules, ports
|
|
33
|
+
from xoa_driver.hlfuncs import mgmt, async_wrapper
|
|
34
|
+
|
|
35
|
+
# initialize async wrapper
|
|
36
|
+
xaw = async_wrapper.XenaAsyncWrapper()
|
|
37
|
+
|
|
38
|
+
# check if it starts to work
|
|
39
|
+
while not xaw.is_thread_started():
|
|
40
|
+
time.sleep(0.01)
|
|
41
|
+
|
|
42
|
+
# create a tester instance
|
|
43
|
+
# this will automatically create a tcp connection to the tester
|
|
44
|
+
tester = xaw(testers.L23Tester(host=CHASSIS_IP, username=USERNAME))
|
|
45
|
+
|
|
46
|
+
# obtain a module instance
|
|
47
|
+
module = tester.modules.obtain(MODULE_IDX)
|
|
48
|
+
|
|
49
|
+
# Obtain a port from the module
|
|
50
|
+
port = module.ports.obtain(PORT_IDX)
|
|
51
|
+
|
|
52
|
+
# reserve & reset port
|
|
53
|
+
xaw(mgmt.reserve_ports(ports=[port], reset=True))
|
|
54
|
+
|
|
55
|
+
xaw(asyncio.sleep(5))
|
|
56
|
+
|
|
57
|
+
# create a stream
|
|
58
|
+
stream = xaw(port.streams.create())
|
|
59
|
+
xaw(utils.apply(
|
|
60
|
+
stream.enable.set_on(),
|
|
61
|
+
stream.comment.set(f"Stream A to B"),
|
|
62
|
+
stream.rate.pps.set(stream_rate_pps=10000),
|
|
63
|
+
stream.packet.length.set(length_type=enums.LengthType.FIXED, min_val=1000, max_val=1000),
|
|
64
|
+
stream.tpld_id.set(test_payload_identifier = 0))
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
# start and stop traffic
|
|
68
|
+
xaw(port.traffic.state.set_start())
|
|
69
|
+
time.sleep(TRAFFIC_DURATION)
|
|
70
|
+
xaw(port.traffic.state.set_stop())
|
|
71
|
+
time.sleep(COOLDOWN_DURATION)
|
|
72
|
+
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
__slots__ = ("loop", "thread", "_events")
|
|
77
|
+
|
|
78
|
+
def __init__(self) -> None:
|
|
79
|
+
self.loop: asyncio.AbstractEventLoop | None = None
|
|
80
|
+
self.thread = threading.Thread(target=self._run_event_loop)
|
|
81
|
+
self.thread.start()
|
|
82
|
+
self._events = queue.Queue()
|
|
83
|
+
|
|
84
|
+
def _run_event_loop(self):
|
|
85
|
+
self.loop = asyncio.new_event_loop()
|
|
86
|
+
asyncio.set_event_loop(self.loop)
|
|
87
|
+
self.loop.run_forever()
|
|
88
|
+
|
|
89
|
+
def run_coroutine_threadsafe(self, coro: Awaitable[T]) -> T:
|
|
90
|
+
if not self.loop:
|
|
91
|
+
raise RuntimeError("Event loop is not running")
|
|
92
|
+
future_ = asyncio.run_coroutine_threadsafe(coro, self.loop)
|
|
93
|
+
if exc := future_.exception():
|
|
94
|
+
raise exc
|
|
95
|
+
return future_.result()
|
|
96
|
+
|
|
97
|
+
def is_thread_started(self) -> bool:
|
|
98
|
+
return self.loop is not None and self.loop.is_running()
|
|
99
|
+
|
|
100
|
+
def close(self) -> None:
|
|
101
|
+
if not self.loop:
|
|
102
|
+
return None
|
|
103
|
+
self.loop.call_soon_threadsafe(self.loop.stop)
|
|
104
|
+
self.thread.join()
|
|
105
|
+
|
|
106
|
+
def __call__(self, coro):
|
|
107
|
+
if self.loop is None:
|
|
108
|
+
raise RuntimeError("Thread not started")
|
|
109
|
+
|
|
110
|
+
event = asyncio.Event()
|
|
111
|
+
|
|
112
|
+
def _callback(fut):
|
|
113
|
+
self._events.put((fut.result(), fut.exception()))
|
|
114
|
+
assert self.loop is not None # Type guard for type checker
|
|
115
|
+
self.loop.call_soon_threadsafe(event.set)
|
|
116
|
+
|
|
117
|
+
async def _runner():
|
|
118
|
+
try:
|
|
119
|
+
fut = asyncio.ensure_future(coro)
|
|
120
|
+
fut.add_done_callback(_callback)
|
|
121
|
+
await event.wait()
|
|
122
|
+
except Exception as exc:
|
|
123
|
+
self._events.put((None, exc))
|
|
124
|
+
|
|
125
|
+
asyncio.run_coroutine_threadsafe(_runner(), self.loop)
|
|
126
|
+
result, exc = self._events.get()
|
|
127
|
+
|
|
128
|
+
if exc:
|
|
129
|
+
raise exc
|
|
130
|
+
return result
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
"""
|
|
2
|
+
The Advanced Layer 1 functions
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
import asyncio
|
|
7
|
+
from typing import (
|
|
8
|
+
TYPE_CHECKING,
|
|
9
|
+
Any,
|
|
10
|
+
Union,
|
|
11
|
+
List,
|
|
12
|
+
Tuple,
|
|
13
|
+
)
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from xoa_driver.ports import Z800FreyaPort, Z1600EdunPort
|
|
16
|
+
from xoa_driver.modules import Z800FreyaModule, Z1600EdunModule
|
|
17
|
+
FreyaEdunModule = Union[Z800FreyaModule, Z1600EdunModule]
|
|
18
|
+
FreyaEdunPort = Union[Z800FreyaPort, Z1600EdunPort]
|
|
19
|
+
|
|
20
|
+
from ..utils import apply
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
async def get_tx_freq_curr(port: "Z800FreyaPort") -> int:
|
|
25
|
+
"""
|
|
26
|
+
Get the current Tx frequency in Hz of the specified port.
|
|
27
|
+
|
|
28
|
+
:param port: The port instance.
|
|
29
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
30
|
+
:return: The current Tx frequency in Hz.
|
|
31
|
+
:rtype: int
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
resp = await port.layer1_adv.freq.tx_curr.get()
|
|
35
|
+
return resp.frequency_hz*10
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
async def get_rx_freq_curr(port: "Z800FreyaPort") -> int:
|
|
39
|
+
"""
|
|
40
|
+
Get the current Rx frequency in Hz of the specified port.
|
|
41
|
+
|
|
42
|
+
:param port: The port instance.
|
|
43
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
44
|
+
:return: The current Rx frequency in Hz.
|
|
45
|
+
:rtype: int
|
|
46
|
+
"""
|
|
47
|
+
resp = await port.layer1_adv.freq.rx_curr.get()
|
|
48
|
+
return resp.frequency_hz
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
async def get_rx_freq_min(port: "Z800FreyaPort") -> int:
|
|
52
|
+
"""
|
|
53
|
+
Get the minimum Rx frequency in Hz since last query.
|
|
54
|
+
|
|
55
|
+
:param port: The port instance.
|
|
56
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
57
|
+
:return: The minimum Rx frequency in Hz since last query.
|
|
58
|
+
:rtype: int
|
|
59
|
+
"""
|
|
60
|
+
resp = await port.layer1_adv.freq.rx_min.get()
|
|
61
|
+
return resp.frequency_hz
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
async def get_rx_freq_max(port: "Z800FreyaPort") -> int:
|
|
65
|
+
"""
|
|
66
|
+
Get the maximum Rx frequency in Hz since last query.
|
|
67
|
+
|
|
68
|
+
:param port: The port instance.
|
|
69
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
70
|
+
:return: The maximum Rx frequency in Hz since last query.
|
|
71
|
+
:rtype: int
|
|
72
|
+
"""
|
|
73
|
+
resp = await port.layer1_adv.freq.rx_max.get()
|
|
74
|
+
return resp.frequency_hz
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
async def get_rx_freq_all(port: "Z800FreyaPort") -> Tuple[int, int, int]:
|
|
78
|
+
"""
|
|
79
|
+
Get the current, minimum, and maximum Rx frequencies in Hz of the specified port.
|
|
80
|
+
|
|
81
|
+
The minimum and maximum values are since last query.
|
|
82
|
+
|
|
83
|
+
:param port: The port instance.
|
|
84
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
85
|
+
:return: The current, minimum, and maximum Rx frequencies in Hz of the specified port.
|
|
86
|
+
:rtype: Tuple[int, int, int]
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
resp1, resp2, resp3 = await apply(
|
|
90
|
+
port.layer1_adv.freq.rx_curr.get(),
|
|
91
|
+
port.layer1_adv.freq.rx_min.get(),
|
|
92
|
+
port.layer1_adv.freq.rx_max.get(),
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
return (resp1.frequency_hz, resp2.frequency_hz, resp3.frequency_hz)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
async def get_cdr_lol_since_last(port: "Z800FreyaPort", serdes_indices: List[int]) -> List[Tuple[bool, bool]]:
|
|
99
|
+
"""
|
|
100
|
+
Get the current and latched CDR LOL status of the specified Serdes.
|
|
101
|
+
|
|
102
|
+
:param port: The port instance.
|
|
103
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
104
|
+
:param serdes_indices: The indices of the Serdes.
|
|
105
|
+
:type serdes_indices: List[int]
|
|
106
|
+
:return: A list of tuples containing current and latched CDR LOL status for each Serdes.
|
|
107
|
+
:rtype: List[Tuple[bool, bool]]
|
|
108
|
+
"""
|
|
109
|
+
results = []
|
|
110
|
+
cmds = []
|
|
111
|
+
for serdes_id in serdes_indices:
|
|
112
|
+
cmds.append(port.layer1_adv.serdes[serdes_id].rx_cdr_lol_since_last.get())
|
|
113
|
+
resps = await apply(*cmds)
|
|
114
|
+
for resp in resps:
|
|
115
|
+
curr = True if resp.current_lol.value == 1 else False
|
|
116
|
+
latched = True if resp.latched_lol.value == 1 else False
|
|
117
|
+
results.append((curr, latched))
|
|
118
|
+
return results
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
async def get_rx_lane_skew(port: "Z800FreyaPort", lane_indices: List[int]) -> List[int]:
|
|
122
|
+
"""Get Rx relative skew measured in bits of the specified PCS lanes.
|
|
123
|
+
|
|
124
|
+
:param port: The port instance.
|
|
125
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
126
|
+
:param lane_indices: The indices of the PCS lanes.
|
|
127
|
+
:type lane_indices: List[int]
|
|
128
|
+
:return: Relative skew of the specified PCS lanes measured in bits
|
|
129
|
+
:rtype: List[int]
|
|
130
|
+
"""
|
|
131
|
+
results = []
|
|
132
|
+
cmds = []
|
|
133
|
+
for lane in lane_indices:
|
|
134
|
+
cmds.append(port.layer1_adv.pcs.lane[lane].rx_skew.get())
|
|
135
|
+
resps = await apply(*cmds)
|
|
136
|
+
for resp in resps:
|
|
137
|
+
results.append(resp.skew_bits)
|
|
138
|
+
return results
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
async def get_hi_ber(port: "Z800FreyaPort") -> Tuple[bool, bool]:
|
|
142
|
+
"""
|
|
143
|
+
Get the current and latched HI-BER status of the specified port.
|
|
144
|
+
|
|
145
|
+
:param port: The port instance.
|
|
146
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
147
|
+
:return: A tuple containing current and latched HI-BER status.
|
|
148
|
+
:rtype: Tuple[bool, bool]
|
|
149
|
+
"""
|
|
150
|
+
resp = await port.layer1_adv.pcs.hi_ber.status.get()
|
|
151
|
+
curr = True if resp.current_hiber.value == 1 else False
|
|
152
|
+
latched = True if resp.latched_hiber.value == 1 else False
|
|
153
|
+
return (curr, latched)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
async def get_hi_ser(port: "Z800FreyaPort") -> Tuple[bool, bool]:
|
|
157
|
+
"""
|
|
158
|
+
Get the current and latched HI-SER status of the specified port.
|
|
159
|
+
|
|
160
|
+
HI-SER is signalled if 5560 RS-FEC symbol errors are detected in contiguous block of 8192 non-overlapping RS-FEC codewords.
|
|
161
|
+
|
|
162
|
+
:param port: The port instance.
|
|
163
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
164
|
+
:return: A tuple containing current and latched HI-SER status.
|
|
165
|
+
:rtype: Tuple[bool, bool]
|
|
166
|
+
"""
|
|
167
|
+
resp = await port.layer1_adv.pcs.hi_ser.status.get()
|
|
168
|
+
curr = True if resp.current_hiser.value == 1 else False
|
|
169
|
+
latched = True if resp.latched_hiser.value == 1 else False
|
|
170
|
+
return (curr, latched)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
async def get_deg_ser(port: "Z800FreyaPort") -> Tuple[bool, bool]:
|
|
174
|
+
"""
|
|
175
|
+
Get the current and latched Degraded SER status of the specified port.
|
|
176
|
+
|
|
177
|
+
The thresholds for signaling Degraded SER is programmable using
|
|
178
|
+
:py:func:`set_deg_ser_thresholds`.
|
|
179
|
+
|
|
180
|
+
:param port: The port instance.
|
|
181
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
182
|
+
:return: A tuple containing current and latched Degraded SER status.
|
|
183
|
+
:rtype: Tuple[bool, bool]
|
|
184
|
+
"""
|
|
185
|
+
resp = await port.layer1_adv.pcs.deg_ser.status.get()
|
|
186
|
+
curr = True if resp.current_deg_ser.value == 1 else False
|
|
187
|
+
latched = True if resp.latched_deg_ser.value == 1 else False
|
|
188
|
+
return (curr, latched)
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
async def set_deg_ser_thresholds(port: "Z800FreyaPort", activate_threshold: int, deactivate_threshold: int, interval: int) -> None:
|
|
192
|
+
"""
|
|
193
|
+
Configure signaling Degraded SER thresholds of the port.
|
|
194
|
+
|
|
195
|
+
If more than `activate_threshold` number of RS-FEC symbol errors are detected
|
|
196
|
+
in a contiguous block of `interval` RS-FEC codewords, Degraded SER
|
|
197
|
+
is signalled on the port.
|
|
198
|
+
|
|
199
|
+
If less than `deactivate_threshold` number of RS-FEC symbol errors are detected
|
|
200
|
+
in a contiguous block of `interval` RS-FEC codewords, Degraded SER
|
|
201
|
+
is no longer signalled on the port.
|
|
202
|
+
|
|
203
|
+
`interval` must be an even number and a multiple of the number of PCS flows:
|
|
204
|
+
|
|
205
|
+
- 100G: 2 (one flow, but must be even)
|
|
206
|
+
- 200G/400G: 2 (two flows)
|
|
207
|
+
- 800G/1.6T: 4 (four flows)
|
|
208
|
+
|
|
209
|
+
An uncorrectable codeword is counted as 16 erroneous RS-FEC symbols.
|
|
210
|
+
|
|
211
|
+
:param port: The port instance.
|
|
212
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
213
|
+
:param activate_threshold: The activate threshold.
|
|
214
|
+
:type activate_threshold: int
|
|
215
|
+
:param deactivate_threshold: The deactivate threshold.
|
|
216
|
+
:type deactivate_threshold: int
|
|
217
|
+
:param interval: The interval.
|
|
218
|
+
:type interval: int
|
|
219
|
+
"""
|
|
220
|
+
await port.layer1_adv.pcs.deg_ser.threshold.set(
|
|
221
|
+
act_thresh=activate_threshold,
|
|
222
|
+
deact_thresh=deactivate_threshold,
|
|
223
|
+
degrade_interval=interval,
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
async def get_deg_ser_thresholds(
|
|
228
|
+
port: "Z800FreyaPort",
|
|
229
|
+
) -> Tuple[int, int, int]:
|
|
230
|
+
"""
|
|
231
|
+
Get signaling Degraded SER thresholds of the port.
|
|
232
|
+
|
|
233
|
+
:param port: The port instance.
|
|
234
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
235
|
+
:return: A tuple containing activate threshold, deactivate threshold, and interval.
|
|
236
|
+
:rtype: Tuple[int, int, int]
|
|
237
|
+
"""
|
|
238
|
+
resp = await port.layer1_adv.pcs.deg_ser.threshold.get()
|
|
239
|
+
|
|
240
|
+
return (resp.act_thresh, resp.deact_thresh, resp.degrade_interval)
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
async def get_cw_err_since_last(port: "Z800FreyaPort") -> int:
|
|
244
|
+
"""
|
|
245
|
+
Get the number of erroneous 64b/66b codewords since the previous query per port.
|
|
246
|
+
|
|
247
|
+
:param port: The port instance.
|
|
248
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
249
|
+
:return: Number of erroneous 64b/66b codewords since the previous query per port.
|
|
250
|
+
:rtype: int
|
|
251
|
+
"""
|
|
252
|
+
resp = await port.layer1_adv.pcs.err_cw.rx_err_cw_since_last.get()
|
|
253
|
+
return resp.err_cw_count
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
async def get_itb_since_last(port: "Z800FreyaPort") -> int:
|
|
257
|
+
"""
|
|
258
|
+
Get the number of invalid 256b/257b transcode blocks since the previous query per port.
|
|
259
|
+
|
|
260
|
+
:param port: The port instance.
|
|
261
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
262
|
+
:return: Number of invalid 256b/257b transcode blocks since the previous query per port.
|
|
263
|
+
:rtype: int
|
|
264
|
+
"""
|
|
265
|
+
resp = await port.layer1_adv.pcs.itb.rx_itb_since_last.get()
|
|
266
|
+
return resp.itb_count
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
async def get_link_sync_loss_since_last(port: "Z800FreyaPort") -> int:
|
|
270
|
+
"""
|
|
271
|
+
Get the number of cumulated link sync loss events since the previous query per port.
|
|
272
|
+
|
|
273
|
+
:param port: The port instance.
|
|
274
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
275
|
+
:return: Number of cumulated link sync loss events since the previous query per port.
|
|
276
|
+
:rtype: int
|
|
277
|
+
"""
|
|
278
|
+
resp = await port.layer1_adv.pcs.rx_link_sync_loss_since_last.get()
|
|
279
|
+
return resp.losync_count
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
async def get_local_fault_since_last(port: "Z800FreyaPort") -> int:
|
|
283
|
+
"""
|
|
284
|
+
Get the number of cumulated local fault conditions since the previous query per port.
|
|
285
|
+
|
|
286
|
+
:param port: The port instance.
|
|
287
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
288
|
+
:return: Number of cumulated local fault conditions since the previous query per port.
|
|
289
|
+
:rtype: int
|
|
290
|
+
"""
|
|
291
|
+
resp = await port.layer1_adv.rs_fault.rx_local_fault_since_last.get()
|
|
292
|
+
return resp.lf_count
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
async def get_remote_fault_since_last(port: "Z800FreyaPort") -> int:
|
|
296
|
+
"""
|
|
297
|
+
Get the number of cumulated remote fault conditions since the previous query per port.
|
|
298
|
+
|
|
299
|
+
:param port: The port instance.
|
|
300
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
301
|
+
:return: Number of cumulated remote fault conditions since the previous query per port.
|
|
302
|
+
:rtype: int
|
|
303
|
+
"""
|
|
304
|
+
resp = await port.layer1_adv.rs_fault.rx_remote_fault_since_last.get()
|
|
305
|
+
return resp.rf_count
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
async def get_total_loa_since_last(port: "Z800FreyaPort") -> int:
|
|
309
|
+
"""
|
|
310
|
+
Get the number of cumulated Loss of Alignment (LOA) events since the previous query per port.
|
|
311
|
+
|
|
312
|
+
:param port: The port instance.
|
|
313
|
+
:type port: :class:`~xoa_driver.ports.Z800FreyaPort`
|
|
314
|
+
:return: Number of cumulated Loss of Alignment (LOA) events since the previous query per port.
|
|
315
|
+
:rtype: int
|
|
316
|
+
"""
|
|
317
|
+
resp = await port.layer1_adv.pcs.rx_total_loa_since_last.get()
|
|
318
|
+
return resp.loa_count
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
__all__ = (
|
|
322
|
+
"get_tx_freq_curr",
|
|
323
|
+
"get_rx_freq_curr",
|
|
324
|
+
"get_rx_freq_min",
|
|
325
|
+
"get_rx_freq_max",
|
|
326
|
+
"get_rx_freq_all",
|
|
327
|
+
"get_cdr_lol_since_last",
|
|
328
|
+
"get_rx_lane_skew",
|
|
329
|
+
"get_hi_ber",
|
|
330
|
+
"get_hi_ser",
|
|
331
|
+
"get_deg_ser",
|
|
332
|
+
"set_deg_ser_thresholds",
|
|
333
|
+
"get_deg_ser_thresholds",
|
|
334
|
+
"get_cw_err_since_last",
|
|
335
|
+
"get_itb_since_last",
|
|
336
|
+
"get_link_sync_loss_since_last",
|
|
337
|
+
"get_local_fault_since_last",
|
|
338
|
+
"get_remote_fault_since_last",
|
|
339
|
+
"get_total_loa_since_last",
|
|
340
|
+
)
|