tdl-xoa-driver 1.5.0b2__py3-none-any.whl → 1.6.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.0b2.dist-info → tdl_xoa_driver-1.6.0.dist-info}/METADATA +8 -8
- {tdl_xoa_driver-1.5.0b2.dist-info → tdl_xoa_driver-1.6.0.dist-info}/RECORD +91 -89
- xoa_driver/__init__.py +2 -2
- xoa_driver/enums.py +10 -10
- xoa_driver/functions/anlt.py +60 -78
- xoa_driver/functions/cli/__init__.py +5 -5
- xoa_driver/functions/cli/port_config.py +16 -7
- xoa_driver/functions/cli/{test_case_config.py → testbed_config.py} +53 -46
- xoa_driver/functions/cmis/_replies.py +4 -4
- xoa_driver/functions/mgmt.py +206 -250
- xoa_driver/functions/tools.py +11 -6
- xoa_driver/internals/commands/c_commands.py +59 -0
- xoa_driver/internals/commands/enums.py +101 -90
- xoa_driver/internals/commands/m4_commands.py +25 -0
- xoa_driver/internals/commands/m4e_commands.py +6 -0
- xoa_driver/internals/commands/m_commands.py +51 -1
- xoa_driver/internals/commands/p4_commands.py +63 -1
- xoa_driver/internals/commands/p4e_commands.py +9 -0
- xoa_driver/internals/commands/p4g_commands.py +139 -0
- xoa_driver/internals/commands/p_commands.py +493 -63
- xoa_driver/internals/commands/pc_commands.py +9 -0
- xoa_driver/internals/commands/pd_commands.py +11 -0
- xoa_driver/internals/commands/pe_commands.py +27 -0
- xoa_driver/internals/commands/pec_commands.py +9 -0
- xoa_driver/internals/commands/ped_commands.py +23 -0
- xoa_driver/internals/commands/pef_commands.py +43 -0
- xoa_driver/internals/commands/pf_commands.py +11 -0
- xoa_driver/internals/commands/pl1_commands.py +442 -118
- xoa_driver/internals/commands/pl_commands.py +8 -0
- xoa_driver/internals/commands/pm_commands.py +11 -0
- xoa_driver/internals/commands/pp_commands.py +128 -82
- xoa_driver/internals/commands/pr_commands.py +25 -0
- xoa_driver/internals/commands/ps_commands.py +47 -1
- xoa_driver/internals/commands/pt_commands.py +15 -0
- xoa_driver/internals/commands/px_commands.py +180 -136
- xoa_driver/internals/commands/subtypes.py +4 -3
- xoa_driver/internals/core/transporter/protocol/payload/base_struct.py +1 -1
- xoa_driver/internals/hli/indices/macsecscs/base_macsecsc.py +41 -3
- xoa_driver/internals/hli/modules/modules_l23/family_combi.py +0 -64
- xoa_driver/internals/hli/modules/modules_l23/family_edun.py +0 -2
- xoa_driver/internals/hli/modules/modules_l23/{family_g.py → family_loki.py} +29 -1
- xoa_driver/internals/hli/modules/modules_l23/family_odin.py +412 -0
- xoa_driver/internals/hli/modules/modules_l23/{family_l.py → family_thor.py} +44 -0
- xoa_driver/internals/hli/ports/port_l23/chimera/port_chimera.py +3 -3
- xoa_driver/internals/hli/ports/port_l23/family_edun.py +9 -44
- xoa_driver/internals/hli/ports/port_l23/{family_l1.py → family_freya.py} +10 -45
- xoa_driver/internals/hli/ports/port_l23/{family_g.py → family_loki.py} +33 -32
- xoa_driver/internals/hli/ports/port_l23/family_odin.py +225 -0
- xoa_driver/internals/hli/ports/port_l23/family_thor.py +67 -0
- xoa_driver/internals/hli/ports/port_l23/layer1/anlt.py +512 -0
- xoa_driver/internals/hli/ports/port_l23/layer1/brr.py +26 -0
- xoa_driver/internals/hli/ports/port_l23/layer1/eye_diagram.py +71 -0
- xoa_driver/internals/hli/ports/port_l23/{pcs_pma_ijkl_chimera.py → layer1/impair.py} +7 -7
- xoa_driver/internals/hli/ports/port_l23/layer1/laser_power.py +28 -0
- xoa_driver/internals/hli/ports/port_l23/{family_e.py → layer1/lower_power.py} +1 -51
- xoa_driver/internals/hli/ports/port_l23/{freya_l1.py → layer1/medium.py} +38 -358
- xoa_driver/internals/hli/ports/port_l23/layer1/pcs_fec.py +219 -0
- xoa_driver/internals/hli/ports/port_l23/layer1/pma.py +43 -0
- xoa_driver/internals/hli/ports/port_l23/layer1/prbs.py +39 -0
- xoa_driver/internals/hli/ports/port_l23/layer1/preamble.py +25 -0
- xoa_driver/internals/hli/ports/port_l23/{fault_jkl.py → layer1/rs_fault.py} +2 -2
- xoa_driver/internals/hli/ports/port_l23/layer1/siv.py +69 -0
- xoa_driver/internals/hli/ports/port_l23/layer1_edun.py +103 -0
- xoa_driver/internals/hli/ports/port_l23/layer1_freya.py +103 -0
- xoa_driver/internals/hli/ports/port_l23/layer1_loki.py +74 -0
- xoa_driver/internals/hli/ports/port_l23/layer1_thor.py +70 -0
- xoa_driver/internals/hli/ports/port_l23/port_l23ve.py +4 -4
- xoa_driver/internals/hli/ports/port_l23/sec/__init__.py +0 -0
- xoa_driver/internals/hli/ports/port_l23/sec/macsec.py +108 -0
- xoa_driver/internals/hli/ports/port_l23/tcvr/__init__.py +0 -0
- xoa_driver/internals/hli/ports/port_l23/{bases/port_transceiver.py → tcvr/cmis.py} +4 -118
- xoa_driver/internals/hli/ports/port_l23/tcvr/transceiver.py +124 -0
- xoa_driver/internals/hli/ports/port_l23/trafficgen/__init__.py +0 -0
- xoa_driver/internals/hli/ports/port_l23/{bases → trafficgen}/port_l23.py +1 -1
- xoa_driver/internals/hli/ports/port_l23/{bases → trafficgen}/port_l23_genuine.py +5 -45
- xoa_driver/internals/hli/ports/port_l23/{bases/port_reception_statistics.py → trafficgen/port_rx_stats.py} +0 -21
- xoa_driver/internals/hli/ports/port_l23/{bases/port_transmission_statistics.py → trafficgen/port_tx_stats.py} +2 -22
- xoa_driver/internals/hli/ports/port_l23/trafficgen/runt.py +32 -0
- xoa_driver/internals/hli/testers/l23_tester.py +1 -3
- xoa_driver/internals/utils/indices/_interfaces.py +18 -6
- xoa_driver/internals/utils/indices/index_manager.py +8 -2
- xoa_driver/internals/utils/managers/ports_manager.py +5 -2
- xoa_driver/misc.py +6 -6
- xoa_driver/modules.py +31 -47
- xoa_driver/ports.py +10 -29
- xoa_driver/internals/hli/modules/modules_l23/family_d.py +0 -75
- xoa_driver/internals/hli/modules/modules_l23/family_e.py +0 -85
- xoa_driver/internals/hli/modules/modules_l23/family_f.py +0 -145
- xoa_driver/internals/hli/modules/modules_l23/family_h.py +0 -40
- xoa_driver/internals/hli/modules/modules_l23/family_i.py +0 -25
- xoa_driver/internals/hli/modules/modules_l23/family_j.py +0 -25
- xoa_driver/internals/hli/modules/modules_l23/family_k.py +0 -39
- xoa_driver/internals/hli/modules/modules_l23/family_m.py +0 -25
- xoa_driver/internals/hli/modules/modules_l23/family_n.py +0 -40
- xoa_driver/internals/hli/ports/port_l23/family_combi.py +0 -37
- xoa_driver/internals/hli/ports/port_l23/family_d.py +0 -51
- xoa_driver/internals/hli/ports/port_l23/family_f.py +0 -151
- xoa_driver/internals/hli/ports/port_l23/family_h.py +0 -67
- xoa_driver/internals/hli/ports/port_l23/family_i.py +0 -84
- xoa_driver/internals/hli/ports/port_l23/family_j.py +0 -68
- xoa_driver/internals/hli/ports/port_l23/family_k.py +0 -73
- xoa_driver/internals/hli/ports/port_l23/family_l.py +0 -82
- xoa_driver/internals/hli/ports/port_l23/family_m.py +0 -29
- xoa_driver/internals/hli/ports/port_l23/pcs_pma_ghijkl.py +0 -369
- xoa_driver/internals/hli/ports/port_l23/pcs_pma_l.py +0 -78
- {tdl_xoa_driver-1.5.0b2.dist-info → tdl_xoa_driver-1.6.0.dist-info}/WHEEL +0 -0
- {tdl_xoa_driver-1.5.0b2.dist-info → tdl_xoa_driver-1.6.0.dist-info}/licenses/LICENSE +0 -0
- {tdl_xoa_driver-1.5.0b2.dist-info → tdl_xoa_driver-1.6.0.dist-info}/top_level.txt +0 -0
- /xoa_driver/internals/hli/modules/modules_l23/{family_l1.py → family_freya.py} +0 -0
- /xoa_driver/internals/hli/ports/port_l23/{bases → layer1}/__init__.py +0 -0
- /xoa_driver/internals/hli/ports/port_l23/{bases → trafficgen}/port_capture.py +0 -0
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import functools
|
|
2
|
-
from typing import TYPE_CHECKING, Tuple
|
|
3
|
-
from typing import Self
|
|
4
|
-
from xoa_driver.internals.commands import (
|
|
5
|
-
P_FAULTSIGNALING,
|
|
6
|
-
P_FAULTSTATUS,
|
|
7
|
-
P_DYNAMIC,
|
|
8
|
-
)
|
|
9
|
-
from xoa_driver.internals.utils import attributes as utils
|
|
10
|
-
if TYPE_CHECKING:
|
|
11
|
-
from xoa_driver.internals.core import interfaces as itf
|
|
12
|
-
|
|
13
|
-
from .bases.port_l23_genuine import BasePortL23Genuine
|
|
14
|
-
from .pcs_pma_ijkl_chimera import PcsPma as PcsPma1
|
|
15
|
-
from .pcs_pma_ghijkl import (
|
|
16
|
-
PcsPma as PcsPma2,
|
|
17
|
-
SerDes,
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class PcsPma(PcsPma1, PcsPma2):
|
|
22
|
-
"""PCS/PMA layer for Family I
|
|
23
|
-
"""
|
|
24
|
-
def __init__(self, conn: "itf.IConnection", port) -> None:
|
|
25
|
-
PcsPma1.__init__(self, conn, port)
|
|
26
|
-
PcsPma2.__init__(self, conn, port)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class Fault:
|
|
30
|
-
"""L23 port fault settings."""
|
|
31
|
-
|
|
32
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
33
|
-
self.signaling = P_FAULTSIGNALING(conn, module_id, port_id)
|
|
34
|
-
"""L23 port fault signaling.
|
|
35
|
-
|
|
36
|
-
:type: P_FAULTSIGNALING
|
|
37
|
-
"""
|
|
38
|
-
|
|
39
|
-
self.status = P_FAULTSTATUS(conn, module_id, port_id)
|
|
40
|
-
"""L23 port fault status.
|
|
41
|
-
|
|
42
|
-
:type: P_FAULTSTATUS
|
|
43
|
-
"""
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
class FamilyI(BasePortL23Genuine):
|
|
47
|
-
pcs_pma: PcsPma
|
|
48
|
-
"""PCS/PMA layer
|
|
49
|
-
|
|
50
|
-
:type: PcsPma
|
|
51
|
-
"""
|
|
52
|
-
|
|
53
|
-
serdes: Tuple[SerDes, ...]
|
|
54
|
-
"""SerDes index
|
|
55
|
-
|
|
56
|
-
:type: Tuple[SerDes, ...]
|
|
57
|
-
"""
|
|
58
|
-
|
|
59
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
60
|
-
super().__init__(conn, module_id, port_id)
|
|
61
|
-
self.dynamic = P_DYNAMIC(conn, module_id, port_id)
|
|
62
|
-
"""L23 port's dynamic traffic change.
|
|
63
|
-
|
|
64
|
-
:type: P_DYNAMIC
|
|
65
|
-
"""
|
|
66
|
-
self.fault = Fault(conn, module_id, port_id)
|
|
67
|
-
|
|
68
|
-
async def _setup(self) -> Self:
|
|
69
|
-
await super()._setup()
|
|
70
|
-
self.pcs_pma = PcsPma(self._conn, self)
|
|
71
|
-
self.serdes = tuple(
|
|
72
|
-
SerDes(self._conn, *self.kind, serdes_xindex=serdes_xindex)
|
|
73
|
-
for serdes_xindex in range(self.info.capabilities.serdes_count)
|
|
74
|
-
)
|
|
75
|
-
return self
|
|
76
|
-
|
|
77
|
-
on_dynamic_change = functools.partialmethod(utils.on_event, P_DYNAMIC)
|
|
78
|
-
"""Register a callback to the event that the port's dynamic traffic setting changes."""
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
class PLoki100G5S2P(FamilyI):
|
|
82
|
-
"""L23 port on Loki-100G-5S-2P module.
|
|
83
|
-
"""
|
|
84
|
-
...
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import functools
|
|
2
|
-
from typing import TYPE_CHECKING, Tuple
|
|
3
|
-
from typing import Self
|
|
4
|
-
from xoa_driver.internals.commands import (
|
|
5
|
-
# P_FAULTSIGNALING,
|
|
6
|
-
P_DYNAMIC,
|
|
7
|
-
)
|
|
8
|
-
from xoa_driver.internals.utils import attributes as utils
|
|
9
|
-
if TYPE_CHECKING:
|
|
10
|
-
from xoa_driver.internals.core import interfaces as itf
|
|
11
|
-
|
|
12
|
-
from .bases.port_l23_genuine import BasePortL23Genuine
|
|
13
|
-
from .fault_jkl import Fault
|
|
14
|
-
from .pcs_pma_ijkl_chimera import PcsPma as PcsPma1
|
|
15
|
-
from .pcs_pma_ghijkl import (
|
|
16
|
-
PcsPma as PcsPma2,
|
|
17
|
-
SerDes,
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class PcsPma(PcsPma1, PcsPma2):
|
|
22
|
-
"""PCS/PMA layer for Family J
|
|
23
|
-
"""
|
|
24
|
-
def __init__(self, conn: "itf.IConnection", port) -> None:
|
|
25
|
-
PcsPma1.__init__(self, conn, port)
|
|
26
|
-
PcsPma2.__init__(self, conn, port)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class FamilyJ(BasePortL23Genuine):
|
|
30
|
-
pcs_pma: PcsPma
|
|
31
|
-
"""PCS/PMA layer
|
|
32
|
-
|
|
33
|
-
:type: PcsPma
|
|
34
|
-
"""
|
|
35
|
-
|
|
36
|
-
serdes: Tuple[SerDes, ...]
|
|
37
|
-
"""SerDes index
|
|
38
|
-
|
|
39
|
-
:type: Tuple[SerDes, ...]
|
|
40
|
-
"""
|
|
41
|
-
|
|
42
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
43
|
-
super().__init__(conn, module_id, port_id)
|
|
44
|
-
self.dynamic = P_DYNAMIC(conn, module_id, port_id)
|
|
45
|
-
"""L23 port's dynamic traffic change.
|
|
46
|
-
|
|
47
|
-
:type: P_DYNAMIC
|
|
48
|
-
"""
|
|
49
|
-
|
|
50
|
-
self.fault = Fault(conn, module_id, port_id)
|
|
51
|
-
|
|
52
|
-
async def _setup(self) -> Self:
|
|
53
|
-
await super()._setup()
|
|
54
|
-
self.pcs_pma = PcsPma(self._conn, self)
|
|
55
|
-
self.serdes = tuple(
|
|
56
|
-
SerDes(self._conn, *self.kind, serdes_xindex=serdes_xindex)
|
|
57
|
-
for serdes_xindex in range(self.info.capabilities.serdes_count)
|
|
58
|
-
)
|
|
59
|
-
return self
|
|
60
|
-
|
|
61
|
-
on_dynamic_change = functools.partialmethod(utils.on_event, P_DYNAMIC)
|
|
62
|
-
"""Register a callback to the event that the port's dynamic traffic setting changes."""
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
class PThor100G5S4P(FamilyJ):
|
|
66
|
-
"""L23 port on Thor-100G-5S-4P module.
|
|
67
|
-
"""
|
|
68
|
-
...
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import functools
|
|
2
|
-
from typing import TYPE_CHECKING, Tuple
|
|
3
|
-
from typing import Self
|
|
4
|
-
from xoa_driver.internals.commands import (
|
|
5
|
-
# P_FAULTSIGNALING,
|
|
6
|
-
P_DYNAMIC,
|
|
7
|
-
)
|
|
8
|
-
from xoa_driver.internals.utils import attributes as utils
|
|
9
|
-
if TYPE_CHECKING:
|
|
10
|
-
from xoa_driver.internals.core import interfaces as itf
|
|
11
|
-
|
|
12
|
-
from .bases.port_l23_genuine import BasePortL23Genuine
|
|
13
|
-
from .fault_jkl import Fault
|
|
14
|
-
from .pcs_pma_ijkl_chimera import PcsPma as PcsPma1
|
|
15
|
-
from .pcs_pma_ghijkl import (
|
|
16
|
-
PcsPma as PcsPma2,
|
|
17
|
-
SerDes,
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class PcsPma(PcsPma1, PcsPma2):
|
|
22
|
-
"""PCS/PMA layer for Family K
|
|
23
|
-
"""
|
|
24
|
-
def __init__(self, conn: "itf.IConnection", port) -> None:
|
|
25
|
-
PcsPma1.__init__(self, conn, port)
|
|
26
|
-
PcsPma2.__init__(self, conn, port)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class FamilyK(BasePortL23Genuine):
|
|
30
|
-
pcs_pma: PcsPma
|
|
31
|
-
"""PCS/PMA layer
|
|
32
|
-
|
|
33
|
-
:type: PcsPma
|
|
34
|
-
"""
|
|
35
|
-
|
|
36
|
-
serdes: Tuple[SerDes, ...]
|
|
37
|
-
"""SerDes index
|
|
38
|
-
|
|
39
|
-
:type: Tuple[SerDes, ...]
|
|
40
|
-
"""
|
|
41
|
-
|
|
42
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
43
|
-
super().__init__(conn, module_id, port_id)
|
|
44
|
-
self.dynamic = P_DYNAMIC(conn, module_id, port_id)
|
|
45
|
-
"""L23 port's dynamic traffic change.
|
|
46
|
-
|
|
47
|
-
:type: P_DYNAMIC
|
|
48
|
-
"""
|
|
49
|
-
|
|
50
|
-
self.fault = Fault(conn, module_id, port_id)
|
|
51
|
-
|
|
52
|
-
async def _setup(self) -> Self:
|
|
53
|
-
await super()._setup()
|
|
54
|
-
self.pcs_pma = PcsPma(self._conn, self)
|
|
55
|
-
self.serdes = tuple(
|
|
56
|
-
SerDes(self._conn, *self.kind, serdes_xindex=serdes_xindex)
|
|
57
|
-
for serdes_xindex in range(self.info.capabilities.serdes_count)
|
|
58
|
-
)
|
|
59
|
-
return self
|
|
60
|
-
|
|
61
|
-
on_dynamic_change = functools.partialmethod(utils.on_event, P_DYNAMIC)
|
|
62
|
-
"""Register a callback to the event that the port's dynamic traffic setting changes."""
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
class PThor400G7S1P(FamilyK):
|
|
66
|
-
"""L23 port on Thor-400G-7S-1P module.
|
|
67
|
-
"""
|
|
68
|
-
...
|
|
69
|
-
|
|
70
|
-
class PThor400G7S1PLE(FamilyK):
|
|
71
|
-
"""L23 port on Thor-400G-7S-1P LE module.
|
|
72
|
-
"""
|
|
73
|
-
...
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import functools
|
|
2
|
-
from typing import TYPE_CHECKING, Tuple
|
|
3
|
-
from typing import Self
|
|
4
|
-
from xoa_driver.internals.commands import (
|
|
5
|
-
# P_FAULTSIGNALING,
|
|
6
|
-
P_DYNAMIC,
|
|
7
|
-
)
|
|
8
|
-
from xoa_driver.internals.utils import attributes as utils
|
|
9
|
-
if TYPE_CHECKING:
|
|
10
|
-
from xoa_driver.internals.core import interfaces as itf
|
|
11
|
-
|
|
12
|
-
from .bases.port_l23_genuine import BasePortL23Genuine
|
|
13
|
-
from .fault_jkl import Fault
|
|
14
|
-
from .pcs_pma_ijkl_chimera import PcsPma as PcsPma1
|
|
15
|
-
from .pcs_pma_ghijkl import (
|
|
16
|
-
PcsPma as PcsPma2,
|
|
17
|
-
SerDes,
|
|
18
|
-
)
|
|
19
|
-
from .pcs_pma_l import PcsPma as PcsPma3
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class PcsPma(PcsPma1, PcsPma2, PcsPma3):
|
|
23
|
-
"""PCS/PMA layer for Family L
|
|
24
|
-
"""
|
|
25
|
-
def __init__(self, conn: "itf.IConnection", port) -> None:
|
|
26
|
-
PcsPma1.__init__(self, conn, port)
|
|
27
|
-
PcsPma2.__init__(self, conn, port)
|
|
28
|
-
PcsPma3.__init__(self, conn, port)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
class FamilyL(BasePortL23Genuine):
|
|
32
|
-
pcs_pma: PcsPma
|
|
33
|
-
"""PCS/PMA layer
|
|
34
|
-
|
|
35
|
-
:type: PcsPma
|
|
36
|
-
"""
|
|
37
|
-
|
|
38
|
-
serdes: Tuple[SerDes, ...]
|
|
39
|
-
"""SerDes index
|
|
40
|
-
|
|
41
|
-
:type: Tuple[SerDes, ...]
|
|
42
|
-
"""
|
|
43
|
-
|
|
44
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
45
|
-
super().__init__(conn, module_id, port_id)
|
|
46
|
-
self.dynamic = P_DYNAMIC(conn, module_id, port_id)
|
|
47
|
-
"""L23 port's dynamic traffic change.
|
|
48
|
-
|
|
49
|
-
:type: P_DYNAMIC
|
|
50
|
-
"""
|
|
51
|
-
|
|
52
|
-
self.fault = Fault(conn, module_id, port_id)
|
|
53
|
-
|
|
54
|
-
async def _setup(self) -> Self:
|
|
55
|
-
await super()._setup()
|
|
56
|
-
self.pcs_pma = PcsPma(self._conn, self)
|
|
57
|
-
self.serdes = tuple(
|
|
58
|
-
SerDes(self._conn, *self.kind, serdes_xindex=serdes_xindex)
|
|
59
|
-
for serdes_xindex in range(self.info.capabilities.serdes_count)
|
|
60
|
-
)
|
|
61
|
-
return self
|
|
62
|
-
|
|
63
|
-
on_dynamic_change = functools.partialmethod(utils.on_event, P_DYNAMIC)
|
|
64
|
-
"""Register a callback to the event that the port's dynamic traffic setting changes."""
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
class PThor400G7S1P_b(FamilyL):
|
|
68
|
-
"""L23 port on Thor-400G-7S-1P[b] module.
|
|
69
|
-
"""
|
|
70
|
-
...
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
class PThor400G7S1P_c(FamilyL):
|
|
74
|
-
"""L23 port on Thor-400G-7S-1P[c] module.
|
|
75
|
-
"""
|
|
76
|
-
...
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
class PThor400G7S1P_d(FamilyL):
|
|
80
|
-
"""L23 port on Thor-400G-7S-1P[d] module.
|
|
81
|
-
"""
|
|
82
|
-
...
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
from typing import TYPE_CHECKING
|
|
2
|
-
|
|
3
|
-
from xoa_driver.internals.commands import P_BRRMODE, P_BRRSTATUS
|
|
4
|
-
|
|
5
|
-
from .bases.port_l23_genuine import BasePortL23Genuine
|
|
6
|
-
|
|
7
|
-
if TYPE_CHECKING:
|
|
8
|
-
from xoa_driver.internals.core import interfaces as itf
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class FamilyM(BasePortL23Genuine):
|
|
12
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
13
|
-
super().__init__(conn, module_id, port_id)
|
|
14
|
-
self.brr_mode = P_BRRMODE(conn, module_id, port_id)
|
|
15
|
-
"""BRR mode.
|
|
16
|
-
|
|
17
|
-
:type: P_BRRMODE
|
|
18
|
-
"""
|
|
19
|
-
self.brr_status = P_BRRSTATUS(conn, module_id, port_id)
|
|
20
|
-
"""Actual BRR status.
|
|
21
|
-
|
|
22
|
-
:type: P_BRRSTATUS
|
|
23
|
-
"""
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class POdin1G3S6PT1RJ45(FamilyM):
|
|
27
|
-
"""L23 port on Odin-1G-3S-6P-T1-RJ45 module.
|
|
28
|
-
"""
|
|
29
|
-
...
|
|
@@ -1,369 +0,0 @@
|
|
|
1
|
-
from typing import (
|
|
2
|
-
TYPE_CHECKING,
|
|
3
|
-
Tuple,
|
|
4
|
-
)
|
|
5
|
-
from typing import Self
|
|
6
|
-
if TYPE_CHECKING:
|
|
7
|
-
from xoa_driver.internals.core import interfaces as itf
|
|
8
|
-
from xoa_driver.internals.commands import (
|
|
9
|
-
PP_ALARMS_ERRORS,
|
|
10
|
-
PP_TXLANECONFIG,
|
|
11
|
-
PP_TXLANEINJECT,
|
|
12
|
-
PP_TXPRBSCONFIG,
|
|
13
|
-
PP_TXERRORRATE,
|
|
14
|
-
PP_TXINJECTONE,
|
|
15
|
-
PP_RXTOTALSTATS,
|
|
16
|
-
PP_RXFECSTATS,
|
|
17
|
-
PP_RXLANELOCK,
|
|
18
|
-
PP_RXLANESTATUS,
|
|
19
|
-
PP_RXLANEERRORS,
|
|
20
|
-
PP_RXPRBSSTATUS,
|
|
21
|
-
PP_RXCLEAR,
|
|
22
|
-
PP_RXLASERPOWER,
|
|
23
|
-
PP_TXLASERPOWER,
|
|
24
|
-
PP_EYEMEASURE,
|
|
25
|
-
PP_EYERESOLUTION,
|
|
26
|
-
PP_EYEREAD,
|
|
27
|
-
PP_EYEINFO,
|
|
28
|
-
PP_PHYTXEQ,
|
|
29
|
-
PP_PHYRETUNE,
|
|
30
|
-
PP_PHYAUTOTUNE,
|
|
31
|
-
PP_EYEBER,
|
|
32
|
-
PP_PHYAUTONEG,
|
|
33
|
-
PP_TXPRBSTYPE,
|
|
34
|
-
PP_RXPRBSTYPE,
|
|
35
|
-
# PP_FECMODE, # moved to all genuine ports
|
|
36
|
-
PP_EYEDWELLBITS,
|
|
37
|
-
PP_PHYSIGNALSTATUS,
|
|
38
|
-
PP_PRBSTYPE,
|
|
39
|
-
PP_PHYSETTINGS,
|
|
40
|
-
PP_PHYRXEQ,
|
|
41
|
-
)
|
|
42
|
-
from xoa_driver import enums
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
class PcsPmaAlarms:
|
|
46
|
-
"""L23 high-speed port PCS/PMA alarms"""
|
|
47
|
-
|
|
48
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
49
|
-
self.errors = PP_ALARMS_ERRORS(conn, module_id, port_id)
|
|
50
|
-
"""Error count of each alarm on a L23 high-speed port.
|
|
51
|
-
|
|
52
|
-
:type: PP_ALARMS_ERRORS
|
|
53
|
-
"""
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
class PcsPmaTransceiver:
|
|
57
|
-
"""L23 high-speed port PCS/PMA transceivers"""
|
|
58
|
-
|
|
59
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
60
|
-
self.tx_laser_power = PP_TXLASERPOWER(conn, module_id, port_id)
|
|
61
|
-
"""Power of TX laser.
|
|
62
|
-
|
|
63
|
-
:type: PP_TXLASERPOWER
|
|
64
|
-
"""
|
|
65
|
-
|
|
66
|
-
self.rx_laser_power = PP_RXLASERPOWER(conn, module_id, port_id)
|
|
67
|
-
"""Power of RX laser.
|
|
68
|
-
|
|
69
|
-
:type: PP_RXLASERPOWER
|
|
70
|
-
"""
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
class PcsPmaRxLaneStatus:
|
|
74
|
-
"""L23 high-speed port PCS/PMA lane status"""
|
|
75
|
-
|
|
76
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int, lane_idx: int) -> None:
|
|
77
|
-
self.errors = PP_RXLANEERRORS(conn, module_id, port_id, lane_idx)
|
|
78
|
-
"""RX lane error statistics.
|
|
79
|
-
|
|
80
|
-
:type: PP_RXLANEERRORS
|
|
81
|
-
"""
|
|
82
|
-
|
|
83
|
-
self.lock = PP_RXLANELOCK(conn, module_id, port_id, lane_idx)
|
|
84
|
-
"""RX lane lock.
|
|
85
|
-
|
|
86
|
-
:type: PP_RXLANELOCK
|
|
87
|
-
"""
|
|
88
|
-
|
|
89
|
-
self.status = PP_RXLANESTATUS(conn, module_id, port_id, lane_idx)
|
|
90
|
-
"""RX lane status
|
|
91
|
-
|
|
92
|
-
:type: PP_RXLANESTATUS
|
|
93
|
-
"""
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
class PcsPmaTxErrorGeneration:
|
|
97
|
-
"""L23 high-speed port PCS/PMA TX error generation."""
|
|
98
|
-
|
|
99
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
100
|
-
self.error_rate = PP_TXERRORRATE(conn, module_id, port_id)
|
|
101
|
-
"""The rate of continuous bit-level error injection.
|
|
102
|
-
|
|
103
|
-
:type: PP_TXERRORRATE
|
|
104
|
-
"""
|
|
105
|
-
|
|
106
|
-
self.inject_one = PP_TXINJECTONE(conn, module_id, port_id)
|
|
107
|
-
"""Inject a single bit-level error.
|
|
108
|
-
|
|
109
|
-
:type: PP_TXINJECTONE
|
|
110
|
-
"""
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
class PcsPmaRx:
|
|
114
|
-
"""L23 high-speed port PCS/PMA RX"""
|
|
115
|
-
|
|
116
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
117
|
-
self.total_status = PP_RXTOTALSTATS(conn, module_id, port_id)
|
|
118
|
-
"""RX FEC total counters.
|
|
119
|
-
|
|
120
|
-
:type: PP_RXTOTALSTATS
|
|
121
|
-
"""
|
|
122
|
-
|
|
123
|
-
self.fec_status = PP_RXFECSTATS(conn, module_id, port_id)
|
|
124
|
-
"""RX FEC statistics.
|
|
125
|
-
|
|
126
|
-
:type: PP_RXFECSTATS
|
|
127
|
-
"""
|
|
128
|
-
|
|
129
|
-
self.clear = PP_RXCLEAR(conn, module_id, port_id)
|
|
130
|
-
"""Clear all the PCS/PMA receiver statistics.
|
|
131
|
-
|
|
132
|
-
:type: PP_RXCLEAR
|
|
133
|
-
"""
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
class PcsPmaPhy:
|
|
137
|
-
"""L23 high-speed port PCS/PMA PHY settings."""
|
|
138
|
-
|
|
139
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
140
|
-
self.auto_neg = PP_PHYAUTONEG(conn, module_id, port_id)
|
|
141
|
-
""" Auto-negotiation settings of the PHY.
|
|
142
|
-
|
|
143
|
-
:type: PP_PHYAUTONEG
|
|
144
|
-
"""
|
|
145
|
-
|
|
146
|
-
self.signal_status = PP_PHYSIGNALSTATUS(conn, module_id, port_id)
|
|
147
|
-
"""The PHY signal status.
|
|
148
|
-
|
|
149
|
-
:type: PP_PHYSIGNALSTATUS
|
|
150
|
-
"""
|
|
151
|
-
|
|
152
|
-
self.settings = PP_PHYSETTINGS(conn, module_id, port_id)
|
|
153
|
-
"""Low-level PHY settings
|
|
154
|
-
|
|
155
|
-
:type: PP_PHYSETTINGS
|
|
156
|
-
"""
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
class Lane:
|
|
160
|
-
"""L23 high-speed port lane configuration and status."""
|
|
161
|
-
|
|
162
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int, lane_idx: int) -> None:
|
|
163
|
-
self.rx_status = PcsPmaRxLaneStatus(conn, module_id, port_id, lane_idx)
|
|
164
|
-
"""PCS/PMA RX lane status.
|
|
165
|
-
"""
|
|
166
|
-
|
|
167
|
-
self.tx_error_inject = PP_TXLANEINJECT(conn, module_id, port_id, lane_idx)
|
|
168
|
-
"""Inject CAUI error into a TX lane.
|
|
169
|
-
|
|
170
|
-
:type: PP_TXLANEINJECT
|
|
171
|
-
"""
|
|
172
|
-
|
|
173
|
-
self.tx_config = PP_TXLANECONFIG(conn, module_id, port_id, lane_idx)
|
|
174
|
-
"""TX lane configuration.
|
|
175
|
-
|
|
176
|
-
:type: PP_TXLANECONFIG
|
|
177
|
-
"""
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
class PcsPma:
|
|
181
|
-
"""L23 high-speed port PCS/PMA"""
|
|
182
|
-
|
|
183
|
-
def __init__(self, conn: "itf.IConnection", port) -> None:
|
|
184
|
-
self._conn = conn
|
|
185
|
-
self.__port = port
|
|
186
|
-
|
|
187
|
-
self.alarms = PcsPmaAlarms(conn, *port.kind)
|
|
188
|
-
"""PCS/PMA alarms
|
|
189
|
-
|
|
190
|
-
:type: PcsPmaAlarms
|
|
191
|
-
"""
|
|
192
|
-
|
|
193
|
-
self.transceiver = PcsPmaTransceiver(conn, *port.kind)
|
|
194
|
-
"""PCS/PMA transceiver
|
|
195
|
-
|
|
196
|
-
:type: PcsPmaTransceiver
|
|
197
|
-
"""
|
|
198
|
-
|
|
199
|
-
self.error_gen = PcsPmaTxErrorGeneration(conn, *port.kind)
|
|
200
|
-
"""PCS/PMA error generation
|
|
201
|
-
|
|
202
|
-
:type: PcsPmaTxErrorGeneration
|
|
203
|
-
"""
|
|
204
|
-
|
|
205
|
-
self.rx = PcsPmaRx(conn, *port.kind)
|
|
206
|
-
"""PCS/PMA RX
|
|
207
|
-
|
|
208
|
-
:type: PcsPmaRx
|
|
209
|
-
"""
|
|
210
|
-
|
|
211
|
-
self.phy = PcsPmaPhy(conn, *port.kind)
|
|
212
|
-
"""PCS/PMA PHY
|
|
213
|
-
|
|
214
|
-
:type: PcsPmaPhy
|
|
215
|
-
"""
|
|
216
|
-
|
|
217
|
-
self.prbs_config = PRBSConfig(conn, *port.kind)
|
|
218
|
-
"""PCS/PMA PRBS Configuration
|
|
219
|
-
|
|
220
|
-
:type: PRBSConfig
|
|
221
|
-
"""
|
|
222
|
-
|
|
223
|
-
self.lanes: Tuple["Lane", ...] = tuple(
|
|
224
|
-
Lane(self._conn, *self.__port.kind, lane_idx=idx)
|
|
225
|
-
for idx in range(self.__port.info.capabilities.lane_count)
|
|
226
|
-
) # TODO: need to fix, currently port.info.capabilities must be none because lanes are created before awaiting the port
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
class PRBSConfig:
|
|
230
|
-
"""L23 high-speed port PRBS configuration."""
|
|
231
|
-
|
|
232
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
233
|
-
self.type = PP_PRBSTYPE(conn, module_id, port_id)
|
|
234
|
-
"""PRBS type used when in PRBS mode.
|
|
235
|
-
|
|
236
|
-
:type: PP_PRBSTYPE
|
|
237
|
-
"""
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
class SDEyeDiagram:
|
|
241
|
-
"""L23 high-speed port SerDes eye diagram."""
|
|
242
|
-
|
|
243
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int, serdes_xindex: int) -> None:
|
|
244
|
-
self.__conn = conn
|
|
245
|
-
self.__module_id = module_id
|
|
246
|
-
self.__port_id = port_id
|
|
247
|
-
self.__serdes_index = serdes_xindex
|
|
248
|
-
self.measure = PP_EYEMEASURE(conn, module_id, port_id, serdes_xindex)
|
|
249
|
-
"""BER eye measurement.
|
|
250
|
-
|
|
251
|
-
:type: PP_EYEMEASURE
|
|
252
|
-
"""
|
|
253
|
-
|
|
254
|
-
self.resolution = PP_EYERESOLUTION(conn, module_id, port_id, serdes_xindex)
|
|
255
|
-
"""Resolution for BER eye measurement.
|
|
256
|
-
|
|
257
|
-
:type: PP_EYERESOLUTION
|
|
258
|
-
"""
|
|
259
|
-
|
|
260
|
-
self.info = PP_EYEINFO(conn, module_id, port_id, serdes_xindex)
|
|
261
|
-
"""Information of BER eye measurement.
|
|
262
|
-
|
|
263
|
-
:type: PP_EYEINFO
|
|
264
|
-
"""
|
|
265
|
-
|
|
266
|
-
self.ber = PP_EYEBER(conn, module_id, port_id, serdes_xindex)
|
|
267
|
-
"""BER estimation of an eye diagram.
|
|
268
|
-
|
|
269
|
-
:type: PP_EYEBER
|
|
270
|
-
"""
|
|
271
|
-
|
|
272
|
-
self.dwell_bits = PP_EYEDWELLBITS(conn, module_id, port_id, serdes_xindex)
|
|
273
|
-
"""Dwell bits for an eye capture.
|
|
274
|
-
|
|
275
|
-
:type: PP_EYEDWELLBITS
|
|
276
|
-
"""
|
|
277
|
-
|
|
278
|
-
def __await__(self):
|
|
279
|
-
return self._setup().__await__()
|
|
280
|
-
|
|
281
|
-
async def _setup(self) -> Self:
|
|
282
|
-
resolution = await self.resolution.get()
|
|
283
|
-
self.read_column = tuple(
|
|
284
|
-
PP_EYEREAD(
|
|
285
|
-
self.__conn,
|
|
286
|
-
self.__module_id,
|
|
287
|
-
self.__port_id,
|
|
288
|
-
self.__serdes_index,
|
|
289
|
-
_colum_xindex=x
|
|
290
|
-
)
|
|
291
|
-
for x in range(resolution.x_resolution)
|
|
292
|
-
)
|
|
293
|
-
return self
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
class SDPhy:
|
|
297
|
-
"""L23 high-speed port SerDes PHY configuration and status."""
|
|
298
|
-
|
|
299
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int, serdes_xindex: int) -> None:
|
|
300
|
-
self.tx_equalizer = PP_PHYTXEQ(conn, module_id, port_id, serdes_xindex)
|
|
301
|
-
"""Equalizer settings of the on-board PHY in the TX direction.
|
|
302
|
-
|
|
303
|
-
:type: PP_PHYTXEQ
|
|
304
|
-
"""
|
|
305
|
-
|
|
306
|
-
self.rx_equalizer = PP_PHYRXEQ(conn, module_id, port_id, serdes_xindex)
|
|
307
|
-
"""Equalizer settings of the on-board PHY in the RX direction.
|
|
308
|
-
|
|
309
|
-
:type: PP_PHYRXEQ
|
|
310
|
-
"""
|
|
311
|
-
|
|
312
|
-
self.retune = PP_PHYRETUNE(conn, module_id, port_id, serdes_xindex)
|
|
313
|
-
"""Retuning of the PHY.
|
|
314
|
-
|
|
315
|
-
:type: PP_PHYRETUNE
|
|
316
|
-
"""
|
|
317
|
-
|
|
318
|
-
self.autotune = PP_PHYAUTOTUNE(conn, module_id, port_id, serdes_xindex)
|
|
319
|
-
"""Autotune of the PHY.
|
|
320
|
-
|
|
321
|
-
:type: PP_PHYAUTOTUNE
|
|
322
|
-
"""
|
|
323
|
-
|
|
324
|
-
class Prbs:
|
|
325
|
-
"""L23 high-speed port SerDes PRBS configuration and status."""
|
|
326
|
-
|
|
327
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int, serdes_xindex: int) -> None:
|
|
328
|
-
self.control = PP_TXPRBSCONFIG(conn, module_id, port_id, serdes_xindex)
|
|
329
|
-
"""TX PRBS configuration of a SerDes.
|
|
330
|
-
|
|
331
|
-
:type: PP_TXPRBSCONFIG
|
|
332
|
-
"""
|
|
333
|
-
|
|
334
|
-
self.status = PP_RXPRBSSTATUS(conn, module_id, port_id, serdes_xindex)
|
|
335
|
-
"""RX PRBS status on a SerDes
|
|
336
|
-
|
|
337
|
-
:type: PP_RXPRBSSTATUS
|
|
338
|
-
"""
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
class SerDes:
|
|
343
|
-
"""L23 high-speed port SerDes configuration and status."""
|
|
344
|
-
|
|
345
|
-
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int, serdes_xindex: int) -> None:
|
|
346
|
-
self.prbs = Prbs(conn, module_id, port_id, serdes_xindex)
|
|
347
|
-
"""PRBS configuration
|
|
348
|
-
|
|
349
|
-
:type: Prbs
|
|
350
|
-
"""
|
|
351
|
-
|
|
352
|
-
self.phy = SDPhy(conn, module_id, port_id, serdes_xindex)
|
|
353
|
-
"""PHY configuration
|
|
354
|
-
|
|
355
|
-
:type: SDPhy
|
|
356
|
-
"""
|
|
357
|
-
|
|
358
|
-
self.eye_diagram = SDEyeDiagram(conn, module_id, port_id, serdes_xindex)
|
|
359
|
-
"""Eye diagram
|
|
360
|
-
|
|
361
|
-
:type: SDEyeDiagram
|
|
362
|
-
"""
|
|
363
|
-
|
|
364
|
-
def __await__(self):
|
|
365
|
-
return self._setup().__await__()
|
|
366
|
-
|
|
367
|
-
async def _setup(self) -> Self:
|
|
368
|
-
await self.eye_diagram
|
|
369
|
-
return self
|