snappi Extension for IxNetwork

This extension allows executing test scripts written using snappi against
IxNetwork, (one of) Keysight's implementation of Open Traffic Generator.
The repository is under active development.
To start contributing, please see contributing.md.
Install on a client
python -m pip install --upgrade "snappi[ixnetwork]"
Start scripting
"""
Configure a raw TCP flow with,
- tx port as source to rx port as destination
- frame count 10000, each of size 128 bytes
- transmit rate of 1000 packets per second
Validate,
- frames transmitted and received for configured flow is as expected
"""
import snappi
api = snappi.api(location='https://localhost:443', ext='ixnetwork')
config = api.config()
tx, rx = (
config.ports
.port(name='tx', location='192.168.0.1;2;1')
.port(name='rx', location='192.168.0.1;2;2')
)
ly, = config.layer1.layer1(name='ly')
ly.port_names = [tx.name, rx.name]
ly.speed = ly.SPEED_10_GBPS
ly.media = ly.FIBER
flw, = config.flows.flow(name='flw')
flw.tx_rx.port.tx_name = tx.name
flw.tx_rx.port.rx_name = rx.name
flw.metrics.enable = True
flw.size.fixed = 128
flw.rate.pps = 1000
flw.duration.fixed_packets.packets = 10000
flw.packet.ethernet().vlan().ipv4().tcp()
api.set_config(config)
control_state = api.control_state()
control_state.choice = control_state.TRAFFIC
control_state.traffic.choice = control_state.traffic.FLOW_TRANSMIT
control_state.traffic.flow_transmit.state = control_state.traffic.flow_transmit.START
res = api.set_control_state(control_state)
if len(res.warnings) > 0:
print("Warnings: {}".format(res.warnings))
req = api.metrics_request()
req.flow.flow_names = [flw.name]
while True:
res = api.get_metrics(req)
if all([m.frames_tx == 10000 == m.frames_rx for m in res.flow_metrics]):
break