tdl-xoa-driver 1.6.3__tar.gz → 1.7.2__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.
Files changed (249) hide show
  1. {tdl_xoa_driver-1.6.3/tdl_xoa_driver.egg-info → tdl_xoa_driver-1.7.2}/PKG-INFO +2 -2
  2. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/setup.py +1 -1
  3. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2/tdl_xoa_driver.egg-info}/PKG-INFO +2 -2
  4. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/tdl_xoa_driver.egg-info/SOURCES.txt +9 -0
  5. tdl_xoa_driver-1.7.2/xoa_driver/__init__.py +2 -0
  6. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/enums.py +2 -0
  7. tdl_xoa_driver-1.7.2/xoa_driver/functions/async_wrapper.py +130 -0
  8. tdl_xoa_driver-1.7.2/xoa_driver/functions/layer1_adv.py +340 -0
  9. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/mgmt.py +94 -32
  10. tdl_xoa_driver-1.7.2/xoa_driver/functions/xcvr.py +196 -0
  11. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/hlfuncs.py +6 -0
  12. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/__init__.py +1 -0
  13. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/enums.py +11 -1
  14. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/pl1_commands.py +1 -1
  15. tdl_xoa_driver-1.7.2/xoa_driver/internals/commands/pl1ad_commands.py +702 -0
  16. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/family_freya.py +5 -0
  17. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/family_odin.py +1 -1
  18. tdl_xoa_driver-1.7.2/xoa_driver/internals/hli/ports/port_l23/layer1_adv/freq.py +38 -0
  19. tdl_xoa_driver-1.7.2/xoa_driver/internals/hli/ports/port_l23/layer1_adv/pcs_fec.py +214 -0
  20. tdl_xoa_driver-1.7.2/xoa_driver/internals/hli/ports/port_l23/layer1_adv/rs_fault.py +24 -0
  21. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1_freya.py +5 -0
  22. tdl_xoa_driver-1.7.2/xoa_driver/internals/hli/ports/port_l23/layer1_freya_adv.py +61 -0
  23. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/tcvr/transceiver.py +4 -4
  24. tdl_xoa_driver-1.7.2/xoa_driver/internals/utils/managers/__init__.py +0 -0
  25. tdl_xoa_driver-1.6.3/xoa_driver/__init__.py +0 -2
  26. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/LICENSE +0 -0
  27. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/README.md +0 -0
  28. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/pyproject.toml +0 -0
  29. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/setup.cfg +0 -0
  30. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/tdl_xoa_driver.egg-info/dependency_links.txt +0 -0
  31. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/tdl_xoa_driver.egg-info/top_level.txt +0 -0
  32. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/exceptions.py +0 -0
  33. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/__init__.py +0 -0
  34. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/anlt.py +0 -0
  35. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/anlt_ll_debug.py +0 -0
  36. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/cli/__init__.py +0 -0
  37. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/cli/_cli_manager.py +0 -0
  38. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/cli/_config_block.py +0 -0
  39. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/cli/_socket_driver.py +0 -0
  40. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/cli/port_config.py +0 -0
  41. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/cli/testbed_config.py +0 -0
  42. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/cmis/__init__.py +0 -0
  43. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/cmis/_constants.py +0 -0
  44. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/cmis/_replies.py +0 -0
  45. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/cmis/_utils.py +0 -0
  46. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/cmis/cdb.py +0 -0
  47. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/exceptions.py +0 -0
  48. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/headers.py +0 -0
  49. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/functions/tools.py +0 -0
  50. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/__init__.py +0 -0
  51. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/c_commands.py +0 -0
  52. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/m4_commands.py +0 -0
  53. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/m4e_commands.py +0 -0
  54. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/m_commands.py +0 -0
  55. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/p4_commands.py +0 -0
  56. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/p4e_commands.py +0 -0
  57. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/p4g_commands.py +0 -0
  58. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/p_commands.py +0 -0
  59. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/pc_commands.py +0 -0
  60. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/pd_commands.py +0 -0
  61. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/pe_commands.py +0 -0
  62. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/pec_commands.py +0 -0
  63. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/ped_commands.py +0 -0
  64. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/pef_commands.py +0 -0
  65. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/pf_commands.py +0 -0
  66. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/pl_commands.py +0 -0
  67. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/pm_commands.py +0 -0
  68. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/pp_commands.py +0 -0
  69. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/pr_commands.py +0 -0
  70. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/ps_commands.py +0 -0
  71. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/pt_commands.py +0 -0
  72. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/px_commands.py +0 -0
  73. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/commands/subtypes.py +0 -0
  74. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/__init__.py +0 -0
  75. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/builders.py +0 -0
  76. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/exceptions.py +0 -0
  77. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/funcs.py +0 -0
  78. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/funcs.pyi +0 -0
  79. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/interfaces.py +0 -0
  80. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/token.py +0 -0
  81. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/__init__.py +0 -0
  82. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/_processor.py +0 -0
  83. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/_publisher.py +0 -0
  84. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/_request_id_counter.py +0 -0
  85. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/_stream.py +0 -0
  86. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/_typings.py +0 -0
  87. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/exceptions.py +0 -0
  88. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/handler.py +0 -0
  89. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/logger/__init__.py +0 -0
  90. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/logger/__logger.py +0 -0
  91. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/logger/__state_off.py +0 -0
  92. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/logger/__state_on_default.py +0 -0
  93. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/logger/__state_on_loguru.py +0 -0
  94. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/logger/__state_on_user.py +0 -0
  95. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/protocol/__init__.py +0 -0
  96. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/protocol/_constants.py +0 -0
  97. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/protocol/_utils.py +0 -0
  98. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/protocol/exceptions.py +0 -0
  99. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/protocol/payload/__init__.py +0 -0
  100. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/protocol/payload/base_struct.py +0 -0
  101. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/protocol/payload/descriptor.py +0 -0
  102. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/protocol/payload/exceptions.py +0 -0
  103. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/protocol/payload/field.py +0 -0
  104. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/protocol/payload/types.py +0 -0
  105. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/protocol/payload/utils.py +0 -0
  106. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/protocol/struct_header.py +0 -0
  107. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/protocol/struct_request.py +0 -0
  108. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/protocol/struct_response.py +0 -0
  109. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/core/transporter/registry.py +0 -0
  110. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/exceptions/__init__.py +0 -0
  111. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/exceptions/modules.py +0 -0
  112. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/exceptions/testers.py +0 -0
  113. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/__init__.py +0 -0
  114. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/__init__.py +0 -0
  115. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/base_index.py +0 -0
  116. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/connection_group/__init__.py +0 -0
  117. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/connection_group/cg.py +0 -0
  118. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/connection_group/histogram.py +0 -0
  119. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/connection_group/l2.py +0 -0
  120. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/connection_group/l3.py +0 -0
  121. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/connection_group/raw.py +0 -0
  122. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/connection_group/replay.py +0 -0
  123. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/connection_group/tcp.py +0 -0
  124. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/connection_group/tls.py +0 -0
  125. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/connection_group/udp.py +0 -0
  126. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/connection_group/user_state.py +0 -0
  127. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/filter/__init__.py +0 -0
  128. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/filter/base_filter.py +0 -0
  129. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/filter/genuine_filter.py +0 -0
  130. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/length_term.py +0 -0
  131. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/macsecscs/__init__.py +0 -0
  132. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/macsecscs/base_macsecsc.py +0 -0
  133. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/macsecscs/genuine_macsecsc.py +0 -0
  134. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/match_term.py +0 -0
  135. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/port_dataset.py +0 -0
  136. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/streams/__init__.py +0 -0
  137. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/streams/base_stream.py +0 -0
  138. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/indices/streams/genuine_stream.py +0 -0
  139. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/modules/__init__.py +0 -0
  140. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/modules/__interfaces.py +0 -0
  141. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/modules/base_module.py +0 -0
  142. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/modules/module_chimera.py +0 -0
  143. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/modules/module_l23ve.py +0 -0
  144. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/modules/module_l47.py +0 -0
  145. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/modules/module_l47ve.py +0 -0
  146. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/modules/modules_l23/__init__.py +0 -0
  147. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/modules/modules_l23/family_combi.py +0 -0
  148. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/modules/modules_l23/family_edun.py +0 -0
  149. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/modules/modules_l23/family_freya.py +0 -0
  150. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/modules/modules_l23/family_loki.py +0 -0
  151. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/modules/modules_l23/family_odin.py +0 -0
  152. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/modules/modules_l23/family_thor.py +0 -0
  153. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/modules/modules_l23/module_l23_base.py +0 -0
  154. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/__init__.py +0 -0
  155. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/base_port.py +0 -0
  156. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/__init__.py +0 -0
  157. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/bases/__init__.py +0 -0
  158. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/bases/port_l23.py +0 -0
  159. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/bases/port_l23_genuine.py +0 -0
  160. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/bases/port_l23ve.py +0 -0
  161. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/chimera/__init__.py +0 -0
  162. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/chimera/filter_definition/__init__.py +0 -0
  163. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/chimera/filter_definition/_utils.py +0 -0
  164. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/chimera/filter_definition/general.py +0 -0
  165. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/chimera/filter_definition/shadow.py +0 -0
  166. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/chimera/filter_definition/working.py +0 -0
  167. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/chimera/pe_custom_distribution.py +0 -0
  168. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/chimera/pe_distribution.py +0 -0
  169. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/chimera/port_chimera.py +0 -0
  170. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/chimera/port_emulation.py +0 -0
  171. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/chimera/reception_statistics.py +0 -0
  172. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/chimera/transmission_statistics.py +0 -0
  173. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/family_edun.py +0 -0
  174. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/family_loki.py +0 -0
  175. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/family_thor.py +0 -0
  176. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1/__init__.py +0 -0
  177. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1/anlt.py +0 -0
  178. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1/brr.py +0 -0
  179. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1/eye_diagram.py +0 -0
  180. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1/impair.py +0 -0
  181. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1/laser_power.py +0 -0
  182. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1/lower_power.py +0 -0
  183. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1/medium.py +0 -0
  184. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1/pcs_fec.py +0 -0
  185. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1/pma.py +0 -0
  186. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1/prbs.py +0 -0
  187. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1/preamble.py +0 -0
  188. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1/rs_fault.py +0 -0
  189. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1/siv.py +0 -0
  190. {tdl_xoa_driver-1.6.3/xoa_driver/internals/hli/ports/port_l23/sec → tdl_xoa_driver-1.7.2/xoa_driver/internals/hli/ports/port_l23/layer1_adv}/__init__.py +0 -0
  191. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1_edun.py +0 -0
  192. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1_loki.py +0 -0
  193. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/layer1_thor.py +0 -0
  194. {tdl_xoa_driver-1.6.3/xoa_driver/internals/hli/ports/port_l23/tcvr → tdl_xoa_driver-1.7.2/xoa_driver/internals/hli/ports/port_l23/sec}/__init__.py +0 -0
  195. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/sec/macsec.py +0 -0
  196. {tdl_xoa_driver-1.6.3/xoa_driver/internals/hli/ports/port_l23/trafficgen → tdl_xoa_driver-1.7.2/xoa_driver/internals/hli/ports/port_l23/tcvr}/__init__.py +0 -0
  197. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/tcvr/cmis.py +0 -0
  198. {tdl_xoa_driver-1.6.3/xoa_driver/internals/hli/ports/port_l47 → tdl_xoa_driver-1.7.2/xoa_driver/internals/hli/ports/port_l23/trafficgen}/__init__.py +0 -0
  199. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/trafficgen/capture.py +0 -0
  200. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/trafficgen/runt.py +0 -0
  201. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/trafficgen/rx_stats.py +0 -0
  202. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/trafficgen/tgen.py +0 -0
  203. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l23/trafficgen/tx_stats.py +0 -0
  204. {tdl_xoa_driver-1.6.3/xoa_driver/internals/hli/testers → tdl_xoa_driver-1.7.2/xoa_driver/internals/hli/ports/port_l47}/__init__.py +0 -0
  205. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l47/counters.py +0 -0
  206. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l47/main.py +0 -0
  207. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/ports/port_l47/packet_engine.py +0 -0
  208. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/revisions.py +0 -0
  209. {tdl_xoa_driver-1.6.3/xoa_driver/internals/hli/testers/genuine → tdl_xoa_driver-1.7.2/xoa_driver/internals/hli/testers}/__init__.py +0 -0
  210. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/testers/_base_tester.py +0 -0
  211. {tdl_xoa_driver-1.6.3/xoa_driver/internals/hli/testers/genuine/l_23 → tdl_xoa_driver-1.7.2/xoa_driver/internals/hli/testers/genuine}/__init__.py +0 -0
  212. {tdl_xoa_driver-1.6.3/xoa_driver/internals/state_storage → tdl_xoa_driver-1.7.2/xoa_driver/internals/hli/testers/genuine/l_23}/__init__.py +0 -0
  213. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/testers/genuine/l_23/health.py +0 -0
  214. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/testers/genuine/l_23/rest_api.py +0 -0
  215. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/testers/genuine/l_23/time_keeper.py +0 -0
  216. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/testers/genuine/l_23/upload_file.py +0 -0
  217. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/testers/genuine/management_interface.py +0 -0
  218. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/testers/l23_tester.py +0 -0
  219. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/testers/l23ve_tester.py +0 -0
  220. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/testers/l47_tester.py +0 -0
  221. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/hli/testers/l47ve_tester.py +0 -0
  222. {tdl_xoa_driver-1.6.3/xoa_driver/internals/utils → tdl_xoa_driver-1.7.2/xoa_driver/internals/state_storage}/__init__.py +0 -0
  223. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/state_storage/_speed_detector.py +0 -0
  224. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/state_storage/modules_state.py +0 -0
  225. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/state_storage/ports_state.py +0 -0
  226. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/state_storage/testers_state.py +0 -0
  227. {tdl_xoa_driver-1.6.3/xoa_driver/internals/utils/indices → tdl_xoa_driver-1.7.2/xoa_driver/internals/utils}/__init__.py +0 -0
  228. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/utils/attributes.py +0 -0
  229. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/utils/cap_id.py +0 -0
  230. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/utils/con_traffic_light.py +0 -0
  231. {tdl_xoa_driver-1.6.3/xoa_driver/internals/utils/managers → tdl_xoa_driver-1.7.2/xoa_driver/internals/utils/indices}/__init__.py +0 -0
  232. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/utils/indices/_interfaces.py +0 -0
  233. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/utils/indices/header_modifier_manager.py +0 -0
  234. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/utils/indices/index_manager.py +0 -0
  235. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/utils/indices/observer.py +0 -0
  236. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/utils/kind.py +0 -0
  237. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/utils/managers/abc.py +0 -0
  238. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/utils/managers/exceptions.py +0 -0
  239. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/utils/managers/modules_manager.py +0 -0
  240. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/utils/managers/ports_manager.py +0 -0
  241. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/utils/rev_tool.py +0 -0
  242. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/utils/session.py +0 -0
  243. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/internals/warn.py +0 -0
  244. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/lli.py +0 -0
  245. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/misc.py +0 -0
  246. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/modules.py +0 -0
  247. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/ports.py +0 -0
  248. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/xoa_driver/testers.py +0 -0
  249. {tdl_xoa_driver-1.6.3 → tdl_xoa_driver-1.7.2}/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.6.3
