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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tdl-xoa-driver
3
- Version: 1.6.1
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.1.dist-info/licenses/LICENSE,sha256=KcCGoRYa8BS0KGUIHDIAeebClL6sX1uRWVrtESwpjOo,11351
2
- xoa_driver/__init__.py,sha256=VGXV1qm2o5PJQrsepEL8glKxft4RffI9DqK34uuOO24,47
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.1.dist-info/METADATA,sha256=2X5n3CG84-6BXaSWRfGP1Oy1G3xuGMQweDhTEN0FJb0,4176
228
- tdl_xoa_driver-1.6.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
229
- tdl_xoa_driver-1.6.1.dist-info/top_level.txt,sha256=sBbN3hwpa4s2VxsUBoWJ5jIqqDr50vgcEb-V8kL7pvE,11
230
- tdl_xoa_driver-1.6.1.dist-info/RECORD,,
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"
1
+ __version__ = "1.6.2"
2
2
  __short_version__ = "1.6"
@@ -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