tdl-xoa-driver 1.5.1__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.1.dist-info → tdl_xoa_driver-1.6.0.dist-info}/METADATA +1 -1
- {tdl_xoa_driver-1.5.1.dist-info → tdl_xoa_driver-1.6.0.dist-info}/RECORD +89 -88
- xoa_driver/__init__.py +2 -2
- xoa_driver/enums.py +10 -10
- xoa_driver/functions/anlt.py +60 -78
- xoa_driver/functions/cli/testbed_config.py +1 -1
- 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 +455 -61
- 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 +315 -48
- 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 +84 -27
- 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/edun_l1.py +0 -181
- 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.1.dist-info → tdl_xoa_driver-1.6.0.dist-info}/WHEEL +0 -0
- {tdl_xoa_driver-1.5.1.dist-info → tdl_xoa_driver-1.6.0.dist-info}/licenses/LICENSE +0 -0
- {tdl_xoa_driver-1.5.1.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
|
@@ -10,6 +10,50 @@ if typing.TYPE_CHECKING:
|
|
|
10
10
|
from .module_l23_base import ModuleL23
|
|
11
11
|
|
|
12
12
|
|
|
13
|
+
@typing.final
|
|
14
|
+
@revisions.register_valkyrie_module(rev="Thor-100G-5S-4P")
|
|
15
|
+
class MThor100G5S4P(ModuleL23):
|
|
16
|
+
"""Test module Thor-100G-5S-4P"""
|
|
17
|
+
def __init__(self, conn: "itf.IConnection", init_data: "m_itf.ModuleInitData") -> None:
|
|
18
|
+
super().__init__(conn, init_data)
|
|
19
|
+
self.ports: pm.PortsManager[ports.PThor100G5S4P] = pm.PortsManager(
|
|
20
|
+
conn=conn,
|
|
21
|
+
ports_type=ports.PThor100G5S4P,
|
|
22
|
+
module_id=self.module_id,
|
|
23
|
+
ports_count=self.ports_count
|
|
24
|
+
)
|
|
25
|
+
"""Port Index Manager of Thor-100G-5S-4P"""
|
|
26
|
+
|
|
27
|
+
@typing.final
|
|
28
|
+
@revisions.register_valkyrie_module(rev="Thor-400G-7S-1P")
|
|
29
|
+
class MThor400G7S1P(ModuleL23):
|
|
30
|
+
"""Test module Thor-400G-7S-1P"""
|
|
31
|
+
def __init__(self, conn: "itf.IConnection", init_data: "m_itf.ModuleInitData") -> None:
|
|
32
|
+
super().__init__(conn, init_data)
|
|
33
|
+
self.ports: pm.PortsManager[ports.PThor400G7S1P] = pm.PortsManager(
|
|
34
|
+
conn=conn,
|
|
35
|
+
ports_type=ports.PThor400G7S1P,
|
|
36
|
+
module_id=self.module_id,
|
|
37
|
+
ports_count=self.ports_count
|
|
38
|
+
)
|
|
39
|
+
"""Port index of Thor-400G-7S-1P"""
|
|
40
|
+
|
|
41
|
+
@typing.final
|
|
42
|
+
@revisions.register_valkyrie_module(rev="Thor-400G-7S-1P LE")
|
|
43
|
+
class MThor400G7S1PLE(ModuleL23):
|
|
44
|
+
"""Test module Thor-400G-7S-1P LE"""
|
|
45
|
+
def __init__(self, conn: "itf.IConnection", init_data: "m_itf.ModuleInitData") -> None:
|
|
46
|
+
super().__init__(conn, init_data)
|
|
47
|
+
self.ports: pm.PortsManager[ports.PThor400G7S1PLE] = pm.PortsManager(
|
|
48
|
+
conn=conn,
|
|
49
|
+
ports_type=ports.PThor400G7S1PLE,
|
|
50
|
+
module_id=self.module_id,
|
|
51
|
+
ports_count=self.ports_count
|
|
52
|
+
)
|
|
53
|
+
"""Port index of Thor-400G-7S-1P LE"""
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
13
57
|
@typing.final
|
|
14
58
|
@revisions.register_valkyrie_module(rev="Thor-400G-7S-1P[b]")
|
|
15
59
|
class MThor400G7S1P_b(ModuleL23):
|
|
@@ -17,7 +17,7 @@ if TYPE_CHECKING:
|
|
|
17
17
|
from xoa_driver.internals.hli.ports import base_port
|
|
18
18
|
from xoa_driver.internals.utils import attributes as utils
|
|
19
19
|
from xoa_driver.internals.state_storage import ports_state
|
|
20
|
-
from ..
|
|
20
|
+
from ..layer1.impair import Impair
|
|
21
21
|
from .pe_custom_distribution import CustomDistributions
|
|
22
22
|
from .port_emulation import ChimeraPE
|
|
23
23
|
|
|
@@ -63,7 +63,7 @@ class PortChimera(base_port.BasePort[ports_state.PortChimeraLocalState]):
|
|
|
63
63
|
:type: P_LOADMODE
|
|
64
64
|
"""
|
|
65
65
|
|
|
66
|
-
self.emulation = ChimeraPE(
|
|
66
|
+
self.emulation = ChimeraPE(conn, module_id, port_id)
|
|
67
67
|
"""Chimera Port Emulation """
|
|
68
68
|
|
|
69
69
|
self.emulate = P_EMULATE(conn, module_id, port_id)
|
|
@@ -75,7 +75,7 @@ class PortChimera(base_port.BasePort[ports_state.PortChimeraLocalState]):
|
|
|
75
75
|
self.custom_distributions = CustomDistributions(conn, module_id, port_id)
|
|
76
76
|
"""Custom distributions."""
|
|
77
77
|
|
|
78
|
-
self.pcs_pma =
|
|
78
|
+
self.pcs_pma = Impair(conn, module_id, port_id)
|
|
79
79
|
""""PCS/PMA settings."""
|
|
80
80
|
|
|
81
81
|
self._local_states = ports_state.PortChimeraLocalState()
|
|
@@ -1,52 +1,23 @@
|
|
|
1
1
|
|
|
2
2
|
import functools
|
|
3
|
-
from typing import
|
|
4
|
-
|
|
3
|
+
from typing import (
|
|
4
|
+
TYPE_CHECKING,
|
|
5
|
+
Tuple,
|
|
6
|
+
Self,
|
|
7
|
+
)
|
|
5
8
|
from xoa_driver.internals.commands import (
|
|
6
9
|
P_DYNAMIC,
|
|
7
10
|
)
|
|
8
|
-
from xoa_driver import enums
|
|
9
11
|
from xoa_driver.internals.utils import attributes as utils
|
|
10
12
|
if TYPE_CHECKING:
|
|
11
13
|
from xoa_driver.internals.core import interfaces as itf
|
|
12
14
|
|
|
13
|
-
from .
|
|
14
|
-
from .
|
|
15
|
-
from .pcs_pma_ghijkl import (
|
|
16
|
-
PcsPma as PcsPma2,
|
|
17
|
-
SerDes,
|
|
18
|
-
)
|
|
19
|
-
from .pcs_pma_l import PcsPma as PcsPma3
|
|
20
|
-
from .edun_l1 import Layer1
|
|
15
|
+
from .trafficgen.port_l23_genuine import BasePortL23Genuine
|
|
16
|
+
from .layer1_edun import Layer1
|
|
21
17
|
|
|
22
|
-
class PcsPma(PcsPma1, PcsPma2, PcsPma3):
|
|
23
|
-
"""Edun PCS/PMA
|
|
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
|
-
class L1(Layer1):
|
|
31
|
-
"""Edun L1
|
|
32
|
-
"""
|
|
33
|
-
def __init__(self, conn: "itf.IConnection", port) -> None:
|
|
34
|
-
Layer1.__init__(self, conn, port)
|
|
35
18
|
|
|
36
19
|
|
|
37
20
|
class FamilyEdun(BasePortL23Genuine):
|
|
38
|
-
pcs_pma: PcsPma
|
|
39
|
-
"""PCS/PMA layer
|
|
40
|
-
|
|
41
|
-
:type: PcsPma
|
|
42
|
-
"""
|
|
43
|
-
|
|
44
|
-
# serdes: Tuple[SerDes, ...]
|
|
45
|
-
# """SerDes index
|
|
46
|
-
|
|
47
|
-
# :type: Tuple[SerDes, ...]
|
|
48
|
-
# """
|
|
49
|
-
|
|
50
21
|
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
51
22
|
super().__init__(conn, module_id, port_id)
|
|
52
23
|
self.dynamic = P_DYNAMIC(conn, module_id, port_id)
|
|
@@ -55,16 +26,10 @@ class FamilyEdun(BasePortL23Genuine):
|
|
|
55
26
|
:type: P_DYNAMIC
|
|
56
27
|
"""
|
|
57
28
|
|
|
58
|
-
# self.fault = Fault(conn, module_id, port_id)
|
|
59
|
-
|
|
60
29
|
async def _setup(self) -> Self:
|
|
61
30
|
await super()._setup()
|
|
62
|
-
self.
|
|
63
|
-
|
|
64
|
-
# SerDes(self._conn, *self.kind, serdes_xindex=serdes_xindex)
|
|
65
|
-
# for serdes_xindex in range(self.info.capabilities.serdes_count)
|
|
66
|
-
# )
|
|
67
|
-
self.l1 = L1(self._conn, self)
|
|
31
|
+
self.layer1 = Layer1(self._conn, self)
|
|
32
|
+
"""Layer 1"""
|
|
68
33
|
return self
|
|
69
34
|
|
|
70
35
|
on_dynamic_change = functools.partialmethod(utils.on_event, P_DYNAMIC)
|
|
@@ -1,52 +1,22 @@
|
|
|
1
1
|
|
|
2
2
|
import functools
|
|
3
|
-
from typing import
|
|
4
|
-
|
|
3
|
+
from typing import (
|
|
4
|
+
TYPE_CHECKING,
|
|
5
|
+
Tuple,
|
|
6
|
+
Self,
|
|
7
|
+
)
|
|
5
8
|
from xoa_driver.internals.commands import (
|
|
6
9
|
P_DYNAMIC,
|
|
7
10
|
)
|
|
8
|
-
from xoa_driver import enums
|
|
9
11
|
from xoa_driver.internals.utils import attributes as utils
|
|
10
12
|
if TYPE_CHECKING:
|
|
11
13
|
from xoa_driver.internals.core import interfaces as itf
|
|
12
14
|
|
|
13
|
-
from .
|
|
14
|
-
from .
|
|
15
|
-
from .pcs_pma_ghijkl import (
|
|
16
|
-
PcsPma as PcsPma2,
|
|
17
|
-
SerDes,
|
|
18
|
-
)
|
|
19
|
-
from .pcs_pma_l import PcsPma as PcsPma3
|
|
20
|
-
from .freya_l1 import Layer1
|
|
21
|
-
|
|
22
|
-
class PcsPma(PcsPma1, PcsPma2, PcsPma3):
|
|
23
|
-
"""Freya PCS/PMA
|
|
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
|
-
class L1(Layer1):
|
|
31
|
-
"""Freya L1
|
|
32
|
-
"""
|
|
33
|
-
def __init__(self, conn: "itf.IConnection", port) -> None:
|
|
34
|
-
Layer1.__init__(self, conn, port)
|
|
15
|
+
from .trafficgen.port_l23_genuine import BasePortL23Genuine
|
|
16
|
+
from .layer1_freya import Layer1
|
|
35
17
|
|
|
36
18
|
|
|
37
19
|
class FamilyFreya(BasePortL23Genuine):
|
|
38
|
-
pcs_pma: PcsPma
|
|
39
|
-
"""PCS/PMA layer
|
|
40
|
-
|
|
41
|
-
:type: PcsPma
|
|
42
|
-
"""
|
|
43
|
-
|
|
44
|
-
# serdes: Tuple[SerDes, ...]
|
|
45
|
-
# """SerDes index
|
|
46
|
-
|
|
47
|
-
# :type: Tuple[SerDes, ...]
|
|
48
|
-
# """
|
|
49
|
-
|
|
50
20
|
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
51
21
|
super().__init__(conn, module_id, port_id)
|
|
52
22
|
self.dynamic = P_DYNAMIC(conn, module_id, port_id)
|
|
@@ -55,16 +25,11 @@ class FamilyFreya(BasePortL23Genuine):
|
|
|
55
25
|
:type: P_DYNAMIC
|
|
56
26
|
"""
|
|
57
27
|
|
|
58
|
-
# self.fault = Fault(conn, module_id, port_id)
|
|
59
|
-
|
|
60
28
|
async def _setup(self) -> Self:
|
|
61
29
|
await super()._setup()
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
# for serdes_xindex in range(self.info.capabilities.serdes_count)
|
|
66
|
-
# )
|
|
67
|
-
self.l1 = L1(self._conn, self)
|
|
30
|
+
|
|
31
|
+
self.layer1 = Layer1(self._conn, self)
|
|
32
|
+
"""Layer 1"""
|
|
68
33
|
return self
|
|
69
34
|
|
|
70
35
|
on_dynamic_change = functools.partialmethod(utils.on_event, P_DYNAMIC)
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import functools
|
|
2
|
-
from typing import
|
|
3
|
-
|
|
2
|
+
from typing import (
|
|
3
|
+
TYPE_CHECKING,
|
|
4
|
+
Tuple,
|
|
5
|
+
Self,
|
|
6
|
+
)
|
|
4
7
|
from xoa_driver.internals.commands import (
|
|
5
8
|
P_DYNAMIC,
|
|
6
9
|
)
|
|
@@ -8,26 +11,12 @@ from xoa_driver.internals.utils import attributes as utils
|
|
|
8
11
|
if TYPE_CHECKING:
|
|
9
12
|
from xoa_driver.internals.core import interfaces as itf
|
|
10
13
|
|
|
11
|
-
from .
|
|
12
|
-
from .
|
|
13
|
-
|
|
14
|
-
SerDes,
|
|
15
|
-
)
|
|
16
|
-
|
|
14
|
+
from .trafficgen.port_l23_genuine import BasePortL23Genuine
|
|
15
|
+
from .layer1_loki import Layer1
|
|
16
|
+
from .sec.macsec import MacSec
|
|
17
17
|
|
|
18
|
-
class FamilyG(BasePortL23Genuine):
|
|
19
|
-
pcs_pma: PcsPma
|
|
20
|
-
"""PCS/PMA settings.
|
|
21
|
-
|
|
22
|
-
:type: ~xoa_driver.internals.hli_v1.ports.port_l23.pcs_pma_ghijkl.PcsPma
|
|
23
|
-
"""
|
|
24
|
-
|
|
25
|
-
serdes: Tuple[SerDes, ...]
|
|
26
|
-
"""SerDes index
|
|
27
|
-
|
|
28
|
-
:type: Tuple[SerDes, ...]
|
|
29
|
-
"""
|
|
30
18
|
|
|
19
|
+
class FamilyLoki(BasePortL23Genuine):
|
|
31
20
|
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
32
21
|
super().__init__(conn, module_id, port_id)
|
|
33
22
|
self.dynamic = P_DYNAMIC(conn, module_id, port_id)
|
|
@@ -38,45 +27,57 @@ class FamilyG(BasePortL23Genuine):
|
|
|
38
27
|
|
|
39
28
|
async def _setup(self) -> Self:
|
|
40
29
|
await super()._setup()
|
|
41
|
-
self.
|
|
42
|
-
|
|
43
|
-
for serdes_xindex in range(self.info.capabilities.serdes_count)
|
|
44
|
-
)
|
|
45
|
-
self.pcs_pma = PcsPma(self._conn, self)
|
|
30
|
+
self.layer1 = Layer1(self._conn, self)
|
|
31
|
+
"""Layer 1"""
|
|
46
32
|
return self
|
|
47
33
|
|
|
48
34
|
on_dynamic_change = functools.partialmethod(utils.on_event, P_DYNAMIC)
|
|
49
35
|
"""Register a callback to the event that the port's dynamic traffic setting changes."""
|
|
50
36
|
|
|
51
37
|
|
|
52
|
-
class PLoki100G3S1P(
|
|
38
|
+
class PLoki100G3S1P(FamilyLoki):
|
|
53
39
|
"""L23 port on Loki-100G-3S-1P module.
|
|
54
40
|
"""
|
|
55
41
|
...
|
|
56
42
|
|
|
57
43
|
|
|
58
|
-
class PLoki100G3S1P_b(
|
|
44
|
+
class PLoki100G3S1P_b(FamilyLoki):
|
|
59
45
|
"""L23 port on Loki-100G-3S-1P[b] module.
|
|
60
46
|
"""
|
|
61
47
|
...
|
|
62
48
|
|
|
63
49
|
|
|
64
|
-
class PLoki100G3S1PSE(
|
|
50
|
+
class PLoki100G3S1PSE(FamilyLoki):
|
|
65
51
|
"""L23 port on Loki-100G-3S-1P-SE module.
|
|
66
52
|
"""
|
|
67
53
|
...
|
|
68
54
|
|
|
69
|
-
class PLoki100G3S1PB(
|
|
55
|
+
class PLoki100G3S1PB(FamilyLoki):
|
|
70
56
|
"""L23 port on Loki-100G-3S-1P-B module.
|
|
71
57
|
"""
|
|
72
58
|
...
|
|
73
59
|
|
|
74
|
-
class PLoki100G3S1PB_b(
|
|
60
|
+
class PLoki100G3S1PB_b(FamilyLoki):
|
|
75
61
|
"""L23 port on Loki-100G-3S-1P-B[b] module.
|
|
76
62
|
"""
|
|
77
63
|
...
|
|
78
64
|
|
|
79
|
-
class
|
|
65
|
+
class PLoki100G5S1P(FamilyLoki):
|
|
66
|
+
"""L23 port on Loki-100G-5S-1P module.
|
|
67
|
+
"""
|
|
68
|
+
...
|
|
69
|
+
|
|
70
|
+
class PLoki100G5S2P(FamilyLoki):
|
|
71
|
+
"""L23 port on Loki-100G-5S-2P module.
|
|
72
|
+
"""
|
|
73
|
+
...
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class PLoki100G5S4P_a(FamilyLoki):
|
|
80
77
|
"""L23 port on Loki-100G-5S-4P[a] module.
|
|
81
78
|
"""
|
|
82
|
-
|
|
79
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
80
|
+
super().__init__(conn, module_id, port_id)
|
|
81
|
+
|
|
82
|
+
self.macsec = MacSec(conn, module_id, port_id)
|
|
83
|
+
"""MACSec configuration and status."""
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
from typing import (
|
|
3
|
+
TYPE_CHECKING,
|
|
4
|
+
)
|
|
5
|
+
from xoa_driver.internals.commands import (
|
|
6
|
+
P_MDIXMODE,
|
|
7
|
+
P_AUTONEGSELECTION,
|
|
8
|
+
P_DYNAMIC,
|
|
9
|
+
)
|
|
10
|
+
from xoa_driver.internals.utils import attributes as utils
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from xoa_driver.internals.core import interfaces as itf
|
|
13
|
+
from .trafficgen.port_l23_genuine import BasePortL23Genuine
|
|
14
|
+
from .layer1.lower_power import LowPowerMode
|
|
15
|
+
from .trafficgen.runt import Runt
|
|
16
|
+
from .layer1.preamble import Preamble
|
|
17
|
+
from .layer1.brr import BroadrReach
|
|
18
|
+
|
|
19
|
+
class FamilyOdin(BasePortL23Genuine):
|
|
20
|
+
"""Base class for Odin-1G port"""
|
|
21
|
+
|
|
22
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
23
|
+
super().__init__(conn, module_id, port_id)
|
|
24
|
+
|
|
25
|
+
self.dynamic = P_DYNAMIC(conn, module_id, port_id)
|
|
26
|
+
"""L23 port's dynamic traffic change.
|
|
27
|
+
|
|
28
|
+
:type: P_DYNAMIC
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
self.autoneg_selection = P_AUTONEGSELECTION(conn, module_id, port_id)
|
|
32
|
+
"""Auto-negotiation selection.
|
|
33
|
+
|
|
34
|
+
:type: P_AUTONEGSELECTION
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
on_dynamic_change = functools.partialmethod(utils.on_event, P_DYNAMIC)
|
|
38
|
+
"""Register a callback to the event that the port's dynamic traffic setting changes."""
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class POdin1G3S6P(FamilyOdin):
|
|
44
|
+
"""L23 port on Odin-1G-3S-6P module.
|
|
45
|
+
"""
|
|
46
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
47
|
+
super().__init__(conn, module_id, port_id)
|
|
48
|
+
self.mdix_mode = P_MDIXMODE(conn, module_id, port_id)
|
|
49
|
+
"""MDI/MDIX mode.
|
|
50
|
+
|
|
51
|
+
:type: P_MDIXMODE
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class POdin1G3S6P_b(POdin1G3S6P):
|
|
56
|
+
"""L23 port on Odin-1G-3S-6P[b] module.
|
|
57
|
+
"""
|
|
58
|
+
...
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class POdin1G3S6PE(POdin1G3S6P):
|
|
62
|
+
"""L23 port on Odin-1G-3S-6P-E module.
|
|
63
|
+
"""
|
|
64
|
+
...
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class POdin1G3S2PT(FamilyOdin):
|
|
68
|
+
"""L23 port on Odin-1G-3S-2P-T module.
|
|
69
|
+
"""
|
|
70
|
+
...
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class POdin1G4S4PCombi(FamilyOdin):
|
|
74
|
+
"""L23 port on Odin-1G-4S-2P-Combi module.
|
|
75
|
+
"""
|
|
76
|
+
...
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class POdin1G4S4PCombi_b(FamilyOdin):
|
|
80
|
+
"""L23 port on Odin-1G-4S-2P-Combi_b module.
|
|
81
|
+
"""
|
|
82
|
+
...
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class POdin10G4S2PCombi(FamilyOdin):
|
|
87
|
+
"""L23 port on Odin-10G-4S-2P-Combi module.
|
|
88
|
+
"""
|
|
89
|
+
...
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class POdin10G4S2PCombi_b(FamilyOdin):
|
|
93
|
+
"""L23 port on Odin-10G-4S-2P-Combi_b module.
|
|
94
|
+
"""
|
|
95
|
+
...
|
|
96
|
+
|
|
97
|
+
class POdin10G1S2P(FamilyOdin):
|
|
98
|
+
"""L23 port on Odin-10G-1S-2P module.
|
|
99
|
+
"""
|
|
100
|
+
...
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class POdin10G1S2P_b(POdin10G1S2P):
|
|
104
|
+
"""L23 port on Odin-10G-1S-2P[b] module.
|
|
105
|
+
"""
|
|
106
|
+
...
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class POdin10G1S2P_c(POdin10G1S2P):
|
|
110
|
+
"""L23 port on Odin-10G-1S-2P[c] module.
|
|
111
|
+
"""
|
|
112
|
+
...
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class POdin10G1S6P(FamilyOdin):
|
|
116
|
+
"""L23 port on Odin-10G-1S-6P module.
|
|
117
|
+
"""
|
|
118
|
+
...
|
|
119
|
+
|
|
120
|
+
class POdin10G1S6P_b(POdin10G1S6P):
|
|
121
|
+
"""L23 port on Odin-10G-1S-6P[b] module.
|
|
122
|
+
"""
|
|
123
|
+
...
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
class POdin5G4S6PCU(FamilyOdin):
|
|
127
|
+
"""L23 port on Odin-5G-4S-6P-CU module.
|
|
128
|
+
"""
|
|
129
|
+
...
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
class POdin10G5S6PCU(FamilyOdin):
|
|
133
|
+
"""L23 port on Odin-10G-5S-6P-CU module.
|
|
134
|
+
"""
|
|
135
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
136
|
+
super().__init__(conn, module_id, port_id)
|
|
137
|
+
|
|
138
|
+
self.eee = LowPowerMode(conn, module_id, port_id)
|
|
139
|
+
"""L23 port Low Power mode settings.
|
|
140
|
+
|
|
141
|
+
:type: LowPowerMode
|
|
142
|
+
"""
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
class POdin10G5S6PCU_b(POdin10G5S6PCU):
|
|
146
|
+
"""L23 port on Odin-10G-5S-6P-CU[b] module.
|
|
147
|
+
"""
|
|
148
|
+
...
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class POdin10G3S6PCU(FamilyOdin):
|
|
152
|
+
"""L23 port on Odin-10G-3S-6P-CU module.
|
|
153
|
+
"""
|
|
154
|
+
...
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
class POdin10G3S2PCU(FamilyOdin):
|
|
158
|
+
"""L23 port on Odin-10G-3S-2P-CU module.
|
|
159
|
+
"""
|
|
160
|
+
...
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
class POdin10G6S6P_a(FamilyOdin):
|
|
164
|
+
"""L23 port on Odin-10G-6S-6P[a] module.
|
|
165
|
+
"""
|
|
166
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
167
|
+
super().__init__(conn, module_id, port_id)
|
|
168
|
+
|
|
169
|
+
self.runt = Runt(conn, module_id, port_id)
|
|
170
|
+
"""Runt settings.
|
|
171
|
+
|
|
172
|
+
:type: Runt
|
|
173
|
+
"""
|
|
174
|
+
|
|
175
|
+
self.preamble = Preamble(conn, module_id, port_id)
|
|
176
|
+
"""Preamble settings.
|
|
177
|
+
|
|
178
|
+
:type: Preamble
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
class POdin10G1S2PT(FamilyOdin):
|
|
183
|
+
"""L23 port on Odin-10G-1S-2P-T module.
|
|
184
|
+
"""
|
|
185
|
+
...
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
class POdin10G1S2P_d(FamilyOdin):
|
|
189
|
+
"""L23 port on Odin-10G-1S-2P[d] module.
|
|
190
|
+
"""
|
|
191
|
+
...
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
class POdin10G1S12P(FamilyOdin):
|
|
195
|
+
"""L23 port on Odin-10G-1S-12P module.
|
|
196
|
+
"""
|
|
197
|
+
...
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
class POdin40G2S2P(FamilyOdin):
|
|
201
|
+
"""L23 port on Odin-40G-2S-2P module.
|
|
202
|
+
"""
|
|
203
|
+
...
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
class POdin40G2S2PB(POdin40G2S2P):
|
|
208
|
+
"""L23 port on Odin-40G-2S-2P-B module.
|
|
209
|
+
"""
|
|
210
|
+
...
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
class POdin1G3S6PT1RJ45(FamilyOdin):
|
|
214
|
+
"""L23 port on Odin-1G-3S-6P-T1-RJ45 module.
|
|
215
|
+
"""
|
|
216
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
217
|
+
super().__init__(conn, module_id, port_id)
|
|
218
|
+
self.brr = BroadrReach(conn, module_id, port_id)
|
|
219
|
+
"""BroadR-Reach settings.
|
|
220
|
+
"""
|
|
221
|
+
|
|
222
|
+
class POdin100G3S1P(FamilyOdin):
|
|
223
|
+
"""L23 port on Odin-100G-3S-1P module.
|
|
224
|
+
"""
|
|
225
|
+
...
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
from typing import (
|
|
3
|
+
TYPE_CHECKING,
|
|
4
|
+
Tuple,
|
|
5
|
+
Self,
|
|
6
|
+
)
|
|
7
|
+
from xoa_driver.internals.commands import (
|
|
8
|
+
P_DYNAMIC,
|
|
9
|
+
)
|
|
10
|
+
from xoa_driver.internals.utils import attributes as utils
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from xoa_driver.internals.core import interfaces as itf
|
|
13
|
+
|
|
14
|
+
from .trafficgen.port_l23_genuine import BasePortL23Genuine
|
|
15
|
+
from .layer1_thor import Layer1
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class FamilyThor(BasePortL23Genuine):
|
|
19
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
20
|
+
super().__init__(conn, module_id, port_id)
|
|
21
|
+
self.dynamic = P_DYNAMIC(conn, module_id, port_id)
|
|
22
|
+
"""L23 port's dynamic traffic change.
|
|
23
|
+
|
|
24
|
+
:type: P_DYNAMIC
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
async def _setup(self) -> Self:
|
|
28
|
+
await super()._setup()
|
|
29
|
+
self.layer1 = Layer1(self._conn, self)
|
|
30
|
+
"""Layer 1"""
|
|
31
|
+
return self
|
|
32
|
+
|
|
33
|
+
on_dynamic_change = functools.partialmethod(utils.on_event, P_DYNAMIC)
|
|
34
|
+
"""Register a callback to the event that the port's dynamic traffic setting changes."""
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class PThor100G5S4P(FamilyThor):
|
|
38
|
+
"""L23 port on Thor-100G-5S-4P module.
|
|
39
|
+
"""
|
|
40
|
+
...
|
|
41
|
+
|
|
42
|
+
class PThor400G7S1P(FamilyThor):
|
|
43
|
+
"""L23 port on Thor-400G-7S-1P module.
|
|
44
|
+
"""
|
|
45
|
+
...
|
|
46
|
+
|
|
47
|
+
class PThor400G7S1PLE(FamilyThor):
|
|
48
|
+
"""L23 port on Thor-400G-7S-1P LE module.
|
|
49
|
+
"""
|
|
50
|
+
...
|
|
51
|
+
|
|
52
|
+
class PThor400G7S1P_b(FamilyThor):
|
|
53
|
+
"""L23 port on Thor-400G-7S-1P[b] module.
|
|
54
|
+
"""
|
|
55
|
+
...
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class PThor400G7S1P_c(FamilyThor):
|
|
59
|
+
"""L23 port on Thor-400G-7S-1P[c] module.
|
|
60
|
+
"""
|
|
61
|
+
...
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class PThor400G7S1P_d(FamilyThor):
|
|
65
|
+
"""L23 port on Thor-400G-7S-1P[d] module.
|
|
66
|
+
"""
|
|
67
|
+
...
|