3
+ Version: 1.7.2
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 Xena
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 Xena",
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.6.3
3
+ Version: 1.7.2
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 Xena
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,10 +20,13 @@ 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
29
+ xoa_driver/functions/xcvr.py
27
30
  xoa_driver/functions/cli/__init__.py
28
31
  xoa_driver/functions/cli/_cli_manager.py
29
32
  xoa_driver/functions/cli/_config_block.py
@@ -55,6 +58,7 @@ xoa_driver/internals/commands/ped_commands.py
55
58
  xoa_driver/internals/commands/pef_commands.py
56
59
  xoa_driver/internals/commands/pf_commands.py
57
60
  xoa_driver/internals/commands/pl1_commands.py
61
+ xoa_driver/internals/commands/pl1ad_commands.py
58
62
  xoa_driver/internals/commands/pl_commands.py
59
63
  xoa_driver/internals/commands/pm_commands.py
60
64
  xoa_driver/internals/commands/pp_commands.py
@@ -154,6 +158,7 @@ xoa_driver/internals/hli/ports/port_l23/family_odin.py
154
158
  xoa_driver/internals/hli/ports/port_l23/family_thor.py
155
159
  xoa_driver/internals/hli/ports/port_l23/layer1_edun.py
156
160
  xoa_driver/internals/hli/ports/port_l23/layer1_freya.py
