-
Notifications
You must be signed in to change notification settings - Fork 275
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from open-traffic-generator/doc-ixiac
Document enhancement
- Loading branch information
Showing
15 changed files
with
966 additions
and
180 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,33 +1,113 @@ | ||
# Ixia-c-one | ||
# Keysight ixia-c-one | ||
|
||
ixia-c-one is a re-packaged (as a single-container) flavor of multi-container application[ixia-c](https://github.com/open-traffic-generator/ixia-c). | ||
It is identified with `ixia-c-one` kind in the [topology file](../topo-def-file.md). A kind defines a supported feature set and a startup procedure of a `ixia-c-one` node. | ||
Keysight ixia-c-one is a single-container distribution of [ixia-c][ixia-c], which in turn is Keysight's reference implementation of [Open Traffic Generator API][otg]. | ||
Client SDK for configuring ixia-c-one is available in various languages, most prevalent being [gosnappi][gosnappi]. | ||
|
||
The corresponding node in containerlab is identified with `keysight_ixia-c-one` kind in the [topology file](../topo-def-file.md). Upon boot up, it comes up with: | ||
- management interface `eth0` configured with IPv4/6 addresses as assigned by docker | ||
- hostname assigned to the node name | ||
- HTTPS service enabled on port 443 (for client SDK to push configuration and fetch metrics) | ||
|
||
## Managing ixia-c-one nodes | ||
Ixia-c-one node launched with containerlab can be managed via the following: | ||
|
||
=== "bash" | ||
to connect to a `bash` shell of a running ixia-c-one container: | ||
ixia-c-one is a `docker:dind` container hosting two kinds of [ixia-c][ixia-c] containers internally: | ||
- A set of containers acting as API endpoint and managing configuration across multiple test ports | ||
- A set of containers bound to network interface (created by containerlab), treating it as a test port (i.e. for generating or processing traffic, emulating protocols, etc.) | ||
|
||
Request and response to the API endpoint is driven by [Open Traffic Generator API][otg], and can be exercised in following two ways: | ||
- Using client SDK | ||
```bash | ||
# install go from https://go.dev/doc/install since we'll need it to run the test | ||
# and setup test environment | ||
mkdir tests && cd tests | ||
go mod init tests | ||
# gosnappi version needs to be compatible to a given release of ixia-c-one and | ||
# can be checked from https://github.com/open-traffic-generator/ixia-c/releases | ||
go get github.com/open-traffic-generator/snappi/gosnappi@v0.7.18 | ||
# download a basic IPv4 forwarding test | ||
curl -kLO https://raw.githubusercontent.com/open-traffic-generator/snappi-tests/main/scripts/ipv4_forwarding.go | ||
# run the test with MAC address obtained in previous step | ||
go run ipv4_forwarding.go -dstMac="<MAC address>" | ||
``` | ||
- Using curl and JSON payloads | ||
```bash | ||
docker exec -it <container-name/id> bash | ||
# fetch configuration that was last pushed to ixia-c-one | ||
curl -kL https://clab-ixia-c-ixia-c-one/config | ||
# fetch flow metrics | ||
curl -kL https://clab-ixia-c-ixia-c-one/results/metrics -d '{"choice": "flow"}' | ||
``` | ||
|
||
## Interfaces mapping | ||
ixia-c-one container uses the following mapping for its linux interfaces: | ||
|
||
* `eth0` - management interface connected to the containerlab management network | ||
* `eth1` - first data interface | ||
* The other interfaces are the data interfaces which are created using same name as provided in the containerlab topology yaml file. | ||
|
||
When containerlab launches ixia-c-one node, it will set IPv4/6 addresses as assigned by docker to the `eth0` interface and ixia-c-one node will boot with that addresses configured. | ||
|
||
When containerlab launches ixia-c-one node, it will set IPv4/6 addresses as assigned by docker to the `eth0` interface and ixia-c-one node will boot with that addresses configured. Data interfaces `eth1+` need to be configured with IP addressing manually. | ||
Data interfaces `eth1+` need to be configured with IP addressing manually if needed (as in the Layer3 forwarding test example). | ||
This is needed when the test port needs to reply to ARP/ND queries from the Device Under Test. | ||
|
||
- To configure an IPv4 address on any data link e.g. eth2 (Could be eth1 or eth3 as well, but never on eth0): | ||
```bash | ||
docker exec -it clab-ixia-c-ixia-c-one bash -c "./ifcfg add eth2 2.2.2.2 24" | ||
``` | ||
- To unset an IPv4 address on any data link e.g. eth2 | ||
```bash | ||
docker exec -it clab-ixia-c-ixia-c-one bash -c "./ifcfg del eth2 2.2.2.2 24" | ||
``` | ||
- To configure an IPv6 address on any data link e.g. eth1 : | ||
```bash | ||
docker exec -it clab-ixia-c-ixia-c-one bash -c "./ifcfg add eth1 11::1 64" | ||
``` | ||
- To unset an IPv4 address on any data link e.g. eth2 | ||
```bash | ||
docker exec -it clab-ixia-c-ixia-c-one bash -c "./ifcfg del eth1 11::1 64" | ||
``` | ||
|
||
## Features and options | ||
<TBD> | ||
The free version of ixia-c supports generation of L2 and L3 traffic to test forwarding of Ethernet, IPv4 and IPv6 traffic by switches and routers. For technical support and queries , please log requests at https://github.com/open-traffic-generator/ixia-c/issues or contact us @ https://ixia-c.slack.com/signup#/domain-signup . | ||
|
||
The commercial version of ixia-c supports ARP/ND/Auto destination MAC resolution in data traffic, IPv4 and IPv6 BGP with IPv4 and IPv6 Routes and ISIS with IPv4 and IPv6 routes. Please contact Keysight support for further information regarding this if needed. | ||
|
||
## Lab examples | ||
The following labs feature ixia-c-one node: | ||
The following labs feature Keysight ixia-c-one node: | ||
|
||
- [Ixia-c-one and Arista cEOS](../../lab-examples/ixiacone-ceos.md) | ||
- [Keysight ixia-c-one and Arista cEOS](../../lab-examples/ixiacone-ceos.md) | ||
|
||
## Known issues or limitations | ||
<TBD> | ||
1. For L3 traffic tests using the free version , there is no in-built support of ARP and ND. | ||
This can be worked around by manually setting IP address on the receive interface (as explained in Interfaces mapping section above) and by learning the MAC of the connected DUT using external means such as gnmi/ssh/reading it from CLI and using it when generating packets. | ||
This limitation will be removed in the ixia-c-one free version in future releases where it is planned to support ARP/ND Request and Reply for emulated interfaces. | ||
|
||
2. Every time a containerlab topology with an ixia-c-one node is removed, it leaves behind a persistent storage. | ||
If there are no other persistent unlinked storages on your system, you can remove it by removing all unlinked persistent storages by giving the command: | ||
```bash | ||
docker volume prune | ||
``` | ||
|
||
If you wish to be very safe: | ||
```bash | ||
# get the volume corresponding ot ixia-c-one node | ||
docker inspect clab-ixia-c-ixia-c-one | ||
# note the volume name from output | ||
"Mounts": [ | ||
{ | ||
"Type": "volume", | ||
"Name": "d1e87f85d3352bfb9dac3f8bac8eebee738503802cb9380966b5c4805bd791da", | ||
"Source": "/var/lib/docker/volumes/d1e87f85d3352bfb9dac3f8bac8eebee738503802cb9380966b5c4805bd791da/_data", | ||
"Destination": "/var/lib/docker", | ||
# remove the volume | ||
docker volume remove d1e87f85d3352bfb9dac3f8bac8eebee738503802cb9380966b5c4805bd791da | ||
``` | ||
> This can be optionally be fixed in containerlab with one of the two approaches below: | ||
> i) During docker run pass the --rm flag when starting the containers, or | ||
> ii) During docker rm pass the -v flag when removing the containers. | ||
[ixia-c]: https://github.com/open-traffic-generator/ixia-c | ||
[otg]: https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/master/artifacts/openapi.yaml | ||
[gosnappi]: https://github.com/open-traffic-generator/snappi/tree/main/gosnappi | ||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
name: ixia-c | ||
|
||
topology: | ||
kinds: | ||
keysight_ixia-c-one: | ||
image: ghcr.io/open-traffic-generator/ixia-c-one:0.0.1-2738 | ||
ceos: | ||
image: ceos:4.26.1F | ||
nodes: | ||
ixia-c-one: | ||
kind: keysight_ixia-c-one | ||
ceos: | ||
kind: ceos | ||
startup-config: enable_ssh_ceos.cfg | ||
enforce-startup-config: true | ||
|
||
links: | ||
- endpoints: ["ixia-c-one:eth1", "ceos:eth1"] | ||
- endpoints: ["ixia-c-one:eth2", "ceos:eth2"] |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters