tdl-xoa-driver 1.3.0__py3-none-any.whl → 1.5.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.5.0.dist-info/METADATA +56 -0
- tdl_xoa_driver-1.5.0.dist-info/RECORD +231 -0
- xoa_driver/__init__.py +2 -2
- xoa_driver/enums.py +2 -0
- xoa_driver/exceptions.py +2 -0
- xoa_driver/functions/anlt.py +4 -2
- xoa_driver/functions/anlt_ll_debug.py +2 -0
- xoa_driver/functions/cli/__init__.py +21 -0
- xoa_driver/functions/cli/_cli_manager.py +541 -0
- xoa_driver/functions/cli/_config_block.py +334 -0
- xoa_driver/functions/cli/_socket_driver.py +111 -0
- xoa_driver/functions/cli/port_config.py +116 -0
- xoa_driver/functions/cli/testbed_config.py +179 -0
- xoa_driver/functions/cmis/__init__.py +8 -0
- xoa_driver/functions/cmis/_constants.py +25 -0
- xoa_driver/functions/cmis/_replies.py +600 -0
- xoa_driver/functions/cmis/_utils.py +49 -0
- xoa_driver/functions/cmis/cdb.py +1266 -0
- xoa_driver/functions/exceptions.py +2 -0
- xoa_driver/functions/headers.py +2 -0
- xoa_driver/functions/mgmt.py +48 -34
- xoa_driver/functions/tools.py +9 -3
- xoa_driver/hlfuncs.py +7 -3
- xoa_driver/internals/commands/c_commands.py +6 -10
- xoa_driver/internals/commands/enums.py +25 -1
- xoa_driver/internals/commands/p_commands.py +50 -12
- xoa_driver/internals/commands/pl1_commands.py +130 -73
- xoa_driver/internals/commands/pp_commands.py +44 -55
- xoa_driver/internals/commands/pr_commands.py +17 -16
- xoa_driver/internals/commands/pt_commands.py +21 -1
- xoa_driver/internals/commands/px_commands.py +1686 -6
- xoa_driver/internals/core/transporter/_request_id_counter.py +1 -1
- xoa_driver/internals/core/transporter/logger/__state_on_user.py +1 -1
- xoa_driver/internals/core/transporter/protocol/payload/__init__.py +3 -1
- xoa_driver/internals/core/transporter/protocol/payload/field.py +41 -0
- xoa_driver/internals/core/transporter/protocol/payload/types.py +19 -0
- xoa_driver/internals/exceptions/modules.py +4 -3
- xoa_driver/internals/{hli_v1 → hli}/indices/filter/base_filter.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/indices/length_term.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/indices/macsecscs/base_macsecsc.py +2 -2
- xoa_driver/internals/{hli_v1 → hli}/indices/match_term.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/indices/port_dataset.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/indices/streams/base_stream.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/modules/module_chimera.py +3 -3
- xoa_driver/internals/{hli_v1 → hli}/modules/module_l47.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/modules/modules_l23/family_combi.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/modules/modules_l23/family_d.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/modules/modules_l23/family_e.py +1 -1
- xoa_driver/internals/hli/modules/modules_l23/family_edun.py +82 -0
- xoa_driver/internals/{hli_v1 → hli}/modules/modules_l23/family_f.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/modules/modules_l23/family_g.py +17 -2
- xoa_driver/internals/{hli_v1 → hli}/modules/modules_l23/family_h.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/modules/modules_l23/family_i.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/modules/modules_l23/family_j.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/modules/modules_l23/family_k.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/modules/modules_l23/family_l.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/modules/modules_l23/family_l1.py +20 -1
- xoa_driver/internals/{hli_v1 → hli}/modules/modules_l23/family_m.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/modules/modules_l23/family_n.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/modules/modules_l23/module_l23_base.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/bases/port_l23.py +3 -3
- xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/bases/port_l23_genuine.py +4 -4
- xoa_driver/internals/hli/ports/port_l23/bases/port_transceiver.py +247 -0
- xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/bases/port_transmission_statistics.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/chimera/port_chimera.py +1 -1
- xoa_driver/internals/hli/ports/port_l23/edun_l1.py +181 -0
- xoa_driver/internals/hli/ports/port_l23/family_edun.py +82 -0
- xoa_driver/internals/{hli_v2 → hli}/ports/port_l23/family_g.py +5 -0
- xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/family_l1.py +14 -8
- xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/port_l23ve.py +2 -2
- xoa_driver/internals/{hli_v1 → hli}/ports/port_l47/main.py +2 -2
- xoa_driver/internals/{hli_v1 → hli}/testers/l23_tester.py +1 -1
- xoa_driver/internals/{hli_v1 → hli}/testers/l47_tester.py +2 -2
- xoa_driver/internals/state_storage/modules_state.py +20 -0
- xoa_driver/internals/state_storage/testers_state.py +10 -0
- xoa_driver/lli.py +1 -0
- xoa_driver/misc.py +13 -17
- xoa_driver/modules.py +40 -22
- xoa_driver/ports.py +42 -20
- xoa_driver/testers.py +5 -7
- xoa_driver/utils.py +2 -0
- tdl_xoa_driver-1.3.0.dist-info/METADATA +0 -56
- tdl_xoa_driver-1.3.0.dist-info/RECORD +0 -325
- xoa_driver/functions/cli.py +0 -581
- xoa_driver/internals/hli_v1/ports/port_l23/bases/port_transceiver.py +0 -117
- xoa_driver/internals/hli_v1/ports/port_l23/family_g.py +0 -77
- 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 +0 -39
- xoa_driver/internals/hli_v2/indices/connection_group/__init__.py +0 -0
- xoa_driver/internals/hli_v2/indices/connection_group/cg.py +0 -115
- xoa_driver/internals/hli_v2/indices/connection_group/histogram.py +0 -59
- xoa_driver/internals/hli_v2/indices/connection_group/l2.py +0 -71
- xoa_driver/internals/hli_v2/indices/connection_group/l3.py +0 -96
- xoa_driver/internals/hli_v2/indices/connection_group/raw.py +0 -148
- xoa_driver/internals/hli_v2/indices/connection_group/replay.py +0 -89
- xoa_driver/internals/hli_v2/indices/connection_group/tcp.py +0 -261
- xoa_driver/internals/hli_v2/indices/connection_group/tls.py +0 -166
- xoa_driver/internals/hli_v2/indices/connection_group/udp.py +0 -112
- xoa_driver/internals/hli_v2/indices/connection_group/user_state.py +0 -25
- xoa_driver/internals/hli_v2/indices/filter/__init__.py +0 -0
- xoa_driver/internals/hli_v2/indices/filter/base_filter.py +0 -50
- xoa_driver/internals/hli_v2/indices/filter/genuine_filter.py +0 -17
- xoa_driver/internals/hli_v2/indices/length_term.py +0 -44
- xoa_driver/internals/hli_v2/indices/match_term.py +0 -49
- xoa_driver/internals/hli_v2/indices/port_dataset.py +0 -53
- xoa_driver/internals/hli_v2/indices/streams/__init__.py +0 -0
- xoa_driver/internals/hli_v2/indices/streams/base_stream.py +0 -234
- xoa_driver/internals/hli_v2/indices/streams/genuine_stream.py +0 -32
- xoa_driver/internals/hli_v2/modules/__init__.py +0 -0
- xoa_driver/internals/hli_v2/modules/__interfaces.py +0 -21
- xoa_driver/internals/hli_v2/modules/base_module.py +0 -125
- xoa_driver/internals/hli_v2/modules/module_chimera.py +0 -358
- xoa_driver/internals/hli_v2/modules/module_l23ve.py +0 -58
- xoa_driver/internals/hli_v2/modules/module_l47.py +0 -230
- xoa_driver/internals/hli_v2/modules/module_l47ve.py +0 -8
- xoa_driver/internals/hli_v2/modules/modules_l23/__init__.py +0 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_combi.py +0 -73
- xoa_driver/internals/hli_v2/modules/modules_l23/family_d.py +0 -75
- xoa_driver/internals/hli_v2/modules/modules_l23/family_e.py +0 -85
- xoa_driver/internals/hli_v2/modules/modules_l23/family_f.py +0 -144
- xoa_driver/internals/hli_v2/modules/modules_l23/family_g.py +0 -84
- xoa_driver/internals/hli_v2/modules/modules_l23/family_h.py +0 -40
- xoa_driver/internals/hli_v2/modules/modules_l23/family_i.py +0 -25
- xoa_driver/internals/hli_v2/modules/modules_l23/family_j.py +0 -25
- xoa_driver/internals/hli_v2/modules/modules_l23/family_k.py +0 -39
- xoa_driver/internals/hli_v2/modules/modules_l23/family_l.py +0 -55
- xoa_driver/internals/hli_v2/modules/modules_l23/family_l1.py +0 -797
- xoa_driver/internals/hli_v2/modules/modules_l23/family_m.py +0 -25
- xoa_driver/internals/hli_v2/modules/modules_l23/family_n.py +0 -40
- xoa_driver/internals/hli_v2/modules/modules_l23/module_l23_base.py +0 -339
- xoa_driver/internals/hli_v2/ports/__init__.py +0 -0
- xoa_driver/internals/hli_v2/ports/base_port.py +0 -105
- 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 +0 -64
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_l23.py +0 -441
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_l23_genuine.py +0 -172
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_reception_statistics.py +0 -156
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_transceiver.py +0 -117
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_transmission_statistics.py +0 -59
- 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 +0 -15
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/general.py +0 -340
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/shadow.py +0 -99
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/working.py +0 -36
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/pe_custom_distribution.py +0 -116
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/pe_distribution.py +0 -102
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/port_chimera.py +0 -113
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/port_emulation.py +0 -420
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/reception_statistics.py +0 -22
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/transmission_statistics.py +0 -22
- xoa_driver/internals/hli_v2/ports/port_l23/family_combi.py +0 -36
- xoa_driver/internals/hli_v2/ports/port_l23/family_d.py +0 -49
- xoa_driver/internals/hli_v2/ports/port_l23/family_e.py +0 -96
- xoa_driver/internals/hli_v2/ports/port_l23/family_f.py +0 -144
- xoa_driver/internals/hli_v2/ports/port_l23/family_h.py +0 -60
- xoa_driver/internals/hli_v2/ports/port_l23/family_i.py +0 -66
- xoa_driver/internals/hli_v2/ports/port_l23/family_j.py +0 -53
- xoa_driver/internals/hli_v2/ports/port_l23/family_k.py +0 -58
- xoa_driver/internals/hli_v2/ports/port_l23/family_l.py +0 -67
- xoa_driver/internals/hli_v2/ports/port_l23/family_l1.py +0 -149
- xoa_driver/internals/hli_v2/ports/port_l23/family_m.py +0 -28
- xoa_driver/internals/hli_v2/ports/port_l23/fault_jkl.py +0 -22
- xoa_driver/internals/hli_v2/ports/port_l23/pcs_pma_ghijkl.py +0 -342
- xoa_driver/internals/hli_v2/ports/port_l23/pcs_pma_ijkl_chimera.py +0 -50
- xoa_driver/internals/hli_v2/ports/port_l23/pcs_pma_l.py +0 -65
- xoa_driver/internals/hli_v2/ports/port_l23/port_l23ve.py +0 -81
- xoa_driver/internals/hli_v2/ports/port_l47/__init__.py +0 -0
- xoa_driver/internals/hli_v2/ports/port_l47/counters.py +0 -146
- xoa_driver/internals/hli_v2/ports/port_l47/main.py +0 -137
- xoa_driver/internals/hli_v2/ports/port_l47/packet_engine.py +0 -20
- xoa_driver/internals/hli_v2/revisions.py +0 -11
- xoa_driver/internals/hli_v2/testers/__init__.py +0 -0
- xoa_driver/internals/hli_v2/testers/_base_tester.py +0 -207
- 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 +0 -16
- xoa_driver/internals/hli_v2/testers/genuine/l_23/rest_api.py +0 -34
- xoa_driver/internals/hli_v2/testers/genuine/l_23/time_keeper.py +0 -50
- xoa_driver/internals/hli_v2/testers/genuine/l_23/upload_file.py +0 -26
- xoa_driver/internals/hli_v2/testers/genuine/management_interface.py +0 -38
- xoa_driver/internals/hli_v2/testers/l23_tester.py +0 -159
- xoa_driver/internals/hli_v2/testers/l23ve_tester.py +0 -98
- xoa_driver/internals/hli_v2/testers/l47_tester.py +0 -95
- xoa_driver/internals/hli_v2/testers/l47ve_tester.py +0 -50
- xoa_driver/v2/__init__.py +0 -11
- xoa_driver/v2/misc.py +0 -77
- xoa_driver/v2/modules.py +0 -308
- xoa_driver/v2/ports.py +0 -232
- xoa_driver/v2/testers.py +0 -24
- {tdl_xoa_driver-1.3.0.dist-info → tdl_xoa_driver-1.5.0.dist-info}/WHEEL +0 -0
- {tdl_xoa_driver-1.3.0.dist-info → tdl_xoa_driver-1.5.0.dist-info}/licenses/LICENSE +0 -0
- {tdl_xoa_driver-1.3.0.dist-info → tdl_xoa_driver-1.5.0.dist-info}/top_level.txt +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/base_index.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/connection_group/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/connection_group/cg.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/connection_group/histogram.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/connection_group/l2.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/connection_group/l3.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/connection_group/raw.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/connection_group/replay.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/connection_group/tcp.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/connection_group/tls.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/connection_group/udp.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/connection_group/user_state.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/filter/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/filter/genuine_filter.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/macsecscs/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/macsecscs/genuine_macsecsc.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/streams/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/indices/streams/genuine_stream.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/modules/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/modules/__interfaces.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/modules/base_module.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/modules/module_l23ve.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/modules/module_l47ve.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/modules/modules_l23/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/base_port.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/bases/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/bases/port_capture.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/bases/port_reception_statistics.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/chimera/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/chimera/filter_definition/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/chimera/filter_definition/_utils.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/chimera/filter_definition/general.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/chimera/filter_definition/shadow.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/chimera/filter_definition/working.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/chimera/pe_custom_distribution.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/chimera/pe_distribution.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/chimera/port_emulation.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/chimera/reception_statistics.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/chimera/transmission_statistics.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/family_combi.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/family_d.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/family_e.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/family_f.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/family_h.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/family_i.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/family_j.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/family_k.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/family_l.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/family_m.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/fault_jkl.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/freya_l1.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/pcs_pma_ghijkl.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/pcs_pma_ijkl_chimera.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l23/pcs_pma_l.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l47/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l47/counters.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/ports/port_l47/packet_engine.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/revisions.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/testers/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/testers/_base_tester.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/testers/genuine/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/testers/genuine/l_23/__init__.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/testers/genuine/l_23/health.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/testers/genuine/l_23/rest_api.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/testers/genuine/l_23/time_keeper.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/testers/genuine/l_23/upload_file.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/testers/genuine/management_interface.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/testers/l23ve_tester.py +0 -0
- /xoa_driver/internals/{hli_v1 → hli}/testers/l47ve_tester.py +0 -0
xoa_driver/functions/headers.py
CHANGED
xoa_driver/functions/mgmt.py
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
|
+
"""
|
|
2
|
+
The resource management high-level function module,
|
|
3
|
+
including testers, modules, ports, and streams.
|
|
4
|
+
"""
|
|
5
|
+
|
|
1
6
|
from __future__ import annotations
|
|
2
7
|
import asyncio
|
|
3
|
-
|
|
8
|
+
from typing import (
|
|
9
|
+
TYPE_CHECKING,
|
|
10
|
+
Any,
|
|
11
|
+
Union,
|
|
12
|
+
)
|
|
4
13
|
from xoa_driver import enums, testers
|
|
5
14
|
from xoa_driver.utils import apply
|
|
6
|
-
|
|
7
|
-
from xoa_driver.internals.
|
|
8
|
-
from xoa_driver.ports import
|
|
9
|
-
from xoa_driver.
|
|
10
|
-
from xoa_driver.
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from xoa_driver.internals.hli.ports.port_l23.family_l import FamilyL
|
|
17
|
+
from xoa_driver.internals.hli.ports.port_l23.family_l1 import FamilyFreya
|
|
18
|
+
from xoa_driver.ports import GenericAnyPort, GenericL23Port
|
|
19
|
+
from xoa_driver.modules import GenericAnyModule, GenericL23Module, ModuleChimera, Z800FreyaModule, Z1600EdunModule
|
|
20
|
+
from xoa_driver.testers import GenericAnyTester, L23Tester
|
|
11
21
|
from .exceptions import (
|
|
12
22
|
NotSupportMedia,
|
|
13
23
|
NotSupportPortSpeed,
|
|
@@ -18,10 +28,6 @@ from itertools import chain # type: ignore[Pylance false warning]
|
|
|
18
28
|
from datetime import datetime
|
|
19
29
|
import json
|
|
20
30
|
|
|
21
|
-
PcsPmaSupported = (FamilyL, FamilyL1)
|
|
22
|
-
AutoNegSupported = (FamilyL, FamilyL1)
|
|
23
|
-
LinkTrainingSupported = FamilyL
|
|
24
|
-
|
|
25
31
|
|
|
26
32
|
# region Testers
|
|
27
33
|
async def reserve_tester(tester: GenericAnyTester, force: bool = True) -> None:
|
|
@@ -35,13 +41,8 @@ async def reserve_tester(tester: GenericAnyTester, force: bool = True) -> None:
|
|
|
35
41
|
:return:
|
|
36
42
|
:rtype: None
|
|
37
43
|
"""
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
await tester.reservation.set_relinquish()
|
|
41
|
-
await asyncio.gather(*(release_module(m, True) for m in tester.modules))
|
|
42
|
-
await tester.reservation.set_reserve()
|
|
43
|
-
elif r.operation == enums.ReservedStatus.RELEASED:
|
|
44
|
-
await tester.reservation.set_reserve()
|
|
44
|
+
await release_tester(tester, force)
|
|
45
|
+
await tester.reservation.set_reserve()
|
|
45
46
|
|
|
46
47
|
|
|
47
48
|
async def release_tester(
|
|
@@ -127,12 +128,8 @@ async def reserve_module(module: GenericAnyModule, force: bool = True) -> None:
|
|
|
127
128
|
:return:
|
|
128
129
|
:rtype: None
|
|
129
130
|
"""
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
await release_module(module, True)
|
|
133
|
-
await module.reservation.set_reserve()
|
|
134
|
-
elif r.operation == enums.ReservedStatus.RELEASED:
|
|
135
|
-
await module.reservation.set_reserve()
|
|
131
|
+
await release_module(module, force)
|
|
132
|
+
await module.reservation.set_reserve()
|
|
136
133
|
|
|
137
134
|
|
|
138
135
|
async def release_module(
|
|
@@ -159,14 +156,14 @@ async def release_module(
|
|
|
159
156
|
|
|
160
157
|
def get_module_supported_media(
|
|
161
158
|
module: GenericL23Module | ModuleChimera,
|
|
162
|
-
) -> list[dict[str,
|
|
159
|
+
) -> list[dict[str, Any]]:
|
|
163
160
|
"""
|
|
164
161
|
Get a list of supported media, port speed and count of the module.
|
|
165
162
|
|
|
166
163
|
:param module: The module object
|
|
167
164
|
:type module: GenericAnyModule
|
|
168
165
|
:return: List of supported media, port speed and count
|
|
169
|
-
:rtype: list[dict[str,
|
|
166
|
+
:rtype: list[dict[str, Any]]
|
|
170
167
|
"""
|
|
171
168
|
supported_media_list = []
|
|
172
169
|
item = {}
|
|
@@ -183,7 +180,7 @@ def get_module_supported_media(
|
|
|
183
180
|
|
|
184
181
|
|
|
185
182
|
async def set_module_media_config(
|
|
186
|
-
module:
|
|
183
|
+
module: Union[GenericL23Module, ModuleChimera],
|
|
187
184
|
media: enums.MediaConfigurationType,
|
|
188
185
|
force: bool = True,
|
|
189
186
|
) -> None:
|
|
@@ -219,7 +216,7 @@ async def set_module_media_config(
|
|
|
219
216
|
|
|
220
217
|
|
|
221
218
|
async def set_module_port_config(
|
|
222
|
-
module:
|
|
219
|
+
module: Union[GenericL23Module, ModuleChimera],
|
|
223
220
|
port_count: int,
|
|
224
221
|
port_speed: int,
|
|
225
222
|
force: bool = True,
|
|
@@ -228,7 +225,7 @@ async def set_module_port_config(
|
|
|
228
225
|
Set module's port-speed configuration
|
|
229
226
|
|
|
230
227
|
:param module: The module object
|
|
231
|
-
:type module:
|
|
228
|
+
:type module: Union[GenericL23Module, ModuleChimera]
|
|
232
229
|
:param port_count: The port count
|
|
233
230
|
:type port_count: int
|
|
234
231
|
:param port_speed: The port speed in Mbps, e.g. 40000 for 40G
|
|
@@ -267,7 +264,7 @@ async def set_module_port_config(
|
|
|
267
264
|
|
|
268
265
|
|
|
269
266
|
async def set_module_config(
|
|
270
|
-
module:
|
|
267
|
+
module: Union[GenericL23Module, ModuleChimera],
|
|
271
268
|
media: enums.MediaConfigurationType,
|
|
272
269
|
port_count: int,
|
|
273
270
|
port_speed: int,
|
|
@@ -276,7 +273,7 @@ async def set_module_config(
|
|
|
276
273
|
"""Change the module configuration to the target media, port count and port speed.
|
|
277
274
|
|
|
278
275
|
:param module: the module object
|
|
279
|
-
:type module:
|
|
276
|
+
:type module: Union[GenericL23Module, ModuleChimera]
|
|
280
277
|
:param media: the target media for the module
|
|
281
278
|
:type media: enums.MediaConfigurationType
|
|
282
279
|
:param port_count: the target port count
|
|
@@ -341,12 +338,13 @@ async def get_module_eol_days(module: GenericAnyModule) -> int:
|
|
|
341
338
|
return timedelta.days
|
|
342
339
|
|
|
343
340
|
|
|
344
|
-
|
|
341
|
+
from xoa_driver.modules import GenericAnyModule, GenericL23Module, ModuleChimera, Z800FreyaModule, Z1600EdunModule
|
|
342
|
+
async def get_module_cage_insertion_count(module: Union[Z800FreyaModule, Z1600EdunModule], cage_index: int) -> int:
|
|
345
343
|
"""
|
|
346
344
|
Get module cage insertion count
|
|
347
345
|
|
|
348
346
|
:param module: The Z800 Freya module object
|
|
349
|
-
:type module: Z800FreyaModule
|
|
347
|
+
:type module: Union[Z800FreyaModule, Z1600EdunModule]
|
|
350
348
|
:param cage_index: The cage index
|
|
351
349
|
:type module: int
|
|
352
350
|
:return: Insertion count of the cage
|
|
@@ -364,6 +362,22 @@ async def get_module_cage_insertion_count(module: Z800FreyaModule, cage_index: i
|
|
|
364
362
|
return result
|
|
365
363
|
|
|
366
364
|
|
|
365
|
+
async def get_module_cage_count(module: Union[Z800FreyaModule, Z1600EdunModule]) -> int:
|
|
366
|
+
"""
|
|
367
|
+
Get module cage count
|
|
368
|
+
|
|
369
|
+
:param module: The Z800 Freya module object
|
|
370
|
+
:type module: Union[Z800FreyaModule, Z1600EdunModule]
|
|
371
|
+
:return: The number of cages in the module
|
|
372
|
+
:rtype: int
|
|
373
|
+
"""
|
|
374
|
+
resp = await module.health.cage_insertion.get()
|
|
375
|
+
info_js = resp.info
|
|
376
|
+
info_dict = json.loads(info_js)
|
|
377
|
+
result = len(info_dict['1']['data'])
|
|
378
|
+
return result
|
|
379
|
+
|
|
380
|
+
|
|
367
381
|
# endregion
|
|
368
382
|
|
|
369
383
|
|
|
@@ -470,12 +484,12 @@ async def release_ports(*ports: GenericAnyPort) -> None:
|
|
|
470
484
|
|
|
471
485
|
|
|
472
486
|
# region Streams
|
|
473
|
-
async def remove_streams(port:
|
|
487
|
+
async def remove_streams(port: GenericL23Port) -> None:
|
|
474
488
|
"""
|
|
475
489
|
Remove all streams on a port witout resetting the port.
|
|
476
490
|
|
|
477
491
|
:param port: The port object
|
|
478
|
-
:type port:
|
|
492
|
+
:type port: GenericL23Port
|
|
479
493
|
"""
|
|
480
494
|
await port.streams.server_sync()
|
|
481
495
|
await asyncio.gather(*(s.delete() for s in port.streams))
|
xoa_driver/functions/tools.py
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
-
from typing import
|
|
2
|
+
from typing import (
|
|
3
|
+
TYPE_CHECKING,
|
|
4
|
+
Any,
|
|
5
|
+
)
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from xoa_driver.ports import GenericAnyPort
|
|
3
9
|
|
|
4
|
-
from xoa_driver.ports import GenericAnyPort
|
|
5
10
|
from xoa_driver.internals.core import interfaces as itf
|
|
6
11
|
from xoa_driver.lli import commands
|
|
7
12
|
from xoa_driver import enums
|
|
8
13
|
|
|
9
14
|
|
|
10
15
|
def get_ctx(port: GenericAnyPort) -> tuple["itf.IConnection", int, int]:
|
|
11
|
-
|
|
16
|
+
module_id, port_id = port.kind # Explicitly unpack to two ints
|
|
17
|
+
return (port._conn, module_id, port_id)
|
|
12
18
|
|
|
13
19
|
|
|
14
20
|
def dictionize_autoneg_status(
|
xoa_driver/hlfuncs.py
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
#: High-level functions
|
|
2
|
+
"""High-level functions."""
|
|
3
|
+
|
|
2
4
|
from xoa_driver.functions import (
|
|
3
5
|
anlt,
|
|
4
|
-
cli,
|
|
6
|
+
cli as config_io,
|
|
5
7
|
mgmt,
|
|
6
8
|
anlt_ll_debug,
|
|
7
9
|
exceptions,
|
|
8
10
|
headers,
|
|
11
|
+
cmis,
|
|
9
12
|
)
|
|
10
13
|
|
|
11
14
|
__all__ = (
|
|
@@ -13,6 +16,7 @@ __all__ = (
|
|
|
13
16
|
"mgmt",
|
|
14
17
|
"anlt_ll_debug",
|
|
15
18
|
"exceptions",
|
|
16
|
-
"
|
|
17
|
-
"headers"
|
|
19
|
+
"config_io",
|
|
20
|
+
"headers",
|
|
21
|
+
"cmis",
|
|
18
22
|
)
|
|
@@ -23,7 +23,8 @@ from xoa_driver.internals.core.transporter.protocol.payload import (
|
|
|
23
23
|
XmpMacAddress,
|
|
24
24
|
XmpSequence,
|
|
25
25
|
XmpStr,
|
|
26
|
-
Hex
|
|
26
|
+
Hex,
|
|
27
|
+
XmpJson,
|
|
27
28
|
)
|
|
28
29
|
from .enums import (
|
|
29
30
|
ReservedStatus,
|
|
@@ -1239,7 +1240,7 @@ class C_WATCHDOG:
|
|
|
1239
1240
|
@dataclass
|
|
1240
1241
|
class C_DEBUGCMD:
|
|
1241
1242
|
"""
|
|
1242
|
-
Chassis debug command
|
|
1243
|
+
Chassis debug command for internal use only.
|
|
1243
1244
|
"""
|
|
1244
1245
|
|
|
1245
1246
|
code: typing.ClassVar[int] = 37
|
|
@@ -1249,16 +1250,11 @@ class C_DEBUGCMD:
|
|
|
1249
1250
|
_cmd_xindex: int
|
|
1250
1251
|
|
|
1251
1252
|
class GetDataAttr(ResponseBodyStruct):
|
|
1252
|
-
data:
|
|
1253
|
-
|
|
1254
|
-
class SetDataAttr(RequestBodyStruct):
|
|
1255
|
-
data: typing.List[int] = field(XmpSequence(types_chunk=[XmpInt()]))
|
|
1253
|
+
data: dict = field(XmpJson(min_len=2))
|
|
1256
1254
|
|
|
1257
1255
|
def get(self) -> Token[GetDataAttr]:
|
|
1258
1256
|
return Token(self._connection, build_get_request(self, indices=[self._cmd_xindex]))
|
|
1259
1257
|
|
|
1260
|
-
def set(self, data: typing.List[int]) -> Token[None]:
|
|
1261
|
-
return Token(self._connection, build_set_request(self, indices=[self._cmd_xindex], data=data))
|
|
1262
1258
|
|
|
1263
1259
|
|
|
1264
1260
|
@register_command
|
|
@@ -2028,8 +2024,8 @@ class C_MODEL_NUMBER:
|
|
|
2028
2024
|
_connection: 'interfaces.IConnection'
|
|
2029
2025
|
|
|
2030
2026
|
class GetDataAttr(ResponseBodyStruct):
|
|
2031
|
-
number:
|
|
2032
|
-
"""
|
|
2027
|
+
number: str = field(XmpStr())
|
|
2028
|
+
"""str, the model of the Xena tester"""
|
|
2033
2029
|
|
|
2034
2030
|
def get(self) -> Token[GetDataAttr]:
|
|
2035
2031
|
"""Get the Xena chassis model number.
|
|
@@ -1069,6 +1069,18 @@ class MediaConfigurationType(IntEnum):
|
|
|
1069
1069
|
QSFP28_NRZ_ANLT = 123
|
|
1070
1070
|
"""QSFP28, 25G serdes, L1/ANLT"""
|
|
1071
1071
|
|
|
1072
|
+
SMPX_112 = 124
|
|
1073
|
+
"""SMPX 112Gbps serdes"""
|
|
1074
|
+
|
|
1075
|
+
SMPX_224 = 125
|
|
1076
|
+
"""SMPX 224Gbps serdes"""
|
|
1077
|
+
|
|
1078
|
+
OSFP_1600 = 126
|
|
1079
|
+
"""OSFP 1.6T"""
|
|
1080
|
+
|
|
1081
|
+
OSFP_1600_ANLT = 127
|
|
1082
|
+
"""OSFP 1.6T, L1/ANLT"""
|
|
1083
|
+
|
|
1072
1084
|
UNKNOWN = 255
|
|
1073
1085
|
|
|
1074
1086
|
|
|
@@ -3165,7 +3177,13 @@ class ChassisModelName(IntEnum):
|
|
|
3165
3177
|
Z_800_Q_A_C_FREYA = 16
|
|
3166
3178
|
Z_800_O_A_C_FREYA = 17
|
|
3167
3179
|
E_100_Q_C_CHIMERA = 18
|
|
3168
|
-
|
|
3180
|
+
Z_100_Q_X_C_LOKI = 19
|
|
3181
|
+
Z_400_Q_X_C_THOR = 20
|
|
3182
|
+
Z_800_Q_X_C_FREYA = 21
|
|
3183
|
+
Z_1604_S_C_EDUN = 22
|
|
3184
|
+
Z_1608_O_C_EDUN = 23
|
|
3185
|
+
B_6400 = 24
|
|
3186
|
+
|
|
3169
3187
|
class ModuleModelName(IntEnum):
|
|
3170
3188
|
NA = 0
|
|
3171
3189
|
Z_01_T_ODIN = 1
|
|
@@ -3180,6 +3198,12 @@ class ModuleModelName(IntEnum):
|
|
|
3180
3198
|
Z_800_Q_FREYA = 10
|
|
3181
3199
|
Z_800_O_FREYA = 11
|
|
3182
3200
|
E_100_Q_CHIMERA = 12
|
|
3201
|
+
Z_100_Q_X_LOKI = 13
|
|
3202
|
+
Z_400_Q_X_THOR = 14
|
|
3203
|
+
Z_800_Q_X_FREYA = 15
|
|
3204
|
+
Z_1604_S_EDUN = 16
|
|
3205
|
+
Z_1608_O_EDUN = 17
|
|
3206
|
+
Z_1616_O_EDUN = 18
|
|
3183
3207
|
|
|
3184
3208
|
class ModuleConfigStatus(IntEnum):
|
|
3185
3209
|
UNKNOWN = 0
|
|
@@ -570,6 +570,8 @@ class P_CAPABILITIES:
|
|
|
570
570
|
* Bit 4: Can monitor PCS RX Lane Skew
|
|
571
571
|
* Bit 5: Can control PCS TX Lane Skew
|
|
572
572
|
* Bit 6: Can FEC error injection
|
|
573
|
+
* Bit 8: Can Pre-coding
|
|
574
|
+
* Bit 9: Can Gray-coding
|
|
573
575
|
"""
|
|
574
576
|
# fec_engines: int = field(XmpInt(), min_version=465)
|
|
575
577
|
# """The number of FEC engines available"""
|
|
@@ -599,7 +601,44 @@ class P_CAPABILITIES:
|
|
|
599
601
|
* Bit 0: Normal modifier (16/24-bit) supports little-endian
|
|
600
602
|
* Bit 1: Extended modifier (32-bit) supports little-endian
|
|
601
603
|
"""
|
|
602
|
-
|
|
604
|
+
capture_bitmask: int = field(XmpInt(), min_version=470)
|
|
605
|
+
"""integer, bitmask indicating capture capabilities.
|
|
606
|
+
|
|
607
|
+
If all bits are 0: CAPTURE_NOT_SUPPORTED
|
|
608
|
+
|
|
609
|
+
Bits [0:11] are for Start triggers:
|
|
610
|
+
|
|
611
|
+
* Bit 0: CAPTURE_START_ON
|
|
612
|
+
* Bit 1: CAPTURE_START_FCSERROR
|
|
613
|
+
* Bit 2: CAPTURE_START_FILTER
|
|
614
|
+
* Bit 3: CAPTURE_START_PLDERROR
|
|
615
|
+
* Bit 4-11: Reserved
|
|
616
|
+
|
|
617
|
+
Bits [12:23] are for Stop triggers:
|
|
618
|
+
|
|
619
|
+
* Bit 12: CAPTURE_STOP_FULL
|
|
620
|
+
* Bit 13: CAPTURE_STOP_FCSERROR
|
|
621
|
+
* Bit 14: CAPTURE_STOP_FILTER
|
|
622
|
+
* Bit 15: CAPTURE_STOP_PLDERROR
|
|
623
|
+
* Bit 16: CAPTURE_STOP_USERSTOP
|
|
624
|
+
* Bit 17-23: Reserved
|
|
625
|
+
|
|
626
|
+
Bits [24:31] are for Keep modes:
|
|
627
|
+
|
|
628
|
+
* Bit 24: CAPTURE_KEEP_ALL
|
|
629
|
+
* Bit 25: CAPTURE_KEEP_FCSERR
|
|
630
|
+
* Bit 26: CAPTURE_KEEP_NOTPLD
|
|
631
|
+
* Bit 27: CAPTURE_KEEP_TPLD
|
|
632
|
+
* Bit 28: CAPTURE_KEEP_FILTER
|
|
633
|
+
* Bit 29: CAPTURE_KEEP_PLDERR
|
|
634
|
+
* Bit 30-31: Reserved
|
|
635
|
+
"""
|
|
636
|
+
num_txeq_pre: int = field(XmpInt(), min_version=470)
|
|
637
|
+
"""The number of postcursors = num_txeq - num_txeq_pre - 1."""
|
|
638
|
+
txeq_max_seq: typing.List[int] = field(XmpSequence(types_chunk=[XmpInt()], length=10), min_version=470)
|
|
639
|
+
"""max value of individual TXEQ taps, SEQuential: <pre-n> <pre-(n-q)> ... <prr1> <main> <post1> <post2> ...."""
|
|
640
|
+
txeq_min_seq: typing.List[int] = field(XmpSequence(types_chunk=[XmpInt()], length=10), min_version=470)
|
|
641
|
+
"""min-value of individual TXEQ taps, SEQuential: <pre-n> <pre-(n-q)> ... <prr1> <main> <post1> <post2> ...."""
|
|
603
642
|
|
|
604
643
|
|
|
605
644
|
def get(self) -> Token[GetDataAttr]:
|
|
@@ -1510,7 +1549,6 @@ class P_XMITONE:
|
|
|
1510
1549
|
A valid Frame Check Sum is written into the final four bytes.
|
|
1511
1550
|
|
|
1512
1551
|
:param hex_data: raw bytes of the packet in hex to transmit
|
|
1513
|
-
:rtype: typing.List[str]
|
|
1514
1552
|
"""
|
|
1515
1553
|
|
|
1516
1554
|
return Token(self._connection, build_set_request(self, module=self._module, port=self._port, hex_data=hex_data))
|
|
@@ -3636,17 +3674,17 @@ class P_LPPARTNERAUTONEG:
|
|
|
3636
3674
|
_port: int
|
|
3637
3675
|
|
|
3638
3676
|
class GetDataAttr(ResponseBodyStruct):
|
|
3639
|
-
|
|
3677
|
+
can_100base_tx: YesNo = field(XmpByte())
|
|
3640
3678
|
"""coded byte, specifying whether the link partner is capable of 100BASE-TX."""
|
|
3641
|
-
|
|
3679
|
+
can_1000base_t: YesNo = field(XmpByte())
|
|
3642
3680
|
"""coded byte. specifying whether the link partner is capable of 1000BASE-T."""
|
|
3643
|
-
|
|
3681
|
+
can_10gbase_t: YesNo = field(XmpByte())
|
|
3644
3682
|
"""coded byte. specifying whether the link partner is capable of 10GBASE-T."""
|
|
3645
|
-
|
|
3646
|
-
"""coded byte. specifying whether the link partner is capable of
|
|
3647
|
-
|
|
3648
|
-
"""coded byte. specifying whether the link partner is capable of
|
|
3649
|
-
|
|
3683
|
+
can_2p5gbase_t: YesNo = field(XmpByte())
|
|
3684
|
+
"""coded byte. specifying whether the link partner is capable of 2.5GBASE-T."""
|
|
3685
|
+
can_5gbase_t: YesNo = field(XmpByte())
|
|
3686
|
+
"""coded byte. specifying whether the link partner is capable of 5GBASE-T."""
|
|
3687
|
+
can_10gbase_kr: YesNo = field(XmpByte())
|
|
3650
3688
|
"""coded byte. specifying whether the link partner is capable of 10GBASE-KR."""
|
|
3651
3689
|
|
|
3652
3690
|
def get(self) -> Token[GetDataAttr]:
|
|
@@ -3654,8 +3692,8 @@ class P_LPPARTNERAUTONEG:
|
|
|
3654
3692
|
* whether the link partner is capable of 100BASE-TX
|
|
3655
3693
|
* whether the link partner is capable of 1000BASE-T
|
|
3656
3694
|
* whether the link partner is capable of 10GBASE-T
|
|
3657
|
-
* whether the link partner is capable of
|
|
3658
|
-
* whether the link partner is capable of
|
|
3695
|
+
* whether the link partner is capable of 2.5GBASE-T
|
|
3696
|
+
* whether the link partner is capable of 5GBASE-T
|
|
3659
3697
|
* whether the link partner is capable of 10GBASE-KR
|
|
3660
3698
|
|
|
3661
3699
|
:return: the the Energy Efficient Ethernet (EEE) capabilities advertised during auto-negotiation by the far side (link partner)
|