161
+ xoa_driver/internals/hli/ports/port_l23/layer1_freya_adv.py
157
162
  xoa_driver/internals/hli/ports/port_l23/layer1_loki.py
158
163
  xoa_driver/internals/hli/ports/port_l23/layer1_thor.py
159
164
  xoa_driver/internals/hli/ports/port_l23/bases/__init__.py
@@ -186,6 +191,10 @@ xoa_driver/internals/hli/ports/port_l23/layer1/prbs.py
186
191
  xoa_driver/internals/hli/ports/port_l23/layer1/preamble.py
187
192
  xoa_driver/internals/hli/ports/port_l23/layer1/rs_fault.py
188
193
  xoa_driver/internals/hli/ports/port_l23/layer1/siv.py
194
+ xoa_driver/internals/hli/ports/port_l23/layer1_adv/__init__.py
195
+ xoa_driver/internals/hli/ports/port_l23/layer1_adv/freq.py
196
+ xoa_driver/internals/hli/ports/port_l23/layer1_adv/pcs_fec.py
197
+ xoa_driver/internals/hli/ports/port_l23/layer1_adv/rs_fault.py
189
198
  xoa_driver/internals/hli/ports/port_l23/sec/__init__.py
190
199
  xoa_driver/internals/hli/ports/port_l23/sec/macsec.py
191
200
  xoa_driver/internals/hli/ports/port_l23/tcvr/__init__.py
@@ -0,0 +1,2 @@
1
+ __version__ = "1.7.2"
2
+ __short_version__ = "1.7"
@@ -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
+ )