# snappi Extension for IxNetwork
[![license](https://img.shields.io/badge/license-MIT-green.svg)](https://en.wikipedia.org/wiki/MIT_License)
[![Project Status: Active - The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)
[![Build](https://github.com/open-traffic-generator/snappi-ixnetwork/workflows/Build/badge.svg)](https://github.com/open-traffic-generator/snappi-ixnetwork/actions)
[![pypi](https://img.shields.io/pypi/v/snappi_ixnetwork.svg)](https://pypi.org/project/snappi_ixnetwork)
[![python](https://img.shields.io/pypi/pyversions/snappi_ixnetwork.svg)](https://pypi.python.org/pypi/snappi_ixnetwork)
[![Total alerts](https://img.shields.io/lgtm/alerts/g/open-traffic-generator/snappi-ixnetwork.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/open-traffic-generator/snappi-ixnetwork/alerts/)
[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/open-traffic-generator/snappi-ixnetwork.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/open-traffic-generator/snappi-ixnetwork/context:python)
[![downloads](https://pepy.tech/badge/snappi-ixnetwork)](https://pepy.tech/project/snappi-ixnetwork)
This extension allows executing test scripts written using [snappi](https://github.com/open-traffic-generator/snappi) against
IxNetwork, (one of) Keysight's implementation of [Open Traffic Generator](https://github.com/open-traffic-generator/models/releases).
> The repository is under active development.
To start contributing, please see [contributing.md](contributing.md).
## Install on a client
```sh
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
# host is IxNetwork API Server
api = snappi.api(location='https://localhost:443', ext='ixnetwork')
# new config
config = api.config()
# 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
# enable flow metrics
flw.metrics.enable = True
# configure rate, size, frame count
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()
# push configuration
api.set_config(config)
# start transmitting configured flows
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 # noqa
res = api.set_control_state(control_state)
if len(res.warnings) > 0:
print("Warnings: {}".format(res.warnings))
# create a query for flow 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
```
Raw data
{
"_id": null,
"home_page": "https://github.com/open-traffic-generator/snappi-ixnetwork",
"name": "snappi-ixnetwork",
"maintainer": null,
"docs_url": null,
"requires_python": "<4,>=2.7",
"maintainer_email": null,
"keywords": "snappi ixnetwork testing open traffic generator automation",
"author": "ajbalogh",
"author_email": "andy.balogh@keysight.com",
"download_url": "https://files.pythonhosted.org/packages/4c/35/1f9e0b70542d45670f778cc75f7e82ebe58999754bf9f8fc89e339c27f31/snappi_ixnetwork-1.19.0.tar.gz",
"platform": null,
"description": "# snappi Extension for IxNetwork\n\n[![license](https://img.shields.io/badge/license-MIT-green.svg)](https://en.wikipedia.org/wiki/MIT_License)\n[![Project Status: Active - The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)\n[![Build](https://github.com/open-traffic-generator/snappi-ixnetwork/workflows/Build/badge.svg)](https://github.com/open-traffic-generator/snappi-ixnetwork/actions)\n[![pypi](https://img.shields.io/pypi/v/snappi_ixnetwork.svg)](https://pypi.org/project/snappi_ixnetwork)\n[![python](https://img.shields.io/pypi/pyversions/snappi_ixnetwork.svg)](https://pypi.python.org/pypi/snappi_ixnetwork)\n[![Total alerts](https://img.shields.io/lgtm/alerts/g/open-traffic-generator/snappi-ixnetwork.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/open-traffic-generator/snappi-ixnetwork/alerts/)\n[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/open-traffic-generator/snappi-ixnetwork.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/open-traffic-generator/snappi-ixnetwork/context:python)\n[![downloads](https://pepy.tech/badge/snappi-ixnetwork)](https://pepy.tech/project/snappi-ixnetwork)\n\nThis extension allows executing test scripts written using [snappi](https://github.com/open-traffic-generator/snappi) against \nIxNetwork, (one of) Keysight's implementation of [Open Traffic Generator](https://github.com/open-traffic-generator/models/releases).\n\n> The repository is under active development.\n\nTo start contributing, please see [contributing.md](contributing.md).\n\n## Install on a client \n\n```sh\npython -m pip install --upgrade \"snappi[ixnetwork]\"\n```\n\n## Start scripting\n\n```python\n\"\"\"\nConfigure a raw TCP flow with,\n- tx port as source to rx port as destination\n- frame count 10000, each of size 128 bytes\n- transmit rate of 1000 packets per second\nValidate,\n- frames transmitted and received for configured flow is as expected\n\"\"\"\n\nimport snappi\n# host is IxNetwork API Server\napi = snappi.api(location='https://localhost:443', ext='ixnetwork')\n# new config\nconfig = api.config()\n# port location is chassis-ip;card-id;port-id\ntx, rx = (\n config.ports\n .port(name='tx', location='192.168.0.1;2;1')\n .port(name='rx', location='192.168.0.1;2;2')\n)\n# configure layer 1 properties\nly, = config.layer1.layer1(name='ly')\nly.port_names = [tx.name, rx.name]\nly.speed = ly.SPEED_10_GBPS\nly.media = ly.FIBER\n# configure flow properties\nflw, = config.flows.flow(name='flw')\n# flow endpoints\nflw.tx_rx.port.tx_name = tx.name\nflw.tx_rx.port.rx_name = rx.name\n# enable flow metrics\nflw.metrics.enable = True\n# configure rate, size, frame count\nflw.size.fixed = 128\nflw.rate.pps = 1000\nflw.duration.fixed_packets.packets = 10000\n# configure protocol headers with defaults fields\nflw.packet.ethernet().vlan().ipv4().tcp()\n# push configuration\napi.set_config(config)\n# start transmitting configured flows\ncontrol_state = api.control_state()\ncontrol_state.choice = control_state.TRAFFIC\ncontrol_state.traffic.choice = control_state.traffic.FLOW_TRANSMIT\ncontrol_state.traffic.flow_transmit.state = control_state.traffic.flow_transmit.START # noqa\nres = api.set_control_state(control_state)\nif len(res.warnings) > 0:\n print(\"Warnings: {}\".format(res.warnings))\n# create a query for flow metrics\nreq = api.metrics_request()\nreq.flow.flow_names = [flw.name]\n# wait for flow metrics to be as expected\nwhile True:\n res = api.get_metrics(req)\n if all([m.frames_tx == 10000 == m.frames_rx for m in res.flow_metrics]):\n break\n```\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "The Snappi IxNetwork Open Traffic Generator Python Package",
"version": "1.19.0",
"project_urls": {
"Homepage": "https://github.com/open-traffic-generator/snappi-ixnetwork"
},
"split_keywords": [
"snappi",
"ixnetwork",
"testing",
"open",
"traffic",
"generator",
"automation"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "68a2b9c83dd3346d1d43e12f353b8d85361d4980e949accd0f99685dcd575019",
"md5": "1ba4ab94f5a3d3a567fcce998a48eb9c",
"sha256": "78be1b769233a0d1be5b5d50bf5958bd6a8d10acd8862e341a77743bda654209"
},
"downloads": -1,
"filename": "snappi_ixnetwork-1.19.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "1ba4ab94f5a3d3a567fcce998a48eb9c",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": "<4,>=2.7",
"size": 86056,
"upload_time": "2024-12-19T12:39:18",
"upload_time_iso_8601": "2024-12-19T12:39:18.748626Z",
"url": "https://files.pythonhosted.org/packages/68/a2/b9c83dd3346d1d43e12f353b8d85361d4980e949accd0f99685dcd575019/snappi_ixnetwork-1.19.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4c351f9e0b70542d45670f778cc75f7e82ebe58999754bf9f8fc89e339c27f31",
"md5": "c0805d75e1ba4a4f75e36ff27b512e07",
"sha256": "b394c2dbe957e6b0ed53dd88d1518166ef61276fa10e0f4d968d8e6881a499f9"
},
"downloads": -1,
"filename": "snappi_ixnetwork-1.19.0.tar.gz",
"has_sig": false,
"md5_digest": "c0805d75e1ba4a4f75e36ff27b512e07",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4,>=2.7",
"size": 93820,
"upload_time": "2024-12-19T12:39:21",
"upload_time_iso_8601": "2024-12-19T12:39:21.657698Z",
"url": "https://files.pythonhosted.org/packages/4c/35/1f9e0b70542d45670f778cc75f7e82ebe58999754bf9f8fc89e339c27f31/snappi_ixnetwork-1.19.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-19 12:39:21",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "open-traffic-generator",
"github_project": "snappi-ixnetwork",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "mock",
"specs": []
},
{
"name": "ipaddr",
"specs": [
[
"==",
"2.2.0"
]
]
},
{
"name": "netaddr",
"specs": [
[
"==",
"0.8.0"
]
]
},
{
"name": "ipaddress",
"specs": [
[
"==",
"1.0.23"
]
]
},
{
"name": "flake8",
"specs": []
},
{
"name": "dpkt",
"specs": []
},
{
"name": "black",
"specs": []
}
],
"lcname": "snappi-ixnetwork"
}