tdl-xoa-driver 1.6.1__py3-none-any.whl → 1.6.2__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.6.1.dist-info → tdl_xoa_driver-1.6.2.dist-info}/METADATA +1 -1
- {tdl_xoa_driver-1.6.1.dist-info → tdl_xoa_driver-1.6.2.dist-info}/RECORD +10 -6
- xoa_driver/__init__.py +1 -1
- xoa_driver/internals/hli/ports/port_l23/bases/__init__.py +0 -0
- xoa_driver/internals/hli/ports/port_l23/bases/port_l23.py +267 -0
- xoa_driver/internals/hli/ports/port_l23/bases/port_l23_genuine.py +180 -0
- xoa_driver/internals/hli/ports/port_l23/bases/port_l23ve.py +101 -0
- {tdl_xoa_driver-1.6.1.dist-info → tdl_xoa_driver-1.6.2.dist-info}/WHEEL +0 -0
- {tdl_xoa_driver-1.6.1.dist-info → tdl_xoa_driver-1.6.2.dist-info}/licenses/LICENSE +0 -0
- {tdl_xoa_driver-1.6.1.dist-info → tdl_xoa_driver-1.6.2.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tdl-xoa-driver
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
tdl_xoa_driver-1.6.
|
|
2
|
-
xoa_driver/__init__.py,sha256=
|
|
1
|
+
tdl_xoa_driver-1.6.2.dist-info/licenses/LICENSE,sha256=KcCGoRYa8BS0KGUIHDIAeebClL6sX1uRWVrtESwpjOo,11351
|
|
2
|
+
xoa_driver/__init__.py,sha256=BJtNZvzVxeMeeNgbM1nJZfXQM5-92oTAzf7iLMPcM5g,47
|
|
3
3
|
xoa_driver/enums.py,sha256=qmRAxCh_nYCP-Va5YeGR7PO3d3Dueg44vtnzUohuGS0,8579
|
|
4
4
|
xoa_driver/exceptions.py,sha256=baNpophPmeNujMTSfL9TsYHa3Gju2-ozNOg78n8tqN8,1957
|
|
5
5
|
xoa_driver/hlfuncs.py,sha256=tfyhbYX86XWpc4yFoBrj1OYqVJJfDnoxC6tHLlWTHkQ,311
|
|
@@ -148,6 +148,10 @@ xoa_driver/internals/hli/ports/port_l23/layer1_edun.py,sha256=JjC56MUwie5qq1DtPZ
|
|
|
148
148
|
xoa_driver/internals/hli/ports/port_l23/layer1_freya.py,sha256=bpYGVQZSh1Xroz734cWPiF2LVW-2MFreUlMB-L4GmF8,3259
|
|
149
149
|
xoa_driver/internals/hli/ports/port_l23/layer1_loki.py,sha256=NvvwpDIRfizv5sDjTsuwyZGrvkL-nvsu8c5YXpBl0Yk,2229
|
|
150
150
|
xoa_driver/internals/hli/ports/port_l23/layer1_thor.py,sha256=_D6VgDzMfCIHK6yNRebHUjpn6KiI3MllAVxh3CRKzBU,2220
|
|
151
|
+
xoa_driver/internals/hli/ports/port_l23/bases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
152
|
+
xoa_driver/internals/hli/ports/port_l23/bases/port_l23.py,sha256=Yp2_7NI7dnki2C01Jr2kGZQ0mcxZJhzx4mHm_qt_tv0,6761
|
|
153
|
+
xoa_driver/internals/hli/ports/port_l23/bases/port_l23_genuine.py,sha256=h_IbIwOehkqkTzVw8cXoXOFJNZGBRFOpyeG6A07KLKw,5115
|
|
154
|
+
xoa_driver/internals/hli/ports/port_l23/bases/port_l23ve.py,sha256=BeTQG9ehAcrg0rfR1SSMvN9L-UoAIYDdiA175sDINlM,2973
|
|
151
155
|
xoa_driver/internals/hli/ports/port_l23/chimera/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
152
156
|
xoa_driver/internals/hli/ports/port_l23/chimera/pe_custom_distribution.py,sha256=hQ7IbqWjMuLqhtdBiN2rUSJpNmaaqfcZn6ZP2qA6gPM,3763
|
|
153
157
|
xoa_driver/internals/hli/ports/port_l23/chimera/pe_distribution.py,sha256=o4JrDRm83ict_uJHTDgOrd_Q6ru-Q6GdKnPSqhr5PAg,5970
|
|
@@ -224,7 +228,7 @@ xoa_driver/internals/utils/managers/abc.py,sha256=M3XgI2FVQLUXixS5SKnZTm0MweHY6D
|
|
|
224
228
|
xoa_driver/internals/utils/managers/exceptions.py,sha256=fqLSin-OQCIKuhpzvK6RZThF3FJ8FsHers4EmqM9gSs,628
|
|
225
229
|
xoa_driver/internals/utils/managers/modules_manager.py,sha256=sCEhqUu7Waot16rucJ5nI9FyHuFEeU_sBx1JjZdhDJg,3236
|
|
226
230
|
xoa_driver/internals/utils/managers/ports_manager.py,sha256=cmXGWMVbHB27E7e0t-K9mUDessdU_t_v-6WUtpqbIho,3554
|
|
227
|
-
tdl_xoa_driver-1.6.
|
|
228
|
-
tdl_xoa_driver-1.6.
|
|
229
|
-
tdl_xoa_driver-1.6.
|
|
230
|
-
tdl_xoa_driver-1.6.
|
|
231
|
+
tdl_xoa_driver-1.6.2.dist-info/METADATA,sha256=-oC1ibfLF2P3oodLq3pCePMCgzL9H54WwixWlf6sJbo,4176
|
|
232
|
+
tdl_xoa_driver-1.6.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
233
|
+
tdl_xoa_driver-1.6.2.dist-info/top_level.txt,sha256=sBbN3hwpa4s2VxsUBoWJ5jIqqDr50vgcEb-V8kL7pvE,11
|
|
234
|
+
tdl_xoa_driver-1.6.2.dist-info/RECORD,,
|
xoa_driver/__init__.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
__version__ = "1.6.
|
|
1
|
+
__version__ = "1.6.2"
|
|
2
2
|
__short_version__ = "1.6"
|
|
File without changes
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
import typing
|
|
3
|
+
from xoa_driver.internals.commands import (
|
|
4
|
+
P_CAPABILITIES,
|
|
5
|
+
P_SPEED,
|
|
6
|
+
P_SPEEDREDUCTION,
|
|
7
|
+
P_INTERFRAMEGAP,
|
|
8
|
+
P_MACADDRESS,
|
|
9
|
+
P_IPADDRESS,
|
|
10
|
+
P_ARPREPLY,
|
|
11
|
+
P_PINGREPLY,
|
|
12
|
+
P_PAUSE,
|
|
13
|
+
P_RANDOMSEED,
|
|
14
|
+
P_LOOPBACK,
|
|
15
|
+
P_TRAFFIC,
|
|
16
|
+
# P_CAPTURE,
|
|
17
|
+
P_XMITONE,
|
|
18
|
+
P_LATENCYOFFSET,
|
|
19
|
+
P_LATENCYMODE,
|
|
20
|
+
P_AUTOTRAIN,
|
|
21
|
+
P_MIXWEIGHTS,
|
|
22
|
+
P_TRAFFICERR,
|
|
23
|
+
P_GAPMONITOR,
|
|
24
|
+
P_CHECKSUM,
|
|
25
|
+
P_MIXLENGTH,
|
|
26
|
+
P_ARPRXTABLE,
|
|
27
|
+
P_NDPRXTABLE,
|
|
28
|
+
P_MULTICAST,
|
|
29
|
+
P_MULTICASTEXT,
|
|
30
|
+
P_MCSRCLIST,
|
|
31
|
+
P_MULTICASTHDR,
|
|
32
|
+
P_TXMODE,
|
|
33
|
+
P_RATEFRACTION,
|
|
34
|
+
P_RATEPPS,
|
|
35
|
+
P_RATEL2BPS,
|
|
36
|
+
P_PAYLOADMODE,
|
|
37
|
+
P_TXENABLE,
|
|
38
|
+
P_MAXHEADERLENGTH,
|
|
39
|
+
P_TXTIMELIMIT,
|
|
40
|
+
P_TXTIME,
|
|
41
|
+
P_XMITONETIME,
|
|
42
|
+
P_IPV6ADDRESS,
|
|
43
|
+
P_ARPV6REPLY,
|
|
44
|
+
P_PINGV6REPLY,
|
|
45
|
+
P_ERRORS,
|
|
46
|
+
P_TXPREPARE,
|
|
47
|
+
P_TXDELAY,
|
|
48
|
+
P_TPLDMODE,
|
|
49
|
+
P_TXPACKETLIMIT,
|
|
50
|
+
P_PFCENABLE,
|
|
51
|
+
P_TXBURSTPERIOD,
|
|
52
|
+
P_CAPABILITIES_EXT,
|
|
53
|
+
P_IGMPV3_GROUP_RECORD_BUNDLE,
|
|
54
|
+
P_USED_TPLDID,
|
|
55
|
+
)
|
|
56
|
+
if typing.TYPE_CHECKING:
|
|
57
|
+
from xoa_driver.internals.core import interfaces as itf
|
|
58
|
+
from xoa_driver.internals.hli.ports import base_port
|
|
59
|
+
from xoa_driver.internals.utils import attributes as utils
|
|
60
|
+
from xoa_driver.internals.utils.indices import index_manager as idx_mgr
|
|
61
|
+
from xoa_driver.internals.state_storage import ports_state
|
|
62
|
+
from xoa_driver.internals.hli.indices.length_term import LengthTermIdx
|
|
63
|
+
from xoa_driver.internals.hli.indices.match_term import MatchTermIdx
|
|
64
|
+
|
|
65
|
+
from ..trafficgen.capture import PortCapture
|
|
66
|
+
from ..trafficgen.tgen import *
|
|
67
|
+
|
|
68
|
+
LengthTermIndices = idx_mgr.IndexManager[LengthTermIdx]
|
|
69
|
+
MatchTermIndices = idx_mgr.IndexManager[MatchTermIdx]
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class BasePortL23(base_port.BasePort[ports_state.PortL23LocalState]):
|
|
73
|
+
"""L23 port layout which is relevant to all L23 ports."""
|
|
74
|
+
|
|
75
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
76
|
+
super().__init__(conn, module_id, port_id)
|
|
77
|
+
self.capabilities = P_CAPABILITIES(conn, module_id, port_id)
|
|
78
|
+
"""L23 Port capabilities
|
|
79
|
+
|
|
80
|
+
:type: P_CAPABILITIES
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
self.capabilities_ext = P_CAPABILITIES_EXT(conn, module_id, port_id)
|
|
84
|
+
"""L23 port capabilities ext.
|
|
85
|
+
|
|
86
|
+
:type: P_CAPABILITIES_EXT
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
self.pause = P_PAUSE(conn, module_id, port_id)
|
|
90
|
+
"""L23 port response to Ethernet PAUSE frames.
|
|
91
|
+
|
|
92
|
+
:type: P_PAUSE
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
self.loopback = P_LOOPBACK(conn, module_id, port_id)
|
|
96
|
+
"""L23 port loopback mode.
|
|
97
|
+
|
|
98
|
+
:type: P_LOOPBACK
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
self.errors_count = P_ERRORS(conn, module_id, port_id)
|
|
102
|
+
"""L23 port errors.
|
|
103
|
+
|
|
104
|
+
:type: P_ERRORS
|
|
105
|
+
"""
|
|
106
|
+
|
|
107
|
+
self.interframe_gap = P_INTERFRAMEGAP(conn, module_id, port_id)
|
|
108
|
+
"""L23 port interframe gap.
|
|
109
|
+
|
|
110
|
+
:type: P_INTERFRAMEGAP
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
self.max_header_length = P_MAXHEADERLENGTH(conn, module_id, port_id)
|
|
114
|
+
"""L23 port maximum header length.
|
|
115
|
+
|
|
116
|
+
:type: P_MAXHEADERLENGTH
|
|
117
|
+
"""
|
|
118
|
+
|
|
119
|
+
self.tpld_mode = P_TPLDMODE(conn, module_id, port_id)
|
|
120
|
+
"""L23 port test payload mode.
|
|
121
|
+
|
|
122
|
+
:type: P_TPLDMODE
|
|
123
|
+
"""
|
|
124
|
+
|
|
125
|
+
self.pfc_enable = P_PFCENABLE(conn, module_id, port_id)
|
|
126
|
+
"""L23 port Ethernet Priority Flow Control (PFC).
|
|
127
|
+
|
|
128
|
+
:type: P_PFCENABLE
|
|
129
|
+
"""
|
|
130
|
+
|
|
131
|
+
self.random_seed = P_RANDOMSEED(conn, module_id, port_id)
|
|
132
|
+
"""L23 port seed value.
|
|
133
|
+
|
|
134
|
+
:type: P_RANDOMSEED
|
|
135
|
+
"""
|
|
136
|
+
|
|
137
|
+
self.payload_mode = P_PAYLOADMODE(conn, module_id, port_id)
|
|
138
|
+
"""L23 port payload mode.
|
|
139
|
+
|
|
140
|
+
:type: P_PAYLOADMODE
|
|
141
|
+
"""
|
|
142
|
+
|
|
143
|
+
self.gap_monitor = P_GAPMONITOR(conn, module_id, port_id)
|
|
144
|
+
"""L23 port gap monitor.
|
|
145
|
+
|
|
146
|
+
:type: P_GAPMONITOR
|
|
147
|
+
"""
|
|
148
|
+
|
|
149
|
+
self.checksum = P_CHECKSUM(conn, module_id, port_id)
|
|
150
|
+
"""L23 port extra payload integrity checksum.
|
|
151
|
+
|
|
152
|
+
:type: P_CHECKSUM
|
|
153
|
+
"""
|
|
154
|
+
|
|
155
|
+
self.arp_rx_table = P_ARPRXTABLE(conn, module_id, port_id)
|
|
156
|
+
"""L23 port ARP table.
|
|
157
|
+
|
|
158
|
+
:type: P_ARPRXTABLE
|
|
159
|
+
"""
|
|
160
|
+
|
|
161
|
+
self.ndp_rx_table = P_NDPRXTABLE(conn, module_id, port_id)
|
|
162
|
+
"""L23 port NDP table.
|
|
163
|
+
|
|
164
|
+
:type: P_NDPRXTABLE
|
|
165
|
+
"""
|
|
166
|
+
|
|
167
|
+
self.capturer = PortCapture(conn, module_id, port_id)
|
|
168
|
+
"""L23 port capturer configuration.
|
|
169
|
+
|
|
170
|
+
:type: PortCapture
|
|
171
|
+
"""
|
|
172
|
+
|
|
173
|
+
self.speed = Speed(conn, module_id, port_id)
|
|
174
|
+
"""L23 port speed configuration.
|
|
175
|
+
|
|
176
|
+
:type: Speed
|
|
177
|
+
"""
|
|
178
|
+
|
|
179
|
+
self.traffic = Traffic(conn, module_id, port_id)
|
|
180
|
+
"""L23 port traffic configuration.
|
|
181
|
+
|
|
182
|
+
:type: Traffic
|
|
183
|
+
"""
|
|
184
|
+
|
|
185
|
+
self.mix = Mix(conn, module_id, port_id)
|
|
186
|
+
"""L23 port IMIX configuration.
|
|
187
|
+
|
|
188
|
+
:type: Mix
|
|
189
|
+
"""
|
|
190
|
+
|
|
191
|
+
self.latency_config = LatencyConfiguration(conn, module_id, port_id)
|
|
192
|
+
"""L23 port latency configuration.
|
|
193
|
+
|
|
194
|
+
self.latency_config = LatencyConfiguration(conn, module_id, port_id)
|
|
195
|
+
:type:
|
|
196
|
+
"""
|
|
197
|
+
|
|
198
|
+
self.rate = TxRate(conn, module_id, port_id)
|
|
199
|
+
"""L23 port rate.
|
|
200
|
+
|
|
201
|
+
:type: Rate
|
|
202
|
+
"""
|
|
203
|
+
|
|
204
|
+
self.tx_config = TxConfiguration(conn, module_id, port_id)
|
|
205
|
+
"""L23 port TX configuration.
|
|
206
|
+
|
|
207
|
+
:type: TxConfiguration
|
|
208
|
+
"""
|
|
209
|
+
|
|
210
|
+
self.tx_single_pkt = TxSinglePacket(conn, module_id, port_id)
|
|
211
|
+
"""L23 port single-packet TX configuration.
|
|
212
|
+
|
|
213
|
+
:type: TxSinglePacket
|
|
214
|
+
"""
|
|
215
|
+
|
|
216
|
+
self.multicast = Multicast(conn, module_id, port_id)
|
|
217
|
+
"""L23 port multicast configuration.
|
|
218
|
+
|
|
219
|
+
:type: Multicast
|
|
220
|
+
"""
|
|
221
|
+
|
|
222
|
+
self.net_config = NetConfig(conn, module_id, port_id)
|
|
223
|
+
"""L23 port network configuration, including MAC and IP addresses.
|
|
224
|
+
|
|
225
|
+
:type: NetConfig
|
|
226
|
+
"""
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
self.local_states = ports_state.PortL23LocalState()
|
|
230
|
+
"""L23 port local states.
|
|
231
|
+
|
|
232
|
+
:type: PortL23LocalState
|
|
233
|
+
"""
|
|
234
|
+
|
|
235
|
+
self.length_terms: LengthTermIndices = idx_mgr.IndexManager(
|
|
236
|
+
conn,
|
|
237
|
+
LengthTermIdx,
|
|
238
|
+
module_id,
|
|
239
|
+
port_id
|
|
240
|
+
)
|
|
241
|
+
"""L23 port's length term index manager.
|
|
242
|
+
|
|
243
|
+
:type: LengthTermIndices
|
|
244
|
+
"""
|
|
245
|
+
|
|
246
|
+
self.match_terms: MatchTermIndices = idx_mgr.IndexManager(
|
|
247
|
+
conn,
|
|
248
|
+
MatchTermIdx,
|
|
249
|
+
module_id,
|
|
250
|
+
port_id
|
|
251
|
+
)
|
|
252
|
+
"""L23 port's match term index manager.
|
|
253
|
+
|
|
254
|
+
:type: MatchTermIndices
|
|
255
|
+
"""
|
|
256
|
+
|
|
257
|
+
self.used_tpld_ids = P_USED_TPLDID(conn, module_id, port_id)
|
|
258
|
+
"""TG port's used TPLD IDs.
|
|
259
|
+
|
|
260
|
+
:type: P_USED_TPLDID
|
|
261
|
+
"""
|
|
262
|
+
|
|
263
|
+
on_speed_change = functools.partialmethod(utils.on_event, P_SPEED)
|
|
264
|
+
"""Register a callback to the event that the port's speed changes."""
|
|
265
|
+
|
|
266
|
+
on_traffic_change = functools.partialmethod(utils.on_event, P_TRAFFIC)
|
|
267
|
+
"""Register a callback to the event that the port's traffic status changes."""
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
if TYPE_CHECKING:
|
|
4
|
+
from xoa_driver.internals.core import interfaces as itf
|
|
5
|
+
from xoa_driver.internals.commands import (
|
|
6
|
+
P_FLASH,
|
|
7
|
+
P_SPEEDSELECTION,
|
|
8
|
+
P_SPEEDS_SUPPORTED,
|
|
9
|
+
P_UAT_MODE,
|
|
10
|
+
P_UAT_FLR,
|
|
11
|
+
P_STATUS,
|
|
12
|
+
P_TCVRSTATUS,
|
|
13
|
+
P_LOADMODE,
|
|
14
|
+
PP_FECMODE,
|
|
15
|
+
)
|
|
16
|
+
from xoa_driver.internals.utils import attributes as utils
|
|
17
|
+
from xoa_driver.internals.utils.indices import index_manager as idx_mgr
|
|
18
|
+
from xoa_driver.internals.hli.indices.streams.genuine_stream import GenuineStreamIdx
|
|
19
|
+
from xoa_driver.internals.hli.indices.filter.genuine_filter import GenuineFilterIdx
|
|
20
|
+
from xoa_driver.internals.hli.indices.port_dataset import PortDatasetIdx
|
|
21
|
+
from xoa_driver.internals.state_storage import ports_state
|
|
22
|
+
|
|
23
|
+
from .port_l23 import BasePortL23
|
|
24
|
+
|
|
25
|
+
from ..tcvr.transceiver import Transceiver
|
|
26
|
+
from ..trafficgen.rx_stats import GenuinePortReceptionStatistics
|
|
27
|
+
from ..trafficgen.tx_stats import GenuinePortTransmissionStatistics
|
|
28
|
+
from ..trafficgen.tgen import *
|
|
29
|
+
|
|
30
|
+
StreamIndices = idx_mgr.IndexManager[GenuineStreamIdx]
|
|
31
|
+
FilterIndices = idx_mgr.IndexManager[GenuineFilterIdx]
|
|
32
|
+
PortDatasetIndices = idx_mgr.IndexManager[PortDatasetIdx]
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class GenuineSpeed(Speed):
|
|
36
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
37
|
+
super().__init__(conn, module_id, port_id)
|
|
38
|
+
|
|
39
|
+
self.selection = P_SPEEDSELECTION(conn, module_id, port_id)
|
|
40
|
+
"""L23 port speed mode selection.
|
|
41
|
+
|
|
42
|
+
:type: P_SPEEDSELECTION
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
self.supported = P_SPEEDS_SUPPORTED(conn, module_id, port_id)
|
|
46
|
+
"""L23 port's supported speed modes.
|
|
47
|
+
|
|
48
|
+
:type: P_SPEEDS_SUPPORTED
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class UnAvailableTime:
|
|
53
|
+
"""UnAvailable Time"""
|
|
54
|
+
|
|
55
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
56
|
+
self.mode = P_UAT_MODE(conn, module_id, port_id)
|
|
57
|
+
"""L23 port's Unavailable Time mode.
|
|
58
|
+
|
|
59
|
+
:type: P_UAT_MODE
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
self.flr = P_UAT_FLR(conn, module_id, port_id)
|
|
63
|
+
"""L23 port's Frame Loss Ratio for UAT.
|
|
64
|
+
|
|
65
|
+
:type: P_UAT_FLR
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class PortStatistics:
|
|
70
|
+
"""L23 port statistics"""
|
|
71
|
+
|
|
72
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
73
|
+
self.rx = GenuinePortReceptionStatistics(conn, module_id, port_id)
|
|
74
|
+
"""L23 port's RX statistics."""
|
|
75
|
+
|
|
76
|
+
self.tx = GenuinePortTransmissionStatistics(conn, module_id, port_id)
|
|
77
|
+
"""L23 port's TX statistics."""
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class BasePortL23Genuine(BasePortL23):
|
|
81
|
+
"""L23 port basic configuration."""
|
|
82
|
+
|
|
83
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
84
|
+
super().__init__(conn, module_id, port_id)
|
|
85
|
+
|
|
86
|
+
self._local_states = ports_state.PortL23GenuineLocalState()
|
|
87
|
+
|
|
88
|
+
self.flash = P_FLASH(conn, module_id, port_id)
|
|
89
|
+
"""L23 port flashes.
|
|
90
|
+
|
|
91
|
+
:type: P_FLASH
|
|
92
|
+
"""
|
|
93
|
+
|
|
94
|
+
self.status = P_STATUS(conn, module_id, port_id)
|
|
95
|
+
"""L23 port's received optical signal level'.
|
|
96
|
+
|
|
97
|
+
:type: P_STATUS
|
|
98
|
+
"""
|
|
99
|
+
|
|
100
|
+
self.config_load_mode = P_LOADMODE(conn, module_id, port_id)
|
|
101
|
+
"""Chimera Port loading mode.
|
|
102
|
+
|
|
103
|
+
:type: P_LOADMODE
|
|
104
|
+
"""
|
|
105
|
+
|
|
106
|
+
self.tcvr_status = P_TCVRSTATUS(conn, module_id, port_id)
|
|
107
|
+
"""L23 port transceiver status information.
|
|
108
|
+
|
|
109
|
+
:type: P_TCVRSTATUS
|
|
110
|
+
"""
|
|
111
|
+
|
|
112
|
+
self.speed = GenuineSpeed(conn, module_id, port_id)
|
|
113
|
+
"""L23 port speed configuration.
|
|
114
|
+
|
|
115
|
+
:type: GenuineSpeed
|
|
116
|
+
"""
|
|
117
|
+
|
|
118
|
+
self.uat = UnAvailableTime(conn, module_id, port_id)
|
|
119
|
+
"""L23 port UnAvailable Time configuration.
|
|
120
|
+
|
|
121
|
+
:type: UnAvailableTime
|
|
122
|
+
"""
|
|
123
|
+
|
|
124
|
+
self.transceiver = Transceiver(conn, module_id, port_id)
|
|
125
|
+
"""L23 port transceiver configuration.
|
|
126
|
+
|
|
127
|
+
:type: PortTransceiver
|
|
128
|
+
"""
|
|
129
|
+
|
|
130
|
+
self.statistics = PortStatistics(conn, module_id, port_id)
|
|
131
|
+
"""L23 port statistics.
|
|
132
|
+
|
|
133
|
+
:type: PortStatistics
|
|
134
|
+
"""
|
|
135
|
+
|
|
136
|
+
self.streams: StreamIndices = idx_mgr.IndexManager(
|
|
137
|
+
conn,
|
|
138
|
+
GenuineStreamIdx,
|
|
139
|
+
module_id,
|
|
140
|
+
port_id
|
|
141
|
+
)
|
|
142
|
+
"""L23 port stream index manager.
|
|
143
|
+
|
|
144
|
+
:type: StreamIndices
|
|
145
|
+
"""
|
|
146
|
+
|
|
147
|
+
self.filters: FilterIndices = idx_mgr.IndexManager(
|
|
148
|
+
conn,
|
|
149
|
+
GenuineFilterIdx,
|
|
150
|
+
module_id,
|
|
151
|
+
port_id
|
|
152
|
+
)
|
|
153
|
+
"""L23 port filter index manager.
|
|
154
|
+
|
|
155
|
+
:type: FilterIndices
|
|
156
|
+
"""
|
|
157
|
+
|
|
158
|
+
self.datasets: PortDatasetIndices = idx_mgr.IndexManager(
|
|
159
|
+
conn,
|
|
160
|
+
PortDatasetIdx,
|
|
161
|
+
module_id,
|
|
162
|
+
port_id
|
|
163
|
+
)
|
|
164
|
+
"""L23 port histogram index manager.
|
|
165
|
+
|
|
166
|
+
:type: PortDatasetIndices
|
|
167
|
+
"""
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
@property
|
|
171
|
+
def info(self) -> ports_state.PortL23GenuineLocalState:
|
|
172
|
+
return self._local_states
|
|
173
|
+
|
|
174
|
+
async def _setup(self):
|
|
175
|
+
await self._local_states.initiate(self)
|
|
176
|
+
self._local_states.register_subscriptions(self)
|
|
177
|
+
return self
|
|
178
|
+
|
|
179
|
+
on_speed_selection_change = functools.partialmethod(utils.on_event, P_SPEEDSELECTION)
|
|
180
|
+
"""Register a callback to the event that the port's speed mode changes."""
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING
|
|
2
|
+
from .port_l23 import BasePortL23
|
|
3
|
+
from ..trafficgen.rx_stats import PortReceptionStatistics
|
|
4
|
+
from ..trafficgen.tx_stats import PortTxStats
|
|
5
|
+
|
|
6
|
+
from xoa_driver.internals.commands import (
|
|
7
|
+
P_MDIXMODE,
|
|
8
|
+
# P_ENGINENAMES, # TODO: need to implement
|
|
9
|
+
# P_ENGINELOAD, # TODO: need to implement
|
|
10
|
+
)
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from xoa_driver.internals.core import interfaces as itf
|
|
13
|
+
from xoa_driver.internals.utils.indices import index_manager as idx_mgr
|
|
14
|
+
from xoa_driver.internals.hli.indices.streams.base_stream import BaseStreamIdx
|
|
15
|
+
from xoa_driver.internals.hli.indices.filter.base_filter import BaseFilterIdx
|
|
16
|
+
from xoa_driver.internals.state_storage import ports_state
|
|
17
|
+
|
|
18
|
+
VEStreamIndices = idx_mgr.IndexManager[BaseStreamIdx]
|
|
19
|
+
VEFilterIndices = idx_mgr.IndexManager[BaseFilterIdx]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class Engine:
|
|
23
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
24
|
+
# self.names = P_ENGINENAMES(conn, module_id, port_id)
|
|
25
|
+
# self.load = P_ENGINELOAD(conn, module_id, port_id)
|
|
26
|
+
...
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class L23VEPortStatistics:
|
|
30
|
+
"""L23 VE port statistics"""
|
|
31
|
+
|
|
32
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
33
|
+
self.rx = PortReceptionStatistics(conn, module_id, port_id)
|
|
34
|
+
"""L23 VE port's RX statistics.
|
|
35
|
+
|
|
36
|
+
:type: PortReceptionStatistics
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
self.tx = PortTxStats(conn, module_id, port_id)
|
|
40
|
+
"""L23 VE port's TX statistics.
|
|
41
|
+
|
|
42
|
+
:type: PortTransmissionStatistics
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class PortL23VE(BasePortL23):
|
|
47
|
+
"""L23 VE port"""
|
|
48
|
+
|
|
49
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
50
|
+
super().__init__(conn, module_id, port_id)
|
|
51
|
+
|
|
52
|
+
self._local_states = ports_state.PortL23LocalState()
|
|
53
|
+
|
|
54
|
+
self.mdix_mode = P_MDIXMODE(conn, module_id, port_id)
|
|
55
|
+
"""MDI/MDIX mode.
|
|
56
|
+
|
|
57
|
+
:type: P_MDIXMODE
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
self.engine = Engine(conn, module_id, port_id)
|
|
61
|
+
"""Engine is not supported yet.
|
|
62
|
+
|
|
63
|
+
:type: Engine
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
self.statistics = L23VEPortStatistics(conn, module_id, port_id)
|
|
67
|
+
"""Port statistics.
|
|
68
|
+
|
|
69
|
+
:type: L23VEPortStatistics
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
self.streams: VEStreamIndices = idx_mgr.IndexManager(
|
|
73
|
+
conn,
|
|
74
|
+
BaseStreamIdx,
|
|
75
|
+
module_id,
|
|
76
|
+
port_id
|
|
77
|
+
)
|
|
78
|
+
"""L23 VE port's stream index manager.
|
|
79
|
+
|
|
80
|
+
:type: VEStreamIndices
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
self.filters: VEFilterIndices = idx_mgr.IndexManager(
|
|
84
|
+
conn,
|
|
85
|
+
BaseFilterIdx,
|
|
86
|
+
module_id,
|
|
87
|
+
port_id
|
|
88
|
+
)
|
|
89
|
+
"""L23 VE port's filter index manager.
|
|
90
|
+
|
|
91
|
+
:type: VEFilterIndices
|
|
92
|
+
"""
|
|
93
|
+
|
|
94
|
+
@property
|
|
95
|
+
def info(self) -> ports_state.PortL23LocalState:
|
|
96
|
+
return self._local_states
|
|
97
|
+
|
|
98
|
+
async def _setup(self):
|
|
99
|
+
await self._local_states.initiate(self)
|
|
100
|
+
self._local_states.register_subscriptions(self)
|
|
101
|
+
return self
|
|
File without changes
|
|
File without changes
|
|
File without changes
|