8.2.1. Summary

The summary of XOA HL-API (object-oriented) is provided in the attached file.

You can find set and get method of APIs of tester, module, port, stream, and impairment flow.

See also

Read more about Get and Set Method

   1import asyncio
   2
   3from xoa_driver import testers
   4from xoa_driver import modules
   5from xoa_driver import ports
   6from xoa_driver import enums
   7from xoa_driver import utils
   8from xoa_driver import misc
   9from xoa_driver.hlfuncs import mgmt
  10from xoa_driver.misc import Hex
  11from xoa_driver.lli import commands
  12import ipaddress
  13
  14
  15async def my_awesome_func(stop_event: asyncio.Event):
  16
  17# region Tester
  18    #################################################
  19    #                   Tester                      #
  20    #################################################
  21    tester = await testers.L23Tester(
  22        host="10.10.10.10",
  23        username="my_name",
  24        password="xena",
  25        enable_logging=False)
  26    
  27    # Shutdown/Restart
  28    await tester.down.set(operation=enums.ChassisShutdownAction.POWER_OFF)
  29    await tester.down.set_poweroff()
  30    await tester.down.set(operation=enums.ChassisShutdownAction.RESTART)
  31    await tester.down.set_restart()
  32
  33    # Flash
  34    await tester.flash.set(on_off=enums.OnOff.OFF)
  35    await tester.flash.set_off()
  36    await tester.flash.set(on_off=enums.OnOff.ON)
  37    await tester.flash.set_on()
  38
  39    resp = await tester.flash.get()
  40    resp.on_off
  41
  42    # Debug Log
  43    resp = await tester.debug_log.get()
  44    resp.data
  45    resp.message_length
  46
  47    # IP Address
  48    await tester.management_interface.ip_address.set(
  49        ipv4_address=ipaddress.IPv4Address("10.10.10.10"),
  50        subnet_mask=ipaddress.IPv4Address("255.255.255.0"),
  51        gateway=ipaddress.IPv4Address("10.10.10.1"))
  52    
  53    resp = await tester.management_interface.ip_address.get()
  54    resp.ipv4_address
  55    resp.subnet_mask
  56    resp.gateway
  57
  58    # MAC Address
  59    resp = await tester.management_interface.macaddress.get()
  60    resp.mac_address
  61
  62    # Hostname
  63    await tester.management_interface.hostname.set(hostname="name")
  64
  65    resp = await tester.management_interface.hostname.get()
  66    resp.hostname
  67
  68    # DHCP
  69    await tester.management_interface.dhcp.set(on_off=enums.OnOff.ON)
  70    await tester.management_interface.dhcp.set_on()
  71    await tester.management_interface.dhcp.set(on_off=enums.OnOff.OFF)
  72    await tester.management_interface.dhcp.set_off()
  73
  74    resp = await tester.management_interface.dhcp.get()
  75    resp.on_off
  76
  77    # Capabilities
  78    resp = await tester.capabilities.get()
  79    resp.version
  80    resp.max_name_len
  81    resp.max_comment_len
  82    resp.max_password_len
  83    resp.max_ext_rate
  84    resp.max_session_count
  85    resp.max_chain_depth
  86    resp.max_module_count
  87    resp.max_protocol_count
  88    resp.can_stream_based_arp
  89    resp.can_sync_traffic_start
  90    resp.can_read_log_files
  91    resp.can_par_module_upgrade
  92    resp.can_upgrade_timekeeper
  93    resp.can_custom_defaults
  94    resp.max_owner_name_length
  95    resp.can_read_temperatures
  96    resp.can_latency_f2f
  97
  98    # Name
  99    await tester.name.set(chassis_name="name")
 100
 101    resp = await tester.name.get()
 102    resp.chassis_name
 103
 104    # Password
 105    await tester.password.set(password="xena")
 106
 107    resp = await tester.password.get()
 108    resp.password
 109
 110    # Description
 111    await tester.comment.set(comment="description")
 112    
 113    resp = await tester.comment.get()
 114    resp.comment
 115
 116    # Model
 117    resp = await tester.model.get()
 118    resp.model
 119
 120    # Serial Number
 121    resp = await tester.serial_no.get()
 122    resp.serial_number
 123
 124    # Firmware Version
 125    resp = await tester.version_no.get()
 126    resp.chassis_major_version
 127    resp.pci_driver_version
 128
 129    resp = await tester.version_no_minor.get()
 130    resp.chassis_minor_version
 131    resp.reserved_1
 132    resp.reserved_2
 133
 134    # Build String
 135    resp = await tester.build_string.get()
 136    resp.build_string
 137
 138    # Reservation
 139    await tester.reservation.set(operation=enums.ReservedAction.RELEASE)
 140    await tester.reservation.set_release()
 141    await tester.reservation.set(operation=enums.ReservedAction.RELINQUISH)
 142    await tester.reservation.set_relinquish()
 143    await tester.reservation.set(operation=enums.ReservedAction.RESERVE)
 144    await tester.reservation.set_reserve()
 145
 146    resp = await tester.reservation.get()
 147    resp.operation
 148
 149    # Reserved By
 150    resp = await tester.reserved_by.get()
 151    resp.username
 152
 153    # Information
 154    # The following are pre-fetched in cache when connection is established, thus no need to use await
 155
 156    tester.session.owner_name
 157    tester.session.keepalive
 158    tester.session.pwd
 159    tester.session.is_online
 160    tester.session.sessions_info
 161    tester.session.timeout
 162    tester.is_released()
 163    tester.is_reserved_by_me()
 164
 165    # Logoff
 166    await tester.session.logoff()
 167
 168    # Time
 169    resp = await tester.time.get()
 170    resp.local_time
 171
 172    # TimeKeeper Configuration
 173    await tester.time_keeper.config_file.set(config_file="filename")
 174    
 175    resp = await tester.time_keeper.config_file.get()
 176    resp.config_file
 177
 178    # TimeKeeper GPS State
 179    resp = await tester.time_keeper.gps_state.get()
 180    resp.status
 181
 182    # TimeKeeper License File
 183    await tester.time_keeper.license_file.set(license_content="")
 184    
 185    resp = await tester.time_keeper.license_file.get()
 186    resp.license_content
 187
 188    # TimeKeeper License State
 189    resp = await tester.time_keeper.license_state.get()
 190    resp.license_errors
 191    resp.license_file_state
 192    resp.license_type
 193
 194    # TimeKeeper Status
 195    resp = await tester.time_keeper.status.get()
 196    resp.status_string
 197
 198    resp = await tester.time_keeper.status_extended.get()
 199    resp.status_string
 200
 201    # Chassis Traffic
 202    await tester.traffic.set(on_off=enums.OnOff.ON, module_ports=[0,0,0,1])
 203    await tester.traffic.set(on_off=enums.OnOff.OFF, module_ports=[0,0,0,1])
 204    await tester.traffic.set_on(module_ports=[0,0,0,1])
 205    await tester.traffic.set_off(module_ports=[0,0,0,1])
 206
 207    # Synchronized Chassis Traffic
 208    await tester.traffic_sync.set(on_off=enums.OnOff.ON, timestamp=1234567, module_ports=[0,0,0,1])
 209    await tester.traffic_sync.set(on_off=enums.OnOff.OFF, timestamp=1234567, module_ports=[0,0,0,1])
 210    await tester.traffic_sync.set_on(timestamp=1234567, module_ports=[0,0,0,1])
 211    await tester.traffic_sync.set_off(timestamp=1234567, module_ports=[0,0,0,1])
 212
 213# endregion
 214
 215# region Module
 216    #################################################
 217    #                   Module                      #
 218    #################################################
 219
 220    # Access module index 0 on the tester
 221    module = tester.modules.obtain(0)
 222
 223    # Capabilities
 224    resp = await module.capabilities.get()
 225    resp.can_advanced_timing
 226    resp.can_local_time_adjust
 227    resp.can_media_config
 228    resp.can_ppm_sweep
 229    resp.can_tsn
 230    resp.is_chimera
 231    resp.max_clock_ppm
 232
 233    # Name
 234    resp = await module.name.get()
 235    resp.name
 236
 237    # Description
 238    await module.comment.set(comment="description")
 239    
 240    resp = await module.comment.get()
 241    resp.comment
 242
 243    # Legacy Model
 244    resp = await module.model.get()
 245    resp.model
 246
 247    # Model
 248    resp = await module.revision.get()
 249    resp.revision
 250
 251    # Serial Number
 252    resp = await module.serial_number.get()
 253    resp.serial_number
 254
 255    # Firmware Version
 256    resp = await module.version_number.get()
 257    resp.version
 258
 259    # Port Count
 260    resp = await module.port_count.get()
 261    resp.port_count
 262
 263    # Status
 264    resp = await module.status.get()
 265    resp.temperature
 266
 267    # Media Configuration
 268    await module.media.set(media_config=enums.MediaConfigurationType.BASE_T1)
 269    await module.media.set(media_config=enums.MediaConfigurationType.BASE_T1S)
 270    await module.media.set(media_config=enums.MediaConfigurationType.CFP)
 271    await module.media.set(media_config=enums.MediaConfigurationType.CFP4)
 272    await module.media.set(media_config=enums.MediaConfigurationType.CXP)
 273    await module.media.set(media_config=enums.MediaConfigurationType.OSFP800)
 274    await module.media.set(media_config=enums.MediaConfigurationType.OSFP800_ANLT)
 275    await module.media.set(media_config=enums.MediaConfigurationType.QSFP112)
 276    await module.media.set(media_config=enums.MediaConfigurationType.QSFP112_ANLT)
 277    await module.media.set(media_config=enums.MediaConfigurationType.QSFP28_NRZ)
 278    await module.media.set(media_config=enums.MediaConfigurationType.QSFP28_PAM4)
 279    await module.media.set(media_config=enums.MediaConfigurationType.QSFP56_PAM4)
 280    await module.media.set(media_config=enums.MediaConfigurationType.QSFPDD_NRZ)
 281    await module.media.set(media_config=enums.MediaConfigurationType.QSFPDD_PAM4)
 282    await module.media.set(media_config=enums.MediaConfigurationType.QSFPDD800)
 283    await module.media.set(media_config=enums.MediaConfigurationType.QSFPDD800_ANLT)
 284    await module.media.set(media_config=enums.MediaConfigurationType.SFP112)
 285    await module.media.set(media_config=enums.MediaConfigurationType.SFP28)
 286    await module.media.set(media_config=enums.MediaConfigurationType.SFP56)
 287    await module.media.set(media_config=enums.MediaConfigurationType.SFPDD)
 288
 289    resp = await module.media.get()
 290    resp.media_config
 291    
 292    # Supported Media
 293    resp = await module.available_speeds.get()
 294    resp.media_info_list
 295
 296    # Port Configuration
 297    await module.cfp.config.set(portspeed_list=[1, 800000])
 298    await module.cfp.config.set(portspeed_list=[2, 400000, 400000])
 299    await module.cfp.config.set(portspeed_list=[4, 200000, 200000, 200000, 200000])
 300    await module.cfp.config.set(portspeed_list=[8, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000])
 301
 302    resp = await module.cfp.config.get()
 303    resp.portspeed_list
 304
 305    # Reservation
 306    await module.reservation.set(operation=enums.ReservedAction.RELEASE)
 307    await module.reservation.set_release()
 308    await module.reservation.set(operation=enums.ReservedAction.RELINQUISH)
 309    await module.reservation.set_relinquish()
 310    await module.reservation.set(operation=enums.ReservedAction.RESERVE)
 311    await module.reservation.set_reserve()
 312
 313    resp = await module.reservation.get()
 314    resp.operation
 315    
 316    # Reserved By
 317    resp = await module.reserved_by.get()
 318    resp.username
 319
 320    # TX Clock Filter Loop Bandwidth
 321    if not isinstance(module, modules.ModuleChimera):
 322        await module.advanced_timing.clock_tx.filter.set(filter_bandwidth=enums.LoopBandwidth.BW103HZ)
 323        await module.advanced_timing.clock_tx.filter.set_bw103hz()
 324        await module.advanced_timing.clock_tx.filter.set(filter_bandwidth=enums.LoopBandwidth.BW1683HZ)
 325        await module.advanced_timing.clock_tx.filter.set_bw1683hz()
 326        await module.advanced_timing.clock_tx.filter.set(filter_bandwidth=enums.LoopBandwidth.BW207HZ)
 327        await module.advanced_timing.clock_tx.filter.set_bw207hz()
 328        await module.advanced_timing.clock_tx.filter.set(filter_bandwidth=enums.LoopBandwidth.BW416HZ)
 329        await module.advanced_timing.clock_tx.filter.set_bw416hz()
 330        await module.advanced_timing.clock_tx.filter.set(filter_bandwidth=enums.LoopBandwidth.BW7019HZ)
 331        await module.advanced_timing.clock_tx.filter.set_bw7019hz()
 332
 333        resp = await module.advanced_timing.clock_tx.filter.get()
 334        resp.filter_bandwidth
 335
 336    # TX Clock Source
 337    if not isinstance(module, modules.ModuleChimera):
 338        await module.advanced_timing.clock_tx.source.set(tx_clock=enums.TXClockSource.MODULELOCALCLOCK)
 339        await module.advanced_timing.clock_tx.source.set_modulelocalclock()
 340        await module.advanced_timing.clock_tx.source.set(tx_clock=enums.TXClockSource.P0RXCLK)
 341        await module.advanced_timing.clock_tx.source.set_p0rxclk()
 342        await module.advanced_timing.clock_tx.source.set(tx_clock=enums.TXClockSource.P1RXCLK)
 343        await module.advanced_timing.clock_tx.source.set_p1rxclk()
 344        await module.advanced_timing.clock_tx.source.set(tx_clock=enums.TXClockSource.P2RXCLK)
 345        await module.advanced_timing.clock_tx.source.set_p2rxclk()
 346        await module.advanced_timing.clock_tx.source.set(tx_clock=enums.TXClockSource.P3RXCLK)
 347        await module.advanced_timing.clock_tx.source.set_p3rxclk()
 348        await module.advanced_timing.clock_tx.source.set(tx_clock=enums.TXClockSource.P4RXCLK)
 349        await module.advanced_timing.clock_tx.source.set_p4rxclk()
 350        await module.advanced_timing.clock_tx.source.set(tx_clock=enums.TXClockSource.P5RXCLK)
 351        await module.advanced_timing.clock_tx.source.set_p5rxclk()
 352        await module.advanced_timing.clock_tx.source.set(tx_clock=enums.TXClockSource.P6RXCLK)
 353        await module.advanced_timing.clock_tx.source.set_p6rxclk()
 354        await module.advanced_timing.clock_tx.source.set(tx_clock=enums.TXClockSource.P7RXCLK)
 355        await module.advanced_timing.clock_tx.source.set_p7rxclk()
 356
 357        resp = await module.advanced_timing.clock_tx.source.get()
 358        resp.tx_clock
 359
 360    # TX Clock Status
 361    if not isinstance(module, modules.ModuleChimera):
 362        resp = await module.advanced_timing.clock_tx.status.get()
 363        resp.status
 364
 365    # SMA Status
 366    if not isinstance(module, modules.ModuleChimera):
 367        resp = await module.advanced_timing.sma.status.get()
 368        resp.status
 369
 370    # SMA Input
 371    if not isinstance(module, modules.ModuleChimera):
 372        await module.advanced_timing.sma.input.set(sma_in=enums.SMAInputFunction.NOT_USED)
 373        await module.advanced_timing.sma.input.set_notused()
 374        await module.advanced_timing.sma.input.set(sma_in=enums.SMAInputFunction.TX10MHZ)
 375        await module.advanced_timing.sma.input.set_tx10mhz()
 376        await module.advanced_timing.sma.input.set(sma_in=enums.SMAInputFunction.TX2MHZ)
 377        await module.advanced_timing.sma.input.set_tx2mhz()
 378
 379        resp = await module.advanced_timing.sma.input.get()
 380        resp.sma_in
 381
 382    # SMA Output
 383    if not isinstance(module, modules.ModuleChimera):
 384        await module.advanced_timing.sma.output.set(sma_out=enums.SMAOutputFunction.DISABLED)
 385        await module.advanced_timing.sma.output.set_disabled()
 386        await module.advanced_timing.sma.output.set(sma_out=enums.SMAOutputFunction.P0RXCLK)
 387        await module.advanced_timing.sma.output.set_p0rxclk()
 388        await module.advanced_timing.sma.output.set(sma_out=enums.SMAOutputFunction.P0RXCLK2MHZ)
 389        await module.advanced_timing.sma.output.set_p0rxclk2mhz()
 390        await module.advanced_timing.sma.output.set(sma_out=enums.SMAOutputFunction.P0SOF)
 391        await module.advanced_timing.sma.output.set_p0sof()
 392        await module.advanced_timing.sma.output.set(sma_out=enums.SMAOutputFunction.P1RXCLK)
 393        await module.advanced_timing.sma.output.set_p1rxclk()
 394        await module.advanced_timing.sma.output.set(sma_out=enums.SMAOutputFunction.P1RXCLK2MHZ)
 395        await module.advanced_timing.sma.output.set_p1rxclk2mhz()
 396        await module.advanced_timing.sma.output.set(sma_out=enums.SMAOutputFunction.P1SOF)
 397        await module.advanced_timing.sma.output.set_p1sof()
 398        await module.advanced_timing.sma.output.set(sma_out=enums.SMAOutputFunction.PASSTHROUGH)
 399        await module.advanced_timing.sma.output.set_passthrough()
 400        await module.advanced_timing.sma.output.set(sma_out=enums.SMAOutputFunction.REF10MHZ)
 401        await module.advanced_timing.sma.output.set_ref10mhz()
 402        await module.advanced_timing.sma.output.set(sma_out=enums.SMAOutputFunction.REF125MHZ)
 403        await module.advanced_timing.sma.output.set_ref125mhz()
 404        await module.advanced_timing.sma.output.set(sma_out=enums.SMAOutputFunction.REF156MHZ)
 405        await module.advanced_timing.sma.output.set_ref156mhz()
 406        await module.advanced_timing.sma.output.set(sma_out=enums.SMAOutputFunction.REF2MHZ)
 407        await module.advanced_timing.sma.output.set_ref2mhz()
 408        await module.advanced_timing.sma.output.set(sma_out=enums.SMAOutputFunction.TS_PPS)
 409        await module.advanced_timing.sma.output.set_ts_pps()
 410
 411        resp = await module.advanced_timing.sma.output.get()
 412        resp.sma_out
 413
 414    # Local Clock Adjust
 415    await module.timing.clock_local_adjust.set(ppb=10)
 416    
 417    resp = await module.timing.clock_local_adjust.get()
 418    resp.ppb
 419
 420    # Clock Sync Status
 421    resp = await module.timing.clock_sync_status.get()
 422    resp.m_clock_diff
 423    resp.m_correction
 424    resp.m_is_steady_state
 425    resp.m_tune_is_increase
 426    resp.m_tune_value
 427
 428    # Clock Source
 429    await module.timing.source.set(source=enums.TimingSource.CHASSIS)
 430    await module.timing.source.set_chassis()
 431    await module.timing.source.set(source=enums.TimingSource.EXTERNAL)
 432    await module.timing.source.set_external()
 433    await module.timing.source.set(source=enums.TimingSource.MODULE)
 434    await module.timing.source.set_module()
 435
 436    resp = await module.timing.source.get()
 437    resp.source
 438
 439    # Clock PPM Sweep Configuration
 440    FREYA_MODULES = (modules.MFreya800G4S1P_a, modules.MFreya800G4S1P_b, modules.MFreya800G4S1POSFP_a, modules.MFreya800G4S1POSFP_b)
 441    if isinstance(module, FREYA_MODULES):
 442        await module.clock_sweep.config.set(mode=enums.PPMSweepMode.OFF, ppb_step=10, step_delay=10, max_ppb=10, loops=1)
 443        await module.clock_sweep.config.set(mode=enums.PPMSweepMode.TRIANGLE, ppb_step=10, step_delay=10, max_ppb=10, loops=1)
 444
 445        resp = await module.clock_sweep.config.get()
 446        resp.mode
 447        resp.ppb_step
 448        resp.step_delay
 449        resp.max_ppb
 450        resp.loops
 451
 452    # Clock PPM Sweep Status
 453    if isinstance(module, FREYA_MODULES):
 454        resp = await module.clock_sweep.status.get()
 455        resp.curr_step
 456        resp.curr_sweep
 457        resp.max_steps
 458
 459    
 460    # Chimera - Bypass Mode
 461    if isinstance(module, modules.ModuleChimera):
 462        await module.emulator_bypass_mode.set(on_off=enums.OnOff.ON)
 463        await module.emulator_bypass_mode.set_on()
 464        await module.emulator_bypass_mode.set(on_off=enums.OnOff.OFF)
 465        await module.emulator_bypass_mode.set_off()
 466
 467        resp = await module.emulator_bypass_mode.get()
 468        resp.on_off
 469
 470    # Chimera - Latency Mode
 471    if isinstance(module, modules.ModuleChimera):
 472        await module.latency_mode.set(mode=enums.ImpairmentLatencyMode.NORMAL)
 473        await module.latency_mode.set_normal()
 474        await module.latency_mode.set(mode=enums.ImpairmentLatencyMode.EXTENDED)
 475        await module.latency_mode.set_extended()
 476
 477        resp = await module.latency_mode.get()
 478        resp.mode
 479
 480    # Chimera - TX Clock Source
 481    if isinstance(module, modules.ModuleChimera):
 482        await module.tx_clock.source.set(tx_clock=enums.TXClockSource.MODULELOCALCLOCK)
 483        await module.tx_clock.source.set_modulelocalclock()
 484        await module.tx_clock.source.set(tx_clock=enums.TXClockSource.P0RXCLK)
 485        await module.tx_clock.source.set_p0rxclk()
 486        await module.tx_clock.source.set(tx_clock=enums.TXClockSource.P1RXCLK)
 487        await module.tx_clock.source.set_p1rxclk()
 488        await module.tx_clock.source.set(tx_clock=enums.TXClockSource.P2RXCLK)
 489        await module.tx_clock.source.set_p2rxclk()
 490        await module.tx_clock.source.set(tx_clock=enums.TXClockSource.P3RXCLK)
 491        await module.tx_clock.source.set_p3rxclk()
 492        await module.tx_clock.source.set(tx_clock=enums.TXClockSource.P4RXCLK)
 493        await module.tx_clock.source.set_p4rxclk()
 494        await module.tx_clock.source.set(tx_clock=enums.TXClockSource.P5RXCLK)
 495        await module.tx_clock.source.set_p5rxclk()
 496        await module.tx_clock.source.set(tx_clock=enums.TXClockSource.P6RXCLK)
 497        await module.tx_clock.source.set_p6rxclk()
 498        await module.tx_clock.source.set(tx_clock=enums.TXClockSource.P7RXCLK)
 499        await module.tx_clock.source.set_p7rxclk()
 500
 501        resp = await module.tx_clock.source.get()
 502        resp.tx_clock
 503
 504    # Chimera - TX Clock Status
 505    if isinstance(module, modules.ModuleChimera):
 506        resp = await module.tx_clock.status.get()
 507        resp.status
 508    
 509# endregion
 510
 511# region Port
 512    #################################################
 513    #                    Port                       #
 514    #################################################
 515
 516    port = module.ports.obtain(0)
 517
 518    # Reset
 519    await port.reset.set()
 520
 521    if isinstance(port, ports.PortChimera):
 522        return
 523
 524    # Flash
 525    await port.flash.set(on_off=enums.OnOff.ON)
 526    await port.flash.set_on()
 527    await port.flash.set(on_off=enums.OnOff.OFF)
 528    await port.flash.set_off()
 529
 530    resp = await port.flash.get()
 531    resp.on_off
 532
 533
 534    # MAC Address
 535    await port.net_config.mac_address.set(mac_address=Hex("000000000000"))
 536    
 537    resp = await port.net_config.mac_address.get()
 538    resp.mac_address
 539
 540    # IPv4 Address
 541    await port.net_config.ipv4.address.set(
 542        ipv4_address=ipaddress.IPv4Address("10.10.10.10"),
 543        subnet_mask=ipaddress.IPv4Address("255.255.255.0"),
 544        gateway=ipaddress.IPv4Address("10.10.1.1"),
 545        wild=ipaddress.IPv4Address("0.0.0.0"))
 546    
 547    resp = await port.net_config.ipv4.address.get()
 548    resp.ipv4_address
 549    resp.gateway
 550    resp.subnet_mask
 551    resp.wild
 552
 553    # ARP Reply
 554    await port.net_config.ipv4.arp_reply.set(on_off=enums.OnOff.ON)
 555    await port.net_config.ipv4.arp_reply.set(on_off=enums.OnOff.OFF)
 556    
 557    resp = await port.net_config.ipv4.arp_reply.get()
 558    resp.on_off
 559
 560    # Ping Reply
 561    await port.net_config.ipv4.ping_reply.set(on_off=enums.OnOff.ON)
 562    await port.net_config.ipv4.ping_reply.set(on_off=enums.OnOff.OFF)
 563
 564    resp = await port.net_config.ipv4.ping_reply.get()
 565    resp.on_off
 566
 567    # IPv6 Address
 568    await port.net_config.ipv6.address.set(
 569        ipv6_address=ipaddress.IPv6Address("fc00::0002"),
 570        gateway=ipaddress.IPv6Address("fc00::0001"),
 571        subnet_prefix=7,
 572        wildcard_prefix=0
 573    )
 574    
 575    resp = await port.net_config.ipv6.address.get()
 576    resp.ipv6_address
 577    resp.gateway
 578    resp.subnet_prefix
 579    resp.wildcard_prefix
 580
 581    # NDP Reply
 582    await port.net_config.ipv6.arp_reply.set(on_off=enums.OnOff.ON)
 583    await port.net_config.ipv6.arp_reply.set(on_off=enums.OnOff.OFF)
 584
 585    resp = await port.net_config.ipv6.arp_reply.get()
 586    resp.on_off
 587
 588    # IPv6 Ping Reply
 589    await port.net_config.ipv6.ping_reply.set(on_off=enums.OnOff.ON)
 590    await port.net_config.ipv6.ping_reply.set(on_off=enums.OnOff.OFF)
 591
 592    resp = await port.net_config.ipv6.ping_reply.get()
 593    resp.on_off
 594
 595    # ARP Table, https://github.com/xenanetworks/open-automation-script-library/tree/main/ip_streams_arp_table
 596    await port.arp_rx_table.set(chunks=[])
 597    
 598    resp = await port.arp_rx_table.get()
 599    resp.chunks
 600
 601    # NDP Table, https://github.com/xenanetworks/open-automation-script-library/tree/main/ip_streams_arp_table
 602    await port.ndp_rx_table.set(chunks=[])
 603    
 604    resp = await port.ndp_rx_table.get()
 605    resp.chunks
 606
 607    # Capture Trigger Criteria, https://github.com/xenanetworks/open-automation-script-library/blob/main/packet_capture/packet_capture.py
 608    await port.capturer.trigger.set(start_criteria=enums.StartTrigger.ON, start_criteria_filter=0, stop_criteria=enums.StopTrigger.FULL, stop_criteria_filter=0)
 609    await port.capturer.trigger.set(start_criteria=enums.StartTrigger.ON, start_criteria_filter=0, stop_criteria=enums.StopTrigger.USERSTOP, stop_criteria_filter=0)
 610    await port.capturer.trigger.set(start_criteria=enums.StartTrigger.FCSERR, start_criteria_filter=0, stop_criteria=enums.StopTrigger.FCSERR, stop_criteria_filter=0)
 611    await port.capturer.trigger.set(start_criteria=enums.StartTrigger.PLDERR, start_criteria_filter=0, stop_criteria=enums.StopTrigger.PLDERR, stop_criteria_filter=0)
 612    await port.capturer.trigger.set(start_criteria=enums.StartTrigger.FILTER, start_criteria_filter=0, stop_criteria=enums.StopTrigger.FILTER, stop_criteria_filter=0)
 613
 614    resp = await port.capturer.trigger.get()
 615    resp.start_criteria
 616    resp.start_criteria_filter
 617    resp.stop_criteria
 618    resp.stop_criteria_filter
 619
 620    # Capture - Frame to Keep, https://github.com/xenanetworks/open-automation-script-library/blob/main/packet_capture/packet_capture.py
 621    await port.capturer.keep.set(kind=enums.PacketType.ALL, index=0, byte_count=0)
 622    await port.capturer.keep.set_all()
 623    await port.capturer.keep.set(kind=enums.PacketType.FCSERR, index=0, byte_count=0)
 624    await port.capturer.keep.set_fcserr()
 625    await port.capturer.keep.set(kind=enums.PacketType.FILTER, index=0, byte_count=0)
 626    await port.capturer.keep.set_filter()
 627    await port.capturer.keep.set(kind=enums.PacketType.NOTPLD, index=0, byte_count=0)
 628    await port.capturer.keep.set_notpld()
 629    await port.capturer.keep.set(kind=enums.PacketType.PLDERR, index=0, byte_count=0)
 630    await port.capturer.keep.set_plderr()
 631    await port.capturer.keep.set(kind=enums.PacketType.TPLD, index=0, byte_count=0)
 632    await port.capturer.keep.set_tpld()
 633
 634    resp = await port.capturer.keep.get()
 635    resp.kind
 636    resp.index
 637    resp.byte_count
 638
 639    # Capture - State
 640    await port.capturer.state.set(on_off=enums.StartOrStop.START)
 641    await port.capturer.state.set_start()
 642    await port.capturer.state.set(on_off=enums.StartOrStop.STOP)
 643    await port.capturer.state.set_stop()
 644
 645    resp = await port.capturer.state.get()
 646    resp.on_off
 647
 648    # Capture - Statistics
 649    resp = await port.capturer.stats.get()
 650    resp.start_time
 651    resp.status
 652
 653    # Read Captured Packets
 654    pkts = await port.capturer.obtain_captured()
 655    for i in range(len(pkts)):
 656        resp = await pkts[i].packet.get()
 657        print(f"Packet content # {i}: {resp.hex_data}")
 658
 659    # Inter-frame Gap
 660    await port.interframe_gap.set(min_byte_count=20)
 661
 662    resp = await port.interframe_gap.get()
 663    resp.min_byte_count
 664
 665    # PAUSE Frames
 666    await port.pause.set(on_off=enums.OnOff.ON)
 667    await port.pause.set_on()
 668    await port.pause.set(on_off=enums.OnOff.OFF)
 669    await port.pause.set_off()
 670
 671    resp = await port.pause.get()
 672    resp.on_off
 673
 674    # Auto-Train
 675    await port.autotrain.set(interval=1)
 676
 677    resp = await port.autotrain.get()
 678    resp.interval
 679
 680    # Gap Monitor
 681    await port.gap_monitor.set(start=100, stop=10)
 682    
 683    resp = await port.gap_monitor.get()
 684    resp.start
 685    resp.stop
 686
 687    # Priority Flow Control
 688    await port.pfc_enable.set(
 689        cos_0=enums.OnOff.ON,
 690        cos_1=enums.OnOff.OFF,
 691        cos_2=enums.OnOff.ON,
 692        cos_3=enums.OnOff.OFF,
 693        cos_4=enums.OnOff.ON,
 694        cos_5=enums.OnOff.OFF,
 695        cos_6=enums.OnOff.ON,
 696        cos_7=enums.OnOff.OFF,
 697        )
 698    
 699    resp = await port.pfc_enable.get()
 700    resp.cos_0
 701    resp.cos_1
 702    resp.cos_2
 703    resp.cos_3
 704    resp.cos_4
 705    resp.cos_5
 706    resp.cos_6
 707    resp.cos_7
 708
 709    # Loopback
 710    await port.loop_back.set(mode=enums.LoopbackMode.L1RX2TX)
 711    await port.loop_back.set_l1rx2tx()
 712    await port.loop_back.set(mode=enums.LoopbackMode.L2RX2TX)
 713    await port.loop_back.set_l2rx2tx()
 714    await port.loop_back.set(mode=enums.LoopbackMode.L3RX2TX)
 715    await port.loop_back.set_l3rx2tx()
 716    await port.loop_back.set(mode=enums.LoopbackMode.NONE)
 717    await port.loop_back.set_none()
 718    await port.loop_back.set(mode=enums.LoopbackMode.PORT2PORT)
 719    await port.loop_back.set_port2port()
 720    await port.loop_back.set(mode=enums.LoopbackMode.TXOFF2RX)
 721    await port.loop_back.set_txoff2rx()
 722    await port.loop_back.set(mode=enums.LoopbackMode.TXON2RX)
 723    await port.loop_back.set_txon2rx()
 724
 725    resp = await port.loop_back.get()
 726    resp.mode
 727
 728    # BRR Mode
 729    await port.brr_mode.set(mode=enums.BRRMode.MASTER)
 730    await port.brr_mode.set_master()
 731    await port.brr_mode.set(mode=enums.BRRMode.SLAVE)
 732    await port.brr_mode.set_slave()
 733
 734    resp = await port.brr_mode.get()
 735    resp.mode
 736
 737    # MDI/MDIX Mode
 738    await port.mdix_mode.set(mode=enums.MDIXMode.AUTO)
 739    await port.mdix_mode.set_auto()
 740    await port.mdix_mode.set(mode=enums.MDIXMode.MDI)
 741    await port.mdix_mode.set_mdi()
 742    await port.mdix_mode.set(mode=enums.MDIXMode.MDIX)
 743    await port.mdix_mode.set_mdix()
 744
 745    resp = await port.mdix_mode.get()
 746    resp.mode
 747
 748    # EEE- Capabilities
 749    resp = await port.eee.capabilities.get()
 750    resp.eee_capabilities
 751
 752    # EEE - Partner Capabilities
 753    resp = await port.eee.partner_capabilities.get()
 754    resp.cap_1000base_t
 755    resp.cap_100base_kx
 756    resp.cap_10gbase_kr
 757    resp.cap_10gbase_kx4
 758    resp.cap_10gbase_t
 759
 760    # EEE - Control
 761    await port.eee.enable.set(on_off=enums.OnOff.OFF)
 762    await port.eee.enable.set_off()
 763    await port.eee.enable.set(on_off=enums.OnOff.ON)
 764    await port.eee.enable.set_on()
 765
 766    resp = await port.eee.enable.get()
 767    resp.on_off
 768
 769    # EEE - Low Power TX Mode
 770    await port.eee.mode.set(on_off=enums.OnOff.ON)
 771    await port.eee.mode.set_off()
 772    await port.eee.mode.set(on_off=enums.OnOff.OFF)
 773    await port.eee.mode.set_on()
 774
 775    resp = await port.eee.mode.get()
 776    resp.on_off
 777
 778    # EEE - RX Power
 779    resp = await port.eee.rx_power.get()
 780    resp.channel_a
 781    resp.channel_b
 782    resp.channel_c
 783    resp.channel_d
 784
 785    # EEE - SNR Margin
 786    resp = await port.eee.snr_margin.get()
 787    resp.channel_a
 788    resp.channel_b
 789    resp.channel_c
 790    resp.channel_d
 791
 792    # EEE - Status
 793    resp = await port.eee.status.get()
 794    resp.link_up
 795    resp.rxc
 796    resp.rxh
 797    resp.txc
 798    resp.txh
 799
 800    # Fault - Signaling
 801    await port.fault.signaling.set(fault_signaling=enums.FaultSignaling.DISABLED)
 802    await port.fault.signaling.set_disabled()
 803    await port.fault.signaling.set(fault_signaling=enums.FaultSignaling.FORCE_LOCAL)
 804    await port.fault.signaling.set_force_local()
 805    await port.fault.signaling.set(fault_signaling=enums.FaultSignaling.FORCE_REMOTE)
 806    await port.fault.signaling.set_force_remote()
 807    await port.fault.signaling.set(fault_signaling=enums.FaultSignaling.NORMAL)
 808    await port.fault.signaling.set_normal()
 809
 810    resp = await port.fault.signaling.get()
 811    resp.fault_signaling
 812
 813    # Fault - Status
 814    resp = await port.fault.status.get()
 815    resp.local_fault_status
 816    resp.remote_fault_status
 817
 818    # Interface
 819    resp = await port.interface.get()
 820    resp.interface
 821
 822    # Description
 823    await port.comment.set(comment="description")
 824    
 825    resp = await port.comment.get()
 826    resp.comment
 827
 828    # Status
 829    resp = await port.status.get()
 830    resp.optical_power
 831
 832    # Latency Mode
 833    if not isinstance(port, ports.PortChimera):
 834        await port.latency_config.mode.set(mode=enums.LatencyMode.FIRST2FIRST)
 835        await port.latency_config.mode.set_first2first()
 836        await port.latency_config.mode.set(mode=enums.LatencyMode.FIRST2LAST)
 837        await port.latency_config.mode.set_first2last()
 838        await port.latency_config.mode.set(mode=enums.LatencyMode.LAST2FIRST)
 839        await port.latency_config.mode.set_last2first()
 840        await port.latency_config.mode.set(mode=enums.LatencyMode.LAST2LAST)
 841        await port.latency_config.mode.set_last2last()
 842
 843        resp = await port.latency_config.mode.get()
 844        resp.mode
 845
 846    # Latency Offset
 847    if not isinstance(port, ports.PortChimera):
 848        await port.latency_config.offset.set(offset=5)
 849
 850        resp = await port.latency_config.offset.get()
 851        resp.offset
 852    
 853    # Link Flap - Control
 854    await port.pcs_pma.link_flap.enable.set(on_off=enums.OnOff.ON)
 855    await port.pcs_pma.link_flap.enable.set_on()
 856    await port.pcs_pma.link_flap.enable.set(on_off=enums.OnOff.OFF)
 857    await port.pcs_pma.link_flap.enable.set_off()
 858
 859    resp = await port.pcs_pma.link_flap.enable.get()
 860    resp.on_off
 861
 862    # Link Flap - Configuration
 863    await port.pcs_pma.link_flap.params.set(duration=10, period=20, repetition=0)
 864    
 865    resp = await port.pcs_pma.link_flap.params.get()
 866    resp.duration
 867    resp.period
 868    resp.repetition
 869
 870    # Multicast Mode
 871    await port.multicast.mode.set(
 872        ipv4_multicast_addresses=[],
 873        operation=enums.MulticastOperation.JOIN,
 874        second_count=10)
 875    await port.multicast.mode.set(
 876        ipv4_multicast_addresses=[],
 877        operation=enums.MulticastOperation.JOIN,
 878        second_count=10)
 879    await port.multicast.mode.set(
 880        ipv4_multicast_addresses=[],
 881        operation=enums.MulticastOperation.LEAVE,
 882        second_count=10)
 883    await port.multicast.mode.set(
 884        ipv4_multicast_addresses=[],
 885        operation=enums.MulticastOperation.OFF,
 886        second_count=10)
 887    await port.multicast.mode.set(
 888        ipv4_multicast_addresses=[],
 889        operation=enums.MulticastOperation.ON,
 890        second_count=10)
 891
 892    resp = await port.multicast.mode.get()
 893    resp.ipv4_multicast_addresses
 894    resp.operation
 895    resp.second_count
 896
 897    # Multicast Extended Mode
 898    await port.multicast.mode_extended.set(
 899        ipv4_multicast_addresses=[],
 900        operation=enums.MulticastExtOperation.EXCLUDE,
 901        second_count=10,
 902        igmp_version=enums.IGMPVersion.IGMPV3
 903    )
 904    await port.multicast.mode_extended.set(
 905        ipv4_multicast_addresses=[],
 906        operation=enums.MulticastExtOperation.INCLUDE,
 907        second_count=10,
 908        igmp_version=enums.IGMPVersion.IGMPV3
 909    )
 910    await port.multicast.mode_extended.set(
 911        ipv4_multicast_addresses=[],
 912        operation=enums.MulticastExtOperation.JOIN,
 913        second_count=10,
 914        igmp_version=enums.IGMPVersion.IGMPV2
 915    )
 916    await port.multicast.mode_extended.set(
 917        ipv4_multicast_addresses=[],
 918        operation=enums.MulticastExtOperation.LEAVE,
 919        second_count=10,
 920        igmp_version=enums.IGMPVersion.IGMPV2
 921    )
 922    await port.multicast.mode_extended.set(
 923        ipv4_multicast_addresses=[],
 924        operation=enums.MulticastExtOperation.LEAVE_TO_ALL,
 925        second_count=10,
 926        igmp_version=enums.IGMPVersion.IGMPV2
 927    )
 928    await port.multicast.mode_extended.set(
 929        ipv4_multicast_addresses=[],
 930        operation=enums.MulticastExtOperation.GENERAL_QUERY,
 931        second_count=10,
 932        igmp_version=enums.IGMPVersion.IGMPV2
 933    )
 934    await port.multicast.mode_extended.set(
 935        ipv4_multicast_addresses=[],
 936        operation=enums.MulticastExtOperation.GROUP_QUERY,
 937        second_count=10,
 938        igmp_version=enums.IGMPVersion.IGMPV2
 939    )
 940    await port.multicast.mode_extended.set(
 941        ipv4_multicast_addresses=[],
 942        operation=enums.MulticastExtOperation.ON,
 943        second_count=10,
 944        igmp_version=enums.IGMPVersion.IGMPV2
 945    )
 946    await port.multicast.mode_extended.set(
 947        ipv4_multicast_addresses=[],
 948        operation=enums.MulticastExtOperation.OFF,
 949        second_count=10,
 950        igmp_version=enums.IGMPVersion.IGMPV2
 951    )
 952
 953    resp = await port.multicast.mode_extended.get()
 954    resp.ipv4_multicast_addresses
 955    resp.operation
 956    resp.second_count
 957    resp.igmp_version
 958
 959    # Multicast Source List
 960    await port.multicast.source_list.set(ipv4_addresses=[])
 961    
 962    resp = await port.multicast.source_list.get()
 963    resp.ipv4_addresses
 964
 965
 966    # Multicast Header
 967    await port.multicast.header.set(header_count=1, header_format=enums.MulticastHeaderFormat.VLAN, tag=10, pcp=0, dei=0)
 968    await port.multicast.header.set(header_count=0, header_format=enums.MulticastHeaderFormat.NOHDR, tag=10, pcp=0, dei=0)
 969    
 970    resp = await port.multicast.header.get()
 971    resp.header_count
 972    resp.header_format
 973    resp.tag
 974    resp.pcp
 975    resp.dei
 976
 977    # Random Seed
 978    await port.random_seed.set(seed=1)
 979
 980    resp = await port.random_seed.get()
 981    resp.seed
 982
 983    # Checksum Offset
 984    await port.checksum.set(offset=14)
 985
 986    resp = await port.checksum.get()
 987    resp.offset
 988
 989    # Maximum Header Length
 990    await port.max_header_length.set(max_header_length=56)
 991
 992    resp = await port.max_header_length.get()
 993    resp.max_header_length
 994
 995    # MIX Weights
 996    await port.mix.weights.set(
 997        weight_56_bytes:=0,
 998        weight_60_bytes:=0,
 999        weight_64_bytes:=70,
1000        weight_70_bytes:=15,
1001        weight_78_bytes:=15,
1002        weight_92_bytes:=0,
1003        weight_256_bytes:=0,
1004        weight_496_bytes:=0,
1005        weight_512_bytes:=0,
1006        weight_570_bytes:=0,
1007        weight_576_bytes:=0,
1008        weight_594_bytes:=0,
1009        weight_1438_bytes:=0,
1010        weight_1518_bytes:=0,
1011        weight_9216_bytes:=0,
1012        weight_16360_bytes:=0)
1013    
1014    resp = await port.mix.weights.get()
1015    resp.weight_56_bytes
1016    resp.weight_60_bytes
1017    resp.weight_64_bytes
1018    resp.weight_70_bytes
1019    resp.weight_78_bytes
1020    resp.weight_92_bytes
1021    resp.weight_256_bytes
1022    resp.weight_496_bytes
1023    resp.weight_512_bytes
1024    resp.weight_570_bytes
1025    resp.weight_576_bytes
1026    resp.weight_594_bytes
1027    resp.weight_1438_bytes
1028    resp.weight_1518_bytes
1029    resp.weight_9216_bytes
1030    resp.weight_16360_bytes
1031
1032    # MIX Lengths
1033    await port.mix.lengths[0].set(frame_size=56)
1034    await port.mix.lengths[1].set(frame_size=60)
1035    await port.mix.lengths[14].set(frame_size=9216)
1036    await port.mix.lengths[15].set(frame_size=16360)
1037
1038    resp = await port.mix.lengths[0].get()
1039    resp.frame_size
1040    resp = await port.mix.lengths[1].get()
1041    resp.frame_size
1042    resp = await port.mix.lengths[14].get()
1043    resp.frame_size
1044    resp = await port.mix.lengths[15].get()
1045    resp.frame_size
1046
1047    # Payload Mode
1048    await port.payload_mode.set(mode=enums.PayloadMode.NORMAL)
1049    await port.payload_mode.set_normal()
1050    await port.payload_mode.set(mode=enums.PayloadMode.EXTPL)
1051    await port.payload_mode.set_extpl()
1052    await port.payload_mode.set(mode=enums.PayloadMode.CDF)
1053    await port.payload_mode.set_cdf()
1054
1055    resp = await port.payload_mode.get()
1056    resp.mode
1057
1058    # RX Preamble Insert
1059    await port.preamble.rx_insert.set(on_off=enums.OnOff.ON)
1060    await port.preamble.rx_insert.set(on_off=enums.OnOff.OFF)
1061
1062    resp = await port.preamble.rx_insert.get()
1063    resp.on_off
1064
1065    # TX Preamble Removal   
1066    await port.preamble.tx_remove.set(on_off=enums.OnOff.ON)
1067    await port.preamble.tx_remove.set(on_off=enums.OnOff.OFF)
1068
1069    resp = await port.preamble.tx_remove.get()
1070    resp.on_off
1071
1072    # Reservation
1073    await port.reservation.set(operation=enums.ReservedAction.RELEASE)
1074    await port.reservation.set_release()
1075    await port.reservation.set(operation=enums.ReservedAction.RELINQUISH)
1076    await port.reservation.set_relinquish()
1077    await port.reservation.set(operation=enums.ReservedAction.RESERVE)
1078    await port.reservation.set_reserve()
1079
1080    resp = await port.reservation.get()
1081    resp.status
1082    
1083    # Reserved By
1084    resp = await port.reserved_by.get()
1085    resp.username
1086
1087    # Runt - RX Length
1088    await port.runt.rx_length.set(runt_length=40)
1089    
1090    resp = await port.runt.rx_length.get()
1091    resp.runt_length
1092
1093    # Runt - TX Length
1094    await port.runt.tx_length.set(runt_length=40)
1095
1096    resp = await port.runt.tx_length.get()
1097    resp.runt_length
1098
1099    # Runt - Length Error
1100    resp = await port.runt.has_length_errors.get()
1101    resp.status
1102
1103    # Speed Mode Selection
1104    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.AUTO)
1105    await port.speed.mode.selection.set_auto()
1106    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F10M)
1107    await port.speed.mode.selection.set_f10m()
1108    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F10M100M)
1109    await port.speed.mode.selection.set_f10m100m()
1110    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F10MHDX)
1111    await port.speed.mode.selection.set_f10mhdx()
1112    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F100M)
1113    await port.speed.mode.selection.set_f100m()
1114    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F100M1G)
1115    await port.speed.mode.selection.set_f100m1g()
1116    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F100M1G10G)
1117    await port.speed.mode.selection.set_f100m1g10g()
1118    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F100M1G2500M)
1119    await port.speed.mode.selection.set_f100m1g2500m()
1120    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F100MHDX)
1121    await port.speed.mode.selection.set_f100mhdx()
1122    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F1G)
1123    await port.speed.mode.selection.set_f1g()
1124    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F2500M)
1125    await port.speed.mode.selection.set_f2500m()
1126    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F5G)
1127    await port.speed.mode.selection.set_f5g()
1128    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F10G)
1129    await port.speed.mode.selection.set_f10g()
1130    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F40G)
1131    await port.speed.mode.selection.set_f40g()
1132    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F100G)
1133    await port.speed.mode.selection.set_f100g()
1134    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.UNKNOWN)
1135    await port.speed.mode.selection.set_unknown()
1136    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F200G)
1137    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F400G)
1138    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F800G)
1139    await port.speed.mode.selection.set(mode=enums.PortSpeedMode.F1600G)
1140
1141    resp = await port.speed.mode.selection.get()
1142    resp.mode
1143
1144    # Supported Speed Modes
1145    resp = await port.speed.mode.supported.get()
1146    resp.auto
1147    resp.f10M
1148    resp.f100M
1149    resp.f1G
1150    resp.f10G
1151    resp.f40G
1152    resp.f100G
1153    resp.f10MHDX
1154    resp.f100MHDX
1155    resp.f10M100M
1156    resp.f100M1G
1157    resp.f100M1G10G
1158    resp.f2500M
1159    resp.f5G
1160    resp.f100M1G2500M
1161    resp.f25G
1162    resp.f50G
1163    resp.f200G
1164    resp.f400G
1165    resp.f800G
1166    resp.f1600G
1167
1168    # Current Speed
1169    resp = await port.speed.current.get()
1170    resp.port_speed
1171
1172    # Speed Reduction
1173    await port.speed.reduction.set(ppm=100)
1174    
1175    resp = await port.speed.reduction.get()
1176    resp.ppm
1177
1178    # Sync Status
1179    resp = await port.sync_status.get()
1180    resp.sync_status == enums.SyncStatus.IN_SYNC
1181    resp.sync_status == enums.SyncStatus.NO_SYNC
1182
1183    # Transceiver Status
1184    resp = await port.tcvr_status.get()
1185    resp.rx_loss_lane_0
1186    resp.rx_loss_lane_1
1187    resp.rx_loss_lane_2
1188    resp.rx_loss_lane_3
1189
1190    # Transceiver Read & Write
1191    my_int = 1234
1192    await port.transceiver.access_rw(page_address=0, register_address=0).set(value=hex(my_int)[2:])
1193    
1194    resp = await port.transceiver.access_rw(page_address=0, register_address=0).get()
1195    resp.value
1196    my_int_resp = int(resp.value, 16)
1197    print(f"Returned value: {my_int_resp}")
1198
1199    # Transceiver Sequential Read & Write
1200    await port.transceiver.access_rw_seq(page_address=0, register_address=0, byte_count=4).set(value=Hex("00FF00FF"))
1201    
1202    resp = await port.transceiver.access_rw_seq(page_address=0, register_address=0, byte_count=4).get()
1203    resp.value
1204
1205    # Transceiver Sequential Read & Write (banked)
1206    await port.transceiver.access_rw_seq_bank(bank_address=1, page_address=0x9F, register_address=200, byte_count=1).set(value=Hex("00"))
1207    
1208    resp = await port.transceiver.access_rw_seq_bank(bank_address=1, page_address=0x9F, register_address=200, byte_count=1).get()
1209    resp.value
1210
1211    # Transceiver MII
1212    await port.transceiver.access_mii(register_address=0).set(value=Hex("00"))
1213    
1214    resp = await port.transceiver.access_mii(register_address=0).get()
1215    resp.value
1216
1217    # Transceiver Temperature
1218    resp = await port.transceiver.access_temperature().get()
1219    resp.integral_part
1220    resp.fractional_part
1221
1222    # Transceiver RX Laser Power
1223    resp = await port.pcs_pma.transceiver.rx_laser_power.get()
1224    resp.nanowatts
1225
1226    # Transceiver TX Laser Power
1227    resp = await port.pcs_pma.transceiver.tx_laser_power.get()
1228    resp.nanowatts
1229
1230    # Traffic Control - Rate Percent
1231    await port.rate.fraction.set(port_rate_ppm=1_000_000)
1232    
1233    resp = await port.rate.fraction.get()
1234    resp.port_rate_ppm
1235
1236    # Traffic Control - Rate L2 Bits Per Second
1237    await port.rate.l2_bps.set(port_rate_bps=1_000_000)
1238
1239    resp = await port.rate.l2_bps.get()
1240    resp.port_rate_bps
1241
1242    # Traffic Control - Rate Frames Per Second
1243    await port.rate.pps.set(port_rate_pps=10_000)
1244    
1245    resp = await port.rate.pps.get()
1246    resp.port_rate_pps
1247
1248    # Traffic Control - Start and Stop
1249    await port.traffic.state.set(on_off=enums.StartOrStop.START)
1250    await port.traffic.state.set_start()
1251    await port.traffic.state.set(on_off=enums.StartOrStop.STOP)
1252    await port.traffic.state.set_stop()
1253
1254    resp = await port.traffic.state.get()
1255    resp.on_off
1256
1257    # Traffic Control - Traffic Error
1258    resp = await port.traffic.error.get()
1259    resp.error
1260
1261    # Traffic Control - Single Frame TX
1262    await port.tx_single_pkt.send.set(hex_data=Hex("00000000000102030405060800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"))
1263
1264    # Traffic Control - Single Frame Time
1265    resp = await port.tx_single_pkt.time.get()
1266    resp.nanoseconds
1267
1268    # TPLD Mode
1269    await port.tpld_mode.set(mode=enums.TPLDMode.NORMAL)
1270    await port.tpld_mode.set_normal()
1271    await port.tpld_mode.set(mode=enums.TPLDMode.MICRO)
1272    await port.tpld_mode.set_micro()
1273
1274    resp = await port.tpld_mode.get()
1275    resp.mode
1276
1277    # TX Mode
1278    await port.tx_config.mode.set(mode=enums.TXMode.NORMAL)
1279    await port.tx_config.mode.set_normal()
1280    await port.tx_config.mode.set(mode=enums.TXMode.BURST)
1281    await port.tx_config.mode.set_burst()
1282    await port.tx_config.mode.set(mode=enums.TXMode.SEQUENTIAL)
1283    await port.tx_config.mode.set_sequential()
1284    await port.tx_config.mode.set(mode=enums.TXMode.STRICTUNIFORM)
1285    await port.tx_config.mode.set_strictuniform()
1286
1287    resp = await port.tx_config.mode.get()
1288    resp.mode
1289
1290    # Burst Period
1291    await port.tx_config.burst_period.set(burst_period=100)
1292    
1293    resp = await port.tx_config.burst_period.get()
1294    resp.burst_period
1295
1296    # TX Delay
1297    await port.tx_config.delay.set(delay_val=100)
1298
1299    resp = await port.tx_config.delay.get()
1300    resp.delay_val
1301
1302    # TX Enable
1303    await port.tx_config.enable.set(on_off=enums.OnOff.ON)
1304    await port.tx_config.enable.set(on_off=enums.OnOff.OFF)
1305    
1306    resp = await port.tx_config.enable.get()
1307    resp.on_off
1308
1309    # Packet Limit
1310    await port.tx_config.packet_limit.set(packet_count_limit=1_000_000)
1311    
1312    resp = await port.tx_config.packet_limit.get()
1313    resp.packet_count_limit
1314
1315    # Time Limit
1316    await port.tx_config.time_limit.set(microseconds=1_000_000)
1317    
1318    resp = await port.tx_config.time_limit.get()
1319    resp.microseconds
1320
1321    # TX Time Elapsed
1322    resp = await port.tx_config.time.get()
1323    resp.microseconds
1324
1325    # Prepare TX
1326    await port.tx_config.prepare.set()
1327
1328    # Dynamic Traffic Rate
1329    await port.dynamic.set(on_off=enums.OnOff.OFF)
1330    await port.dynamic.set_off()
1331    await port.dynamic.set(on_off=enums.OnOff.ON)
1332    await port.dynamic.set_on()
1333    
1334    resp = await port.dynamic.get()
1335    resp.on_off
1336
1337    await port.uat.mode.set(mode=enums.OnOff.ON, delay=500)
1338    await port.uat.mode.set(mode=enums.OnOff.OFF, delay=500)
1339    await port.uat.frame_loss_ratio.get()
1340
1341    #################################################
1342    #                 Port Filter                   #
1343    #################################################
1344    
1345    # Create and Obtain
1346    # Create a filter on the port, and obtain the filter object. The filter index is automatically assigned by the port.
1347    filter = await port.filters.create()
1348
1349    # Obtain One or Multiple
1350    filter = port.filters.obtain(position_idx=0)
1351    filter_list = port.filters.obtain_multiple(*[0,1,2])
1352
1353    # Remove
1354    # Remove a filter on the port with an explicit filter index by the index manager of the port.
1355    await port.filters.remove(position_idx=0)
1356
1357    # Filter - Enable
1358    await filter.enable.set(on_off=enums.OnOff.ON)
1359    await filter.enable.set_on()
1360    await filter.enable.set(on_off=enums.OnOff.OFF)
1361    await filter.enable.set_off()
1362
1363    resp = await filter.enable.get()
1364    resp.on_off
1365
1366    # Filter - Description
1367    await filter.comment.set(comment="this is a comment")
1368
1369    resp = await filter.comment.get()
1370    resp.comment
1371
1372    # Filter - Condition
1373    await filter.condition.set(and_expression_0=0, and_not_expression_0=0, and_expression_1=1, and_not_expression_1=0, and_expression_2=0, and_expression_3=0)
1374    
1375    resp = await filter.condition.get()
1376    resp.and_expression_0
1377    resp.and_not_expression_0
1378    resp.and_expression_1
1379    resp.and_not_expression_1
1380    resp.and_expression_2
1381    resp.and_expression_3
1382
1383    # Filter - String Representation
1384    await filter.string.set(string_name="this is name")
1385
1386    resp = await filter.string.get()
1387    resp.string_name
1388
1389    #################################################
1390    #               Port Length Term                #
1391    #################################################
1392
1393    # Create and Obtain
1394    # Create a length term on the port, and obtain the length term object. The length term index is automatically assigned by the port.
1395    length_term = await port.length_terms.create()
1396    
1397    # Obtain One or Multiple
1398    length_term = port.length_terms.obtain(key=0)
1399    length_term_list = port.length_terms.obtain_multiple(*[0,1,2])
1400
1401    # Remove
1402    # Remove a length term on the port with an explicit length term index by the index manager of the port.
1403    await port.length_terms.remove(position_idx=0)
1404
1405    #################################################
1406    #               Port Match Term                 #
1407    #################################################
1408
1409    # Create and Obtain
1410    # Create a match term on the port, and obtain the match term object. The match term index is automatically assigned by the port.
1411    match_term = await port.match_terms.create()
1412    
1413    # Obtain One or Multiple
1414    length_term = port.match_terms.obtain(key=0)
1415    length_term_list = port.match_terms.obtain_multiple(*[0,1,2])
1416
1417    # Remove
1418    # Remove a match term on the port with an explicit match term index by the index manager of the port.
1419    await port.match_terms.remove(position_idx=0)
1420
1421    #################################################
1422    #               Port Histogram                  #
1423    #################################################
1424
1425    # Create and Obtain
1426    # Create a histogram on the port, and obtain the histogram object. The histogram index is automatically assigned by the port.
1427    dataset = await port.datasets.create()
1428    
1429    # Obtain One or Multiple
1430    length_term = port.datasets.obtain(key=0)
1431    length_term_list = port.datasets.obtain_multiple(*[0,1,2])
1432
1433    # Remove
1434    # Remove a histogram on the port with an explicit histogram index by the index manager of the port.
1435    await port.datasets.remove(position_idx=0)
1436
1437    #################################################
1438    #               Port PCS/PMA                   #
1439    #################################################
1440
1441    # Auto-Negotiation Settings
1442    resp = await port.pcs_pma.auto_neg.settings.get()
1443    resp.tec_ability
1444    resp.fec_capable
1445    resp.fec_requested
1446    resp.pause_mode
1447
1448    # Auto-Negotiation Status
1449    resp = await port.pcs_pma.auto_neg.status.get()
1450    resp.mode
1451    resp.auto_state
1452    resp.tec_ability
1453    resp.fec_capable
1454    resp.fec_requested
1455    resp.fec
1456    resp.pause_mode
1457
1458    # Auto-Negotiation Selection
1459    # Only applicable to RJ45 ports
1460    await port.autoneg_selection.set(on_off=enums.OnOff.ON)
1461    await port.autoneg_selection.set_on()
1462    await port.autoneg_selection.set(on_off=enums.OnOff.OFF)
1463    await port.autoneg_selection.set_off()
1464
1465    resp = await port.autoneg_selection.get()
1466    resp.on_off
1467
1468    # FEC Mode
1469    await port.pcs_pma.phy.auto_neg.set(fec_mode=enums.OnOff.ON,reserved_1=0, reserved_2=0, reserved_3=0, reserved_4=0)
1470
1471    await port.fec_mode.set(mode=enums.FECMode.RS_FEC)
1472    await port.fec_mode.set(mode=enums.FECMode.RS_FEC_KP)
1473    await port.fec_mode.set(mode=enums.FECMode.RS_FEC_KR)
1474    await port.fec_mode.set(mode=enums.FECMode.FC_FEC)
1475    await port.fec_mode.set(mode=enums.FECMode.OFF)
1476    await port.fec_mode.set(mode=enums.FECMode.ON)
1477
1478    resp = await port.fec_mode.get()
1479    resp.mode
1480
1481    # Link Training Settings
1482    await port.pcs_pma.link_training.settings.set(
1483        mode=enums.LinkTrainingMode.DISABLED, 
1484        pam4_frame_size=enums.PAM4FrameSize.P4K_FRAME, 
1485        nrz_pam4_init_cond=enums.LinkTrainingInitCondition.NO_INIT, 
1486        nrz_preset=enums.NRZPreset.NRZ_WITH_PRESET, 
1487        timeout_mode=enums.TimeoutMode.DEFAULT)
1488    await port.pcs_pma.link_training.settings.set(
1489        mode=enums.LinkTrainingMode.STANDALONE, 
1490        pam4_frame_size=enums.PAM4FrameSize.P4K_FRAME, 
1491        nrz_pam4_init_cond=enums.LinkTrainingInitCondition.NO_INIT, 
1492        nrz_preset=enums.NRZPreset.NRZ_WITH_PRESET, 
1493        timeout_mode=enums.TimeoutMode.DEFAULT)
1494    await port.pcs_pma.link_training.settings.set(
1495        mode=enums.LinkTrainingMode.INTERACTIVE, 
1496        pam4_frame_size=enums.PAM4FrameSize.P4K_FRAME, 
1497        nrz_pam4_init_cond=enums.LinkTrainingInitCondition.NO_INIT, 
1498        nrz_preset=enums.NRZPreset.NRZ_WITH_PRESET, 
1499        timeout_mode=enums.TimeoutMode.DISABLED)
1500    await port.pcs_pma.link_training.settings.set(
1501        mode=enums.LinkTrainingMode.START_AFTER_AUTONEG, 
1502        pam4_frame_size=enums.PAM4FrameSize.P4K_FRAME, 
1503        nrz_pam4_init_cond=enums.LinkTrainingInitCondition.NO_INIT, 
1504        nrz_preset=enums.NRZPreset.NRZ_WITH_PRESET, 
1505        timeout_mode=enums.TimeoutMode.DEFAULT)
1506
1507    resp = await port.pcs_pma.link_training.settings.get()
1508    resp.mode
1509    resp.pam4_frame_size
1510    resp.nrz_pam4_init_cond
1511    resp.nrz_preset
1512    resp.timeout_mode
1513
1514    # Link Training Serdes Status
1515    resp = await port.pcs_pma.link_training.per_lane_status[0].get()
1516    resp.mode
1517    resp.failure
1518    resp.status
1519
1520    # PMA Pulse Error Inject Control
1521    await port.pcs_pma.pma_pulse_err_inj.enable.set(on_off=enums.OnOff.ON)
1522    await port.pcs_pma.pma_pulse_err_inj.enable.set_on()
1523    await port.pcs_pma.pma_pulse_err_inj.enable.set(on_off=enums.OnOff.OFF)
1524    await port.pcs_pma.pma_pulse_err_inj.enable.set_off()
1525
1526    resp = await port.pcs_pma.pma_pulse_err_inj.enable.get()
1527    resp.on_off
1528
1529    # PMA Pulse Error Inject Configuration
1530    await port.pcs_pma.pma_pulse_err_inj.params.set(duration=1000, period=1000, repetition=10, coeff=5, exp=-5)
1531    
1532    resp = await port.pcs_pma.pma_pulse_err_inj.params.get()
1533    resp.duration
1534    resp.period
1535    resp.coeff
1536    resp.exp
1537
1538    # RX Status - Lane Error Counters
1539    resp = await port.pcs_pma.lanes[0].rx_status.errors.get()
1540    resp.alignment_error_count
1541    resp.corrected_fec_error_count
1542    resp.header_error_count
1543
1544    # RX Status - Lock Status
1545    resp = await port.pcs_pma.lanes[0].rx_status.lock.get()
1546    resp.align_lock
1547    resp.header_lock
1548
1549    # RX Status - Lane Status
1550    resp = await port.pcs_pma.lanes[0].rx_status.status.get()
1551    resp.skew
1552    resp.virtual_lane
1553
1554    # RX Status - Clear Counters
1555    await port.pcs_pma.rx.clear.set()
1556
1557    # RX Status - RX FEC Stats
1558    resp = await port.pcs_pma.rx.fec_status.get()
1559    resp.stats_type
1560    resp.data_count
1561    resp.stats
1562
1563    # RX Status - RX Total Stats
1564    resp = await port.pcs_pma.rx.total_status.get()
1565    resp.total_corrected_codeword_count
1566    resp.total_corrected_symbol_count
1567    resp.total_post_fec_ber
1568    resp.total_pre_fec_ber
1569    resp.total_rx_bit_count
1570    resp.total_rx_codeword_count
1571    resp.total_uncorrectable_codeword_count
1572
1573    # TX Configuration - Error Counters
1574    resp = await port.pcs_pma.alarms.errors.get()
1575    resp.total_alarms
1576    resp.los_error_count
1577    resp.total_align_error_count
1578    resp.total_bip_error_count
1579    resp.total_fec_error_count
1580    resp.total_header_error_count
1581    resp.total_higher_error_count
1582    resp.total_pcs_error_count
1583    resp.valid_mask
1584
1585    # TX Configuration - Error Generation Rate
1586    resp = await port.pcs_pma.error_gen.error_rate.get()
1587    resp.rate
1588
1589    # TX Configuration - Error Generation Inject
1590    await port.pcs_pma.error_gen.inject_one.set()
1591
1592    # TX Configuration - Error Injection
1593    await port.pcs_pma.lanes[0].tx_error_inject.set_alignerror()
1594    await port.pcs_pma.lanes[0].tx_error_inject.set_bip8error()
1595    await port.pcs_pma.lanes[0].tx_error_inject.set_headererror()
1596
1597    # TX Configuration - Lane Configuration
1598    await port.pcs_pma.lanes[0].tx_config.set(virt_lane_index=1, skew=10)
1599    
1600    resp = await port.pcs_pma.lanes[0].tx_config.get()
1601    resp.virt_lane_index
1602    resp.skew
1603
1604    #################################################
1605    #               Port Medium                     #
1606    #################################################
1607
1608    # Eye Diagram Information
1609    resp = await port.serdes[0].eye_diagram.info.get()
1610    resp.width_mui
1611    resp.height_mv
1612    resp.h_slope_left
1613    resp.h_slope_right
1614    resp.y_intercept_left
1615    resp.y_intercept_right
1616    resp.r_squared_fit_left
1617    resp.r_squared_fit_right
1618    resp.est_rj_rms_left
1619    resp.est_rj_rms_right
1620    resp.est_dj_pp
1621    resp.v_slope_bottom
1622    resp.v_slope_top
1623    resp.x_intercept_bottom
1624    resp.x_intercept_top
1625    resp.r_squared_fit_bottom
1626    resp.r_squared_fit_top
1627    resp.est_rj_rms_bottom
1628    resp.est_rj_rms_top
1629    
1630    # Eye Diagram Bit Error Rate
1631    resp = await port.serdes[0].eye_diagram.ber.get()
1632    resp.eye_ber_estimation
1633
1634    # Eye Diagram Dwell Bits
1635    resp = await port.serdes[0].eye_diagram.dwell_bits.get()
1636    resp.max_dwell_bit_count
1637    resp.min_dwell_bit_count
1638
1639    # Eye Diagram Measure
1640    resp = await port.serdes[0].eye_diagram.measure.get()
1641    resp.status
1642
1643    # Eye Diagram Resolution
1644    resp = await port.serdes[0].eye_diagram.resolution.get()
1645    resp.x_resolution
1646    resp.y_resolution
1647
1648    # Eye Diagram Data Columns
1649    resp = await port.serdes[0].eye_diagram.read_column[0].get()
1650    resp.valid_column_count
1651    resp.values
1652    resp.x_resolution
1653    resp.y_resolution
1654
1655    # PHY - Signal Status
1656    resp = await port.pcs_pma.phy.signal_status.get()
1657    resp.phy_signal_status
1658
1659    # PHY - Settings
1660    await port.pcs_pma.phy.settings.set(
1661        link_training_on_off=enums.OnOff.ON, 
1662        precode_on_off=enums.OnOffDefault.DEFAULT, 
1663        graycode_on_off=enums.OnOff.OFF, pam4_msb_lsb_swap=enums.OnOff.OFF)
1664    
1665    resp = await port.pcs_pma.phy.settings.get()
1666    resp.link_training_on_off
1667    resp.precode_on_off
1668    resp.graycode_on_off
1669    resp.pam4_msb_lsb_swap
1670
1671    # TX Tap Autotune
1672    await port.serdes[0].phy.autotune.set(on_off=enums.OnOff.ON)
1673    await port.serdes[0].phy.autotune.set_on()
1674    await port.serdes[0].phy.autotune.set(on_off=enums.OnOff.OFF)
1675    await port.serdes[0].phy.autotune.set_off()
1676
1677    resp = await port.serdes[0].phy.autotune.get()
1678    resp.on_off
1679
1680    # TX Tap Retune
1681    await port.serdes[0].phy.retune.set(dummy=1)
1682
1683    # TX Tap Configuration
1684    await port.serdes[0].phy.tx_equalizer.set(pre2=0, pre1=0, main=86, post1=0, post2=0, post3=0)
1685    resp = await port.serdes[0].phy.tx_equalizer.get()
1686    resp.pre2
1687    resp.pre
1688    resp.main
1689    resp.post
1690    resp.pre3_post2
1691    resp.post3
1692
1693    # RX Tap Configuration
1694    await port.serdes[0].phy.rx_equalizer.set(auto=0, ctle=0, reserved=0)
1695    
1696    resp = await port.serdes[0].phy.rx_equalizer.get()
1697    resp.auto
1698    resp.ctle
1699
1700    #################################################
1701    #               Port PRBS                       #
1702    #################################################
1703
1704    # PRBS Configuration
1705    await port.serdes[0].prbs.config.type.set(
1706        prbs_inserted_type=enums.PRBSInsertedType.PHY_LINE, 
1707        polynomial=enums.PRBSPolynomial.PRBS7, 
1708        invert=enums.PRBSInvertState.NON_INVERTED, 
1709        statistics_mode=enums.PRBSStatisticsMode.ACCUMULATIVE)
1710    await port.serdes[0].prbs.config.type.set(
1711        prbs_inserted_type=enums.PRBSInsertedType.CAUI_VIRTUAL, 
1712        polynomial=enums.PRBSPolynomial.PRBS9, 
1713        invert=enums.PRBSInvertState.NON_INVERTED, 
1714        statistics_mode=enums.PRBSStatisticsMode.PERSECOND)
1715    await port.serdes[0].prbs.config.type.set(
1716        prbs_inserted_type=enums.PRBSInsertedType.PHY_LINE, 
1717        polynomial=enums.PRBSPolynomial.PRBS10, 
1718        invert=enums.PRBSInvertState.NON_INVERTED, 
1719        statistics_mode=enums.PRBSStatisticsMode.ACCUMULATIVE)
1720    await port.serdes[0].prbs.config.type.set(
1721        prbs_inserted_type=enums.PRBSInsertedType.PHY_LINE, 
1722        polynomial=enums.PRBSPolynomial.PRBS11, 
1723        invert=enums.PRBSInvertState.NON_INVERTED, 
1724        statistics_mode=enums.PRBSStatisticsMode.ACCUMULATIVE)
1725    await port.serdes[0].prbs.config.type.set(
1726        prbs_inserted_type=enums.PRBSInsertedType.PHY_LINE, 
1727        polynomial=enums.PRBSPolynomial.PRBS13, 
1728        invert=enums.PRBSInvertState.NON_INVERTED, 
1729        statistics_mode=enums.PRBSStatisticsMode.ACCUMULATIVE)
1730    await port.serdes[0].prbs.config.type.set(
1731        prbs_inserted_type=enums.PRBSInsertedType.PHY_LINE, 
1732        polynomial=enums.PRBSPolynomial.PRBS15, 
1733        invert=enums.PRBSInvertState.NON_INVERTED, 
1734        statistics_mode=enums.PRBSStatisticsMode.ACCUMULATIVE)
1735    await port.serdes[0].prbs.config.type.set(
1736        prbs_inserted_type=enums.PRBSInsertedType.PHY_LINE, 
1737        polynomial=enums.PRBSPolynomial.PRBS20, 
1738        invert=enums.PRBSInvertState.NON_INVERTED, 
1739        statistics_mode=enums.PRBSStatisticsMode.ACCUMULATIVE)
1740    await port.serdes[0].prbs.config.type.set(
1741        prbs_inserted_type=enums.PRBSInsertedType.PHY_LINE, 
1742        polynomial=enums.PRBSPolynomial.PRBS23, 
1743        invert=enums.PRBSInvertState.NON_INVERTED, 
1744        statistics_mode=enums.PRBSStatisticsMode.ACCUMULATIVE)
1745    await port.serdes[0].prbs.config.type.set(
1746        prbs_inserted_type=enums.PRBSInsertedType.PHY_LINE, 
1747        polynomial=enums.PRBSPolynomial.PRBS31, 
1748        invert=enums.PRBSInvertState.NON_INVERTED, 
1749        statistics_mode=enums.PRBSStatisticsMode.ACCUMULATIVE)
1750    await port.serdes[0].prbs.config.type.set(
1751        prbs_inserted_type=enums.PRBSInsertedType.PHY_LINE, 
1752        polynomial=enums.PRBSPolynomial.PRBS49, 
1753        invert=enums.PRBSInvertState.NON_INVERTED, 
1754        statistics_mode=enums.PRBSStatisticsMode.ACCUMULATIVE)
1755    await port.serdes[0].prbs.config.type.set(
1756        prbs_inserted_type=enums.PRBSInsertedType.PHY_LINE, 
1757        polynomial=enums.PRBSPolynomial.PRBS58, 
1758        invert=enums.PRBSInvertState.NON_INVERTED, 
1759        statistics_mode=enums.PRBSStatisticsMode.ACCUMULATIVE)
1760
1761    resp = await port.serdes[0].prbs.config.type.get()
1762    resp.prbs_inserted_type
1763    resp.polynomial
1764    resp.invert
1765    resp.statistics_mode
1766
1767
1768    # PRBS Statistics
1769    resp = await port.serdes[0].prbs.status.get()
1770    resp.byte_count
1771    resp.error_count
1772    resp.lock
1773# endregion
1774
1775# region Statistics 
1776    #################################################
1777    #               Statistics                      #
1778    #################################################
1779
1780    # Error Counter
1781    resp = await port.errors_count.get()
1782    resp.error_count
1783
1784    # RX Statistics - Clear Counter
1785    await port.statistics.rx.clear.set()
1786
1787    # RX Statistics - Calibrate
1788    await port.statistics.rx.calibrate.set()
1789
1790    # RX Statistics - Total Counter
1791    resp = await port.statistics.rx.total.get()
1792    resp.byte_count_since_cleared
1793    resp.packet_count_since_cleared
1794    resp.bit_count_last_sec
1795    resp.packet_count_last_sec
1796
1797    # RX Statistics - Non-TPLD Counter
1798    resp = await port.statistics.rx.no_tpld.get()
1799    resp.byte_count_since_cleared
1800    resp.packet_count_since_cleared
1801    resp.bit_count_last_sec
1802    resp.packet_count_last_sec
1803
1804    # RX Statistics - PFC Counter
1805    resp = await port.statistics.rx.pfc_stats.get()
1806    resp.packet_count
1807    resp.quanta_pri_0
1808    resp.quanta_pri_1
1809    resp.quanta_pri_2
1810    resp.quanta_pri_3
1811    resp.quanta_pri_4
1812    resp.quanta_pri_5
1813    resp.quanta_pri_6
1814    resp.quanta_pri_7
1815
1816    # RX Statistics - Extra Counter
1817    resp = await port.statistics.rx.extra.get()
1818    resp.fcs_error_count
1819    resp.pause_frame_count
1820    resp.gap_count
1821    resp.gap_duration
1822    resp.pause_frame_count
1823    resp.rx_arp_reply_count
1824    resp.rx_arp_request_count
1825    resp.rx_ping_reply_count
1826    resp.rx_ping_request_count
1827
1828    # RX Statistics - Received TPLDs
1829    await port.statistics.rx.obtain_available_tplds()
1830
1831    # RX Statistics - TPLD - Error Counter
1832    resp = await port.statistics.rx.access_tpld(tpld_id=0).errors.get()
1833    resp.non_incre_payload_packet_count
1834    resp.non_incre_seq_event_count
1835    resp.swapped_seq_misorder_event_count
1836
1837    # RX Statistics - TPLD - Latency Counter
1838    resp = await port.statistics.rx.access_tpld(tpld_id=0).latency.get()
1839    resp.avg_last_sec
1840    resp.max_last_sec
1841    resp.min_last_sec
1842    resp.avg_val
1843    resp.max_val
1844    resp.min_val
1845
1846    # RX Statistics - TPLD - Jitter Counter
1847    resp = await port.statistics.rx.access_tpld(tpld_id=0).jitter.get()
1848    resp.avg_last_sec
1849    resp.max_last_sec
1850    resp.min_last_sec
1851    resp.avg_val
1852    resp.max_val
1853    resp.min_val
1854
1855    # RX Statistics - TPLD - Traffic Counter
1856    resp = await port.statistics.rx.access_tpld(tpld_id=0).traffic.get()
1857    resp.byte_count_since_cleared
1858    resp.packet_count_since_cleared
1859    resp.bit_count_last_sec
1860    resp.packet_count_last_sec
1861
1862    # RX Statistics - Filter Statistics
1863    resp = await port.statistics.rx.obtain_filter_statistics(filter=0).get()
1864    resp.byte_count_since_cleared
1865    resp.packet_count_since_cleared
1866    resp.bit_count_last_sec
1867    resp.packet_count_last_sec
1868
1869    # TX Statistics - Clear Counter
1870    await port.statistics.tx.clear.set()
1871
1872    # TX Statistics - Total Counter
1873    resp = await port.statistics.tx.total.get()
1874    resp.byte_count_since_cleared
1875    resp.packet_count_since_cleared
1876    resp.bit_count_last_sec
1877    resp.packet_count_last_sec
1878
1879    # TX Statistics - Non-TPLD Counter
1880    resp = await port.statistics.tx.no_tpld.get()
1881    resp.byte_count_since_cleared
1882    resp.packet_count_since_cleared
1883    resp.bit_count_last_sec
1884    resp.packet_count_last_sec
1885
1886    # TX Statistics - Extra Counter
1887    resp = await port.statistics.tx.extra.get()
1888    resp.tx_arp_req_count
1889
1890    # TX Statistics - Stream Counter
1891    resp = await port.statistics.tx.obtain_from_stream(stream=0).get()
1892    resp.byte_count_since_cleared
1893    resp.packet_count_since_cleared
1894    resp.bit_count_last_sec
1895    resp.packet_count_last_sec
1896# endregion
1897
1898# region Stream
1899    #################################################
1900    #                   Stream                      #
1901    #################################################
1902
1903    # Create and Obtain
1904    # Create a stream on the port, and obtain the stream object. The stream index is automatically assigned by the port.
1905    stream = await port.streams.create()
1906
1907    # Obtain One or Multiple
1908    stream = port.streams.obtain(0)
1909    stream_list = port.streams.obtain_multiple(*[0,1,2])
1910
1911    # Remove
1912    # Remove a stream on the port with an explicit stream index.
1913    await port.streams.remove(position_idx=0)
1914
1915    # Description
1916    await stream.comment.set(comment="description")
1917    
1918    resp = await stream.comment.get()
1919    resp.comment
1920
1921    # Test Payload ID
1922    await stream.tpld_id.set(test_payload_identifier=0)
1923    
1924    resp = await stream.tpld_id.get()
1925    resp.test_payload_identifier
1926
1927    # State
1928    await stream.enable.set(state=enums.OnOffWithSuppress.OFF)
1929    await stream.enable.set_off()
1930    await stream.enable.set(state=enums.OnOffWithSuppress.ON)
1931    await stream.enable.set_on()
1932    await stream.enable.set(state=enums.OnOffWithSuppress.SUPPRESS)
1933    await stream.enable.set_suppress()
1934
1935    resp = await stream.enable.get()
1936    resp.state
1937
1938    # Header Protocol Segment
1939    await stream.packet.header.protocol.set(segments=[
1940        enums.ProtocolOption.ETHERNET,
1941        enums.ProtocolOption.VLAN,
1942        enums.ProtocolOption.IP,
1943        enums.ProtocolOption.UDP,
1944    ])
1945
1946    # ETHERNET = 1
1947    # """Ethernet II"""
1948    # VLAN = 2
1949    # """VLAN"""
1950    # ARP = 3
1951    # """Address Resolution Protocol"""
1952    # IP = 4
1953    # """IPv4"""
1954    # IPV6 = 5
1955    # """IPv6"""
1956    # UDP = 6
1957    # """User Datagram Protocol (w/o checksum)"""
1958    # TCP = 7
1959    # """Transmission Control Protocol (w/o checksum)"""
1960    # LLC = 8
1961    # """Logic Link Control"""
1962    # SNAP = 9
1963    # """Subnetwork Access Protocol"""
1964    # GTP = 10
1965    # """GPRS Tunnelling Protocol"""
1966    # ICMP = 11
1967    # """Internet Control Message Protocol"""
1968    # RTP = 12
1969    # """Real-time Transport Protocol"""
1970    # RTCP = 13
1971    # """RTP Control Protocol"""
1972    # STP = 14
1973    # """Spanning Tree Protocol"""
1974    # SCTP = 15
1975    # """Stream Control Transmission Protocol"""
1976    # MACCTRL = 16
1977    # """MAC Control"""
1978    # MPLS = 17
1979    # """Multiprotocol Label Switching"""
1980    # PBBTAG = 18
1981    # """Provider Backbone Bridge tag"""
1982    # FCOE = 19
1983    # """Fibre Channel over Ethernet"""
1984    # FC = 20
1985    # """Fibre Channel"""
1986    # FCOETAIL = 21
1987    # """Fibre Channel over Ethernet (tail)"""
1988    # IGMPV3L0 = 22
1989    # """IGMPv3 Membership Query L=0"""
1990    # IGMPV3L1 = 23
1991    # """IGMPv3 Membership Query L=1"""
1992    # UDPCHECK = 24
1993    # """User Datagram Protocol (w/ checksum)"""
1994    # IGMPV2 = 25
1995    # """Internet Group Management Protocol v2"""
1996    # MPLS_TP_OAM = 26
1997    # """MPLS-TP, OAM Header"""
1998    # GRE_NOCHECK = 27
1999    # """Generic Routing Encapsulation (w/o checksum)"""
2000    # GRE_CHECK = 28
2001    # """Generic Routing Encapsulation (w/ checksum)"""
2002    # TCPCHECK = 29
2003    # """Transmission Control Protocol (w/ checksum)"""
2004    # GTPV1L0 = 30
2005    # """GTPv1 (no options), GPRS Tunneling Protocol v1"""
2006    # GTPV1L1 = 31
2007    # """GTPv1 (w/ options), GPRS Tunneling Protocol v1"""
2008    # GTPV2L0 = 32
2009    # """GTPv2 (no options), GPRS Tunneling Protocol v2"""
2010    # GTPV2L1 = 33
2011    # """GTPv2 (w/ options), GPRS Tunneling Protocol v2"""
2012    # IGMPV1 = 34
2013    # """Internet Group Management Protocol v1"""
2014    # PWETHCTRL = 35
2015    # """PW Ethernet Control Word"""
2016    # VXLAN = 36
2017    # """Virtual eXtensible LAN"""
2018    # ETHERNET_8023 = 37
2019    # """Ethernet 802.3"""
2020    # NVGRE = 38
2021    # """Generic Routing Encapsulation (Network Virtualization)"""
2022    # DHCPV4 = 39
2023    # """Dynamic Host Configuration Protocol (IPv4)"""
2024    # GENEVE = 40
2025    # """Generic Network Virtualization Encapsulation"""
2026
2027    resp = await stream.packet.header.protocol.get()
2028    resp.segments
2029
2030    # Header Value
2031    await stream.packet.header.data.set(
2032        hex_data=Hex("00000000000004F4BC7FFE908100000008004500002A000000007F113BC400000000000000000000000000160000"))
2033    
2034    resp = await stream.packet.header.data.get()
2035    resp.hex_data
2036
2037    # Packet Size
2038    await stream.packet.length.set(length_type=enums.LengthType.FIXED, min_val=64, max_val=64)
2039    await stream.packet.length.set(length_type=enums.LengthType.INCREMENTING, min_val=64, max_val=1500)
2040    await stream.packet.length.set(length_type=enums.LengthType.BUTTERFLY, min_val=64, max_val=1500)
2041    await stream.packet.length.set(length_type=enums.LengthType.RANDOM, min_val=64, max_val=1500)
2042    await stream.packet.length.set(length_type=enums.LengthType.MIX, min_val=64, max_val=64)
2043
2044    resp = await stream.packet.length.get()
2045    resp.length_type
2046    resp.min_val
2047    resp.max_val
2048
2049    # Packet Auto Size
2050    await stream.packet.auto_adjust.set()
2051
2052    # Payload Type
2053    # Pattern string in hex, min = 1 byte, max = 18 bytes
2054    await stream.payload.content.set(payload_type=enums.PayloadType.PATTERN, hex_data=Hex("000102030405060708090A0B0C0D0E0FDEAD"))
2055    await stream.payload.content.set(payload_type=enums.PayloadType.PATTERN, hex_data=Hex("F5"))
2056    
2057    # Patter string ignored for non-pattern types
2058    await stream.payload.content.set(payload_type=enums.PayloadType.INC16, hex_data=Hex("F5"))
2059    await stream.payload.content.set_inc_word("00")
2060    await stream.payload.content.set(payload_type=enums.PayloadType.INC8, hex_data=Hex("F5"))
2061    await stream.payload.content.set_inc_byte("00")
2062    await stream.payload.content.set(payload_type=enums.PayloadType.DEC8, hex_data=Hex("F5"))
2063    await stream.payload.content.set_dec_byte("00")
2064    await stream.payload.content.set(payload_type=enums.PayloadType.DEC16, hex_data=Hex("F5"))
2065    await stream.payload.content.set_dec_word("00")
2066    await stream.payload.content.set(payload_type=enums.PayloadType.PRBS, hex_data=Hex("F5"))
2067    await stream.payload.content.set_prbs("00")
2068    await stream.payload.content.set(payload_type=enums.PayloadType.RANDOM, hex_data=Hex("F5"))
2069    await stream.payload.content.set_random("00")
2070
2071    resp = await stream.payload.content.get()
2072    resp.hex_data
2073    resp.payload_type
2074
2075    # Extended Payload
2076    # Use await port.payload_mode.set_extpl() to set the port's payload mode to Extended Payload.
2077    await stream.payload.extended.set(hex_data=Hex("00110022FF"))
2078    
2079    resp = await stream.payload.extended.get()
2080    resp.hex_data
2081
2082    # Rate Fraction
2083    await stream.rate.fraction.set(stream_rate_ppm=1_000_000)
2084
2085    resp = await stream.rate.fraction.get()
2086    resp.stream_rate_ppm
2087
2088    # Packet Rate
2089    await stream.rate.pps.set(stream_rate_pps=1_000)
2090    
2091    resp = await stream.rate.pps.get()
2092    resp.stream_rate_pps
2093
2094    # Bit Rate L2
2095    await stream.rate.l2bps.set(l2_bps=1_000_000)
2096    
2097    resp = await stream.rate.l2bps.get()
2098    resp.l2_bps
2099
2100    # Packet Limit
2101    await stream.packet.limit.set(packet_count=1_000)
2102    
2103    resp = await stream.packet.limit.get()
2104    resp.packet_count
2105
2106    # Burst Size and Density
2107    await stream.burst.burstiness.set(size=20, density=80)
2108
2109    resp = await stream.burst.burstiness.get()
2110    resp.size
2111    resp.density
2112
2113    # Inter Burst/Packet Gap
2114    await stream.burst.gap.set(inter_packet_gap=30, inter_burst_gap=30)
2115    
2116    resp = await stream.burst.gap.get()
2117    resp.inter_packet_gap
2118    resp.inter_burst_gap
2119
2120    # Priority Flow
2121    await stream.priority_flow.set(cos=enums.PFCMode.ZERO)
2122    await stream.priority_flow.set(cos=enums.PFCMode.ONE)
2123    await stream.priority_flow.set(cos=enums.PFCMode.TWO)
2124    await stream.priority_flow.set(cos=enums.PFCMode.THREE)
2125    await stream.priority_flow.set(cos=enums.PFCMode.FOUR)
2126    await stream.priority_flow.set(cos=enums.PFCMode.FIVE)
2127    await stream.priority_flow.set(cos=enums.PFCMode.SIX)
2128    await stream.priority_flow.set(cos=enums.PFCMode.SEVEN)
2129    await stream.priority_flow.set(cos=enums.PFCMode.VLAN_PCP)
2130
2131    resp = await stream.priority_flow.get()
2132    resp.cos
2133
2134    # IPv4 Gateway Address
2135    await stream.gateway.ipv4.set(gateway=ipaddress.IPv4Address("10.10.10.1"))
2136    
2137    resp = await stream.gateway.ipv4.get()
2138    resp.gateway
2139
2140    # IPv6 Gateway Address
2141    await stream.gateway.ipv6.set(gateway=ipaddress.IPv6Address("::0001"))
2142    
2143    resp = await stream.gateway.ipv6.get()
2144    resp.gateway
2145
2146    # ARP Resolve Peer Address
2147    # You need to make sure either the port has a correct gateway or the stream has a correct destination IP address to ARP resolve the MAC address.
2148    resp = await stream.request.arp.get()
2149    resp.mac_address
2150
2151    # PING Check IP Peer
2152    # You need to make sure either the port has a correct gateway or the stream has a correct destination IP address to ping.
2153    resp = await stream.request.ping.get()
2154    resp.delay
2155    resp.time_to_live
2156
2157    # Custom Data Field
2158    # Use await port.payload_mode.set_cdf() to set the port's payload mode to Custom Data Field.
2159
2160    # Field Offset
2161    await stream.cdf.offset.set(offset=1)
2162    
2163    resp = await stream.cdf.offset.get()
2164    resp.offset
2165
2166    # Byte Count
2167    await stream.cdf.count.set(cdf_count=1)
2168    
2169    resp = await stream.cdf.count.get()
2170    resp.cdf_count
2171
2172    ################################################
2173    #          Stream Modifier                     #
2174    ################################################
2175    
2176    # Create
2177    await stream.packet.header.modifiers.configure(number=1)
2178
2179    # Clear
2180    await stream.packet.header.modifiers.clear()
2181
2182    # Obtain
2183    # Must create modifiers before obtain.
2184    modifier = stream.packet.header.modifiers.obtain(idx=0)
2185    
2186    # Range
2187    await modifier.range.set(min_val=0, step=10, max_val=9)
2188    
2189    resp = await modifier.range.get()
2190    resp.min_val
2191    resp.max_val
2192    resp.step
2193
2194    # Position, Action, Mask
2195    await modifier.specification.set(position=0, mask=Hex("FFFF0000"), action=enums.ModifierAction.INC, repetition=1)
2196    await modifier.specification.set(position=0, mask=Hex("FFFF0000"), action=enums.ModifierAction.DEC, repetition=1)
2197    await modifier.specification.set(position=0, mask=Hex("FFFF0000"), action=enums.ModifierAction.RANDOM, repetition=1)
2198    
2199    resp = await modifier.specification.get()
2200    resp.action
2201    resp.mask
2202    resp.position
2203    resp.repetition
2204
2205    # #################################################
2206    # #           Stream 32-bit Modifier              #
2207    # #################################################
2208
2209    # Create
2210    await stream.packet.header.modifiers_extended.configure(number=1)
2211
2212    # Clear
2213    await stream.packet.header.modifiers_extended.clear()
2214
2215    # Obtain
2216    # Must create modifiers before obtain.
2217    modifier_ext = stream.packet.header.modifiers_extended.obtain(idx=0)
2218
2219    # Range
2220    await modifier_ext.range.set(min_val=0, step=1, max_val=100)
2221    
2222    resp = await modifier_ext.range.get()
2223    resp.max_val
2224    resp.min_val
2225    resp.step
2226
2227    # Position, Action, Mask
2228    await modifier_ext.specification.set(position=0, mask=Hex("FFFFFFFF"), action=enums.ModifierAction.INC, repetition=1)
2229    await modifier_ext.specification.set(position=0, mask=Hex("FFFFFFFF"), action=enums.ModifierAction.DEC, repetition=1)
2230    await modifier_ext.specification.set(position=0, mask=Hex("FFFFFFFF"), action=enums.ModifierAction.RANDOM, repetition=1)
2231
2232    resp = await modifier_ext.specification.get()
2233    resp.action
2234    resp.mask
2235    resp.position
2236    resp.repetition
2237
2238    # #################################################
2239    # #           Stream Error Control                #
2240    # #################################################
2241
2242    # Misorder Error Injection
2243    await stream.inject_err.misorder.set()
2244
2245    # Payload Integrity Error Injection
2246    await stream.inject_err.payload_integrity.set()
2247
2248    # Sequence Error Injection
2249    await stream.inject_err.sequence.set()
2250
2251    # Test Payload Error Injection
2252    await stream.inject_err.test_payload.set()
2253
2254    # Checksum Error Injection
2255    await stream.inject_err.frame_checksum.set()
2256
2257    # Insert Frame Checksum
2258    await stream.insert_packets_checksum.set(on_off=enums.OnOff.ON)
2259    await stream.insert_packets_checksum.set_on()
2260    await stream.insert_packets_checksum.set(on_off=enums.OnOff.OFF)
2261    await stream.insert_packets_checksum.set_off()
2262
2263    resp = await stream.insert_packets_checksum.get()
2264    resp.on_off
2265# endregion
2266
2267# region Network Emulation
2268    #################################################
2269    #              Network Emulation                #
2270    #################################################
2271
2272    # Configure Chimera port
2273    if isinstance(module, modules.ModuleChimera):
2274        port = module.ports.obtain(0)
2275
2276        await port.pcs_pma.link_flap.params.set(duration=100, period=1000, repetition=0)
2277        await port.pcs_pma.link_flap.enable.set_on()
2278        await port.pcs_pma.link_flap.enable.set_off()
2279
2280        await port.pcs_pma.pma_pulse_err_inj.params.set(duration=100, period=1000, repetition=0, coeff=100, exp=-4)
2281        await port.pcs_pma.pma_pulse_err_inj.enable.set_on()
2282        await port.pcs_pma.pma_pulse_err_inj.enable.set_off()
2283
2284        # Enable impairment on the port.
2285        await port.emulate.set_off()
2286        await port.emulate.set_on()
2287
2288        resp = await port.emulate.get()
2289        resp.action
2290
2291        # Set TPLD mode
2292        await port.emulation.tpld_mode.set(mode=enums.TPLDMode.NORMAL)
2293        await port.emulation.tpld_mode.set(mode=enums.TPLDMode.MICRO)
2294
2295        resp = await port.emulation.tpld_mode.get()
2296        resp.mode
2297
2298        # Configure flow's basic filter on a port
2299        # Configure flow properties
2300        flow = port.emulation.flows[1]
2301
2302        await flow.comment.set(comment="Flow description")
2303        
2304        resp = await flow.comment.get()
2305        resp.comment
2306
2307        # Initializing the shadow copy of the filter.
2308        await flow.shadow_filter.initiating.set()
2309
2310        # Configure shadow filter to BASIC mode
2311        await flow.shadow_filter.use_basic_mode()
2312        
2313        # Query the mode of the filter (either basic or extended)
2314        filter = await flow.shadow_filter.get_mode()
2315
2316        if isinstance(filter, misc.BasicImpairmentFlowFilter):
2317            #------------------
2318            # Ethernet subfilter
2319            #------------------
2320            # Use and configure basic-mode shadow filter's Ethernet subfilter
2321            await utils.apply(
2322                filter.ethernet.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.EXCLUDE),
2323                filter.ethernet.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.INCLUDE),
2324                filter.ethernet.src_address.set(use=enums.OnOff.ON, value=Hex("AAAAAAAAAAAA"), mask=Hex("FFFFFFFFFFFF")),
2325                filter.ethernet.dest_address.set(use=enums.OnOff.ON, value=Hex("BBBBBBBBBBBB"), mask=Hex("FFFFFFFFFFFF"))
2326            )
2327
2328            #------------------
2329            # Layer 2+ subfilter
2330            #------------------
2331            # Not use basic-mode shadow filter's Layer 2+ subfilter
2332            await filter.l2plus_use.set(use=enums.L2PlusPresent.NA)
2333
2334            # Use and configure basic-mode shadow filter's Layer2+ subfilter (One VLAN tag)
2335            await utils.apply(
2336                filter.l2plus_use.set(use=enums.L2PlusPresent.VLAN1),
2337                filter.vlan.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.EXCLUDE),
2338                filter.vlan.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.INCLUDE),
2339                filter.vlan.inner.tag.set(use=enums.OnOff.ON, value=1234, mask=Hex("0FFF")),
2340                filter.vlan.inner.pcp.set(use=enums.OnOff.OFF, value=3, mask=Hex("07")),
2341            )
2342            # Use and configure basic-mode shadow filter's Layer2+ subfilter (Two VLAN tag)
2343            await utils.apply(
2344                filter.l2plus_use.set(use=enums.L2PlusPresent.VLAN2),
2345                filter.vlan.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.EXCLUDE),
2346                filter.vlan.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.INCLUDE),
2347                filter.vlan.inner.tag.set(use=enums.OnOff.ON, value=1234, mask=Hex("0FFF")),
2348                filter.vlan.inner.pcp.set(use=enums.OnOff.OFF, value=3, mask=Hex("07")),
2349                filter.vlan.outer.tag.set(use=enums.OnOff.ON, value=2345, mask=Hex("0FFF")),
2350                filter.vlan.outer.pcp.set(use=enums.OnOff.OFF, value=0, mask=Hex("07")),
2351            )
2352            # Use and configure basic-mode shadow filter's Layer2+ subfilter (MPLS)
2353            await utils.apply(
2354                filter.l2plus_use.set(use=enums.L2PlusPresent.MPLS),
2355                filter.mpls.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.EXCLUDE),
2356                filter.mpls.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.INCLUDE),
2357                filter.mpls.label.set(use=enums.OnOff.ON, value=1000, mask=Hex("FFFFF")),
2358                filter.mpls.toc.set(use=enums.OnOff.ON, value=0, mask=Hex("07")),
2359            )
2360
2361            #------------------
2362            # Layer 3 subfilter
2363            #------------------
2364            # Not use basic-mode shadow filter's Layer 3 subfilter
2365            await filter.l3_use.set(use=enums.L3Present.NA)
2366            # Use and configure basic-mode shadow filter's Layer 3 subfilter (IPv4)
2367            await utils.apply(
2368                filter.l3_use.set(use=enums.L3Present.IP4),
2369                filter.ip.v4.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.EXCLUDE),
2370                filter.ip.v4.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.INCLUDE),
2371                filter.ip.v4.src_address.set(use=enums.OnOff.ON, value=ipaddress.IPv4Address("10.0.0.2"), mask=Hex("FFFFFFFF")),
2372                filter.ip.v4.dest_address.set(use=enums.OnOff.ON, value=ipaddress.IPv4Address("10.0.0.2"), mask=Hex("FFFFFFFF")),
2373                filter.ip.v4.dscp.set(use=enums.OnOff.ON, value=0, mask=Hex("FC")),
2374            )
2375            # Use and configure basic-mode shadow filter's Layer 3 subfilter (IPv6)
2376            await utils.apply(
2377                filter.l3_use.set(use=enums.L3Present.IP6),
2378                filter.ip.v6.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.EXCLUDE),
2379                filter.ip.v6.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.INCLUDE),
2380                filter.ip.v6.src_address.set(use=enums.OnOff.ON, value=ipaddress.IPv6Address("2001::2"), mask=Hex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")),
2381                filter.ip.v6.dest_address.set(use=enums.OnOff.ON, value=ipaddress.IPv6Address("2002::2"), mask=Hex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")),
2382                filter.ip.v6.traffic_class.set(use=enums.OnOff.ON, value=0, mask=Hex("FC")),
2383            )
2384
2385            #------------------
2386            # Layer 4 subfilter
2387            #------------------
2388            # Use and configure basic-mode shadow filter's Layer 4 subfilter (TCP)
2389            await utils.apply(
2390                filter.tcp.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.EXCLUDE),
2391                filter.tcp.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.INCLUDE),
2392                filter.tcp.src_port.set(use=enums.OnOff.ON, value=1234, mask=Hex("FFFF")),
2393                filter.tcp.dest_port.set(use=enums.OnOff.ON, value=80, mask=Hex("FFFF")),
2394            )
2395            # Use and configure basic-mode shadow filter's Layer 4 subfilter (UDP)
2396            await utils.apply(
2397                filter.udp.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.EXCLUDE),
2398                filter.udp.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.INCLUDE),
2399                filter.udp.src_port.set(use=enums.OnOff.ON, value=1234, mask=Hex("FFFF")),
2400                filter.udp.dest_port.set(use=enums.OnOff.ON, value=80, mask=Hex("FFFF")),
2401            )
2402
2403            #------------------
2404            # Layer Xena subfilter
2405            #------------------
2406            await utils.apply(
2407                filter.tpld.settings.set(action=enums.InfoAction.EXCLUDE),
2408                filter.tpld.settings.set(action=enums.InfoAction.INCLUDE),
2409                filter.tpld.test_payload_filters_config[0].set(use=enums.OnOff.ON, id = 2),
2410                filter.tpld.test_payload_filters_config[0].set(use=enums.OnOff.OFF, id = 2),
2411                filter.tpld.test_payload_filters_config[1].set(use=enums.OnOff.ON, id = 4),
2412                filter.tpld.test_payload_filters_config[1].set(use=enums.OnOff.OFF, id = 4),
2413                filter.tpld.test_payload_filters_config[2].set(use=enums.OnOff.ON, id = 6),
2414                filter.tpld.test_payload_filters_config[2].set(use=enums.OnOff.OFF, id = 6),
2415                filter.tpld.test_payload_filters_config[3].set(use=enums.OnOff.ON, id = 8),
2416                filter.tpld.test_payload_filters_config[3].set(use=enums.OnOff.OFF, id = 8),
2417                filter.tpld.test_payload_filters_config[4].set(use=enums.OnOff.ON, id = 10),
2418                filter.tpld.test_payload_filters_config[4].set(use=enums.OnOff.OFF, id = 10),
2419                filter.tpld.test_payload_filters_config[5].set(use=enums.OnOff.ON, id = 20),
2420                filter.tpld.test_payload_filters_config[5].set(use=enums.OnOff.OFF, id = 20),
2421                filter.tpld.test_payload_filters_config[6].set(use=enums.OnOff.ON, id = 40),
2422                filter.tpld.test_payload_filters_config[6].set(use=enums.OnOff.OFF, id = 40),
2423                filter.tpld.test_payload_filters_config[7].set(use=enums.OnOff.ON, id = 60),
2424                filter.tpld.test_payload_filters_config[7].set(use=enums.OnOff.OFF, id = 60),
2425                filter.tpld.test_payload_filters_config[8].set(use=enums.OnOff.ON, id = 80),
2426                filter.tpld.test_payload_filters_config[8].set(use=enums.OnOff.OFF, id = 80),
2427                filter.tpld.test_payload_filters_config[9].set(use=enums.OnOff.ON, id = 100),
2428                filter.tpld.test_payload_filters_config[9].set(use=enums.OnOff.OFF, id = 100),
2429                filter.tpld.test_payload_filters_config[10].set(use=enums.OnOff.ON, id = 102),
2430                filter.tpld.test_payload_filters_config[10].set(use=enums.OnOff.OFF, id = 102),
2431                filter.tpld.test_payload_filters_config[11].set(use=enums.OnOff.ON, id = 104),
2432                filter.tpld.test_payload_filters_config[11].set(use=enums.OnOff.OFF, id = 104),
2433                filter.tpld.test_payload_filters_config[12].set(use=enums.OnOff.ON, id = 106),
2434                filter.tpld.test_payload_filters_config[12].set(use=enums.OnOff.OFF, id = 106),
2435                filter.tpld.test_payload_filters_config[13].set(use=enums.OnOff.ON, id = 108),
2436                filter.tpld.test_payload_filters_config[13].set(use=enums.OnOff.OFF, id = 108),
2437                filter.tpld.test_payload_filters_config[14].set(use=enums.OnOff.ON, id = 110),
2438                filter.tpld.test_payload_filters_config[14].set(use=enums.OnOff.OFF, id = 110),
2439                filter.tpld.test_payload_filters_config[15].set(use=enums.OnOff.ON, id = 200),
2440                filter.tpld.test_payload_filters_config[15].set(use=enums.OnOff.OFF, id = 200),
2441            )
2442
2443            #------------------
2444            # Layer Any subfilter
2445            #------------------
2446            await utils.apply(
2447                filter.any.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.EXCLUDE),
2448                filter.any.settings.set(use=enums.FilterUse.AND, action=enums.InfoAction.INCLUDE),
2449                filter.any.config.set(position=0, value=Hex("112233445566"), mask=Hex("112233445566"))
2450            )
2451
2452        # Apply the filter so the configuration data in the shadow copy is committed to the working copy automatically.
2453        await flow.shadow_filter.enable.set_off()
2454        await flow.shadow_filter.enable.set_on()
2455        await flow.shadow_filter.apply.set()
2456
2457        # Configure flow's extended filter on a port
2458        # Configure flow properties
2459        flow = port.emulation.flows[1]
2460        await flow.comment.set("Flow description")
2461
2462        # Initializing the shadow copy of the filter.
2463        await flow.shadow_filter.initiating.set()
2464
2465        # Configure shadow filter to EXTENDED mode
2466        await flow.shadow_filter.use_extended_mode()
2467
2468        # Query the mode of the filter (either basic or extended)
2469        filter = await flow.shadow_filter.get_mode()
2470
2471        if isinstance(filter, misc.ExtendedImpairmentFlowFilter):
2472
2473            await filter.use_segments(
2474                enums.ProtocolOption.VLAN
2475                )
2476            protocol_segments = await filter.get_protocol_segments()
2477            await protocol_segments[0].value.set(value=Hex("AAAAAAAAAAAABBBBBBBBBBBB8100"))
2478            await protocol_segments[0].mask.set(masks=Hex("0000000000000000000000000000"))
2479            await protocol_segments[1].value.set(value=Hex("0064FFFF"))
2480            await protocol_segments[1].mask.set(masks=Hex("00000000"))
2481
2482            await protocol_segments[1].get()
2483
2484        # Configure impairment - Drop
2485        # Fixed Burst distribution for impairment Drop
2486        await utils.apply(
2487            flow.impairment_distribution.drop_type_config.fixed_burst.set(burst_size=5),
2488            flow.impairment_distribution.drop_type_config.schedule.set(duration=1, period=5), #repeat (duration = 1, period = x)
2489            flow.impairment_distribution.drop_type_config.schedule.set(duration=1, period=0), #one shot
2490        )
2491
2492        # Random Burst distribution for impairment Drop
2493        await utils.apply(
2494            flow.impairment_distribution.drop_type_config.random_burst.set(minimum=1, maximum=10, probability=10_000),
2495            flow.impairment_distribution.drop_type_config.schedule.set(duration=1, period=1), # repeat pattern
2496            flow.impairment_distribution.drop_type_config.schedule.set(duration=0, period=0), #continuous
2497        )
2498
2499        # Fixed Rate distribution for impairment Drop
2500        await utils.apply(
2501            flow.impairment_distribution.drop_type_config.fixed_rate.set(probability=10_000),
2502            flow.impairment_distribution.drop_type_config.schedule.set(duration=1, period=1),# repeat pattern
2503            flow.impairment_distribution.drop_type_config.schedule.set(duration=0, period=0), #continuous
2504        )
2505
2506        # Bit Error Rate distribution for impairment Drop
2507        await utils.apply(
2508            flow.impairment_distribution.drop_type_config.bit_error_rate.set(coef=1, exp=1),
2509            flow.impairment_distribution.drop_type_config.schedule.set(duration=1, period=1),# repeat pattern
2510            flow.impairment_distribution.drop_type_config.schedule.set(duration=0, period=0), #continuous
2511        )
2512
2513        # Random Rate distribution for impairment Drop
2514        await utils.apply(
2515            flow.impairment_distribution.drop_type_config.random_rate.set(probability=10_000),
2516            flow.impairment_distribution.drop_type_config.schedule.set(duration=1, period=1),# repeat pattern
2517            flow.impairment_distribution.drop_type_config.schedule.set(duration=0, period=0), #continuous
2518        )
2519
2520        # Gilbert Elliot distribution for impairment Drop
2521        await utils.apply(
2522            flow.impairment_distribution.drop_type_config.ge.set(good_state_prob=0, good_state_trans_prob=0, bad_state_prob=0, bad_state_trans_prob=0),
2523            flow.impairment_distribution.drop_type_config.schedule.set(duration=1, period=1),# repeat pattern
2524            flow.impairment_distribution.drop_type_config.schedule.set(duration=0, period=0), #continuous
2525        )
2526
2527        # Uniform distribution for impairment Drop
2528        await utils.apply(
2529            flow.impairment_distribution.drop_type_config.uniform.set(minimum=1, maximum=1),
2530            flow.impairment_distribution.drop_type_config.schedule.set(duration=1, period=1),# repeat pattern
2531            flow.impairment_distribution.drop_type_config.schedule.set(duration=0, period=0), #continuous
2532        )
2533
2534        # Gaussian distribution for impairment Drop
2535        await utils.apply(
2536            flow.impairment_distribution.drop_type_config.gaussian.set(mean=1, std_deviation=1),
2537            flow.impairment_distribution.drop_type_config.schedule.set(duration=1, period=1),# repeat pattern
2538            flow.impairment_distribution.drop_type_config.schedule.set(duration=0, period=0), #continuous
2539        )
2540
2541        # Poisson distribution for impairment Drop
2542        await utils.apply(
2543            flow.impairment_distribution.drop_type_config.poisson.set(mean=9),
2544            flow.impairment_distribution.drop_type_config.schedule.set(duration=1, period=1), # repeat pattern
2545            flow.impairment_distribution.drop_type_config.schedule.set(duration=0, period=0), #continuous
2546        )
2547
2548        # Gamma distribution for impairment Drop
2549        await utils.apply(
2550            flow.impairment_distribution.drop_type_config.gamma.set(shape=1, scale=1),
2551            flow.impairment_distribution.drop_type_config.schedule.set(duration=1, period=1), # repeat pattern
2552            flow.impairment_distribution.drop_type_config.schedule.set(duration=0, period=0), #continuous
2553        )
2554
2555        # Custom distribution for impairment Drop
2556        data_x=[0, 1] * 256
2557        await port.custom_distributions.assign(0)
2558        await port.custom_distributions[0].comment.set(comment="Example Custom Distribution")
2559        await port.custom_distributions[0].definition.set(linear=enums.OnOff.OFF, symmetric=enums.OnOff.OFF, entry_count=len(data_x), data_x=data_x)
2560        await utils.apply(
2561            flow.impairment_distribution.drop_type_config.custom.set(cust_id=0),
2562            flow.impairment_distribution.drop_type_config.schedule.set(duration=1, period=1),
2563            flow.impairment_distribution.drop_type_config.schedule.set(duration=0, period=0), #continuous
2564        )
2565
2566        # Set distribution and start impairment Drop
2567        await flow.impairment_distribution.drop_type_config.enable.set_on()
2568        await flow.impairment_distribution.drop_type_config.enable.set_off()
2569        
2570        # Configure impairment - Misordering
2571
2572        # Fixed Burst distribution for impairment Misordering
2573        # dist = distributions.misordering.FixedBurst(burst_size=1)
2574        # dist.repeat(period=5)
2575        # dist.one_shot()
2576
2577        # Fixed Burst distribution for impairment Drop
2578        await utils.apply(
2579            flow.impairment_distribution.misorder_type_config.fixed_burst.set(burst_size=5),
2580            flow.impairment_distribution.misorder_type_config.schedule.set(duration=1, period=5), #repeat
2581            flow.impairment_distribution.misorder_type_config.schedule.set(duration=1, period=0), #one shot
2582        )
2583
2584        # Fixed Rate distribution for impairment Drop
2585        await utils.apply(
2586            flow.impairment_distribution.misorder_type_config.fixed_rate.set(probability=10_000),
2587            flow.impairment_distribution.misorder_type_config.schedule.set(duration=1, period=1), # repeat pattern
2588            flow.impairment_distribution.misorder_type_config.schedule.set(duration=0, period=0), #continuous
2589        )
2590
2591        # Set distribution and start impairment Misordering
2592        await flow.misordering.set(depth=1)
2593        await flow.impairment_distribution.misorder_type_config.enable.set_on()
2594        await flow.impairment_distribution.misorder_type_config.enable.set_off()
2595
2596        # Configure impairment - Latency & Jitter
2597        # Fixed Burst distribution for impairment Latency & Jitter
2598        await flow.impairment_distribution.latency_jitter_type_config.constant_delay.set(delay=100)
2599
2600        # Random Burst distribution for impairment Latency & Jitter
2601        await utils.apply(
2602            flow.impairment_distribution.latency_jitter_type_config.accumulate_and_burst.set(delay=1300),
2603            flow.impairment_distribution.latency_jitter_type_config.schedule.set(duration=1, period=1), #repeat (duration = 1, period = x)
2604            flow.impairment_distribution.latency_jitter_type_config.schedule.set(duration=1, period=0), #one shot
2605        )
2606
2607        # Step distribution for impairment Latency & Jitter
2608        await utils.apply(
2609            flow.impairment_distribution.latency_jitter_type_config.step.set(low=1300, high=77000),
2610            flow.impairment_distribution.latency_jitter_type_config.schedule.set(duration=0, period=0), #continuous
2611        )
2612        await flow.impairment_distribution.corruption_type_config.off.set()
2613
2614        # Uniform distribution for impairment Latency & Jitter
2615        await utils.apply(
2616            flow.impairment_distribution.latency_jitter_type_config.uniform.set(minimum=1, maximum=1),
2617            flow.impairment_distribution.latency_jitter_type_config.schedule.set(duration=0, period=0), #continuous
2618        )
2619
2620        # Gaussian distribution for impairment Latency & Jitter
2621        await utils.apply(
2622            flow.impairment_distribution.latency_jitter_type_config.gaussian.set(mean=1, std_deviation=1),
2623            flow.impairment_distribution.latency_jitter_type_config.schedule.set(duration=0, period=0), #continuous
2624        )
2625
2626        resp = await flow.latency_range.get()
2627        resp.
2628        
2629
2630        # Poisson distribution for impairment Latency & Jitter
2631        await utils.apply(
2632            flow.impairment_distribution.latency_jitter_type_config.poisson.set(mean=1),
2633            flow.impairment_distribution.latency_jitter_type_config.schedule.set(duration=0, period=0), #continuous
2634        )
2635
2636        # Gamma distribution for impairment Latency & Jitter
2637        await utils.apply(
2638            flow.impairment_distribution.latency_jitter_type_config.gamma.set(shape=1, scale=1),
2639            flow.impairment_distribution.latency_jitter_type_config.schedule.set(duration=0, period=0), #continuous
2640        )
2641
2642        # Custom distribution for impairment Latency & Jitter
2643        data_x=[0, 1] * 256
2644        await port.custom_distributions.assign(0)
2645        await port.custom_distributions[0].comment.set(comment="Example Custom Distribution")
2646        await port.custom_distributions[0].definition.set(linear=enums.OnOff.OFF, symmetric=enums.OnOff.OFF, entry_count=len(data_x), data_x=data_x)
2647        await utils.apply(
2648            flow.impairment_distribution.latency_jitter_type_config.custom.set(cust_id=0),
2649            flow.impairment_distribution.latency_jitter_type_config.schedule.set(duration=0, period=0), #continuous
2650        )
2651
2652        # Set distribution and start impairment Latency & Jitter
2653        await flow.impairment_distribution.latency_jitter_type_config.enable.set_on()
2654        await flow.impairment_distribution.latency_jitter_type_config.enable.set_off()
2655
2656        # Configure impairment - Duplication
2657
2658        # Fixed Burst distribution for impairment Duplication
2659        # dist.one_shot()
2660        await utils.apply(
2661            flow.impairment_distribution.duplication_type_config.fixed_burst.set(burst_size=1300),
2662            flow.impairment_distribution.duplication_type_config.schedule.set(duration=1, period=1), #repeat (duration = 1, period = x)
2663            flow.impairment_distribution.duplication_type_config.schedule.set(duration=1, period=0), #one shot
2664        )
2665
2666        # Random Burst distribution for impairment Duplication
2667        await utils.apply(
2668            flow.impairment_distribution.duplication_type_config.random_burst.set(minimum=1, maximum=1, probability=10_0000),
2669            flow.impairment_distribution.duplication_type_config.schedule.set(duration=1, period=1),# repeat pattern
2670            flow.impairment_distribution.duplication_type_config.schedule.set(duration=0, period=0), #continuous
2671        )
2672
2673        # Fixed Rate distribution for impairment Duplication
2674        await utils.apply(
2675            flow.impairment_distribution.duplication_type_config.fixed_rate.set(probability=10_000),
2676            flow.impairment_distribution.duplication_type_config.schedule.set(duration=1, period=1), # repeat pattern
2677            flow.impairment_distribution.duplication_type_config.schedule.set(duration=0, period=0), #continuous
2678        )
2679
2680        # Bit Error Rate distribution for impairment Duplication
2681        await utils.apply(
2682            flow.impairment_distribution.duplication_type_config.bit_error_rate.set(coef=1, exp=1),
2683            flow.impairment_distribution.duplication_type_config.schedule.set(duration=1, period=1),# repeat pattern
2684            flow.impairment_distribution.duplication_type_config.schedule.set(duration=0, period=0), #continuous
2685        )
2686
2687        # Random Rate distribution for impairment Duplication
2688        await utils.apply(
2689            flow.impairment_distribution.duplication_type_config.random_rate.set(probability=10_000),
2690            flow.impairment_distribution.duplication_type_config.schedule.set(duration=1, period=1),# repeat pattern
2691            flow.impairment_distribution.duplication_type_config.schedule.set(duration=0, period=0), #continuous
2692        )
2693
2694        # Gilbert Elliot distribution for impairment Duplication
2695        await utils.apply(
2696            flow.impairment_distribution.duplication_type_config.ge.set(good_state_prob=0, good_state_trans_prob=0, bad_state_prob=0, bad_state_trans_prob=0),
2697            flow.impairment_distribution.duplication_type_config.schedule.set(duration=1, period=1),# repeat pattern
2698            flow.impairment_distribution.duplication_type_config.schedule.set(duration=0, period=0), #continuous
2699        )
2700
2701        # Uniform distribution for impairment Duplication
2702        await utils.apply(
2703            flow.impairment_distribution.duplication_type_config.uniform.set(minimum=1, maximum=1),
2704            flow.impairment_distribution.duplication_type_config.schedule.set(duration=1, period=1),# repeat pattern
2705            flow.impairment_distribution.duplication_type_config.schedule.set(duration=0, period=0), #continuous
2706        )
2707
2708        # Gaussian distribution for impairment Duplication
2709        await utils.apply(
2710            flow.impairment_distribution.duplication_type_config.gaussian.set(mean=1, std_deviation=1),
2711            flow.impairment_distribution.duplication_type_config.schedule.set(duration=1, period=1),# repeat pattern
2712            flow.impairment_distribution.duplication_type_config.schedule.set(duration=0, period=0), #continuous
2713        )
2714
2715        # Poisson distribution for impairment Duplication
2716        await utils.apply(
2717            flow.impairment_distribution.duplication_type_config.poisson.set(mean=9),
2718            flow.impairment_distribution.duplication_type_config.schedule.set(duration=1, period=1), # repeat pattern
2719            flow.impairment_distribution.duplication_type_config.schedule.set(duration=0, period=0), #continuous
2720        )
2721
2722        # Gamma distribution for impairment Duplication
2723        await utils.apply(
2724            flow.impairment_distribution.duplication_type_config.gamma.set(shape=1, scale=1),
2725            flow.impairment_distribution.duplication_type_config.schedule.set(duration=1, period=1), # repeat pattern
2726            flow.impairment_distribution.duplication_type_config.schedule.set(duration=0, period=0), #continuous
2727        )
2728
2729        # Custom distribution for impairment Duplication
2730        data_x=[0, 1] * 256
2731        await port.custom_distributions.assign(0)
2732        await port.custom_distributions[0].comment.set(comment="Example Custom Distribution")
2733        await port.custom_distributions[0].definition.set(linear=enums.OnOff.OFF, symmetric=enums.OnOff.OFF, entry_count=len(data_x), data_x=data_x)
2734        await utils.apply(
2735            flow.impairment_distribution.duplication_type_config.custom.set(cust_id=0),
2736            flow.impairment_distribution.duplication_type_config.schedule.set(duration=1, period=1),
2737            flow.impairment_distribution.duplication_type_config.schedule.set(duration=0, period=0), #continuous
2738        )
2739
2740        # Set distribution and start impairment Duplication
2741        await flow.impairment_distribution.duplication_type_config.enable.set_on()
2742        await flow.impairment_distribution.duplication_type_config.enable.set_off()
2743
2744        # Configure impairment - Corruption
2745
2746        # Fixed Burst distribution for impairment Corruption
2747        await utils.apply(
2748            flow.impairment_distribution.corruption_type_config.fixed_burst.set(burst_size=1300),
2749            flow.impairment_distribution.corruption_type_config.schedule.set(duration=1, period=1), #repeat (duration = 1, period = x)
2750            flow.impairment_distribution.corruption_type_config.schedule.set(duration=1, period=0), #one shot
2751        )
2752        # Random Burst distribution for impairment Corruption
2753        await utils.apply(
2754            flow.impairment_distribution.corruption_type_config.random_burst.set(minimum=1, maximum=1, probability=10_0000),
2755            flow.impairment_distribution.corruption_type_config.schedule.set(duration=1, period=1),# repeat pattern
2756            flow.impairment_distribution.corruption_type_config.schedule.set(duration=0, period=0), #continuous
2757        )
2758
2759        # Fixed Rate distribution for impairment Corruption
2760        await utils.apply(
2761            flow.impairment_distribution.corruption_type_config.fixed_rate.set(probability=10_000),
2762            flow.impairment_distribution.corruption_type_config.schedule.set(duration=1, period=1), # repeat pattern
2763            flow.impairment_distribution.corruption_type_config.schedule.set(duration=0, period=0), #continuous
2764        )
2765
2766        # Bit Error Rate distribution for impairment Corruption
2767        await utils.apply(
2768            flow.impairment_distribution.corruption_type_config.bit_error_rate.set(coef=1, exp=1),
2769            flow.impairment_distribution.corruption_type_config.schedule.set(duration=1, period=1),# repeat pattern
2770            flow.impairment_distribution.corruption_type_config.schedule.set(duration=0, period=0), #continuous
2771        )
2772
2773        # Random Rate distribution for impairment Corruption
2774        await utils.apply(
2775            flow.impairment_distribution.corruption_type_config.random_rate.set(probability=10_000),
2776            flow.impairment_distribution.corruption_type_config.schedule.set(duration=1, period=1),# repeat pattern
2777            flow.impairment_distribution.corruption_type_config.schedule.set(duration=0, period=0), #continuous
2778        )
2779
2780        # Gilbert Elliot distribution for impairment Corruption
2781        await utils.apply(
2782            flow.impairment_distribution.corruption_type_config.ge.set(good_state_prob=0, good_state_trans_prob=0, bad_state_prob=0, bad_state_trans_prob=0),
2783            flow.impairment_distribution.corruption_type_config.schedule.set(duration=1, period=1),# repeat pattern
2784            flow.impairment_distribution.corruption_type_config.schedule.set(duration=0, period=0), #continuous
2785        )
2786
2787        # Uniform distribution for impairment Corruption
2788        await utils.apply(
2789            flow.impairment_distribution.corruption_type_config.uniform.set(minimum=1, maximum=1),
2790            flow.impairment_distribution.corruption_type_config.schedule.set(duration=1, period=1),# repeat pattern
2791            flow.impairment_distribution.corruption_type_config.schedule.set(duration=0, period=0), #continuous
2792        )
2793
2794        # Gaussian distribution for impairment Corruption
2795        await utils.apply(
2796            flow.impairment_distribution.corruption_type_config.gaussian.set(mean=1, std_deviation=1),
2797            flow.impairment_distribution.corruption_type_config.schedule.set(duration=1, period=1),# repeat pattern
2798            flow.impairment_distribution.corruption_type_config.schedule.set(duration=0, period=0), #continuous
2799        )
2800
2801        # Poisson distribution for impairment Corruption
2802        await utils.apply(
2803            flow.impairment_distribution.corruption_type_config.poisson.set(mean=9),
2804            flow.impairment_distribution.corruption_type_config.schedule.set(duration=1, period=1), # repeat pattern
2805            flow.impairment_distribution.corruption_type_config.schedule.set(duration=0, period=0), #continuous
2806        )
2807
2808        # Gamma distribution for impairment Corruption
2809        await utils.apply(
2810            flow.impairment_distribution.corruption_type_config.gamma.set(shape=1, scale=1),
2811            flow.impairment_distribution.corruption_type_config.schedule.set(duration=1, period=1), # repeat pattern
2812            flow.impairment_distribution.corruption_type_config.schedule.set(duration=0, period=0), #continuous
2813        )
2814
2815
2816        # Custom distribution for impairment Corruption
2817        data_x=[0, 1] * 256
2818        await port.custom_distributions.assign(0)
2819        await port.custom_distributions[0].comment.set(comment="Example Custom Distribution")
2820        await port.custom_distributions[0].definition.set(linear=enums.OnOff.OFF, symmetric=enums.OnOff.OFF, entry_count=len(data_x), data_x=data_x)
2821        await utils.apply(
2822            flow.impairment_distribution.corruption_type_config.custom.set(cust_id=0),
2823            flow.impairment_distribution.corruption_type_config.schedule.set(duration=1, period=1),
2824            flow.impairment_distribution.corruption_type_config.schedule.set(duration=0, period=0), #continuous
2825        )
2826
2827        # Set distribution and start impairment Corruption
2828        await flow.corruption.set(corruption_type=enums.CorruptionType.OFF)
2829        await flow.corruption.set(corruption_type=enums.CorruptionType.ETH)
2830        await flow.corruption.set(corruption_type=enums.CorruptionType.IP)
2831        await flow.corruption.set(corruption_type=enums.CorruptionType.TCP)
2832        await flow.corruption.set(corruption_type=enums.CorruptionType.UDP)
2833        await flow.corruption.set(corruption_type=enums.CorruptionType.BER)
2834        await flow.impairment_distribution.corruption_type_config.enable.set_on()
2835        await flow.impairment_distribution.corruption_type_config.enable.set_off()
2836
2837        await flow.impairment_distribution.corruption_type_config.enable.set_on()
2838
2839        resp = await flow.impairment_distribution.corruption_type_config.one_shot_status.get()
2840        resp.one_shot_status
2841
2842        # Configure bandwidth control - Policer
2843
2844        await flow.bandwidth_control.policer.set(on_off=enums.OnOff.ON, mode=enums.PolicerMode.L1, cir=10_000, cbs=1_000)
2845        await flow.bandwidth_control.policer.set(on_off=enums.OnOff.ON, mode=enums.PolicerMode.L2, cir=10_000, cbs=1_000)
2846
2847
2848        # Configure bandwidth control - Shaper
2849
2850        # Set and start bandwidth control Shaper
2851        await flow.bandwidth_control.shaper.set(on_off=enums.OnOff.ON, mode=enums.PolicerMode.L1, cir=10_000, cbs=1_000, buffer_size=1_000)
2852        await flow.bandwidth_control.shaper.set(on_off=enums.OnOff.ON, mode=enums.PolicerMode.L2, cir=10_000, cbs=1_000, buffer_size=1_000)
2853
2854        # Flow statistics
2855
2856        rx_total = await flow.statistics.rx.total.get()
2857        rx_total.byte_count
2858        rx_total.packet_count
2859        rx_total.l2_bps
2860        rx_total.pps
2861
2862        tx_total = await flow.statistics.tx.total.get()
2863        tx_total.byte_count
2864        tx_total.packet_count
2865        tx_total.l2_bps
2866        tx_total.pps
2867
2868        flow_drop_total = await flow.statistics.total.drop_packets.get()
2869        flow_drop_total.pkt_drop_count_total
2870        flow_drop_total.pkt_drop_count_programmed
2871        flow_drop_total.pkt_drop_count_bandwidth
2872        flow_drop_total.pkt_drop_count_other
2873        flow_drop_total.pkt_drop_ratio_total
2874        flow_drop_total.pkt_drop_ratio_programmed
2875        flow_drop_total.pkt_drop_ratio_bandwidth
2876        flow_drop_total.pkt_drop_ratio_other
2877
2878        flow_corrupted_total = await flow.statistics.total.corrupted_packets.get()
2879        flow_corrupted_total.fcs_corrupted_pkt_count
2880        flow_corrupted_total.fcs_corrupted_pkt_ratio
2881        flow_corrupted_total.ip_corrupted_pkt_count
2882        flow_corrupted_total.ip_corrupted_pkt_ratio
2883        flow_corrupted_total.tcp_corrupted_pkt_count
2884        flow_corrupted_total.tcp_corrupted_pkt_ratio
2885        flow_corrupted_total.total_corrupted_pkt_count
2886        flow_corrupted_total.total_corrupted_pkt_ratio
2887        flow_corrupted_total.udp_corrupted_pkt_count
2888        flow_corrupted_total.udp_corrupted_pkt_ratio
2889
2890        flow_delayed_total = await flow.statistics.total.latency_packets.get()
2891        flow_delayed_total.pkt_count
2892        flow_delayed_total.ratio
2893
2894        flow_jittered_total = await flow.statistics.total.jittered_packets.get()
2895        flow_jittered_total.pkt_count
2896        flow_jittered_total.ratio
2897
2898        flow_duplicated_total = await flow.statistics.total.duplicated_packets.get()
2899        flow_duplicated_total.pkt_count
2900        flow_duplicated_total.ratio
2901
2902        flow_misordered_total = await flow.statistics.total.mis_ordered_packets.get()
2903        flow_misordered_total.pkt_count
2904        flow_misordered_total.ratio
2905
2906        await flow.statistics.tx.clear.set()
2907        await flow.statistics.rx.clear.set()
2908        await flow.statistics.clear.set()
2909        
2910        # Port statistics
2911        port_drop = await port.emulation.statistics.drop.get()
2912        port_drop.pkt_drop_count_total
2913        port_drop.pkt_drop_count_programmed
2914        port_drop.pkt_drop_count_bandwidth
2915        port_drop.pkt_drop_count_other
2916        port_drop.pkt_drop_ratio_total
2917        port_drop.pkt_drop_ratio_programmed
2918        port_drop.pkt_drop_ratio_bandwidth
2919        port_drop.pkt_drop_ratio_other
2920
2921        port_corrupted = await port.emulation.statistics.corrupted.get()
2922        port_corrupted.fcs_corrupted_pkt_count
2923        port_corrupted.fcs_corrupted_pkt_ratio
2924        port_corrupted.ip_corrupted_pkt_count
2925        port_corrupted.ip_corrupted_pkt_ratio
2926        port_corrupted.tcp_corrupted_pkt_count
2927        port_corrupted.tcp_corrupted_pkt_ratio
2928        port_corrupted.total_corrupted_pkt_count
2929        port_corrupted.total_corrupted_pkt_ratio
2930        port_corrupted.udp_corrupted_pkt_count
2931        port_corrupted.udp_corrupted_pkt_ratio
2932
2933        port_delayed = await port.emulation.statistics.latency.get()
2934        port_delayed.pkt_count
2935        port_delayed.ratio
2936
2937        port_jittered = await port.emulation.statistics.jittered.get()
2938        port_jittered.pkt_count
2939        port_jittered.ratio
2940
2941        port_duplicated = await port.emulation.statistics.duplicated.get()
2942        port_duplicated.pkt_count
2943        port_duplicated.ratio
2944
2945        port_misordered = await port.emulation.statistics.mis_ordered.get()
2946        port_misordered.pkt_count
2947        port_misordered.ratio
2948
2949        await port.emulation.clear.set()
2950# endregion