diff --git a/README.md b/README.md index 026efc27..601c3613 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,9 @@ [![pypi](https://img.shields.io/pypi/v/snappi.svg)](https://pypi.org/project/snappi) [![python](https://img.shields.io/pypi/pyversions/snappi.svg)](https://pypi.python.org/pypi/snappi) -Test scripts written using `snappi` (a python library) can be executed against -any traffic generator conforming to [Open Traffic Generator API](https://github.com/open-traffic-generator/models/releases). +Test scripts written in `snappi`, an auto-generated python SDK, can be executed against any traffic generator conforming to [Open Traffic Generator API](https://github.com/open-traffic-generator/models). + +[Ixia-c](https://github.com/open-traffic-generator/ixia-c) is one such reference implementation of Open Traffic Generator API. > The repository is under active development and is subject to updates. All efforts will be made to keep the updates backwards compatible. @@ -17,61 +18,40 @@ any traffic generator conforming to [Open Traffic Generator API](https://github. ```sh python -m pip install --upgrade snappi -# or install along with ixnetwork extension -python -m pip install --upgrade "snappi[ixnetwork]" ``` ## Start scripting ```python -""" -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 -# when using ixnetwork extension, host is IxNetwork API Server -api = snappi.api(host='https://localhost:443', ext='ixnetwork') -# new config +# create a new API instance where host points to controller +api = snappi.api(host='https://localhost') + +# create a config object to be pushed to controller config = api.config() -# when using ixnetwork extension, port location is chassis-ip;card-id;port-id -tx, rx = ( - config.ports - .port(name='tx', location='192.168.0.1;2;1') - .port(name='rx', location='192.168.0.1;2;2') -) -# configure layer 1 properties -ly, = config.layer1.layer1(name='ly') -ly.port_names = [tx.name, rx.name] -ly.speed = ly.SPEED_10_GBPS -ly.media = ly.FIBER -# configure flow properties -flw, = config.flows.flow(name='flw') -# flow endpoints -flw.tx_rx.port.tx_name = tx.name -flw.tx_rx.port.rx_name = rx.name -# configure rate, size, frame count +# add a port with location pointing to traffic engine +prt = config.ports.port(name='prt', location='localhost:5555')[-1] +# add a flow and assign endpoints +flw = config.flows.flow(name='flw')[-1] +flw.tx_rx.port.tx_name = prt.name + +# configure 100 packets to be sent, each having a size of 128 bytes flw.size.fixed = 128 -flw.rate.pps = 1000 -flw.duration.fixed_packets.packets = 10000 -# configure protocol headers with defaults fields -flw.packet.ethernet().vlan().ipv4().tcp() +flw.duration.fixed_packets.packets = 100 + +# add Ethernet, IP and TCP protocol headers with defaults +flw.packet.ethernet().ipv4().tcp() + # push configuration api.set_config(config) + # start transmitting configured flows ts = api.transmit_state() ts.state = ts.START api.set_transmit_state(ts) -# create a query for flow metrics + +# fetch & print port metrics req = api.metrics_request() -req.flow.flow_names = [flw.name] -# wait for flow metrics to be as expected -while True: - res = api.get_metrics(req) - if all([m.frames_tx == 10000 == m.frames_rx for m in res.flow_metrics]): - break +req.port.port_names = [prt.name] +print(api.get_metrics(req)) ``` diff --git a/VERSION b/VERSION index dfdc3688..0c4b4549 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.3.21 +0.3.22 diff --git a/setup.py b/setup.py index e340976d..957b0cdc 100644 --- a/setup.py +++ b/setup.py @@ -44,7 +44,7 @@ 'typing' ], extras_require={ - 'ixnetwork': ['snappi_ixnetwork==0.3.11'] + 'ixnetwork': ['snappi_ixnetwork==0.3.12'] }, tests_require=['pytest'] )