tdl-xoa-driver 1.0.0__py3-none-any.whl
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.0.0.dist-info/LICENSE +202 -0
- tdl_xoa_driver-1.0.0.dist-info/METADATA +177 -0
- tdl_xoa_driver-1.0.0.dist-info/RECORD +325 -0
- tdl_xoa_driver-1.0.0.dist-info/WHEEL +5 -0
- tdl_xoa_driver-1.0.0.dist-info/top_level.txt +1 -0
- xoa_driver/__init__.py +2 -0
- xoa_driver/enums.py +399 -0
- xoa_driver/exceptions.py +77 -0
- xoa_driver/functions/__init__.py +0 -0
- xoa_driver/functions/anlt.py +744 -0
- xoa_driver/functions/anlt_ll_debug.py +429 -0
- xoa_driver/functions/cli.py +581 -0
- xoa_driver/functions/exceptions.py +72 -0
- xoa_driver/functions/headers.py +608 -0
- xoa_driver/functions/mgmt.py +515 -0
- xoa_driver/functions/tools.py +256 -0
- xoa_driver/hlfuncs.py +18 -0
- xoa_driver/internals/__init__.py +0 -0
- xoa_driver/internals/commands/__init__.py +31 -0
- xoa_driver/internals/commands/c_commands.py +2041 -0
- xoa_driver/internals/commands/enums.py +3289 -0
- xoa_driver/internals/commands/m4_commands.py +700 -0
- xoa_driver/internals/commands/m4e_commands.py +107 -0
- xoa_driver/internals/commands/m_commands.py +1875 -0
- xoa_driver/internals/commands/p4_commands.py +2221 -0
- xoa_driver/internals/commands/p4e_commands.py +160 -0
- xoa_driver/internals/commands/p4g_commands.py +7253 -0
- xoa_driver/internals/commands/p_commands.py +6000 -0
- xoa_driver/internals/commands/pc_commands.py +335 -0
- xoa_driver/internals/commands/pd_commands.py +355 -0
- xoa_driver/internals/commands/pe_commands.py +1018 -0
- xoa_driver/internals/commands/pec_commands.py +265 -0
- xoa_driver/internals/commands/ped_commands.py +1034 -0
- xoa_driver/internals/commands/pef_commands.py +2216 -0
- xoa_driver/internals/commands/pf_commands.py +379 -0
- xoa_driver/internals/commands/pl1_commands.py +1588 -0
- xoa_driver/internals/commands/pl_commands.py +178 -0
- xoa_driver/internals/commands/pm_commands.py +256 -0
- xoa_driver/internals/commands/pp_commands.py +2341 -0
- xoa_driver/internals/commands/pr_commands.py +812 -0
- xoa_driver/internals/commands/ps_commands.py +2311 -0
- xoa_driver/internals/commands/pt_commands.py +370 -0
- xoa_driver/internals/commands/px_commands.py +303 -0
- xoa_driver/internals/commands/subtypes.py +86 -0
- xoa_driver/internals/core/__init__.py +0 -0
- xoa_driver/internals/core/builders.py +39 -0
- xoa_driver/internals/core/exceptions.py +69 -0
- xoa_driver/internals/core/funcs.py +81 -0
- xoa_driver/internals/core/funcs.pyi +1072 -0
- xoa_driver/internals/core/interfaces.py +47 -0
- xoa_driver/internals/core/token.py +44 -0
- xoa_driver/internals/core/transporter/__init__.py +0 -0
- xoa_driver/internals/core/transporter/_processor.py +83 -0
- xoa_driver/internals/core/transporter/_publisher.py +101 -0
- xoa_driver/internals/core/transporter/_request_id_counter.py +28 -0
- xoa_driver/internals/core/transporter/_stream.py +99 -0
- xoa_driver/internals/core/transporter/_typings.py +43 -0
- xoa_driver/internals/core/transporter/exceptions.py +44 -0
- xoa_driver/internals/core/transporter/handler.py +127 -0
- xoa_driver/internals/core/transporter/logger/__init__.py +10 -0
- xoa_driver/internals/core/transporter/logger/__logger.py +94 -0
- xoa_driver/internals/core/transporter/logger/__state_off.py +32 -0
- xoa_driver/internals/core/transporter/logger/__state_on_default.py +70 -0
- xoa_driver/internals/core/transporter/logger/__state_on_loguru.py +51 -0
- xoa_driver/internals/core/transporter/logger/__state_on_user.py +48 -0
- xoa_driver/internals/core/transporter/protocol/__init__.py +0 -0
- xoa_driver/internals/core/transporter/protocol/_constants.py +77 -0
- xoa_driver/internals/core/transporter/protocol/_utils.py +59 -0
- xoa_driver/internals/core/transporter/protocol/exceptions.py +271 -0
- xoa_driver/internals/core/transporter/protocol/payload/__init__.py +70 -0
- xoa_driver/internals/core/transporter/protocol/payload/base_struct.py +283 -0
- xoa_driver/internals/core/transporter/protocol/payload/descriptor.py +119 -0
- xoa_driver/internals/core/transporter/protocol/payload/exceptions.py +20 -0
- xoa_driver/internals/core/transporter/protocol/payload/field.py +296 -0
- xoa_driver/internals/core/transporter/protocol/payload/types.py +173 -0
- xoa_driver/internals/core/transporter/protocol/payload/utils.py +53 -0
- xoa_driver/internals/core/transporter/protocol/struct_header.py +123 -0
- xoa_driver/internals/core/transporter/protocol/struct_request.py +65 -0
- xoa_driver/internals/core/transporter/protocol/struct_response.py +89 -0
- xoa_driver/internals/core/transporter/registry.py +43 -0
- xoa_driver/internals/exceptions/__init__.py +9 -0
- xoa_driver/internals/exceptions/modules.py +13 -0
- xoa_driver/internals/exceptions/testers.py +21 -0
- xoa_driver/internals/hli_v1/__init__.py +0 -0
- xoa_driver/internals/hli_v1/indices/__init__.py +0 -0
- xoa_driver/internals/hli_v1/indices/base_index.py +39 -0
- xoa_driver/internals/hli_v1/indices/connection_group/__init__.py +0 -0
- xoa_driver/internals/hli_v1/indices/connection_group/cg.py +186 -0
- xoa_driver/internals/hli_v1/indices/connection_group/histogram.py +78 -0
- xoa_driver/internals/hli_v1/indices/connection_group/l2.py +94 -0
- xoa_driver/internals/hli_v1/indices/connection_group/l3.py +130 -0
- xoa_driver/internals/hli_v1/indices/connection_group/raw.py +200 -0
- xoa_driver/internals/hli_v1/indices/connection_group/replay.py +109 -0
- xoa_driver/internals/hli_v1/indices/connection_group/tcp.py +314 -0
- xoa_driver/internals/hli_v1/indices/connection_group/tls.py +198 -0
- xoa_driver/internals/hli_v1/indices/connection_group/udp.py +133 -0
- xoa_driver/internals/hli_v1/indices/connection_group/user_state.py +28 -0
- xoa_driver/internals/hli_v1/indices/filter/__init__.py +0 -0
- xoa_driver/internals/hli_v1/indices/filter/base_filter.py +65 -0
- xoa_driver/internals/hli_v1/indices/filter/genuine_filter.py +20 -0
- xoa_driver/internals/hli_v1/indices/length_term.py +49 -0
- xoa_driver/internals/hli_v1/indices/macsecscs/__init__.py +0 -0
- xoa_driver/internals/hli_v1/indices/macsecscs/base_macsecsc.py +224 -0
- xoa_driver/internals/hli_v1/indices/macsecscs/genuine_macsecsc.py +72 -0
- xoa_driver/internals/hli_v1/indices/match_term.py +64 -0
- xoa_driver/internals/hli_v1/indices/port_dataset.py +72 -0
- xoa_driver/internals/hli_v1/indices/streams/__init__.py +0 -0
- xoa_driver/internals/hli_v1/indices/streams/base_stream.py +405 -0
- xoa_driver/internals/hli_v1/indices/streams/genuine_stream.py +64 -0
- xoa_driver/internals/hli_v1/modules/__init__.py +0 -0
- xoa_driver/internals/hli_v1/modules/__interfaces.py +21 -0
- xoa_driver/internals/hli_v1/modules/base_module.py +138 -0
- xoa_driver/internals/hli_v1/modules/module_chimera.py +366 -0
- xoa_driver/internals/hli_v1/modules/module_l23ve.py +73 -0
- xoa_driver/internals/hli_v1/modules/module_l47.py +397 -0
- xoa_driver/internals/hli_v1/modules/module_l47ve.py +9 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/__init__.py +0 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_combi.py +83 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_d.py +75 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_e.py +85 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_f.py +145 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_g.py +84 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_h.py +40 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_i.py +25 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_j.py +25 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_k.py +39 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_l.py +55 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_l1.py +800 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_m.py +25 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_n.py +40 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/module_l23_base.py +383 -0
- xoa_driver/internals/hli_v1/ports/__init__.py +0 -0
- xoa_driver/internals/hli_v1/ports/base_port.py +125 -0
- xoa_driver/internals/hli_v1/ports/port_l23/__init__.py +0 -0
- xoa_driver/internals/hli_v1/ports/port_l23/bases/__init__.py +0 -0
- xoa_driver/internals/hli_v1/ports/port_l23/bases/port_capture.py +70 -0
- xoa_driver/internals/hli_v1/ports/port_l23/bases/port_l23.py +527 -0
- xoa_driver/internals/hli_v1/ports/port_l23/bases/port_l23_genuine.py +229 -0
- xoa_driver/internals/hli_v1/ports/port_l23/bases/port_reception_statistics.py +231 -0
- xoa_driver/internals/hli_v1/ports/port_l23/bases/port_transceiver.py +117 -0
- xoa_driver/internals/hli_v1/ports/port_l23/bases/port_transmission_statistics.py +131 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/__init__.py +0 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/filter_definition/__init__.py +0 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/filter_definition/_utils.py +15 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/filter_definition/general.py +396 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/filter_definition/shadow.py +104 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/filter_definition/working.py +36 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/pe_custom_distribution.py +125 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/pe_distribution.py +174 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/port_chimera.py +119 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/port_emulation.py +244 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/reception_statistics.py +24 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/transmission_statistics.py +24 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_combi.py +37 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_d.py +51 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_e.py +107 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_f.py +151 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_g.py +77 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_h.py +67 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_i.py +84 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_j.py +68 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_k.py +73 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_l.py +82 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_l1.py +166 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_m.py +29 -0
- xoa_driver/internals/hli_v1/ports/port_l23/fault_jkl.py +24 -0
- xoa_driver/internals/hli_v1/ports/port_l23/freya_l1.py +722 -0
- xoa_driver/internals/hli_v1/ports/port_l23/pcs_pma_ghijkl.py +369 -0
- xoa_driver/internals/hli_v1/ports/port_l23/pcs_pma_ijkl_chimera.py +60 -0
- xoa_driver/internals/hli_v1/ports/port_l23/pcs_pma_l.py +78 -0
- xoa_driver/internals/hli_v1/ports/port_l23/port_l23ve.py +101 -0
- xoa_driver/internals/hli_v1/ports/port_l47/__init__.py +0 -0
- xoa_driver/internals/hli_v1/ports/port_l47/counters.py +174 -0
- xoa_driver/internals/hli_v1/ports/port_l47/main.py +228 -0
- xoa_driver/internals/hli_v1/ports/port_l47/packet_engine.py +31 -0
- xoa_driver/internals/hli_v1/revisions.py +11 -0
- xoa_driver/internals/hli_v1/testers/__init__.py +0 -0
- xoa_driver/internals/hli_v1/testers/_base_tester.py +259 -0
- xoa_driver/internals/hli_v1/testers/genuine/__init__.py +0 -0
- xoa_driver/internals/hli_v1/testers/genuine/l_23/__init__.py +0 -0
- xoa_driver/internals/hli_v1/testers/genuine/l_23/health.py +16 -0
- xoa_driver/internals/hli_v1/testers/genuine/l_23/rest_api.py +38 -0
- xoa_driver/internals/hli_v1/testers/genuine/l_23/time_keeper.py +57 -0
- xoa_driver/internals/hli_v1/testers/genuine/l_23/upload_file.py +29 -0
- xoa_driver/internals/hli_v1/testers/genuine/management_interface.py +42 -0
- xoa_driver/internals/hli_v1/testers/l23_tester.py +196 -0
- xoa_driver/internals/hli_v1/testers/l23ve_tester.py +114 -0
- xoa_driver/internals/hli_v1/testers/l47_tester.py +106 -0
- xoa_driver/internals/hli_v1/testers/l47ve_tester.py +54 -0
- xoa_driver/internals/hli_v2/__init__.py +0 -0
- xoa_driver/internals/hli_v2/indices/__init__.py +0 -0
- xoa_driver/internals/hli_v2/indices/base_index.py +39 -0
- xoa_driver/internals/hli_v2/indices/connection_group/__init__.py +0 -0
- xoa_driver/internals/hli_v2/indices/connection_group/cg.py +115 -0
- xoa_driver/internals/hli_v2/indices/connection_group/histogram.py +59 -0
- xoa_driver/internals/hli_v2/indices/connection_group/l2.py +71 -0
- xoa_driver/internals/hli_v2/indices/connection_group/l3.py +96 -0
- xoa_driver/internals/hli_v2/indices/connection_group/raw.py +148 -0
- xoa_driver/internals/hli_v2/indices/connection_group/replay.py +89 -0
- xoa_driver/internals/hli_v2/indices/connection_group/tcp.py +261 -0
- xoa_driver/internals/hli_v2/indices/connection_group/tls.py +166 -0
- xoa_driver/internals/hli_v2/indices/connection_group/udp.py +112 -0
- xoa_driver/internals/hli_v2/indices/connection_group/user_state.py +25 -0
- xoa_driver/internals/hli_v2/indices/filter/__init__.py +0 -0
- xoa_driver/internals/hli_v2/indices/filter/base_filter.py +50 -0
- xoa_driver/internals/hli_v2/indices/filter/genuine_filter.py +17 -0
- xoa_driver/internals/hli_v2/indices/length_term.py +44 -0
- xoa_driver/internals/hli_v2/indices/match_term.py +49 -0
- xoa_driver/internals/hli_v2/indices/port_dataset.py +53 -0
- xoa_driver/internals/hli_v2/indices/streams/__init__.py +0 -0
- xoa_driver/internals/hli_v2/indices/streams/base_stream.py +234 -0
- xoa_driver/internals/hli_v2/indices/streams/genuine_stream.py +32 -0
- xoa_driver/internals/hli_v2/modules/__init__.py +0 -0
- xoa_driver/internals/hli_v2/modules/__interfaces.py +21 -0
- xoa_driver/internals/hli_v2/modules/base_module.py +125 -0
- xoa_driver/internals/hli_v2/modules/module_chimera.py +358 -0
- xoa_driver/internals/hli_v2/modules/module_l23ve.py +58 -0
- xoa_driver/internals/hli_v2/modules/module_l47.py +230 -0
- xoa_driver/internals/hli_v2/modules/module_l47ve.py +8 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/__init__.py +0 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_combi.py +73 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_d.py +75 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_e.py +85 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_f.py +144 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_g.py +84 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_h.py +40 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_i.py +25 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_j.py +25 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_k.py +39 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_l.py +55 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_l1.py +797 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_m.py +25 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_n.py +40 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/module_l23_base.py +339 -0
- xoa_driver/internals/hli_v2/ports/__init__.py +0 -0
- xoa_driver/internals/hli_v2/ports/base_port.py +105 -0
- xoa_driver/internals/hli_v2/ports/port_l23/__init__.py +0 -0
- xoa_driver/internals/hli_v2/ports/port_l23/bases/__init__.py +0 -0
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_capture.py +64 -0
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_l23.py +441 -0
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_l23_genuine.py +172 -0
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_reception_statistics.py +156 -0
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_transceiver.py +117 -0
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_transmission_statistics.py +59 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/__init__.py +0 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/__init__.py +0 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/_utils.py +15 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/general.py +340 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/shadow.py +99 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/working.py +36 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/pe_custom_distribution.py +116 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/pe_distribution.py +102 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/port_chimera.py +113 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/port_emulation.py +420 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/reception_statistics.py +22 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/transmission_statistics.py +22 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_combi.py +36 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_d.py +49 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_e.py +96 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_f.py +144 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_g.py +77 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_h.py +60 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_i.py +66 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_j.py +53 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_k.py +58 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_l.py +67 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_l1.py +149 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_m.py +28 -0
- xoa_driver/internals/hli_v2/ports/port_l23/fault_jkl.py +22 -0
- xoa_driver/internals/hli_v2/ports/port_l23/pcs_pma_ghijkl.py +342 -0
- xoa_driver/internals/hli_v2/ports/port_l23/pcs_pma_ijkl_chimera.py +50 -0
- xoa_driver/internals/hli_v2/ports/port_l23/pcs_pma_l.py +65 -0
- xoa_driver/internals/hli_v2/ports/port_l23/port_l23ve.py +81 -0
- xoa_driver/internals/hli_v2/ports/port_l47/__init__.py +0 -0
- xoa_driver/internals/hli_v2/ports/port_l47/counters.py +146 -0
- xoa_driver/internals/hli_v2/ports/port_l47/main.py +137 -0
- xoa_driver/internals/hli_v2/ports/port_l47/packet_engine.py +20 -0
- xoa_driver/internals/hli_v2/revisions.py +11 -0
- xoa_driver/internals/hli_v2/testers/__init__.py +0 -0
- xoa_driver/internals/hli_v2/testers/_base_tester.py +207 -0
- xoa_driver/internals/hli_v2/testers/genuine/__init__.py +0 -0
- xoa_driver/internals/hli_v2/testers/genuine/l_23/__init__.py +0 -0
- xoa_driver/internals/hli_v2/testers/genuine/l_23/health.py +16 -0
- xoa_driver/internals/hli_v2/testers/genuine/l_23/rest_api.py +34 -0
- xoa_driver/internals/hli_v2/testers/genuine/l_23/time_keeper.py +50 -0
- xoa_driver/internals/hli_v2/testers/genuine/l_23/upload_file.py +26 -0
- xoa_driver/internals/hli_v2/testers/genuine/management_interface.py +38 -0
- xoa_driver/internals/hli_v2/testers/l23_tester.py +159 -0
- xoa_driver/internals/hli_v2/testers/l23ve_tester.py +98 -0
- xoa_driver/internals/hli_v2/testers/l47_tester.py +95 -0
- xoa_driver/internals/hli_v2/testers/l47ve_tester.py +50 -0
- xoa_driver/internals/state_storage/__init__.py +0 -0
- xoa_driver/internals/state_storage/_speed_detector.py +121 -0
- xoa_driver/internals/state_storage/modules_state.py +128 -0
- xoa_driver/internals/state_storage/ports_state.py +154 -0
- xoa_driver/internals/state_storage/testers_state.py +104 -0
- xoa_driver/internals/utils/__init__.py +0 -0
- xoa_driver/internals/utils/attributes.py +33 -0
- xoa_driver/internals/utils/cap_id.py +63 -0
- xoa_driver/internals/utils/con_traffic_light.py +88 -0
- xoa_driver/internals/utils/indices/__init__.py +0 -0
- xoa_driver/internals/utils/indices/_interfaces.py +26 -0
- xoa_driver/internals/utils/indices/header_modifier_manager.py +56 -0
- xoa_driver/internals/utils/indices/index_manager.py +95 -0
- xoa_driver/internals/utils/indices/observer.py +17 -0
- xoa_driver/internals/utils/kind.py +19 -0
- xoa_driver/internals/utils/managers/__init__.py +0 -0
- xoa_driver/internals/utils/managers/abc.py +44 -0
- xoa_driver/internals/utils/managers/exceptions.py +22 -0
- xoa_driver/internals/utils/managers/modules_manager.py +118 -0
- xoa_driver/internals/utils/managers/ports_manager.py +116 -0
- xoa_driver/internals/utils/rev_tool.py +21 -0
- xoa_driver/internals/utils/session.py +117 -0
- xoa_driver/internals/warn.py +32 -0
- xoa_driver/lli.py +15 -0
- xoa_driver/misc.py +57 -0
- xoa_driver/modules.py +448 -0
- xoa_driver/ports.py +332 -0
- xoa_driver/testers.py +37 -0
- xoa_driver/utils.py +12 -0
- xoa_driver/v2/__init__.py +11 -0
- xoa_driver/v2/misc.py +77 -0
- xoa_driver/v2/modules.py +308 -0
- xoa_driver/v2/ports.py +232 -0
- xoa_driver/v2/testers.py +24 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import typing
|
|
2
|
+
from xoa_driver import ports
|
|
3
|
+
from xoa_driver.internals.hli_v1 import revisions
|
|
4
|
+
from xoa_driver.internals.utils.managers import ports_manager as pm
|
|
5
|
+
|
|
6
|
+
if typing.TYPE_CHECKING:
|
|
7
|
+
from xoa_driver.internals.core import interfaces as itf
|
|
8
|
+
from .. import __interfaces as m_itf
|
|
9
|
+
|
|
10
|
+
from .module_l23_base import ModuleL23
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@typing.final
|
|
14
|
+
@revisions.register_valkyrie_module(rev="Odin-1G-3S-6P-T1-RJ45")
|
|
15
|
+
class MOdin1G3S6PT1RJ45(ModuleL23):
|
|
16
|
+
"""Test module Odin-1G-3S-6P-T1-RJ45"""
|
|
17
|
+
def __init__(self, conn: "itf.IConnection", init_data: "m_itf.ModuleInitData") -> None:
|
|
18
|
+
super().__init__(conn, init_data)
|
|
19
|
+
self.ports: pm.PortsManager[ports.POdin1G3S6PT1RJ45] = pm.PortsManager(
|
|
20
|
+
conn=conn,
|
|
21
|
+
ports_type=ports.POdin1G3S6PT1RJ45,
|
|
22
|
+
module_id=self.module_id,
|
|
23
|
+
ports_count=self.ports_count
|
|
24
|
+
)
|
|
25
|
+
"""Port Index Manager of Odin-1G-3S-6P-T1-RJ45"""
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import typing
|
|
2
|
+
from xoa_driver import ports
|
|
3
|
+
from xoa_driver.internals.hli_v1 import revisions
|
|
4
|
+
from xoa_driver.internals.utils.managers import ports_manager as pm
|
|
5
|
+
|
|
6
|
+
if typing.TYPE_CHECKING:
|
|
7
|
+
from xoa_driver.internals.core import interfaces as itf
|
|
8
|
+
from .. import __interfaces as m_itf
|
|
9
|
+
|
|
10
|
+
from .module_l23_base import ModuleL23
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@typing.final
|
|
14
|
+
@revisions.register_valkyrie_module(rev="Odin-40G-2S-2P")
|
|
15
|
+
class MOdin40G2S2P(ModuleL23):
|
|
16
|
+
"""Test module Odin-40G-2S-2P"""
|
|
17
|
+
def __init__(self, conn: "itf.IConnection", init_data: "m_itf.ModuleInitData") -> None:
|
|
18
|
+
super().__init__(conn, init_data)
|
|
19
|
+
self.ports: pm.PortsManager[ports.POdin40G2S2P] = pm.PortsManager(
|
|
20
|
+
conn=conn,
|
|
21
|
+
ports_type=ports.POdin40G2S2P,
|
|
22
|
+
module_id=self.module_id,
|
|
23
|
+
ports_count=self.ports_count
|
|
24
|
+
)
|
|
25
|
+
"""Port Index Manager of Odin-40G-2S-2P"""
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@typing.final
|
|
29
|
+
@revisions.register_valkyrie_module(rev="Odin-40G-2S-2P-B")
|
|
30
|
+
class MOdin40G2S2PB(ModuleL23):
|
|
31
|
+
"""Test module Odin-40G-2S-2P-B"""
|
|
32
|
+
def __init__(self, conn: "itf.IConnection", init_data: "m_itf.ModuleInitData") -> None:
|
|
33
|
+
super().__init__(conn, init_data)
|
|
34
|
+
self.ports: pm.PortsManager[ports.POdin40G2S2PB] = pm.PortsManager(
|
|
35
|
+
conn=conn,
|
|
36
|
+
ports_type=ports.POdin40G2S2PB,
|
|
37
|
+
module_id=self.module_id,
|
|
38
|
+
ports_count=self.ports_count
|
|
39
|
+
)
|
|
40
|
+
"""Port Index Manager of Odin-40G-2S-2P-B"""
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import asyncio
|
|
3
|
+
import functools
|
|
4
|
+
import typing
|
|
5
|
+
from typing_extensions import Self
|
|
6
|
+
from xoa_driver.internals.commands import (
|
|
7
|
+
M_MEDIA,
|
|
8
|
+
M_STATUS,
|
|
9
|
+
M_UPGRADE,
|
|
10
|
+
M_UPGRADEPROGRESS,
|
|
11
|
+
M_TIMESYNC,
|
|
12
|
+
M_CFPTYPE,
|
|
13
|
+
M_CFPCONFIGEXT,
|
|
14
|
+
M_COMMENT,
|
|
15
|
+
# M_TIMEADJUSTMENT,
|
|
16
|
+
M_CAPABILITIES,
|
|
17
|
+
M_MEDIASUPPORT,
|
|
18
|
+
M_FPGAREIMAGE,
|
|
19
|
+
M_MULTIUSER,
|
|
20
|
+
M_CLOCKPPB,
|
|
21
|
+
M_SMAINPUT,
|
|
22
|
+
M_SMAOUTPUT,
|
|
23
|
+
M_SMASTATUS,
|
|
24
|
+
M_NAME,
|
|
25
|
+
M_REVISION,
|
|
26
|
+
M_CLOCKSYNCSTATUS,
|
|
27
|
+
M_TXCLOCKSOURCE_NEW,
|
|
28
|
+
M_TXCLOCKSTATUS_NEW,
|
|
29
|
+
M_TXCLOCKFILTER_NEW,
|
|
30
|
+
M_UPGRADEPAR,
|
|
31
|
+
M_VERSIONSTR,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
from xoa_driver.internals.utils import attributes as utils
|
|
35
|
+
from xoa_driver.internals.utils.managers import ports_manager as pm
|
|
36
|
+
from xoa_driver.internals.state_storage import modules_state
|
|
37
|
+
from xoa_driver.enums import MediaConfigurationType
|
|
38
|
+
from xoa_driver.internals.core.token import Token
|
|
39
|
+
from .. import base_module as bm
|
|
40
|
+
from .. import __interfaces as m_itf
|
|
41
|
+
|
|
42
|
+
if typing.TYPE_CHECKING:
|
|
43
|
+
from xoa_driver.internals.core import interfaces as itf
|
|
44
|
+
from xoa_driver.internals.hli_v1.modules.module_chimera import ModuleChimera
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class TXClock:
|
|
48
|
+
"""Advanced timing clock"""
|
|
49
|
+
|
|
50
|
+
def __init__(self, conn: "itf.IConnection", module_id: int) -> None:
|
|
51
|
+
self.source = M_TXCLOCKSOURCE_NEW(conn, module_id)
|
|
52
|
+
"""The source that drives the TX clock rate of the ports on the test module.
|
|
53
|
+
|
|
54
|
+
:type: M_TXCLOCKSOURCE_NEW
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
self.status = M_TXCLOCKSTATUS_NEW(conn, module_id)
|
|
58
|
+
"""TX clock status of the test module.
|
|
59
|
+
|
|
60
|
+
:type: M_TXCLOCKSTATUS_NEW
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
self.filter = M_TXCLOCKFILTER_NEW(conn, module_id)
|
|
64
|
+
"""Loop bandwidth on the TX clock filter of the test module.
|
|
65
|
+
|
|
66
|
+
:type: M_TXCLOCKFILTER_NEW
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class SMA:
|
|
71
|
+
"""SMA connector"""
|
|
72
|
+
|
|
73
|
+
def __init__(self, conn: "itf.IConnection", module_id: int) -> None:
|
|
74
|
+
self.input = M_SMAINPUT(conn, module_id)
|
|
75
|
+
"""SMA input of the test module.
|
|
76
|
+
|
|
77
|
+
:type: M_SMAINPUT
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
self.output = M_SMAOUTPUT(conn, module_id)
|
|
81
|
+
"""SMA output of the test module.
|
|
82
|
+
|
|
83
|
+
:type: M_SMAOUTPUT
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
self.status = M_SMASTATUS(conn, module_id)
|
|
87
|
+
"""SMA input status of the test module.
|
|
88
|
+
|
|
89
|
+
:type: M_SMASTATUS
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class AdvancedTiming:
|
|
94
|
+
"""Advanced Timing config and control"""
|
|
95
|
+
|
|
96
|
+
def __init__(self, conn: "itf.IConnection", module_id: int) -> None:
|
|
97
|
+
self.clock_tx = TXClock(conn, module_id)
|
|
98
|
+
"""Advanced timing clock config and status
|
|
99
|
+
|
|
100
|
+
:type: TXClock
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
self.sma = SMA(conn, module_id)
|
|
104
|
+
"""SMA connector
|
|
105
|
+
|
|
106
|
+
:type: SMA
|
|
107
|
+
"""
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
class ExtendedToken:
|
|
111
|
+
def __init__(
|
|
112
|
+
self, token: Token, module: typing.Union["ModuleL23", "ModuleChimera"]
|
|
113
|
+
) -> None:
|
|
114
|
+
self.__token = token
|
|
115
|
+
self.__module = module
|
|
116
|
+
|
|
117
|
+
def __await__(self):
|
|
118
|
+
return self.__ask_then().__await__()
|
|
119
|
+
|
|
120
|
+
async def __ask_then(self):
|
|
121
|
+
r = await self.__token
|
|
122
|
+
p_counts = (await self.__module.port_count.get()).port_count
|
|
123
|
+
if self.__module.ports is not None:
|
|
124
|
+
changed = self.__module.ports.reinit(p_counts)
|
|
125
|
+
if changed:
|
|
126
|
+
await self.__module.ports.fill()
|
|
127
|
+
return r
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
class MediaModule:
|
|
131
|
+
def __init__(self, conn: "itf.IConnection", module: typing.Union["ModuleL23", "ModuleChimera"]) -> None:
|
|
132
|
+
self.__media = M_MEDIA(conn, module.module_id)
|
|
133
|
+
self.__module = module
|
|
134
|
+
|
|
135
|
+
def get(self) -> Token:
|
|
136
|
+
return self.__media.get()
|
|
137
|
+
|
|
138
|
+
def set(self, media_config: MediaConfigurationType) -> ExtendedToken:
|
|
139
|
+
return ExtendedToken(self.__media.set(media_config), self.__module)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
class CfpModule:
|
|
143
|
+
def __init__(self, conn: "itf.IConnection", module: typing.Union["ModuleL23", "ModuleChimera"]) -> None:
|
|
144
|
+
self.__cfpconfigext = M_CFPCONFIGEXT(conn, module.module_id)
|
|
145
|
+
self.__module = module
|
|
146
|
+
|
|
147
|
+
def get(self) -> Token:
|
|
148
|
+
return self.__cfpconfigext.get()
|
|
149
|
+
|
|
150
|
+
def set(self, portspeed_list: typing.List[int]) -> ExtendedToken:
|
|
151
|
+
return ExtendedToken(self.__cfpconfigext.set(portspeed_list), self.__module)
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
class CFP:
|
|
155
|
+
"""Test module CFP"""
|
|
156
|
+
|
|
157
|
+
def __init__(self, conn: "itf.IConnection", module: typing.Union["ModuleL23", "ModuleChimera"]) -> None:
|
|
158
|
+
self.type = M_CFPTYPE(conn, module.module_id)
|
|
159
|
+
"""The transceiver's CFP type currently inserted.
|
|
160
|
+
|
|
161
|
+
:type: M_CFPTYPE
|
|
162
|
+
"""
|
|
163
|
+
|
|
164
|
+
self.config = CfpModule(conn, module)
|
|
165
|
+
"""The CFP configuration of the test module.
|
|
166
|
+
|
|
167
|
+
:type: CfpModule
|
|
168
|
+
"""
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
class MTiming:
|
|
172
|
+
"""Test module timing and clock configuration"""
|
|
173
|
+
|
|
174
|
+
def __init__(self, conn: "itf.IConnection", module_id: int) -> None:
|
|
175
|
+
self.source = M_TIMESYNC(conn, module_id)
|
|
176
|
+
"""Timing source of the test module.
|
|
177
|
+
|
|
178
|
+
:type: M_TIMESYNC
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
self.clock_local_adjust = M_CLOCKPPB(conn, module_id)
|
|
182
|
+
"""Time adjustment controlling of the local clock of the test module, which drives the TX rate of the test ports.
|
|
183
|
+
|
|
184
|
+
:type: M_CLOCKPPB
|
|
185
|
+
"""
|
|
186
|
+
|
|
187
|
+
self.clock_sync_status = M_CLOCKSYNCSTATUS(conn, module_id)
|
|
188
|
+
"""Test module's clock sync status.
|
|
189
|
+
|
|
190
|
+
:type: M_CLOCKSYNCSTATUS
|
|
191
|
+
"""
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
class MUpgrade:
|
|
195
|
+
"""Test module upgrade"""
|
|
196
|
+
|
|
197
|
+
def __init__(self, conn: "itf.IConnection", module_id: int) -> None:
|
|
198
|
+
self.start = M_UPGRADE(conn, module_id)
|
|
199
|
+
"""Start the upgrade progress of the test module.
|
|
200
|
+
|
|
201
|
+
:type: M_UPGRADE
|
|
202
|
+
"""
|
|
203
|
+
|
|
204
|
+
self.progress = M_UPGRADEPROGRESS(conn, module_id)
|
|
205
|
+
"""Upgrade progress status of the test module.
|
|
206
|
+
|
|
207
|
+
:type: M_UPGRADEPROGRESS
|
|
208
|
+
"""
|
|
209
|
+
|
|
210
|
+
self.reload_image = M_FPGAREIMAGE(conn, module_id)
|
|
211
|
+
"""Reload the FPGA image of the test module.
|
|
212
|
+
|
|
213
|
+
:type: M_FPGAREIMAGE
|
|
214
|
+
"""
|
|
215
|
+
self.start_parallel = M_UPGRADEPAR(conn, module_id)
|
|
216
|
+
"""
|
|
217
|
+
Start the parallel upgrade progress of the test module.
|
|
218
|
+
|
|
219
|
+
:type: M_UPGRADEPAR
|
|
220
|
+
"""
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
class ModuleL23(bm.BaseModule["modules_state.ModuleL23LocalState"]):
|
|
224
|
+
"""
|
|
225
|
+
This is a conceptual class of L23 test module on a Valkyrie tester.
|
|
226
|
+
|
|
227
|
+
"""
|
|
228
|
+
|
|
229
|
+
def __init__(self, conn: "itf.IConnection", init_data: "m_itf.ModuleInitData") -> None:
|
|
230
|
+
super().__init__(conn, init_data)
|
|
231
|
+
|
|
232
|
+
self._local_states = modules_state.ModuleL23LocalState()
|
|
233
|
+
|
|
234
|
+
self.name = M_NAME(conn, self.module_id)
|
|
235
|
+
"""Test module's name.
|
|
236
|
+
|
|
237
|
+
:type: M_NAME
|
|
238
|
+
"""
|
|
239
|
+
|
|
240
|
+
self.comment = M_COMMENT(conn, self.module_id)
|
|
241
|
+
"""Test module's description.
|
|
242
|
+
|
|
243
|
+
:type: M_COMMENT
|
|
244
|
+
"""
|
|
245
|
+
|
|
246
|
+
self.status = M_STATUS(conn, self.module_id)
|
|
247
|
+
"""Test module's status.
|
|
248
|
+
|
|
249
|
+
:type: M_STATUS
|
|
250
|
+
"""
|
|
251
|
+
|
|
252
|
+
self.media = MediaModule(conn, self)
|
|
253
|
+
"""Test module's media type.
|
|
254
|
+
|
|
255
|
+
:type: ModuleMedia
|
|
256
|
+
"""
|
|
257
|
+
|
|
258
|
+
self.available_speeds = M_MEDIASUPPORT(conn, self.module_id)
|
|
259
|
+
"""Test module's available speeds.
|
|
260
|
+
|
|
261
|
+
:type: M_MEDIASUPPORT
|
|
262
|
+
"""
|
|
263
|
+
|
|
264
|
+
self.revision = M_REVISION(conn, self.module_id)
|
|
265
|
+
"""Test module's model P/N name.
|
|
266
|
+
|
|
267
|
+
:type: M_REVISION
|
|
268
|
+
"""
|
|
269
|
+
|
|
270
|
+
self.version_str = M_VERSIONSTR(conn, self.module_id)
|
|
271
|
+
"""Module version number in the new format
|
|
272
|
+
|
|
273
|
+
:type: M_VERSIONSTR
|
|
274
|
+
"""
|
|
275
|
+
|
|
276
|
+
self.multiuser = M_MULTIUSER(conn, self.module_id)
|
|
277
|
+
"""If multiple users are allowed to control the same test module.
|
|
278
|
+
|
|
279
|
+
:type: M_MULTIUSER
|
|
280
|
+
"""
|
|
281
|
+
|
|
282
|
+
self.capabilities = M_CAPABILITIES(conn, self.module_id)
|
|
283
|
+
"""Test module's capabilities.
|
|
284
|
+
|
|
285
|
+
:type: M_CAPABILITIES
|
|
286
|
+
"""
|
|
287
|
+
|
|
288
|
+
self.timing = MTiming(conn, self.module_id)
|
|
289
|
+
"""Test module's timing configuration.
|
|
290
|
+
|
|
291
|
+
:type: MTiming
|
|
292
|
+
"""
|
|
293
|
+
|
|
294
|
+
self.advanced_timing = AdvancedTiming(conn, self.module_id)
|
|
295
|
+
"""Test module's advanced timing configuration.
|
|
296
|
+
|
|
297
|
+
:type: AdvancedTiming
|
|
298
|
+
"""
|
|
299
|
+
|
|
300
|
+
self.cfp = CFP(conn, self)
|
|
301
|
+
"""Test module's CFP configuration.
|
|
302
|
+
|
|
303
|
+
:type: CFP
|
|
304
|
+
"""
|
|
305
|
+
|
|
306
|
+
self.upgrade = MUpgrade(conn, self.module_id)
|
|
307
|
+
"""Test module's upgrade settings.
|
|
308
|
+
|
|
309
|
+
:type: MUpgrade
|
|
310
|
+
"""
|
|
311
|
+
|
|
312
|
+
self.ports: typing.Optional[pm.PortsManager] = None
|
|
313
|
+
"""L23 Port Index Manager of the test module.
|
|
314
|
+
|
|
315
|
+
:type: PortsManager
|
|
316
|
+
"""
|
|
317
|
+
|
|
318
|
+
@property
|
|
319
|
+
def info(self) -> modules_state.ModuleL23LocalState:
|
|
320
|
+
"""Return the module's local state
|
|
321
|
+
|
|
322
|
+
:return: the module's local state
|
|
323
|
+
:rtype: ModuleL23LocalState
|
|
324
|
+
"""
|
|
325
|
+
return self._local_states
|
|
326
|
+
|
|
327
|
+
async def _setup(self) -> Self:
|
|
328
|
+
if self.ports is None:
|
|
329
|
+
raise NotImplementedError("Ports manager type are not defined.") # Maybe can be better solution then this...
|
|
330
|
+
await asyncio.gather(
|
|
331
|
+
self._local_states.initiate(self),
|
|
332
|
+
self.ports.fill()
|
|
333
|
+
)
|
|
334
|
+
self._local_states.register_subscriptions(self)
|
|
335
|
+
return self
|
|
336
|
+
|
|
337
|
+
on_cfp_type_change = functools.partialmethod(utils.on_event, M_CFPTYPE)
|
|
338
|
+
"""Register a callback to the event that the module's CFP type (:class:`M_CFPTYPE`) changes."""
|
|
339
|
+
|
|
340
|
+
on_cfp_config_change = functools.partialmethod(utils.on_event, M_CFPCONFIGEXT)
|
|
341
|
+
"""Register a callback to the event that the module's CFP configuration changes."""
|
|
342
|
+
|
|
343
|
+
on_status_change = functools.partialmethod(utils.on_event, M_STATUS)
|
|
344
|
+
"""Register a callback to the event that the module's status changes."""
|
|
345
|
+
|
|
346
|
+
on_revision_change = functools.partialmethod(utils.on_event, M_REVISION)
|
|
347
|
+
"""Register a callback to the event that the module's model type changes."""
|
|
348
|
+
|
|
349
|
+
on_name_change = functools.partialmethod(utils.on_event, M_NAME)
|
|
350
|
+
"""Register a callback to the event that the module's name changes."""
|
|
351
|
+
|
|
352
|
+
on_adv_timing_clock_tx_status_change = functools.partialmethod(utils.on_event, M_TXCLOCKSTATUS_NEW)
|
|
353
|
+
"""Register a callback to the event that the module's TX clock status changes."""
|
|
354
|
+
|
|
355
|
+
on_adv_timing_clock_tx_source_change = functools.partialmethod(utils.on_event, M_TXCLOCKSOURCE_NEW)
|
|
356
|
+
"""Register a callback to the event that the module's clock that drives the port TX rates changes."""
|
|
357
|
+
|
|
358
|
+
on_adv_timing_clock_tx_filter_change = functools.partialmethod(utils.on_event, M_TXCLOCKFILTER_NEW)
|
|
359
|
+
"""Register a callback to the event that the module's loop bandwidth on the TX clock filter changes."""
|
|
360
|
+
|
|
361
|
+
on_adv_timing_sma_status_change = functools.partialmethod(utils.on_event, M_SMASTATUS)
|
|
362
|
+
"""Register a callback to the event that the module's SMA status changes."""
|
|
363
|
+
|
|
364
|
+
on_adv_timing_sma_input_change = functools.partialmethod(utils.on_event, M_SMAINPUT)
|
|
365
|
+
"""Register a callback to the event that the module's SMA input function changes."""
|
|
366
|
+
|
|
367
|
+
on_adv_timing_sma_output_change = functools.partialmethod(utils.on_event, M_SMAOUTPUT)
|
|
368
|
+
"""Register a callback to the event that the module's SMA output function changes."""
|
|
369
|
+
|
|
370
|
+
on_media_support_change = functools.partialmethod(utils.on_event, M_MEDIASUPPORT)
|
|
371
|
+
"""Register a callback to the event that the module's supported media changes."""
|
|
372
|
+
|
|
373
|
+
on_media_change = functools.partialmethod(utils.on_event, M_MEDIA)
|
|
374
|
+
"""Register a callback to the event that the module's media and available speeds change."""
|
|
375
|
+
|
|
376
|
+
on_comment_change = functools.partialmethod(utils.on_event, M_COMMENT)
|
|
377
|
+
"""Register a callback to the event that the module's description changes."""
|
|
378
|
+
|
|
379
|
+
on_timing_source_change = functools.partialmethod(utils.on_event, M_TIMESYNC)
|
|
380
|
+
"""Register a callback to the event that the module's timesync mode changes."""
|
|
381
|
+
|
|
382
|
+
on_timing_clock_local_adjust_change = functools.partialmethod(utils.on_event, M_CLOCKPPB)
|
|
383
|
+
"""Register a callback to the event that the module's clock adjustment ppb changes."""
|
|
File without changes
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
from typing_extensions import Self
|
|
3
|
+
from abc import (
|
|
4
|
+
ABC,
|
|
5
|
+
abstractmethod,
|
|
6
|
+
)
|
|
7
|
+
from typing import (
|
|
8
|
+
TYPE_CHECKING,
|
|
9
|
+
TypeVar,
|
|
10
|
+
Generic,
|
|
11
|
+
)
|
|
12
|
+
from xoa_driver.internals.commands import enums
|
|
13
|
+
from xoa_driver.internals.commands import (
|
|
14
|
+
P_RESERVATION,
|
|
15
|
+
P_RESERVEDBY,
|
|
16
|
+
P_RESET,
|
|
17
|
+
P_COMMENT,
|
|
18
|
+
P_INTERFACE,
|
|
19
|
+
P_RECEIVESYNC,
|
|
20
|
+
)
|
|
21
|
+
from xoa_driver.internals.state_storage import ports_state
|
|
22
|
+
from xoa_driver.internals.utils import attributes as utils
|
|
23
|
+
from xoa_driver.internals.utils import kind
|
|
24
|
+
|
|
25
|
+
if TYPE_CHECKING:
|
|
26
|
+
from xoa_driver.internals.core import interfaces as itf
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
PortStateStorage = TypeVar('PortStateStorage', bound="ports_state.PortLocalState")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class BasePort(ABC, Generic[PortStateStorage]):
|
|
33
|
+
"""Layout which is relevant to all ports."""
|
|
34
|
+
|
|
35
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
36
|
+
self._conn = conn
|
|
37
|
+
self.kind = kind.PortKind(module_id, port_id)
|
|
38
|
+
self.sync_status = P_RECEIVESYNC(conn, module_id, port_id)
|
|
39
|
+
"""Port sync status.
|
|
40
|
+
|
|
41
|
+
:type: P_RECEIVESYNC
|
|
42
|
+
"""
|
|
43
|
+
self.interface = P_INTERFACE(conn, module_id, port_id)
|
|
44
|
+
"""Physical interface type of the port.
|
|
45
|
+
|
|
46
|
+
:type: P_INTERFACE
|
|
47
|
+
"""
|
|
48
|
+
self.reservation = P_RESERVATION(self._conn, *self.kind)
|
|
49
|
+
"""Port reservation action.
|
|
50
|
+
|
|
51
|
+
:type: P_RESERVATION
|
|
52
|
+
"""
|
|
53
|
+
self.reserved_by = P_RESERVEDBY(self._conn, *self.kind)
|
|
54
|
+
"""Port reservation status.
|
|
55
|
+
|
|
56
|
+
:type: P_RESERVEDBY
|
|
57
|
+
"""
|
|
58
|
+
self.reset = P_RESET(self._conn, *self.kind)
|
|
59
|
+
"""Port reset action.
|
|
60
|
+
|
|
61
|
+
:type: P_RESET
|
|
62
|
+
"""
|
|
63
|
+
self.comment = P_COMMENT(self._conn, *self.kind)
|
|
64
|
+
"""Port description.
|
|
65
|
+
|
|
66
|
+
:type: P_COMMENT
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
def __await__(self):
|
|
70
|
+
return self._setup().__await__()
|
|
71
|
+
|
|
72
|
+
@abstractmethod
|
|
73
|
+
async def _setup(self) -> Self:
|
|
74
|
+
return self
|
|
75
|
+
|
|
76
|
+
def _check_identity(self, request) -> bool:
|
|
77
|
+
validators = (
|
|
78
|
+
self.kind.module_id == request.header.module_index,
|
|
79
|
+
self.kind.port_id == request.header.port_index
|
|
80
|
+
)
|
|
81
|
+
return all(validators)
|
|
82
|
+
|
|
83
|
+
def __is_reservation(self, reserved_status: enums.ReservedStatus) -> bool:
|
|
84
|
+
return self.info.reservation == reserved_status
|
|
85
|
+
|
|
86
|
+
is_released = functools.partialmethod(__is_reservation, enums.ReservedStatus.RELEASED)
|
|
87
|
+
"""
|
|
88
|
+
Check if port is released
|
|
89
|
+
"""
|
|
90
|
+
|
|
91
|
+
is_reserved_by_me = functools.partialmethod(__is_reservation, enums.ReservedStatus.RESERVED_BY_YOU)
|
|
92
|
+
"""
|
|
93
|
+
Check if port is released by me
|
|
94
|
+
"""
|
|
95
|
+
|
|
96
|
+
is_reserved_by_others = functools.partialmethod(__is_reservation, enums.ReservedStatus.RESERVED_BY_OTHER)
|
|
97
|
+
"""
|
|
98
|
+
Check if port is released by others
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
@property
|
|
102
|
+
@abstractmethod
|
|
103
|
+
def info(self) -> PortStateStorage:
|
|
104
|
+
"""Module info"""
|
|
105
|
+
raise NotImplementedError()
|
|
106
|
+
|
|
107
|
+
on_reservation_change = functools.partialmethod(utils.on_event, P_RESERVATION)
|
|
108
|
+
"""
|
|
109
|
+
Register a callback to the event that the port's reservation status changes.
|
|
110
|
+
"""
|
|
111
|
+
|
|
112
|
+
on_receive_sync_change = functools.partialmethod(utils.on_event, P_RECEIVESYNC)
|
|
113
|
+
"""
|
|
114
|
+
Register a callback to the event that the port's SYNC status changes.
|
|
115
|
+
"""
|
|
116
|
+
|
|
117
|
+
on_reserved_by_change = functools.partialmethod(utils.on_event, P_RESERVEDBY)
|
|
118
|
+
"""
|
|
119
|
+
Register a callback to the event that the port's reservation ownership changes.
|
|
120
|
+
"""
|
|
121
|
+
|
|
122
|
+
on_interface_change = functools.partialmethod(utils.on_event, P_INTERFACE)
|
|
123
|
+
"""
|
|
124
|
+
Register a callback to the event that the port's physical interface type changes.
|
|
125
|
+
"""
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
from typing import (
|
|
2
|
+
TYPE_CHECKING,
|
|
3
|
+
List,
|
|
4
|
+
)
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from xoa_driver.internals.core import interfaces as itf
|
|
7
|
+
from xoa_driver.internals.commands import (
|
|
8
|
+
P_CAPTURE,
|
|
9
|
+
PC_TRIGGER,
|
|
10
|
+
PC_KEEP,
|
|
11
|
+
PC_STATS,
|
|
12
|
+
PC_EXTRA,
|
|
13
|
+
PC_PACKET,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ObtainCaptured:
|
|
18
|
+
"""Obtain info of captured packets.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int, capture_pkt_idx: int) -> None:
|
|
22
|
+
self.extra = PC_EXTRA(conn, module_id, port_id, capture_pkt_idx)
|
|
23
|
+
"""Obtains extra information about a captured packet on a L23 port.
|
|
24
|
+
|
|
25
|
+
:type: PC_EXTRA
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
self.packet = PC_PACKET(conn, module_id, port_id, capture_pkt_idx)
|
|
29
|
+
"""Obtains raw bytes of a captured packet on a L23 port.
|
|
30
|
+
|
|
31
|
+
:type: PC_PACKET
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class PortCapture:
|
|
36
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
37
|
+
self.__conn = conn
|
|
38
|
+
self.__module_id = module_id
|
|
39
|
+
self.__port_id = port_id
|
|
40
|
+
self.state = P_CAPTURE(conn, module_id, port_id)
|
|
41
|
+
"""L23 port traffic capture.
|
|
42
|
+
|
|
43
|
+
:type: P_CAPTURE
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
self.trigger = PC_TRIGGER(conn, module_id, port_id)
|
|
47
|
+
"""L23 port packet capture triggering criteria.
|
|
48
|
+
|
|
49
|
+
:type: PC_TRIGGER
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
self.keep = PC_KEEP(conn, module_id, port_id)
|
|
53
|
+
"""Keeping captured packets on a L23 port.
|
|
54
|
+
|
|
55
|
+
:type: PC_KEEP
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
self.stats = PC_STATS(conn, module_id, port_id)
|
|
59
|
+
"""L23 port's number of packets in the capture buffer.
|
|
60
|
+
|
|
61
|
+
:type: PC_STATS
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
async def obtain_captured(self) -> List[ObtainCaptured]:
|
|
65
|
+
# TODO: check better title for this operation
|
|
66
|
+
stats = await self.stats.get()
|
|
67
|
+
return [
|
|
68
|
+
ObtainCaptured(self.__conn, self.__module_id, self.__port_id, idx)
|
|
69
|
+
for idx in range(stats.packets)
|
|
70
|
+
]
|