[
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\n\nenv:\n  PYTHON_VERSION: \"3.8\"\n  GO_VERSION: \"1.23\"\n\non:\n  push:\n\njobs:\n  examples_curl:\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Checkout source\n        uses: actions/checkout@v3\n        with: \n          submodules: true\n      - name: Setup docker\n        uses: docker/setup-buildx-action@v3\n      - name: Deploy Ixia-C\n        run: |\n          sed -n '58,61p' readme.md > deploy.sh\n          sh deploy.sh\n      - name: Setup and run tests\n        run: |\n          sed -n '90,97p' readme.md > test.sh\n          sh test.sh\n      - name: Get container logs\n        if: always()\n        run: |\n          cd conformance && ./do.sh topo logs\n      - name: Archive logs\n        if: always()\n        uses: actions/upload-artifact@v4\n        with:\n          name: examples_curl\n          path: |\n            conformance/logs\n\n  examples_go_py:\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Checkout source\n        uses: actions/checkout@v3\n        with: \n          submodules: true\n      - name: Setup docker\n        uses: docker/setup-buildx-action@v3\n      - name: Deploy Ixia-C\n        run: |\n          sed -n '58,61p' readme.md > deploy.sh\n          sh deploy.sh\n      - name: Setup Python\n        uses: actions/setup-python@v4\n        with:\n          python-version: ${{ env.PYTHON_VERSION }}\n      - name: Setup Go\n        uses: actions/setup-go@v3\n        with:\n          go-version: ${{ env.GO_VERSION }}\n      - name: Setup and run tests\n        run: |\n          sed -n '67,78p' readme.md > test.sh\n          sh test.sh\n      - name: Get container logs\n        if: always()\n        run: |\n          cd conformance && ./do.sh topo logs\n      - name: Archive logs\n        if: always()\n        uses: actions/upload-artifact@v4\n        with:\n          name: examples_go_py\n          path: |\n            conformance/logs\n\n  deployments_k8s:\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Checkout source\n        uses: actions/checkout@v3\n        with: \n          submodules: true\n      - name: Setup docker\n        uses: docker/setup-buildx-action@v3\n      - name: Setup Go\n        uses: actions/setup-go@v3\n        with:\n          go-version: ${{ env.GO_VERSION }}\n      - name: Setup Cluster\n        run: |\n          cd deployments/k8s\n          sed -n '26,34p' readme.md > setup-cluster.sh\n          sh setup-cluster.sh\n      - name: Download images\n        run: |\n          cd deployments/k8s\n          sed -n '42,49p' readme.md > download-images.sh\n          sh download-images.sh\n      - name: Setup Pods and Services\n        run: |\n          cd deployments/k8s\n          sed -n '61,64p' readme.md > setup-pods-services.sh\n          sh setup-pods-services.sh\n      - name: Setup tests\n        run: |\n          cd deployments/k8s\n          sed -n '75,77p' readme.md > setup-tests.sh\n          sh setup-tests.sh\n      - name: Run tests\n        run: |\n          cd deployments/k8s\n          sed -n '85,86p' readme.md > run-tests.sh\n          sh run-tests.sh\n\n  deployments_k8s_network_emulation:\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Checkout source\n        uses: actions/checkout@v3\n        with: \n          submodules: true\n      - name: Setup docker\n        uses: docker/setup-buildx-action@v3\n      - name: Setup Go\n        uses: actions/setup-go@v3\n        with:\n          go-version: ${{ env.GO_VERSION }}\n      - name: Setup Cluster\n        run: |\n          sed -n '49,60p' deployments/k8s/network-emulation/readme.md > setup-cluster.sh\n          sh setup-cluster.sh\n      - name: Download images\n        run: |\n          sed -n '66,91p' deployments/k8s/network-emulation/readme.md > download-images.sh\n          sh download-images.sh\n      - name: Setup Meshnet\n        run: |\n          sed -n '97,105p' deployments/k8s/network-emulation/readme.md > setup-meshnet.sh\n          sh setup-meshnet.sh\n      - name: Setup Interfaces\n        run: |\n          sed -n '113,118p' deployments/k8s/network-emulation/readme.md > setup-interfaces.sh\n          sh setup-interfaces.sh\n      - name: Setup Pods and Services\n        run: |\n          sed -n '124,131p' deployments/k8s/network-emulation/readme.md > setup-pods-services.sh\n          sh setup-pods-services.sh\n      - name: Setup and run tests\n        run: |\n          sed -n '141,143p' deployments/k8s/network-emulation/readme.md > test.sh\n          sh test.sh\n      - name: Cleanup\n        run: |\n          sed -n '153,157p' deployments/k8s/network-emulation/readme.md > cleanup.sh\n          sh cleanup.sh"
  },
  {
    "path": ".github/workflows/publish.yml",
    "content": "name: publish\non:\n  push:\n    branches:\n      - main\n  workflow_dispatch:\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n        with:\n          submodules: recursive\n      - uses: actions/setup-python@v4\n        with:\n          python-version: 3.x\n      - run: pip install mkdocs-material\n      - run: mkdocs gh-deploy --force\n"
  },
  {
    "path": ".gitignore",
    "content": "scratch\nenv\n*.pcap\n*.log\nvenv\nsite\n.DS_Store\n*.bkp\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"conformance\"]\n\tpath = conformance\n\turl = https://github.com/open-traffic-generator/conformance.git\n"
  },
  {
    "path": ".markdownlint.json",
    "content": "{\n    \"default\": true,\n    \"MD013\" : false,\n    \"MD033\": false\n}\n\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "\n# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participation in our\ncommunity a harassment-free experience for everyone, regardless of age, body\nsize, visible or invisible disability, ethnicity, sex characteristics, gender\nidentity and expression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, caste, color, religion, or sexual\nidentity and orientation.\n\nWe pledge to act and interact in ways that contribute to an open, welcoming,\ndiverse, inclusive, and healthy community.\n\n## Our Standards\n\nExamples of behavior that contributes to a positive environment for our\ncommunity include:\n\n* Demonstrating empathy and kindness toward other people\n* Being respectful of differing opinions, viewpoints, and experiences\n* Giving and gracefully accepting constructive feedback\n* Accepting responsibility and apologizing to those affected by our mistakes,\n  and learning from the experience\n* Focusing on what is best not just for us as individuals, but for the overall\n  community\n\nExamples of unacceptable behavior include:\n\n* The use of sexualized language or imagery, and sexual attention or advances of\n  any kind\n* Trolling, insulting or derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or email address,\n  without their explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n  professional setting\n\n## Enforcement Responsibilities\n\nCommunity leaders are responsible for clarifying and enforcing our standards of\nacceptable behavior and will take appropriate and fair corrective action in\nresponse to any behavior that they deem inappropriate, threatening, offensive,\nor harmful.\n\nCommunity leaders have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions that are\nnot aligned to this Code of Conduct, and will communicate reasons for moderation\ndecisions when appropriate.\n\n## Scope\n\nThis Code of Conduct applies within all community spaces, and also applies when\nan individual is officially representing the community in public spaces.\nExamples of representing our community include using an official e-mail address,\nposting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported to the community leaders responsible for enforcement at\nopen-traffic-generator@googlegroups.com.\nAll complaints will be reviewed and investigated promptly and fairly.\n\nAll community leaders are obligated to respect the privacy and security of the\nreporter of any incident.\n\n## Enforcement Guidelines\n\nCommunity leaders will follow these Community Impact Guidelines in determining\nthe consequences for any action they deem in violation of this Code of Conduct:\n\n### 1. Correction\n\n**Community Impact**: Use of inappropriate language or other behavior deemed\nunprofessional or unwelcome in the community.\n\n**Consequence**: A private, written warning from community leaders, providing\nclarity around the nature of the violation and an explanation of why the\nbehavior was inappropriate. A public apology may be requested.\n\n### 2. Warning\n\n**Community Impact**: A violation through a single incident or series of\nactions.\n\n**Consequence**: A warning with consequences for continued behavior. No\ninteraction with the people involved, including unsolicited interaction with\nthose enforcing the Code of Conduct, for a specified period of time. This\nincludes avoiding interactions in community spaces as well as external channels\nlike social media. Violating these terms may lead to a temporary or permanent\nban.\n\n### 3. Temporary Ban\n\n**Community Impact**: A serious violation of community standards, including\nsustained inappropriate behavior.\n\n**Consequence**: A temporary ban from any sort of interaction or public\ncommunication with the community for a specified period of time. No public or\nprivate interaction with the people involved, including unsolicited interaction\nwith those enforcing the Code of Conduct, is allowed during this period.\nViolating these terms may lead to a permanent ban.\n\n### 4. Permanent Ban\n\n**Community Impact**: Demonstrating a pattern of violation of community\nstandards, including sustained inappropriate behavior, harassment of an\nindividual, or aggression toward or disparagement of classes of individuals.\n\n**Consequence**: A permanent ban from any sort of public interaction within the\ncommunity.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage],\nversion 2.1, available at\n[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].\n\nCommunity Impact Guidelines were inspired by\n[Mozilla's code of conduct enforcement ladder][Mozilla CoC].\n\nFor answers to common questions about this code of conduct, see the FAQ at\n[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at\n[https://www.contributor-covenant.org/translations][translations].\n\n[homepage]: https://www.contributor-covenant.org\n[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html\n[Mozilla CoC]: https://github.com/mozilla/diversity\n[FAQ]: https://www.contributor-covenant.org/faq\n[translations]: https://www.contributor-covenant.org/translations\n\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\nWhen contributing to this repository, please first discuss the change you wish to make, via issue or email (open-traffic-generator@googlegroups.com), with the owners of this repository.\n\nPlease note we have a [code of conduct](CODE_OF_CONDUCT.md), please follow it in all your interactions with the project.\n\n## Steps to Contribute\n\nThis repo uses GitHub to manage reviews of [pull requests](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests).\n\nShould you wish to work on an issue, please claim it first by commenting on the GitHub issue that you want to work on it. This is to prevent duplicated efforts from contributors on the same issue.\n\nIf you have a trivial fix or improvement, go ahead and create a pull request, and submit it for review.\n\n## Pull Request Checklist\n\n* Branch from the main branch and, if needed, rebase to the current main branch before submitting your pull request. If it doesn't merge cleanly with main you may be asked to rebase your changes.\n\n* Commits should be as small as possible, while ensuring that each commit is correct independently (i.e., each commit should compile and pass tests).\n\n* If your patch is not getting reviewed or you need a specific person to review it, you can @-reply a reviewer asking for a review in the pull request or a comment. You can also send a message to open-traffic-generator@googlegroups.com.  \n\n* Add tests relevant to the fixed bug or new feature.\n"
  },
  {
    "path": "deployments/docker/deployment.sh",
    "content": "#!/bin/bash\n\n\n\nVERSIONS_YAML_LOC=\"https://github.com/open-traffic-generator/ixia-c/releases/download/v1.53.0-1/versions.yaml\"\nVERSIONS_YAML=\"versions.yaml\"\nCTRL_IMAGE=\"ghcr.io/open-traffic-generator/keng-controller\"\nTE_IMAGE=\"ghcr.io/open-traffic-generator/ixia-c-traffic-engine\"\nPE_IMAGE=\"ghcr.io/open-traffic-generator/ixia-c-protocol-engine\"\n\nif [ -n \"$AUTH_TOKEN\" ]; then\n    curl -lO -H \"Authorization: Bearer $AUTH_TOKEN\" $VERSIONS_YAML_LOC\nelse\n    curl -kLO $VERSIONS_YAML_LOC\nfi\n\nTIMEOUT_SECONDS=300\n\n# --- Argument parsing for ETH_A and ETH_Z ---\nif [ -z \"$1\" ] || [ -z \"$2\" ]; then\n    echo \"usage: $0 <eth_A> <eth_Z> <function> [args...]\"\n    exit 1\nfi\n\nETH_A=$1\nETH_Z=$2\nshift 2\n\nset_docker_permission() {\n    if ! groups $USER | grep -q '\\bdocker\\b'; then\n        echo \"Adding $USER to docker group (relogin required to take effect).\"\n        sudo usermod -aG docker $USER\n    fi\n    docker ps -a\n}\n\nset_docker_permission\n\nconfigq() {\n    # echo is needed to further evaluate the \n    # contents extracted from configuration\n    eval echo $(yq \"${@}\" versions.yaml)\n}\n\npush_ifc_to_container() {\n    # It takes a host NIC (say eth1) and injects it into a container’s \n    # network namespace so the container can directly use that NIC (bypassing Docker’s default bridge). \n    # It symlinks the container’s netns into /var/run/netns, \n    # then moves and configures the interface inside that namespace.\n    if [ -z \"${1}\" ] || [ -z \"${2}\" ]\n    then\n        echo \"usage: ${0} push_ifc_to_container <ifc-name> <container-name>\"\n        exit 1\n    fi\n\n    # Resolve container metadata\n    cid=$(container_id ${2})\n    cpid=$(container_pid ${2})\n\n    echo \"Changing namespace of ifc ${1} to container ID ${cid} pid ${cpid}\"\n\n    # Prepare namespace paths\n    orgPath=/proc/${cpid}/ns/net\n    newPath=/var/run/netns/${cid}\n    \n    # Make namespace accessible to ip netns \n    # Move interface into the container’s netns\n    # Rename and configure inside the container\n    sudo mkdir -p /var/run/netns\n    echo \"Creating symlink ${orgPath} -> ${newPath}\"\n    sudo ln -s ${orgPath} ${newPath} \\\n    && sudo ip link set ${1} netns ${cid} \\\n    && sudo ip netns exec ${cid} ip link set ${1} name ${1} \\\n    && sudo ip netns exec ${cid} ip -4 addr add 0/0 dev ${1} \\\n    && sudo ip netns exec ${cid} ip -4 link set ${1} up \\\n    && echo \"Successfully changed namespace of ifc ${1}\"\n\n    sudo rm -rf ${newPath}\n}\n\ncontainer_id() {\n    docker inspect --format=\"{{json .Id}}\" ${1} | cut -d\\\" -f 2\n}\n\ncontainer_pid() {\n    docker inspect --format=\"{{json .State.Pid}}\" ${1} | cut -d\\\" -f 2\n}\n\ncontainer_ip() {\n    docker inspect --format=\"{{json .NetworkSettings.IPAddress}}\" ${1} | cut -d\\\" -f 2\n}\n\nixia_c_img_tag() {\n    tag=$(grep ${1} ${VERSIONS_YAML} | cut -d: -f2 | cut -d\\  -f2)\n    echo \"${tag}\"\n}\n\nixia_c_traffic_engine_img() {\n    echo \"${TE_IMAGE}:$(ixia_c_img_tag ixia-c-traffic-engine)\"\n}\n\nixia_c_protocol_engine_img() {\n    echo \"${PE_IMAGE}:$(ixia_c_img_tag ixia-c-protocol-engine)\"\n}\n\nkeng_controller_img() {\n    echo \"${CTRL_IMAGE}:$(ixia_c_img_tag keng-controller)\"\n}\n\ngen_controller_config_b2b_cpdp() {\n    configdir=/home/ixia-c/controller/config\n    OTG_PORTA=$(container_ip ixia-c-traffic-engine-${ETH_A})\n    OTG_PORTZ=$(container_ip ixia-c-traffic-engine-${ETH_Z})\n    \n    wait_for_sock ${OTG_PORTA} 5555\n    wait_for_sock ${OTG_PORTA} 50071\n    wait_for_sock ${OTG_PORTZ} 5555\n    wait_for_sock ${OTG_PORTZ} 50071\n\n    yml=\"location_map:\n          - location: ${ETH_A}\n            endpoint: \\\"${OTG_PORTA}:5555+${OTG_PORTA}:50071\\\"\n          - location: ${ETH_Z}\n            endpoint: \\\"${OTG_PORTZ}:5555+${OTG_PORTZ}:50071\\\"\n        \"\n    echo -n \"$yml\" | sed \"s/^        //g\" | tee ./config.yaml > /dev/null \\\n    && docker exec keng-controller mkdir -p ${configdir} \\\n    && docker cp ./config.yaml keng-controller:${configdir}/ \\\n    && rm -rf ./config.yaml\n}\n\ngen_controller_config_b2b_dp() {\n    configdir=/home/ixia-c/controller/config\n    OTG_PORTA=$(container_ip ixia-c-traffic-engine-${ETH_A})\n    OTG_PORTZ=$(container_ip ixia-c-traffic-engine-${ETH_Z})\n    \n    wait_for_sock ${OTG_PORTA} 5555\n    wait_for_sock ${OTG_PORTZ} 5555\n\n    yml=\"location_map:\n          - location: ${ETH_A}\n            endpoint: \\\"${OTG_PORTA}:5555\\\"\n          - location: ${ETH_Z}\n            endpoint: \\\"${OTG_PORTZ}:5555\\\"\n        \"\n    echo -n \"$yml\" | sed \"s/^        //g\" | tee ./config.yaml > /dev/null \\\n    && docker exec keng-controller mkdir -p ${configdir} \\\n    && docker cp ./config.yaml keng-controller:${configdir}/ \\\n    && rm -rf ./config.yaml\n}\n\nwait_for_sock() {\n    TIMEOUT_SECONDS=30\n    if [ ! -z \"${3}\" ]\n    then\n        TIMEOUT_SECONDS=${3}\n    fi\n    echo \"Waiting for ${1}:${2} to be ready (timeout=${TIMEOUT_SECONDS}s)...\"\n    elapsed=0\n    TIMEOUT_SECONDS=$(($TIMEOUT_SECONDS * 10))\n    while true\n    do\n        nc -z -v ${1} ${2} && return 0\n\n        elapsed=$(($elapsed+1))\n        # echo \"Timeout: $TIMEOUT_SECONDS\"\n        # echo \"elapsed time: $elapsed\"\n\n        if [ $elapsed -gt ${TIMEOUT_SECONDS} ]\n        then\n            echo \"${1}:${2} to be ready after ${TIMEOUT_SECONDS}\"\n            exit 1\n        fi\n        sleep 0.1\n    done\n\n}\n\nprepare_eth_pair() {\n    if [ -z \"${1}\" ] || [ -z \"${2}\" ]\n    then\n        echo \"usage: ${0} create_veth_pair <name1> <name2>\"\n        exit 1\n    fi\n\n    sudo ip link set ${1} up \\\n    && sudo ip link set ${1} promisc on \\\n    && sudo ip link set ${2} up \\\n    && sudo ip link set ${2} promisc on\n}\n\ncreate_ixia_c_b2b_cpdp() {\n    docker ps -a\n    echo \"Setting up back-to-back with CP/DP distribution of ixia-c ...\"\n    docker run -d                                        \\\n    --name=keng-controller                              \\\n    --publish 0.0.0.0:8443:8443                         \\\n    --publish 0.0.0.0:40051:40051                       \\\n    $(keng_controller_img)                              \\\n    --accept-eula                                       \\\n    --trace                                             \\\n    --disable-app-usage-reporter\n    docker run --privileged -d                           \\\n        --name=ixia-c-traffic-engine-${ETH_A}              \\\n        -e OPT_LISTEN_PORT=\"5555\"                           \\\n        -e ARG_IFACE_LIST=\"virtual@af_packet,${ETH_A}\"     \\\n        -e OPT_NO_HUGEPAGES=\"Yes\"                           \\\n        -e OPT_NO_PINNING=\"Yes\"                             \\\n        -e WAIT_FOR_IFACE=\"Yes\"                             \\\n        -e OPT_ADAPTIVE_CPU_USAGE=\"Yes\"                              \\\n        $(ixia_c_traffic_engine_img)  \n    if [ -z \"${DATA_PLANE_ONLY}\" ]\n    then\n        docker run --privileged -d                           \\\n            --net=container:ixia-c-traffic-engine-${ETH_A}     \\\n            --name=ixia-c-protocol-engine-${ETH_A}             \\\n            -e INTF_LIST=\"${ETH_A}\"                            \\\n            $(ixia_c_protocol_engine_img) \n    fi                      \n    docker run --privileged -d                           \\\n        --name=ixia-c-traffic-engine-${ETH_Z}              \\\n        -e OPT_LISTEN_PORT=\"5555\"                           \\\n        -e ARG_IFACE_LIST=\"virtual@af_packet,${ETH_Z}\"     \\\n        -e OPT_NO_HUGEPAGES=\"Yes\"                           \\\n        -e OPT_NO_PINNING=\"Yes\"                             \\\n        -e WAIT_FOR_IFACE=\"Yes\"                             \\\n        -e OPT_ADAPTIVE_CPU_USAGE=\"Yes\"                              \\\n        $(ixia_c_traffic_engine_img)                        \n    if [ -z \"${DATA_PLANE_ONLY}\" ]\n    then\n        docker run --privileged -d                           \\\n            --net=container:ixia-c-traffic-engine-${ETH_Z}     \\\n            --name=ixia-c-protocol-engine-${ETH_Z}             \\\n            -e INTF_LIST=\"${ETH_Z}\"                            \\\n            $(ixia_c_protocol_engine_img)                       \n    fi\n    docker ps -a                                         \\\n    && prepare_eth_pair ${ETH_A} ${ETH_Z}    \\\n    && push_ifc_to_container ${ETH_A} ixia-c-traffic-engine-${ETH_A}  \\\n    && push_ifc_to_container ${ETH_Z} ixia-c-traffic-engine-${ETH_Z}              \n    if [ -z \"${DATA_PLANE_ONLY}\" ]\n    then\n        gen_controller_config_b2b_cpdp $1\n    else \n        gen_controller_config_b2b_dp $1\n    fi\n    docker ps -a\n    echo \"Successfully deployed !\"\n}\n\nrm_ixia_c_b2b_cpdp() {\n    docker ps -a\n    echo \"Tearing down back-to-back with CP/DP distribution of ixia-c ...\"\n    docker stop keng-controller && docker rm keng-controller\n\n    docker stop ixia-c-traffic-engine-${ETH_A}\n    docker rm ixia-c-traffic-engine-${ETH_A}\n    docker stop ixia-c-traffic-engine-${ETH_Z}\n    docker rm ixia-c-traffic-engine-${ETH_Z}\n\n    if [ -z \"${DATA_PLANE_ONLY}\" ]\n    then\n        docker stop ixia-c-protocol-engine-${ETH_A}\n        docker rm ixia-c-protocol-engine-${ETH_A}\n        docker stop ixia-c-protocol-engine-${ETH_Z}\n        docker rm ixia-c-protocol-engine-${ETH_Z}\n    fi\n    docker ps -a\n}\n\ncreate() {\n    sudo ip link add $ETH_A type veth peer name $ETH_Z\n    sudo ip link set $ETH_A up\n    sudo ip link set $ETH_Z up\n}\n\ntopo() {\n    case $1 in\n        new )  \n            create_ixia_c_b2b_cpdp      \n        ;;\n        rm  )\n            rm_ixia_c_b2b_cpdp\n        ;;\n        *   )\n            exit 1\n        ;;\n    esac\n}\n\n\nhelp() {\n    grep \"() {\" ${0} | cut -d\\  -f1\n}\n\nusage() {\n    echo \"usage: $0 [name of any function in script]\"\n    exit 1\n}\n\ncase $1 in\n    *   )\n        cmd=${1}\n        echo \"Hi\"\n        shift 1\n        ${cmd} \"$@\" || usage\n    ;;\nesac\n"
  },
  {
    "path": "deployments/docker/readme.md",
    "content": "# Ixia-C Docker Deployment over Raw Socket\n\n## Manual Steps\n\n1. (Optional) Cleanup all existing containers and images.\n\n   ```sh\n   docker stop $(docker ps -aq) && docker rm $(docker ps -aq)\n   docker rmi $(docker images -q)\n   ```\n\n2. Start an instance of `controller`.\n\n   ```sh\n        # implicitly listens on TCP port 8443 and 40051\n        # --accept-eula option is confirmation that user has accepted the Ixia-C End-User License Agreement (EULA) \n        # located at https://github.com/open-traffic-generator/ixia-c/blob/main/docs/eula.md\n        docker run -d                                        \\\n            --name=keng-controller                              \\\n            --publish 0.0.0.0:8443:8443                         \\\n            --publish 0.0.0.0:40051:40051                       \\\n            ghcr.io/open-traffic-generator/keng-controller:1.53.0-1                              \\\n            --accept-eula                                       \\\n            --trace                                             \\\n            --disable-app-usage-reporter\n   ```\n\n\n3. Start one or more instances of `traffic-engine`.\n\n   - For `traffic-engine` over raw socket:\n\n     ```sh\n        # for network interface eth1\n        docker run --privileged -d                           \\\n            --name=ixia-c-traffic-engine-eth1              \\\n            -e OPT_LISTEN_PORT=\"5555\"                           \\\n            -e ARG_IFACE_LIST=\"virtual@af_packet,eth1\"     \\\n            -e OPT_NO_HUGEPAGES=\"Yes\"                           \\\n            -e OPT_NO_PINNING=\"Yes\"                             \\\n            -e WAIT_FOR_IFACE=\"Yes\"                             \\\n            -e OPT_ADAPTIVE_CPU_USAGE=\"Yes\"                              \\\n            ghcr.io/open-traffic-generator/ixia-c-traffic-engine:1.8.0.245             \n\n        # for network interface eth2\n        docker run --privileged -d                           \\\n            --name=ixia-c-traffic-engine-eth2              \\\n            -e OPT_LISTEN_PORT=\"5555\"                           \\\n            -e ARG_IFACE_LIST=\"virtual@af_packet,eth2\"     \\\n            -e OPT_NO_HUGEPAGES=\"Yes\"                           \\\n            -e OPT_NO_PINNING=\"Yes\"                             \\\n            -e WAIT_FOR_IFACE=\"Yes\"                             \\\n            -e OPT_ADAPTIVE_CPU_USAGE=\"Yes\"                              \\\n            ghcr.io/open-traffic-generator/ixia-c-traffic-engine:1.8.0.245\n     ```\n\n4. Start one or more instances of `protocol-engine`.\n\n   - For `protocol-engine` over raw socket:\n\n     ```sh\n        # for network interface eth1\n        docker run --privileged -d                           \\\n            --net=container:ixia-c-traffic-engine-eth1     \\\n            --name=ixia-c-protocol-engine-eth1            \\\n            -e INTF_LIST=\"eth1\"                            \\\n            ghcr.io/open-traffic-generator/ixia-c-protocol-engine:1.00.0.522                       \\\n\n        # for network interface eth2\n        docker run --privileged -d                           \\\n            --net=container:ixia-c-traffic-engine-eth2     \\\n            --name=ixia-c-protocol-engine-eth2            \\\n            -e INTF_LIST=\"eth2\"                            \\\n            ghcr.io/open-traffic-generator/ixia-c-protocol-engine:1.00.0.522  \n     ```\n\n5. Ensure existing network interfaces are `Up` and have `Promiscuous` mode enabled.\n\n   ```sh\n        # check interface details\n        sudo ip addr\n        # configure as required\n        sudo ip link set eth1 up\n        sudo ip link set eth1 promisc on\n        sudo ip link set eth2 up\n        sudo ip link set eth2 promisc on\n   ```\n\n6. Push interface to the containers.\n    - It takes a host NIC (say eth1) and injects it into a container’s network namespace so the container can directly use that NIC (bypassing Docker’s default bridge). \n    It symlinks the container’s netns into /var/run/netns, then moves and configures the interface inside that namespace.\n\n    ```sh\n\n        # For Traffic Engine 1\n        # Resolve container metadata\n        cid=$(docker inspect --format=\"{{json .Id}}\" ixia-c-traffic-engine-eth1 | cut -d\\\" -f 2)\n        cpid=$(docker inspect --format=\"{{json .State.Pid}}\" ixia-c-traffic-engine-eth1 | cut -d\\\" -f 2)\n\n        # Prepare namespace paths\n        orgPath=/proc/${cpid}/ns/net\n        newPath=/var/run/netns/${cid}\n        \n        # Make namespace accessible to ip netns \n        sudo mkdir -p /var/run/netns\n        sudo ln -s ${orgPath} ${newPath}\n        # Move interface into the container’s netns\n        sudo ip link set eth1 netns ${cid}  \n        # Rename and configure inside the container           \n        sudo ip netns exec ${cid} ip link set eth1 name eth1  \n        sudo ip netns exec ${cid} ip -4 addr add 0/0 dev eth1\n        sudo ip netns exec ${cid} ip -4 link set eth1 up \n\n        # For Traffic Engine 2\n        # Resolve container metadata\n        cid=$(docker inspect --format=\"{{json .Id}}\" ixia-c-traffic-engine-eth2 | cut -d\\\" -f 2)\n        cpid=$(docker inspect --format=\"{{json .State.Pid}}\" ixia-c-traffic-engine-eth2 | cut -d\\\" -f 2)\n\n        # Prepare namespace paths\n        orgPath=/proc/${cpid}/ns/net\n        newPath=/var/run/netns/${cid}\n        \n        # Make namespace accessible to ip netns \n        sudo mkdir -p /var/run/netns\n        sudo ln -s ${orgPath} ${newPath}\n        # Move interface into the container’s netns\n        sudo ip link set eth2 netns ${cid}  \n        # Rename and configure inside the container           \n        sudo ip netns exec ${cid} ip link set eth2 name eth2  \n        sudo ip netns exec ${cid} ip -4 addr add 0/0 dev eth2\n        sudo ip netns exec ${cid} ip -4 link set eth2 up \n    ```\n\n6. Create interface-port config-map inside `keng-controller`.\n    ```sh\n        configDir=/home/ixia-c/controller/config\n        OTG_PORTA=$(docker inspect --format=\"{{json .NetworkSettings.IPAddress}}\" ixia-c-traffic-engine-eth1 | cut -d\\\" -f 2)\n        OTG_PORTZ=$(docker inspect --format=\"{{json .NetworkSettings.IPAddress}}\" ixia-c-traffic-engine-eth2 | cut -d\\\" -f 2)\n        \n        yml=\"location_map:\n            - location: ${ETH_A}\n                endpoint: \\\"${OTG_PORTA}:5555+${OTG_PORTA}:50071\\\"\n            - location: ${ETH_Z}\n                endpoint: \\\"${OTG_PORTZ}:5555+${OTG_PORTZ}:50071\\\"\n            \"\n        echo -n \"$yml\" | sed \"s/^        //g\" | tee ./config.yaml > /dev/null \\\n        && docker exec keng-controller mkdir -p ${configDir} \\\n        && docker cp ./config.yaml keng-controller:${configDir}/ \\\n        && rm -rf ./config.yaml\n    ```\n\n## Automated Steps\n```sh\n    git clone --recurse-submodule https://github.com/open-traffic-generator/ixia-c.git\n    cd ixia-c/deployments/docker\n    chmod u+x ./deployment.sh\n\n    # deploy control & data plane\n    ./deployment.sh eth1 eth2 topo new\n\n    # teardown control & data plane\n    ./deployment.sh eth1 eth2 topo rm\n\n    # deploy data plane only\n    DATA_PLANE_ONLY=true ./deployment.sh eth1 eth2 topo new\n\n    # teardown data plane only\n    DATA_PLANE_ONLY=true ./deployment.sh eth1 eth2 topo rm\n\n    #create veth pair [ if needed ]\n    ./deployment.sh veth1 veth2 create\n```\n\n## Note: \n- If the source and destination NICs have IPv4 addresses configured and the traffic flow is configured such that the `flows[i].packet.ipv4.src/dst`  are matching the configured NICs IPv4 addresses, it is a known issue that due to ICMP protocol/port unreachable replies from the host linux kernel, the flow Rx can become greater than the flow Tx value. \n- To avoid this, for eth/ipv4 flows install the filter `iptables -I INPUT -p 61 -j DROP` on destination host to prevent the flow traffic from reaching the host linux kernel. Also Note that the filter might have to be changed accordingly for eth/ipv4/udp or eth/ipv4/tcp to be filtered by udp/tcp port numbers. \n- It is advisable to follow the similar steps if similar issue occurs for eth/ipv6 flows as well.\n\n\n## Sample go snippet to use after deployment for testing\n    ```go\n        // Create a new API handle to make API calls against OTG\n        api := gosnappi.NewApi()\n\n        // Set the transport protocol to HTTP\n        api.NewHttpTransport().SetLocation(\"https://localhost:8443\")\n\n        // Create a new traffic configuration that will be set on OTG\n        config := gosnappi.NewConfig()\n\n        // Add a test port to the configuration\n        ptx := config.Ports().Add().SetName(\"ptx\").SetLocation(\"eth1\")\n        prx := config.Ports().Add().SetName(\"prx\").SetLocation(\"eth2\")\n    ```\n\n## Example Go test\n    - Setup\n        ```bash\n            git clone --recurse-submodule https://github.com/open-traffic-generator/conformance.git\n            cd conformance\n            go mod tidy\n            go mod download\n        ```\n    - Test for control & data plane\n        ```bash\n            go test -tags=all ./examples -run TestQuickstartB2BCpDp -args -portA=eth1 -portZ=eth2\n        ```\n    - Test for data plane only\n        ```bash\n            go test -tags=all ./examples -run TestQuickstartB2BDp -args -portA=eth1 -portZ=eth2\n        ```\n\n\n\n\n\n\n"
  },
  {
    "path": "deployments/docker/versions.yaml",
    "content": "release: 1.53.0-1\nopen-traffic-generator: 1.53.0\nsnappi: 1.53.0\ngosnappi: 1.53.0\nkeng-controller: 1.53.0-1\nixia-c-traffic-engine: 1.8.0.245\nixia-c-protocol-engine: 1.00.0.522\notg-gnmi-server: 1.53.0\nkeng-operator: 0.4.0\nkeng-layer23-hw-server: 1.53.0-3\nkeng-app-usage-reporter: 0.0.1-52\nixia-c-one: 1.53.0-1\nuhd400: 1.5.10\n"
  },
  {
    "path": "deployments/k8s/bases/namespace/kustomization.yaml",
    "content": "apiVersion: kustomize.config.k8s.io/v1beta1\nkind: Kustomization\n\nresources:\n  - namespace.yaml\n"
  },
  {
    "path": "deployments/k8s/bases/namespace/namespace.yaml",
    "content": "apiVersion: v1\nkind: Namespace\nmetadata:\n  labels:\n    app: ixia-c\n  name: ixia-c"
  },
  {
    "path": "deployments/k8s/bases/otg-controller/kustomization.yaml",
    "content": "apiVersion: kustomize.config.k8s.io/v1beta1\nkind: Kustomization\n\nresources:\n  - pod.yaml\n  - service.yaml"
  },
  {
    "path": "deployments/k8s/bases/otg-controller/pod.yaml",
    "content": "apiVersion: v1\nkind: Pod\nmetadata:\n  labels:\n    app: ixia-c\n    role: otg-controller\n  name: otg-controller\n  namespace: ixia-c\nspec:\n  containers:\n    - args:\n        - --accept-eula\n        - --debug\n      image: keng-controller:latest\n      imagePullPolicy: IfNotPresent\n      name: keng-controller\n      ports:\n        - containerPort: 8443\n          name: https-port\n          protocol: TCP\n        - containerPort: 40051\n          name: grpc-port\n          protocol: TCP\n      livenessProbe:\n        tcpSocket:\n          port: https-port\n        periodSeconds: 5\n      startupProbe:\n        tcpSocket:\n          port: https-port\n        periodSeconds: 5\n        failureThreshold: 12\n      volumeMounts:\n        - mountPath: /home/ixia-c/controller/config\n          name: config\n          readOnly: true\n    - args:\n        - -http-server\n        - https://localhost:8443\n        - --debug\n      image: otg-gnmi-server:latest\n      imagePullPolicy: IfNotPresent\n      name: otg-gnmi-server\n      ports:\n        - containerPort: 50051\n          name: gnmi-port\n          protocol: TCP\n      livenessProbe:\n        tcpSocket:\n          port: gnmi-port\n        periodSeconds: 5\n      startupProbe:\n        tcpSocket:\n          port: gnmi-port\n        periodSeconds: 5\n        failureThreshold: 12\n  restartPolicy: Always\n  volumes:\n    - configMap:\n        defaultMode: 420\n        name: controller-config\n      name: config"
  },
  {
    "path": "deployments/k8s/bases/otg-controller/service.yaml",
    "content": "apiVersion: v1\nkind: Service\nmetadata:\n  name: service-otg-controller\n  namespace: ixia-c\nspec:\n  type: NodePort\n  ports:\n    - name: https\n      port: 8443\n      protocol: TCP\n      targetPort: https-port\n      nodePort: 30443\n    - name: grpc\n      port: 40051\n      protocol: TCP\n      targetPort: grpc-port\n      nodePort: 30451\n    - name: gnmi\n      port: 50051\n      protocol: TCP\n      targetPort: gnmi-port\n      nodePort: 30551\n  selector:\n    role: otg-controller\n"
  },
  {
    "path": "deployments/k8s/bases/otg-traffic-port/kustomization.yaml",
    "content": "apiVersion: kustomize.config.k8s.io/v1beta1\nkind: Kustomization\n\nresources:\n  - pod.yaml\n  - service.yaml"
  },
  {
    "path": "deployments/k8s/bases/otg-traffic-port/pod.yaml",
    "content": "apiVersion: v1\nkind: Pod\nmetadata:\n  labels:\n    app: ixia-c\n    role: otg-port\n  name: otg-port\n  namespace: ixia-c\nspec:\n  containers:\n    - env:\n        - name: OPT_LISTEN_PORT\n          value: \"5555\"\n        - name: OPT_NO_PINNING\n          value: \"Yes\"\n        - name: ARG_IFACE_LIST\n          value: virtual@af_packet,eth0\n        - name: OPT_NO_HUGEPAGES\n          value: \"Yes\"\n        - name: WAIT_FOR_IFACE\n          value: \"Yes\"\n      image: ixia-c-traffic-engine:latest\n      imagePullPolicy: IfNotPresent\n      name: ixia-c-traffic-engine\n      ports:\n        - containerPort: 5555\n          name: zeromq-port\n          protocol: TCP\n      livenessProbe:\n        tcpSocket:\n          port: zeromq-port\n        periodSeconds: 5\n      startupProbe:\n        tcpSocket:\n          port: zeromq-port\n        periodSeconds: 5\n        failureThreshold: 12\n      securityContext:\n        privileged: true\n  restartPolicy: Always"
  },
  {
    "path": "deployments/k8s/bases/otg-traffic-port/service.yaml",
    "content": "apiVersion: v1\nkind: Service\nmetadata:\n  name: otg-port\n  namespace: ixia-c\nspec:\n  ports:\n    - name: zeromq\n      port: 5555\n      protocol: TCP\n      targetPort: zeromq-port\n  selector:\n    role: otg-port"
  },
  {
    "path": "deployments/k8s/components/images/kustomization.yaml",
    "content": "apiVersion: kustomize.config.k8s.io/v1alpha1\nkind: Component\n\n# Release: https://github.com/open-traffic-generator/ixia-c/releases/tag/v1.53.0-1\nimages:\n  - name: keng-controller\n    newName: ghcr.io/open-traffic-generator/keng-controller\n    newTag: \"1.53.0-1\"\n  - name: otg-gnmi-server\n    newName: ghcr.io/open-traffic-generator/otg-gnmi-server\n    newTag: \"1.53.0\"\n  - name: ixia-c-traffic-engine\n    newName: ghcr.io/open-traffic-generator/ixia-c-traffic-engine\n    newTag: \"1.8.0.245\"\n"
  },
  {
    "path": "deployments/k8s/kind.yaml",
    "content": "kind: Cluster\napiVersion: kind.x-k8s.io/v1alpha4\nnetworking:\n  # WARNING: It is _strongly_ recommended that you keep this the default\n  # (127.0.0.1) for security reasons. However it is possible to change this.\n  # Change to 0.0.0.0 to access kind cluster from outside\n  apiServerAddress: 127.0.0.1\n  # By default the API server listens on a random open port.\n  # You may choose a specific port but probably don't need to in most cases.\n  # Using a random port makes it easier to spin up multiple clusters.\n  apiServerPort: 6443\nnodes:\n  # configure single-node cluster\n  - role: control-plane\n    # map TCP ports exposed by pods to host\n    extraPortMappings:\n    - containerPort: 30443\n      hostPort: 8443\n    - containerPort: 30451\n      hostPort: 40051\n    - containerPort: 30551\n      hostPort: 50051\n  # replicate following for multi-node cluster with intended number of worker nodes\n  # - role: workers"
  },
  {
    "path": "deployments/k8s/network-emulation/go.mod",
    "content": "module ipfwd\n\ngo 1.25.0\n\nrequire github.com/open-traffic-generator/snappi/gosnappi v1.53.0\n\nrequire (\n\tgithub.com/Masterminds/semver/v3 v3.4.0 // indirect\n\tgithub.com/cenkalti/backoff/v5 v5.0.3 // indirect\n\tgithub.com/cespare/xxhash/v2 v2.3.0 // indirect\n\tgithub.com/felixge/httpsnoop v1.0.4 // indirect\n\tgithub.com/ghodss/yaml v1.0.0 // indirect\n\tgithub.com/go-logr/logr v1.4.3 // indirect\n\tgithub.com/go-logr/stdr v1.2.2 // indirect\n\tgithub.com/google/uuid v1.6.0 // indirect\n\tgithub.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect\n\tgo.opentelemetry.io/auto/sdk v1.2.1 // indirect\n\tgo.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect\n\tgo.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 // indirect\n\tgo.opentelemetry.io/otel v1.43.0 // indirect\n\tgo.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect\n\tgo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 // indirect\n\tgo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 // indirect\n\tgo.opentelemetry.io/otel/metric v1.43.0 // indirect\n\tgo.opentelemetry.io/otel/sdk v1.43.0 // indirect\n\tgo.opentelemetry.io/otel/trace v1.43.0 // indirect\n\tgo.opentelemetry.io/proto/otlp v1.10.0 // indirect\n\tgolang.org/x/net v0.52.0 // indirect\n\tgolang.org/x/sys v0.42.0 // indirect\n\tgolang.org/x/text v0.35.0 // indirect\n\tgoogle.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 // indirect\n\tgoogle.golang.org/genproto/googleapis/rpc v0.0.0-20260406210006-6f92a3bedf2d // indirect\n\tgoogle.golang.org/grpc v1.80.0 // indirect\n\tgoogle.golang.org/protobuf v1.36.11 // indirect\n\tgopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect\n\tgopkg.in/yaml.v2 v2.4.0 // indirect\n)\n"
  },
  {
    "path": "deployments/k8s/network-emulation/go.sum",
    "content": "github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=\ngithub.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=\ngithub.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM=\ngithub.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=\ngithub.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=\ngithub.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=\ngithub.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=\ngithub.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=\ngithub.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=\ngithub.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=\ngithub.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=\ngithub.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=\ngithub.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=\ngithub.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=\ngithub.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=\ngithub.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=\ngithub.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=\ngithub.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=\ngithub.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=\ngithub.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=\ngithub.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=\ngithub.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=\ngithub.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=\ngithub.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs=\ngithub.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c=\ngithub.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=\ngithub.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=\ngithub.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=\ngithub.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=\ngithub.com/open-traffic-generator/snappi/gosnappi v1.53.0 h1:3W/0kgdWhb8PIq8K+zUKLoayeHPcy4/X4zj3FFt5Clk=\ngithub.com/open-traffic-generator/snappi/gosnappi v1.53.0/go.mod h1:me43y2L6WheIkx9G7htMmaW+y0TlMS1RRLCEzEW27uA=\ngithub.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=\ngithub.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=\ngithub.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=\ngithub.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=\ngithub.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=\ngo.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=\ngo.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=\ngo.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo=\ngo.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg=\ngo.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 h1:CqXxU8VOmDefoh0+ztfGaymYbhdB/tT3zs79QaZTNGY=\ngo.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0/go.mod h1:BuhAPThV8PBHBvg8ZzZ/Ok3idOdhWIodywz2xEcRbJo=\ngo.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I=\ngo.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0=\ngo.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k=\ngo.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A=\ngo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 h1:RAE+JPfvEmvy+0LzyUA25/SGawPwIUbZ6u0Wug54sLc=\ngo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0/go.mod h1:AGmbycVGEsRx9mXMZ75CsOyhSP6MFIcj/6dnG+vhVjk=\ngo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 h1:3iZJKlCZufyRzPzlQhUIWVmfltrXuGyfjREgGP3UUjc=\ngo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0/go.mod h1:/G+nUPfhq2e+qiXMGxMwumDrP5jtzU+mWN7/sjT2rak=\ngo.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM=\ngo.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY=\ngo.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg=\ngo.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg=\ngo.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw=\ngo.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=\ngo.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=\ngo.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=\ngo.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g=\ngo.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk=\ngo.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=\ngo.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=\ngolang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0=\ngolang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw=\ngolang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo=\ngolang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=\ngolang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8=\ngolang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA=\ngonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=\ngonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=\ngoogle.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 h1:VPWxll4HlMw1Vs/qXtN7BvhZqsS9cdAittCNvVENElA=\ngoogle.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:7QBABkRtR8z+TEnmXTqIqwJLlzrZKVfAUm7tY3yGv0M=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20260406210006-6f92a3bedf2d h1:wT2n40TBqFY6wiwazVK9/iTWbsQrgk5ZfCSVFLO9LQA=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20260406210006-6f92a3bedf2d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=\ngoogle.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM=\ngoogle.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4=\ngoogle.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=\ngoogle.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=\ngopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=\ngopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=\ngopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=\ngopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=\ngopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=\ngopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\n"
  },
  {
    "path": "deployments/k8s/network-emulation/ipfwd.go",
    "content": "package main\n\nimport (\n\t\"log\"\n\t\"time\"\n\n\t\"github.com/open-traffic-generator/snappi/gosnappi\"\n)\n\nfunc main() {\n\n\t// This test configures one IPv4 interface on tx and rx test port each\n\t// and sends IPv4 packets with src IP address of interface on tx port\n\t// and dst IP address of interface on rx port. The packets are sent only\n\t// after ARP entries have been learned from corresponding DUT interfaces\n\t// and flow metrics is used to validate tx and rx counters.\n\n\ttestConst := map[string]interface{}{\n\t\t\"apiLocation\":    \"https://localhost:8443\",\n\t\t\"txPortLocation\": \"eth1\",\n\t\t\"rxPortLocation\": \"eth2\",\n\t\t\"speed\":          \"speed_1_gbps\",\n\t\t\"pktRate\":        uint64(50),\n\t\t\"pktCount\":       uint32(100),\n\t\t\"pktSize\":        uint32(128),\n\t\t\"txMac\":          \"00:00:01:01:01:01\",\n\t\t\"txIp\":           \"1.1.1.1\",\n\t\t\"txGateway\":      \"1.1.1.2\",\n\t\t\"txPrefix\":       uint32(24),\n\t\t\"rxMac\":          \"00:00:01:01:01:02\",\n\t\t\"rxIp\":           \"2.2.2.1\",\n\t\t\"rxGateway\":      \"2.2.2.2\",\n\t\t\"rxPrefix\":       uint32(24),\n\t}\n\n\tapi := gosnappi.NewApi()\n\tapi.NewHttpTransport().SetLocation(testConst[\"apiLocation\"].(string)).SetVerify(false)\n\n\tlog.Println(\"Constructing OTG configuration ...\")\n\tc := otgConfig(testConst)\n\n\tlog.Println(\"Pushing OTG configuration ...\")\n\tif wrn, err := api.SetConfig(c); err != nil {\n\t\tlog.Fatal(err)\n\t} else {\n\t\tfor _, w := range wrn.Warnings() {\n\t\t\tlog.Println(\"WARNING:\", w)\n\t\t}\n\t}\n\n\tlog.Println(\"Waiting for ARP entries for configured interfaces ...\")\n\tfor start := time.Now(); !ipNeighborsOk(api, testConst); time.Sleep(time.Millisecond * 500) {\n\t\tif time.Second*30 < time.Until(start) {\n\t\t\tlog.Fatal(\"Timed out waiting for ARP entries\")\n\t\t}\n\t}\n\n\tlog.Println(\"Starting flow transmission ...\")\n\tcs := gosnappi.NewControlState()\n\tcs.Traffic().FlowTransmit().SetState(gosnappi.StateTrafficFlowTransmitState.START)\n\tif wrn, err := api.SetControlState(cs); err != nil {\n\t\tlog.Fatal(err)\n\t} else {\n\t\tfor _, w := range wrn.Warnings() {\n\t\t\tlog.Println(\"WARNING:\", w)\n\t\t}\n\t}\n\n\tlog.Println(\"Waiting for flow metrics ...\")\n\tfor start := time.Now(); !flowMetricsOk(api, testConst); time.Sleep(time.Millisecond * 500) {\n\t\tif time.Second*30 < time.Until(start) {\n\t\t\tlog.Fatal(\"Timed out waiting for ARP entries\")\n\t\t}\n\t}\n}\n\nfunc otgConfig(tc map[string]interface{}) gosnappi.Config {\n\tc := gosnappi.NewConfig()\n\n\tptx := c.Ports().Add().SetName(\"ptx\").SetLocation(tc[\"txPortLocation\"].(string))\n\tprx := c.Ports().Add().SetName(\"prx\").SetLocation(tc[\"rxPortLocation\"].(string))\n\n\tc.Layer1().Add().\n\t\tSetName(\"ly\").\n\t\tSetPortNames([]string{ptx.Name(), prx.Name()}).\n\t\tSetSpeed(gosnappi.Layer1SpeedEnum(tc[\"speed\"].(string)))\n\n\tdtx := c.Devices().Add().SetName(\"dtx\")\n\tdrx := c.Devices().Add().SetName(\"drx\")\n\n\tdtxEth := dtx.Ethernets().\n\t\tAdd().\n\t\tSetName(\"dtxEth\").\n\t\tSetMac(tc[\"txMac\"].(string)).\n\t\tSetMtu(1500)\n\n\tdtxEth.Connection().SetPortName(ptx.Name())\n\n\tdtxIp := dtxEth.\n\t\tIpv4Addresses().\n\t\tAdd().\n\t\tSetName(\"dtxIp\").\n\t\tSetAddress(tc[\"txIp\"].(string)).\n\t\tSetGateway(tc[\"txGateway\"].(string)).\n\t\tSetPrefix(tc[\"txPrefix\"].(uint32))\n\n\tdrxEth := drx.Ethernets().\n\t\tAdd().\n\t\tSetName(\"drxEth\").\n\t\tSetMac(tc[\"rxMac\"].(string)).\n\t\tSetMtu(1500)\n\n\tdrxEth.Connection().SetPortName(prx.Name())\n\n\tdrxIp := drxEth.\n\t\tIpv4Addresses().\n\t\tAdd().\n\t\tSetName(\"drxIp\").\n\t\tSetAddress(tc[\"rxIp\"].(string)).\n\t\tSetGateway(tc[\"rxGateway\"].(string)).\n\t\tSetPrefix(tc[\"rxPrefix\"].(uint32))\n\n\tflow := c.Flows().Add()\n\tflow.SetName(\"ftxV4\")\n\tflow.Duration().FixedPackets().SetPackets(tc[\"pktCount\"].(uint32))\n\tflow.Rate().SetPps(tc[\"pktRate\"].(uint64))\n\tflow.Size().SetFixed(tc[\"pktSize\"].(uint32))\n\tflow.Metrics().SetEnable(true)\n\n\tflow.TxRx().Device().\n\t\tSetTxNames([]string{dtxIp.Name()}).\n\t\tSetRxNames([]string{drxIp.Name()})\n\n\tftxV4Eth := flow.Packet().Add().Ethernet()\n\tftxV4Eth.Src().SetValue(dtxEth.Mac())\n\n\tftxV4Ip := flow.Packet().Add().Ipv4()\n\tftxV4Ip.Src().SetValue(tc[\"txIp\"].(string))\n\tftxV4Ip.Dst().SetValue(tc[\"rxIp\"].(string))\n\n\tlog.Printf(\"Config:\\n%v\\n\", c)\n\treturn c\n}\n\nfunc ipNeighborsOk(api gosnappi.Api, tc map[string]interface{}) bool {\n\tcount := 0\n\n\tlog.Println(\"Getting IPv4 neighbors ...\")\n\treq := gosnappi.NewStatesRequest()\n\t// query to fetch states for all configured IPv4 interfaces\n\treq.Ipv4Neighbors()\n\tstates, err := api.GetStates(req)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tlog.Printf(\"IPv4 Neighbors Metrics:\\n%v\\n\", states)\n\tfor _, n := range states.Ipv4Neighbors().Items() {\n\t\tif n.HasLinkLayerAddress() {\n\t\t\tfor _, key := range []string{\"txGateway\", \"rxGateway\"} {\n\t\t\t\tif n.Ipv4Address() == tc[key].(string) {\n\t\t\t\t\tcount += 1\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn count == 2\n}\n\nfunc flowMetricsOk(api gosnappi.Api, tc map[string]interface{}) bool {\n\tpktCount := uint64(tc[\"pktCount\"].(uint32))\n\n\tlog.Println(\"Getting flow metrics ...\")\n\treq := gosnappi.NewMetricsRequest()\n\t// query to fetch metrics for all configured flows\n\treq.Flow()\n\tmetrics, err := api.GetMetrics(req)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tlog.Printf(\"Flow Metrics:\\n%v\\n\", metrics)\n\tfor _, m := range metrics.FlowMetrics().Items() {\n\t\tif m.Transmit() != gosnappi.FlowMetricTransmit.STOPPED ||\n\t\t\tm.FramesTx() != pktCount ||\n\t\t\tm.FramesRx() != pktCount {\n\t\t\treturn false\n\t\t}\n\n\t}\n\n\treturn true\n}\n"
  },
  {
    "path": "deployments/k8s/network-emulation/kind.yaml",
    "content": "kind: Cluster\napiVersion: kind.x-k8s.io/v1alpha4\nnetworking:\n  # WARNING: It is _strongly_ recommended that you keep this the default\n  # (127.0.0.1) for security reasons. However it is possible to change this.\n  # Change to 0.0.0.0 to access kind cluster from outside\n  apiServerAddress: 127.0.0.1\n  # By default the API server listens on a random open port.\n  # You may choose a specific port but probably don't need to in most cases.\n  # Using a random port makes it easier to spin up multiple clusters.\n  apiServerPort: 6443\nnodes:\n  # configure single-node cluster\n  - role: control-plane\n    # map TCP ports exposed by pods to host\n    extraPortMappings:\n    - containerPort: 30443\n      hostPort: 8443\n    - containerPort: 30451\n      hostPort: 40051\n    - containerPort: 30551\n      hostPort: 50051\n  # replicate following for multi-node cluster with intended number of worker nodes\n  # - role: workers"
  },
  {
    "path": "deployments/k8s/network-emulation/links.yaml",
    "content": "apiVersion: networkop.co.uk/v1beta1\nkind: Topology\nmetadata:\n  name: ixia-c-port1\n  namespace: ixia-c\nspec:\n  links:\n  - uid: 1\n    peer_pod: dut\n    local_intf: eth1\n    local_ip: 1.1.1.1/24\n    peer_intf: eth1\n    peer_ip: 1.1.1.2/24\n\n---\n\napiVersion: networkop.co.uk/v1beta1\nkind: Topology\nmetadata:\n  name: ixia-c-port2\n  namespace: ixia-c\nspec:\n  links:\n  - uid: 1\n    peer_pod: dut\n    local_intf: eth2\n    local_ip: 2.2.2.1/24\n    peer_intf: eth2\n    peer_ip: 2.2.2.2/24\n\n---\n\napiVersion: networkop.co.uk/v1beta1\nkind: Topology\nmetadata:\n  name: dut\n  namespace: ixia-c\nspec:\n  links:\n  - uid: 1\n    peer_pod: ixia-c-port1\n    local_intf: eth1\n    local_ip: 1.1.1.2/24\n    peer_intf: eth1\n    peer_ip: 1.1.1.1/24\n  - uid: 2\n    peer_pod: ixia-c-port2\n    local_intf: eth2\n    local_ip: 2.2.2.2/24\n    peer_intf: eth2\n    peer_ip: 2.2.2.1/24\n"
  },
  {
    "path": "deployments/k8s/network-emulation/namespace.yaml",
    "content": "apiVersion: v1\nkind: Namespace\nmetadata:\n  labels:\n    app: ixia-c\n  name: ixia-c"
  },
  {
    "path": "deployments/k8s/network-emulation/pods.yaml",
    "content": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n  labels:\n    app: ixia-c\n  name: controller-config\n  namespace: ixia-c\ndata:\n  config.yaml: |\n    location_map:\n    - location: eth1\n      endpoint: service-ixia-c-port1.ixia-c.svc.cluster.local:5555+service-ixia-c-port1.ixia-c.svc.cluster.local:50071\n    - location: eth2\n      endpoint: service-ixia-c-port2.ixia-c.svc.cluster.local:5555+service-ixia-c-port2.ixia-c.svc.cluster.local:50071\n\n---\n\napiVersion: v1\nkind: Pod\nmetadata:\n  labels:\n    app: ixia-c\n    role: controller\n  name: keng-controller\n  namespace: ixia-c\nspec:\n  containers:\n    - args:\n        - --accept-eula\n        - --debug\n      image: ghcr.io/open-traffic-generator/keng-controller:1.53.0-1\n      imagePullPolicy: IfNotPresent\n      name: keng-controller\n      volumeMounts:\n        - mountPath: /home/ixia-c/controller/config\n          name: config\n          readOnly: true\n  restartPolicy: Always\n  volumes:\n    - configMap:\n        defaultMode: 420\n        name: controller-config\n      name: config\n\n---\n\napiVersion: v1\nkind: Pod\nmetadata:\n  labels:\n    app: ixia-c\n    role: port1\n  name: ixia-c-port1\n  namespace: ixia-c\nspec:\n  containers:\n    - env:\n        - name: ARG_IFACE_LIST\n          value: virtual@af_packet,eth1\n        - name: OPT_NO_HUGEPAGES\n          value: \"Yes\"\n        - name: OPT_LISTEN_PORT\n          value: \"5555\"\n        - name: ARG_CORE_LIST\n          value: 1 1 1\n      image: ghcr.io/open-traffic-generator/ixia-c-traffic-engine:1.8.0.245\n      imagePullPolicy: IfNotPresent\n      name: ixia-c-port1-traffic-engine\n      securityContext:\n        privileged: true\n    - env:\n        - name: INTF_LIST\n          value: eth1\n      image: ghcr.io/open-traffic-generator/ixia-c-protocol-engine:1.00.0.522\n      imagePullPolicy: IfNotPresent\n      name: ixia-c-port1-protocol-engine\n      securityContext:\n        privileged: true\n  restartPolicy: Always\n\n---\n\napiVersion: v1\nkind: Pod\nmetadata:\n  labels:\n    app: ixia-c\n    role: port2\n  name: ixia-c-port2\n  namespace: ixia-c\nspec:\n  containers:\n    - env:\n        - name: ARG_IFACE_LIST\n          value: virtual@af_packet,eth2\n        - name: OPT_NO_HUGEPAGES\n          value: \"Yes\"\n        - name: OPT_LISTEN_PORT\n          value: \"5555\"\n        - name: ARG_CORE_LIST\n          value: 1 1 1\n      image: ghcr.io/open-traffic-generator/ixia-c-traffic-engine:1.8.0.245\n      imagePullPolicy: IfNotPresent\n      name: ixia-c-port2-traffic-engine\n      securityContext:\n        privileged: true\n    - env:\n        - name: INTF_LIST\n          value: eth2\n      image: ghcr.io/open-traffic-generator/ixia-c-protocol-engine:1.00.0.522\n      imagePullPolicy: IfNotPresent\n      name: ixia-c-port2-protocol-engine\n      securityContext:\n        privileged: true\n  restartPolicy: Always\n\n---\n\napiVersion: v1\nkind: Pod\nmetadata:\n  labels:\n    app: ixia-c\n    role: dut\n  name: dut\n  namespace: ixia-c\nspec:\n  containers:\n    - image: ubuntu:22.04\n      imagePullPolicy: IfNotPresent\n      name: dut-ubuntu\n      command:\n        - \"sleep\"\n        - \"infinity\"\n  restartPolicy: Always\n"
  },
  {
    "path": "deployments/k8s/network-emulation/readme.md",
    "content": "# Ixia-C Kubernetes Deployment For Emulating Network Topology\n\nIxia-C is a pure software-based solution for facilitating protocol emulation and traffic generation against containerized DUTs (Device Under Test).\n\n<p align=\"center\">\n<img src=\"ixia-c-k8s.drawio.svg\" alt=\"Ixia-C K8S Deployment For Emulating Network Topology\">\n</p>\n\nFor deployment, K8S (Kubernetes) as a platform can be exercised using one of following approaches:\n- Manually construct K8S deployment files for any given topology\n- Use [KNE](https://github.com/openconfig/kne) to automate deployment using an abstract topology definition\n\nThis document discusses the first approach using a minimal Ubuntu container as DUT.\n\n### Overview\n\nIxia-C is distributed as a multi-container application with following as core components:\n1. `keng-controller`: API Server driving operation on one or more test port based on API requests\n2. `ixia-c-traffic-engine`: Drives data plane operations on test port\n3. `ixia-c-protocol-engine`: Drives control plane operations on test port\n\nUpon deployment, `ixia-c-traffic-engine` and `ixia-c-protocol-engine` need to share same network namespace and hence constitute an Ixia-C Test Port Pod. A typical deployment consists of one `controller pod` and one or more `test port pod`s.\n\nTo establish any meaningful interaction between Ixia-C test ports and DUT interfaces, following needs to be done:\n- A pair of virtual interfaces need to be created, each on an Ixia-C test port pod and DUT pod\n- The interface pair then needs to have a P2P (point-to-point) link established among themselves\n\nTo achieve this, we'll be using [Meshnet CNI](https://github.com/networkop/meshnet-cni).\n\n\n### Prerequisites\n\n- At least **2 x86 CPU cores**, **7GB RAM** and **30GB Free Hard Disk Space**\n- Recommended OS is **Ubuntu 22.04 LTS** release.\n- Go **1.20+**\n- **Docker Engine** (Community Edition) - Needed when using kind for setting up K8S cluster\n\n### Steps\n\n1. Clone this repository\n\n    ```bash\n    git clone --recurse-submodules https://github.com/open-traffic-generator/ixia-c.git && cd ixia-c\n    ```\n\n2. (Optional) Setup a Kubernetes Cluster using [kind](https://kind.sigs.k8s.io/)\n\n    ```bash\n    # install kind\n    go install sigs.k8s.io/kind@v0.20.0\n\n    # create a single-node cluster\n    kind create cluster --config=deployments/k8s/network-emulation/kind.yaml --wait 30s\n\n    # get compatible kubectl\n    sudo docker cp kind-control-plane:/usr/bin/kubectl /usr/local/bin/kubectl\n    sudo chmod 0755 /usr/local/bin/kubectl\n\n    # ensure all pods are ready\n    kubectl wait --for=condition=Ready pods --all --all-namespaces\n    ```\n\n3. (Optional) If cluster does not have access to ghcr.io, manually download container images and push them to all nodes in the cluster\n\n    ```bash\n    # Enter Github user ID and PAT when asked for credentials\n    docker login ghcr.io\n\n    # download ixia-c images\n    docker pull ghcr.io/open-traffic-generator/keng-controller:1.53.0-1\n    docker pull ghcr.io/open-traffic-generator/ixia-c-traffic-engine:1.8.0.245\n    docker pull ghcr.io/open-traffic-generator/ixia-c-protocol-engine:1.00.0.522\n\n    # download DUT image\n    docker pull ubuntu:22.04\n\n    # download meshnet image\n    docker pull networkop/meshnet:latest\n    # download init image\n    docker pull networkop/init-wait:latest\n\n    # push images to nodes\n    kind load docker-image ghcr.io/open-traffic-generator/keng-controller:1.53.0-1\n    kind load docker-image ghcr.io/open-traffic-generator/ixia-c-traffic-engine:1.8.0.245\n    kind load docker-image ghcr.io/open-traffic-generator/ixia-c-protocol-engine:1.00.0.522\n    kind load docker-image ubuntu:22.04\n    kind load docker-image networkop/meshnet:latest\n    kind load docker-image networkop/init-wait:latest\n\n    # make sure all intended images have been pushed correctly\n    docker exec kind-control-plane crictl images\n    ```\n\n4. Setup meshnet\n\n    ```bash\n    # Clone and checkout tested version of meshnet\n    git clone https://github.com/networkop/meshnet-cni\n    cd meshnet-cni && git checkout f26c193 && cd -\n\n    # Deploy meshnet\n    kubectl apply -k meshnet-cni/manifests/base\n\n    # wait for meshnet pods\n    kubectl wait --for=condition=Ready pods -n meshnet --all\n    ```\n\n5. Create virtual interfaces and P2P link using meshnet\n\n    The deployment file to be applied specifies name of test port pods and dut pod, interfaces to be created inside each of them and corresponding peer interface to create P2P link with.\n\n    ```bash\n    # create meshnet CRD\n    kubectl apply -f deployments/k8s/network-emulation/namespace.yaml\n    kubectl apply -f deployments/k8s/network-emulation/links.yaml\n\n    # ensure meshnet CRD is successfully created (should list three entries)\n    kubectl get topologies -A\n    ```\n\n6. Create Ixia-C / DUT pods and services\n\n    ```bash\n    # Create pods and services\n    kubectl apply -f deployments/k8s/network-emulation/pods.yaml\n    kubectl apply -f deployments/k8s/network-emulation/services.yaml\n\n    # Wait for pods and list pods / services\n    kubectl wait --for=condition=Ready pods -n ixia-c --all\n    kubectl get pods -n ixia-c\n    kubectl get services -n ixia-c\n    ```\n\n7. Run IPv4 forwarding test using [snappi](https://github.com/open-traffic-generator/snappi/tree/main/gosnappi) which is an auto-generated SDK based on [Open Traffic Generator API](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/master/artifacts/openapi.yaml&nocors)\n\n    The test parameters, e.g. location of KENG controller, name of interfaces, etc. can be modified inside `testConst` map in `ipfwd.go`.\n\n    Check the file for more details on the test.\n\n    ```bash\n    cd deployments/k8s/network-emulation/\n    go run ipfwd.go\n    cd -\n    ```\n\n8. (Optional) Cleanup\n\n    ```bash\n    # remove cluster if deployed using kind\n    kind delete cluster\n    sudo rm -rf /usr/local/bin/kubectl\n\n    # remove pods / services / CRDs\n    kubectl delete -f deployments/k8s/network-emulation/services.yaml\n    kubectl delete -f deployments/k8s/network-emulation/pods.yaml\n    kubectl delete -f deployments/k8s/network-emulation/links.yaml\n    kubectl delete -f deployments/k8s/network-emulation/namespace.yaml\n    ```\n\n### What's Next ?\n\n- Checkout Ixia-C Release Page to get compatible client and server builds.\n    * [All Releases](https://github.com/open-traffic-generator/ixia-c/releases)\n    * [Latest Release](https://github.com/open-traffic-generator/ixia-c/releases/latest)\n- Checkout [OTG Conformance Tests](https://github.com/open-traffic-generator/conformance) for examples on various OTG features written in Go and Python.\n- Checkout [OTG Examples](https://github.com/open-traffic-generator/otg-examples) for more comprehensive examples / labs.\n"
  },
  {
    "path": "deployments/k8s/network-emulation/services.yaml",
    "content": "apiVersion: v1\nkind: Service\nmetadata:\n  name: service-keng-controller\n  namespace: ixia-c\nspec:\n  ports:\n    - name: https\n      port: 8443\n      protocol: TCP\n      targetPort: 8443\n      nodePort: 30443\n    - name: grpc\n      port: 40051\n      protocol: TCP\n      targetPort: 40051\n      nodePort: 30451\n  selector:\n    role: controller\n  type: NodePort\n\n---\n\napiVersion: v1\nkind: Service\nmetadata:\n  name: service-ixia-c-port1\n  namespace: ixia-c\nspec:\n  ports:\n    - name: port-5555\n      port: 5555\n      protocol: TCP\n      targetPort: 5555\n    - name: port-50071\n      port: 50071\n      protocol: TCP\n      targetPort: 50071\n  selector:\n    role: port1\n\n---\n\napiVersion: v1\nkind: Service\nmetadata:\n  name: service-ixia-c-port2\n  namespace: ixia-c\nspec:\n  ports:\n    - name: port-5555\n      port: 5555\n      protocol: TCP\n      targetPort: 5555\n    - name: port-50071\n      port: 50071\n      protocol: TCP\n      targetPort: 50071\n  selector:\n    role: port2\n"
  },
  {
    "path": "deployments/k8s/overlays/one-traffic-port-eth0/config-map.yaml",
    "content": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n  labels:\n    app: ixia-c\n  name: controller-config\n  namespace: ixia-c\ndata:\n  config.yaml: |\n    location_map:\n    - location: port1\n      endpoint: otg-port1.ixia-c.svc.cluster.local:5555\n"
  },
  {
    "path": "deployments/k8s/overlays/one-traffic-port-eth0/kustomization.yaml",
    "content": "apiVersion: kustomize.config.k8s.io/v1beta1\nkind: Kustomization\n\nresources:\n  - ../../bases/namespace\n  - ../../bases/otg-controller\n  - port1\n  - config-map.yaml\n\ncomponents:\n  - ../../components/images\n"
  },
  {
    "path": "deployments/k8s/overlays/one-traffic-port-eth0/port1/kustomization.yaml",
    "content": "apiVersion: kustomize.config.k8s.io/v1beta1\nkind: Kustomization\n\nresources:\n  - ../../../bases/otg-traffic-port\n\npatches:\n- target:\n    version: v1\n    kind: Pod\n    name: otg-port\n  path: pod-patch.yaml\n- target:\n    version: v1\n    kind: Service\n    name: otg-port\n  path: service-patch.yaml"
  },
  {
    "path": "deployments/k8s/overlays/one-traffic-port-eth0/port1/pod-patch.yaml",
    "content": "- op: replace\n  path: /metadata/labels/role\n  value: otg-port1\n- op: replace\n  path: /metadata/name\n  value: otg-port1"
  },
  {
    "path": "deployments/k8s/overlays/one-traffic-port-eth0/port1/service-patch.yaml",
    "content": "- op: replace\n  path: /metadata/name\n  value: otg-port1\n- op: replace\n  path: /spec/selector/role\n  value: otg-port1"
  },
  {
    "path": "deployments/k8s/overlays/two-traffic-ports-eth0/config-map.yaml",
    "content": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n  labels:\n    app: ixia-c\n  name: controller-config\n  namespace: ixia-c\ndata:\n  config.yaml: |\n    location_map:\n    - location: port1\n      endpoint: otg-port1.ixia-c.svc.cluster.local:5555\n    - location: port2\n      endpoint: otg-port2.ixia-c.svc.cluster.local:5555"
  },
  {
    "path": "deployments/k8s/overlays/two-traffic-ports-eth0/gen-test-config.sh",
    "content": "#!/bin/sh\n\nTEST_CONFIG_PATH=test-config.yaml\nif [ ! -z ${1} ]\nthen\n    TEST_CONFIG_PATH=${1}\nfi\n\ngen_test_const() {\n    # get pod IPs to be used as source and destination IP in packets\n    txIp=$(kubectl get pod -n ixia-c otg-port1 -o 'jsonpath={.status.podIP}')\n    rxIp=$(kubectl get pod -n ixia-c otg-port2 -o 'jsonpath={.status.podIP}')\n    # send ping to flood arp table and extract gateway MAC\n    kubectl exec -n ixia-c otg-port1 -c ixia-c-traffic-engine -- ping -c 1 ${rxIp}\n    gatewayMac=$(kubectl exec -n ixia-c otg-port1 -c ixia-c-traffic-engine -- arp -a | head -n 1 | cut -d\\  -f4)\n    txMac=$(kubectl exec -n ixia-c otg-port1 -c ixia-c-traffic-engine -- ifconfig eth0 | grep ether | sed 's/  */_/g' | cut -d_ -f3)\n    rxMac=$(kubectl exec -n ixia-c otg-port2 -c ixia-c-traffic-engine -- ifconfig eth0 | grep ether | sed 's/  */_/g' | cut -d_ -f3)\n\n    yml=\"otg_test_const:\n            txMac: ${txMac}\n            rxMac: ${rxMac}\n            gatewayMac: ${gatewayMac}\n            txIp: ${txIp}\n            rxIp: ${rxIp}\n        \"\n    echo -n \"$yml\" | sed \"s/^          //g\" | tee -a ${TEST_CONFIG_PATH} > /dev/null\n}\n\ngen_config_common() {\n    yml=\"otg_speed: speed_1_gbps\n        otg_capture_check: true\n        otg_iterations: 100\n        otg_grpc_transport: false\n        \"\n    echo -n \"$yml\" | sed \"s/^        //g\" | tee -a ${TEST_CONFIG_PATH} > /dev/null\n}\n\ngen_test_config() {\n    yml=\"otg_host: https://localhost:8443\n        otg_ports:\n          - port1\n          - port2\n        \"\n    echo -n \"$yml\" | sed \"s/^        //g\" | tee ${TEST_CONFIG_PATH} > /dev/null\n\n    gen_config_common\n\n    gen_test_const\n}\n\ngen_test_config"
  },
  {
    "path": "deployments/k8s/overlays/two-traffic-ports-eth0/init-container.yaml",
    "content": "apiVersion: v1\nkind: Pod\nmetadata:\n  name: _\nspec:\n  initContainers:\n    - name: init-setup\n      image: ubuntu:22.04\n      command:\n        - bash\n        - -c\n        - apt-get update && apt-get install -y iptables && iptables -A INPUT -p udp --destination-port 7000:8000 -j DROP && iptables -A INPUT -p tcp --destination-port 7000:8000 -j DROP\n      securityContext:\n        privileged: true"
  },
  {
    "path": "deployments/k8s/overlays/two-traffic-ports-eth0/kustomization.yaml",
    "content": "apiVersion: kustomize.config.k8s.io/v1beta1\nkind: Kustomization\n\nresources:\n  - ../../bases/namespace\n  - ../../bases/otg-controller\n  - port1\n  - port2\n  - config-map.yaml\n\ncomponents:\n  - ../../components/images\n\npatches:\n- path: init-container.yaml\n  target:\n    kind: Pod\n    name: otg-port1\n- path: init-container.yaml\n  target:\n    kind: Pod\n    name: otg-port2"
  },
  {
    "path": "deployments/k8s/overlays/two-traffic-ports-eth0/port1/kustomization.yaml",
    "content": "apiVersion: kustomize.config.k8s.io/v1beta1\nkind: Kustomization\n\nresources:\n  - ../../../bases/otg-traffic-port\n\npatches:\n- target:\n    version: v1\n    kind: Pod\n    name: otg-port\n  path: pod-patch.yaml\n- target:\n    version: v1\n    kind: Service\n    name: otg-port\n  path: service-patch.yaml"
  },
  {
    "path": "deployments/k8s/overlays/two-traffic-ports-eth0/port1/pod-patch.yaml",
    "content": "- op: replace\n  path: /metadata/labels/role\n  value: otg-port1\n- op: replace\n  path: /metadata/name\n  value: otg-port1"
  },
  {
    "path": "deployments/k8s/overlays/two-traffic-ports-eth0/port1/service-patch.yaml",
    "content": "- op: replace\n  path: /metadata/name\n  value: otg-port1\n- op: replace\n  path: /spec/selector/role\n  value: otg-port1"
  },
  {
    "path": "deployments/k8s/overlays/two-traffic-ports-eth0/port2/kustomization.yaml",
    "content": "apiVersion: kustomize.config.k8s.io/v1beta1\nkind: Kustomization\n\nresources:\n  - ../../../bases/otg-traffic-port\n\npatches:\n- target:\n    version: v1\n    kind: Pod\n    name: otg-port\n  path: pod-patch.yaml\n- target:\n    version: v1\n    kind: Service\n    name: otg-port\n  path: service-patch.yaml"
  },
  {
    "path": "deployments/k8s/overlays/two-traffic-ports-eth0/port2/pod-patch.yaml",
    "content": "- op: replace\n  path: /metadata/labels/role\n  value: otg-port2\n- op: replace\n  path: /metadata/name\n  value: otg-port2"
  },
  {
    "path": "deployments/k8s/overlays/two-traffic-ports-eth0/port2/service-patch.yaml",
    "content": "- op: replace\n  path: /metadata/name\n  value: otg-port2\n- op: replace\n  path: /spec/selector/role\n  value: otg-port2"
  },
  {
    "path": "deployments/k8s/readme.md",
    "content": "# Deploy Ixia-C in Kubernetes\n\nThis section hosts [kustomize](https://kustomize.io/) manifests for deploying various Ixia-C topologies in Kubernetes cluster.\n\n### Prerequisites\n\n- At least **2 x86 CPU cores**, **7GB RAM** and **30GB Free Hard Disk Space**\n- Recommended OS is **Ubuntu 22.04 LTS** release.\n- Go **1.20+**\n- **Docker Engine** (Community Edition) - Needed when using kind for setting up K8S cluster\n\n> Please make sure that current working directory is `deployments/k8s`.\n\n### Initial Steps\n\n1. Clone repository\n\n    ```bash\n    git clone --recurse-submodules https://github.com/open-traffic-generator/ixia-c.git\n    cd ixia-c/deployments/k8s\n    ```\n\n2. Setup a Kubernetes cluster using [kind](https://kind.sigs.k8s.io/)\n\n    ```bash\n    # install kind\n    go install sigs.k8s.io/kind@v0.20.0\n    # create cluster with custom configuration\n    kind create cluster --config=kind.yaml --wait 30s\n    # install compatible kubectl\n    sudo docker cp kind-control-plane:/usr/bin/kubectl /usr/local/bin/kubectl\n    sudo chmod 0755 /usr/local/bin/kubectl\n    # ensure all pods are ready\n    kubectl wait --for=condition=Ready pods --all --all-namespaces\n    ```\n\n3. (Optional) Load container images to cluster if offline images are preferred\n\n    Images to be used are specified in `components/images/kustomization.yaml`.\n\n    ```bash\n    yml=components/images/kustomization.yaml\n    for i in $(seq $(grep -c newName ${yml}))\n    do\n        cap=$(grep -A1 -m${i} newName ${yml} | tail -n 2)\n        img=$(grep -A1 -m${i} newName ${yml} | tail -n 2 | grep newName | cut -d: -f2 | cut -d\\  -f2)\n        img=${img}:$(grep -A1 -m${i} newName ${yml} | tail -n 2 | grep newTag | cut -d\\\" -f2)\n        docker pull \"${img}\" && kind load docker-image \"${img}\"\n    done\n    ```\n\n### Deploy Topology and Run Tests (Stateless traffic on eth0)\n\n1. Deploy topology consisting of two Ixia-c port pods and one KENG controller pod\n\n    Topology manifests are kept inside `overlays/two-traffic-ports-eth0` which specifies `port1` and `port2`.\n    * iptables rule is configured on both ports to drop UDP/TCP packets destined for ports 7000-8000\n    * number of ports can be increased by adding new port dirs similar to `port1` and using it in rest of the files\n\n    ```bash\n    # deploy Ixia-c with two ports that only support stateless traffic over eth0\n    kubectl apply -k overlays/two-traffic-ports-eth0\n    # ensure all Ixia-c pods are ready\n    kubectl wait --for=condition=Ready pods --all -n ixia-c\n    ```\n\n2. Generate test pre-requisites\n\n    The sample test requires `conformance/test-config.yaml` which is auto-generated:\n    * KENG controller / port endpoints\n    * common port / flow properties\n    * values like port pod IPs, gateway MAC on tx port, etc.\n\n    ```bash\n    overlays/two-traffic-ports-eth0/gen-test-config.sh ../../conformance/test-config.yaml\n    # check contents\n    cat ../../conformance/test-config.yaml\n    ```\n\n3. Run sample test\n\n    The test being run for this specific topology is `conformance/feature/b2b/packet/udp/udp_port_value_eth0_test.go`\n\n    ```bash\n    cd ../../conformance\n    CGO_ENABLED=0 go test -v -count=1 -p=1 -timeout 3600s -tags=\"all\" -run=\"^TestUdpPortValueEth0$\" ./...\n    ```\n"
  },
  {
    "path": "deployments/raw-one-arm.yml",
    "content": "version: '3.9'\nservices:\n  controller:\n    image: ghcr.io/open-traffic-generator/keng-controller:${CONTROLLER_VERSION:-latest}\n    command: --accept-eula\n    network_mode: \"host\"\n    restart: always\n  traffic_engine:\n    image: ghcr.io/open-traffic-generator/ixia-c-traffic-engine:${TRAFFIC_ENGINE_VERSION:-latest}\n    network_mode: \"host\"\n    restart: always\n    privileged: true\n    cpuset: ${CPU_CORES_IFC1:-\"0,1,2\"}\n    environment:\n    - OPT_LISTEN_PORT=${TCP_PORT_IFC1:-5555}\n    - ARG_IFACE_LIST=virtual@af_packet,${IFC1}\n    - OPT_NO_HUGEPAGES=Yes\n  aur:\n    image: ghcr.io/open-traffic-generator/keng-app-usage-reporter:${AUR_VERSION:-latest}\n    network_mode: \"host\"\n    restart: always\n"
  },
  {
    "path": "deployments/raw-three-arm-mesh.yml",
    "content": "version: '3.9'\nservices:\n  controller:\n    image: ghcr.io/open-traffic-generator/keng-controller:${CONTROLLER_VERSION:-latest}\n    command: --accept-eula\n    network_mode: \"host\"\n    restart: always\n  traffic_engine_1:\n    image: ghcr.io/open-traffic-generator/ixia-c-traffic-engine:${TRAFFIC_ENGINE_VERSION:-latest}\n    restart: always\n    privileged: true\n    ports:\n    - \"${TCP_PORT_IFC1:-5555}:5555\"\n    cpuset: ${CPU_CORES_IFC1:-\"0,1,2\"}\n    environment:\n    - OPT_LISTEN_PORT=5555\n    - ARG_IFACE_LIST=virtual@af_packet,eth0\n    - OPT_NO_HUGEPAGES=Yes\n  traffic_engine_2:\n    image: ghcr.io/open-traffic-generator/ixia-c-traffic-engine:${TRAFFIC_ENGINE_VERSION:-latest}\n    restart: always\n    privileged: true\n    ports:\n    - \"${TCP_PORT_IFC2:-5556}:5555\"\n    cpuset: ${CPU_CORES_IFC2:-\"0,3,4\"}\n    environment:\n    - OPT_LISTEN_PORT=5555\n    - ARG_IFACE_LIST=virtual@af_packet,eth0\n    - OPT_NO_HUGEPAGES=Yes\n  traffic_engine_3:\n    image: ghcr.io/open-traffic-generator/ixia-c-traffic-engine:${TRAFFIC_ENGINE_VERSION:-latest}\n    restart: always\n    privileged: true\n    ports:\n    - \"${TCP_PORT_IFC3:-5557}:5555\"\n    cpuset: ${CPU_CORES_IFC3:-\"0,5,6\"}\n    environment:\n    - OPT_LISTEN_PORT=5555\n    - ARG_IFACE_LIST=virtual@af_packet,eth0\n    - OPT_NO_HUGEPAGES=Yes\n  aur:\n    image: ghcr.io/open-traffic-generator/keng-app-usage-reporter:${AUR_VERSION:-latest}\n    network_mode: \"host\"\n    restart: always\n"
  },
  {
    "path": "deployments/raw-two-arm.yml",
    "content": "version: '3.9'\nservices:\n  controller:\n    image: ghcr.io/open-traffic-generator/keng-controller:${CONTROLLER_VERSION:-latest}\n    command: --accept-eula\n    network_mode: \"host\"\n    restart: always\n  traffic_engine_1:\n    image: ghcr.io/open-traffic-generator/ixia-c-traffic-engine:${TRAFFIC_ENGINE_VERSION:-latest}\n    network_mode: \"host\"\n    restart: always\n    privileged: true\n    cpuset: ${CPU_CORES_IFC1:-\"0,1,2\"}\n    environment:\n    - OPT_LISTEN_PORT=${TCP_PORT_IFC1:-5555}\n    - ARG_IFACE_LIST=virtual@af_packet,${IFC1}\n    - OPT_NO_HUGEPAGES=Yes\n  traffic_engine_2:\n    image: ghcr.io/open-traffic-generator/ixia-c-traffic-engine:${TRAFFIC_ENGINE_VERSION:-latest}\n    network_mode: \"host\"\n    restart: always\n    privileged: true\n    cpuset: ${CPU_CORES_IFC2:-\"0,3,4\"}\n    environment:\n    - OPT_LISTEN_PORT=${TCP_PORT_IFC2:-5556}\n    - ARG_IFACE_LIST=virtual@af_packet,${IFC2}\n    - OPT_NO_HUGEPAGES=Yes\n  aur:\n    image: ghcr.io/open-traffic-generator/keng-app-usage-reporter:${AUR_VERSION:-latest}\n    network_mode: \"host\"\n    restart: always\n"
  },
  {
    "path": "docs/CNAME",
    "content": "ixia-c.dev"
  },
  {
    "path": "docs/architecture.md",
    "content": ""
  },
  {
    "path": "docs/contribute.md",
    "content": "# Contribute\n\nWe encourage you to contribute to Ixia-c by :\n\n- using it\n- reporting issues\n- requesting enhancements\n- contributing your Ixia-c based use-cases\n- reviewing and contributing to [Open Traffic Generator Data Models](https://github.com/open-traffic-generator/models)\n\nYou can reach out to us on Slack as noted [here](support.md).\n"
  },
  {
    "path": "docs/deployments-containerlab.md",
    "content": "\n# Deploy Ixia-c-one using containerlab\n\nIxia-c-one is deployed as single-container application by using [containerlab](https://containerlab.dev/quickstart/) that consists of the following services:\n\n* **containerlab**: Containerlab provides a CLI for orchestrating and managing container-based networking labs. It starts the containers, builds a virtual wiring between them to create lab topologies depending on a user's choice, and manages the labs lifecycle.\n* **Ixia-c-one**: Keysight Ixia-c-one is a single-container distribution of Ixia-c, which in turn is Keysight's reference implementation of Open Traffic Generator API.\n\n  Meet the [keysight_ixia-c-one](https://containerlab.dev/manual/kinds/keysight_ixia-c-one) kind! It is available from containerlab [release 0.26](https://containerlab.dev/rn/0.26/#keysight-ixia-c).\n* **srl linux**: Nokia SR Linux is a truly open network operating system (NOS), that makes your data center switching infrastructure more scalable, more flexible, and simpler to operate.\n\n![ixia-c-one](res/ixia-c-one-aur.drawio.svg)\n\n## Install containerlab\n\n  ```sh\n  # download and install the latest release (may require sudo)\n  bash -c \"$(curl -sL https://get.containerlab.dev)\"\n  ```\n\n## Deploy the topology\n\n* You can find a sample topology definition in <https://containerlab.dev/lab-examples/ixiacone-srl/>, which consists of Nokia SR Linux and Ixia-c-one nodes that are connected to one-another.\n* This consists of a Keysight ixia-c-one node with 2 ports connected to 2 ports on an srl linux node via two point-to-point ethernet links. Both nodes are also connected with their management interfaces to the containerlab docker network.\n\n  ```sh\n  # After downloading the sample topology file \n  containerlab deploy --topo ixiac01.clab.yml\n  ```\n  \n- After deployment, you are now ready to run a test using the topology.\n\n## Run a test\n\n* Follow this [link](https://containerlab.dev/lab-examples/ixiacone-srl/#execution) to run a test.\n\n## Destroy/Remove the topology\n\n  ```sh\n  # delete a particular topology \n  containerlab destroy --topo ixiac01.clab.yml\n  ```\n"
  },
  {
    "path": "docs/deployments-docker-compose.md",
    "content": "# Deploy Ixia-c using docker-compose\n\nDeploying multiple services manually (along with the required parameters) is not always applicable in some scenarios. For convenience, the [deployments](../deployments) directory consists of the following `docker-compose` files:\n\n- `*.yml`: Describes the services for a given scenario and the deployment parameters that are required to start them.\n- `.env`: Holds the default parameters, that are used across all `*.yml` files. For example, the name of the interface, the version of docker images, and etc.\n\nIf a concerned `.yml` file does not include certain variables from `.env`, those can then safely be ignored.  \nFollwoing is the example of a usual workflow, by using  `docker-compose`.\n\n```sh\n# change default parameters if needed; e.g. interface name, image version, etc.\nvi deployments/.env\n# deploy and start services for community users\ndocker-compose -f deployments/<scenario>.yml up -d\n# stop and remove services deployed\ndocker-compose -f deployments/<scenario>.yml down\n```\n\nOn most of the systems, `docker-compose` needs to be installed separately even if the docker is already installed. For more information, see [docker prerequisites](prerequisites.md#docker) .\n\n>All the scenarios that are mentioned in the following sections, describe both manual and automated (requiring docker-compose) steps.\n\n## Deployment Parameters\n\n### Controller\n\n  | Controller Parameters       | Optional  | Default                 | Description                                                     |\n  |-----------------------------|-----------|-------------------------|-----------------------------------------------------------------|\n  | --debug                     |   Yes     | false                   | Enables high volume logs with debug info for better diagnostics.|\n  | --disable-app-usage-reporter|   Yes     | false                   | Disables sending of usage data to the app-usage-reporter.              |\n  | --http-port                 |   Yes     | 8443                     | TCP port for HTTP server.                                       |\n  | --aur-host                  |   Yes     | https://localhost:5600  | Overrides the location of the app-usage-reporter.                       |\n  | --accept-eula               |   No      | NA                      | Indicates that the user has accepted EULA, otherwise the controller will not boot up. |\n  | --license-servers           |   No      | NA                      | Indicates the ip address of license servers for commercial users. |\n\n  Docker Parameters:\n\n- `--net=host`: It is recommended to allow the use of the host network stack, in order to address the traffic-engine containers using `localhost` instead of `container-ip`, when deployed on the same host.\n- `-d`: This starts the container in background.\n\n  Example:\n\n  ```bash\n  # For community users\n  docker run --net=host -d ghcr.io/open-traffic-generator/keng-controller --accept-eula --debug --http-port 5050\n\n  # For commercial users\n  docker run --net=host -d ghcr.io/open-traffic-generator/keng-controller --accept-eula --debug --http-port 5050 --license-servers=\"ip/hostname of license server\"\n  ```\n\n### Traffic Engine\n\n  | Environment Variables       | Optional  | Default                 | Description                                                     |\n  |-----------------------------|-----------|-------------------------|-----------------------------------------------------------------|\n  | ARG_IFACE_LIST              |   No      | NA                      | Name of the network interface to bind to. It must be visible to the traffic-engine's network namespace. For example, `virtual@af_packet,eth1` where `eth1` is the interface name and `virtual@af_packet` indicates that the interface is managed by the host kernel's network stack.|\n  | OPT_LISTEN_PORT             |   Yes     | \"5555\"                  | TCP port on which the controller can establish connection with the traffic-engine.|\n  | OPT_NO_HUGEPAGES            |   Yes     | \"No\"                    | If set to `Yes`, it disables hugepages in the OS. The hugepages needs to be disabled when the network interfaces are managed by the host kernel's stack.|\n\n  Docker Parameters:\n\n- `--net=host`: This is required if the traffic-engine needs to bind to a network interface that is visible in the host network stack but not inside the docker's network.\n- `--privileged`: This is required because the traffic-engine needs to exercise capabilities that require elevated privileges.\n- `--cpuset-cpus`: The traffic-engine usually requires 1 shared CPU core for management activities and 2 exclusive CPU cores, each for the transmit engine and receive engine. The shared CPU core can be shared across multiple traffic-engines. For example, `--cpuset-cpus=\"0,1,2\"` which indicates that cpu0 is shared, cpu1 is used for transmit and cpu2 is used for receive. If CPU cores are not specified, any arbitrary CPU cores will be chosen.\n    > If enough CPU cores are not provided, the available CPU cores may be shared among management, transmit, and the receive engines, that can occasionally result in lower performance.\n- `-d`: This starts the container in background.\n\n  Example:\n\n  ```bash\n  docker run --net=host --privileged -d         \\\n    -e OPT_LISTEN_PORT=\"5555\"                   \\\n    -e ARG_IFACE_LIST=\"virtual@af_packet,eth1\"  \\\n    -e OPT_NO_HUGEPAGES=\"Yes\"                   \\\n    --cpuset-cpus=\"0,1,2\"                       \\\n    ghcr.io/open-traffic-generator/ixia-c-traffic-engine\n  ```\n"
  },
  {
    "path": "docs/deployments-kne.md",
    "content": "# Deploy Ixia-c using KNE\n\nIxia-c can be deployed in the k8s environment by using the [Kubernetes Network Emulation](https://github.com/openconfig/kne) that consists of the following services:\n\n* **operator**: Serves API request from the clients and manages workflow across one or more traffic engines.\n* **controller**: Serves API request from the clients and manages workflow across one or more traffic engines.\n* **traffic-engine**: Generates, captures, and processes the traffic from one or more network interfaces (on linux-based OS).\n* **protocol-engine**: Emulates layer3 networks and protocols such as BGP, ISIS, and etc (on linux-based OS).\n* **gnmi-server**: Captures statistics from one or more network interfaces (on linux-based OS).\n\n## System Prerequisites\n\n### CPU and RAM\n\nFollowing are the recommended resources for a basic use-case.\n\n- `keng-operator`: Each instance requires at least 1 CPU core and 2GB RAM.\n- `keng-controller`: Each instance requires at least 1 CPU core and 2GB RAM.\n- `otg-gnmi-server`: Each instance requires at least 1 CPU core and 2GB RAM.\n- `ixia-c-traffic-engine`: Each instance requires 2 dedicated CPU cores and 3GB dedicated RAM.\n- `ixia-c-protocol-engine`: Each instance requires 4 dedicated CPU cores and 1GB dedicated RAM per port.\n\n### OS and Software Prerequisites\n\n- x86_64 Linux Distribution (Centos 7+ or Ubuntu 18+ have been tested)\n- Docker 19+ (as distributed by https://docs.docker.com/)\n- Go 1.17+\n- kind 0.18+\n\n## Install KNE\n\n* The main use case we are interested in is the ability to bring up arbitrary topologies to represent a production topology. This would require multiple vendors as well as traffic generation and end hosts.\n\n  ```sh\n    go install github.com/openconfig/kne/kne@latest\n  ```\n\n## Deploy keng-operator\n\n* Ixia Operator defines CRD for Ixia network device (IxiaTG) and can be used to build up different network topologies with network devices from other vendors. Network interconnects between the topology nodes can be setup with various container network interface (CNI) plugins for Kubernetes for attaching multiple network interfaces to the nodes.\n\n  ```sh\n    kubectl apply -f https://github.com/open-traffic-generator/keng-operator/releases/download/v0.3.5/ixiatg-operator.yaml\n  ```\n\n## Apply configmap\n\n* The various Ixia component versions to be deployed is derived from the Ixia release version as specified in the IxiaTG config. These component mappings are captured in ixia-configmap.yaml for each Ixia release. The configmap, as shown in the snippet below, comprise of the Ixia release version (\"release\"), and the list of qualified component versions, for that release. Ixia Operator first tries to access these details from Keysight published releases; if unable to so, it tries to locate them in Kubernetes configmap. This allows users to have the operator load images from private repositories, by updating the configmap entries. Thus, for deployment with custom images, the user is expected to download release specific ixia-configmap.yaml from published releases. Then, in the configmap, update the specific container image \"path\" / \"tag\" fields and also update the \"release\" to some custom name. Start the operator first as specified in the deployment section below, before applying the configmap locally. After this the operator can be used to deploy the containers and services.\n\n  * For community users,\n\n    ```json\n      apiVersion: v1\n      kind: ConfigMap\n      metadata:\n          name: ixiatg-release-config\n          namespace: ixiatg-op-system\n      data:\n          versions: |\n              {\n                \"release\": \"1.53.0-1\",\n                \"images\": [\n                      {\n                          \"name\": \"controller\",\n                          \"path\": \"ghcr.io/open-traffic-generator/keng-controller\",\n                          \"tag\": \"1.53.0-1\"\n                      },\n                      {\n                          \"name\": \"gnmi-server\",\n                          \"path\": \"ghcr.io/open-traffic-generator/otg-gnmi-server\",\n                          \"tag\": \"1.53.0\"\n                      },\n                      {\n                          \"name\": \"traffic-engine\",\n                          \"path\": \"ghcr.io/open-traffic-generator/ixia-c-traffic-engine\",\n                          \"tag\": \"1.8.0.245\"\n                      },\n                      {\n                          \"name\": \"protocol-engine\",\n                          \"path\": \"ghcr.io/open-traffic-generator/ixia-c-protocol-engine\",\n                          \"tag\": \"1.00.0.522\"\n                      },\n                      {\n                          \"name\": \"ixhw-server\",\n                          \"path\": \"ghcr.io/open-traffic-generator/keng-layer23-hw-server\",\n                          \"tag\": \"1.53.0-3\"\n                      }\n                  ]\n              }\n    ```\n\n  * For commercial users, `LICENSE_SERVERS` needs to be specified for `keng-controller` deployment.\n\n    ```json\n      apiVersion: v1\n      kind: ConfigMap\n      metadata:\n          name: ixiatg-release-config\n          namespace: ixiatg-op-system\n      data:\n          versions: |\n              {\n                \"release\": \"1.53.0-1\",\n                \"images\": [\n                      {\n                          \"name\": \"controller\",\n                          \"path\": \"ghcr.io/open-traffic-generator/keng-controller\",\n                          \"tag\": \"1.53.0-1\",\n                          \"env\": {\n                                \"LICENSE_SERVERS\": \"ip/hostname of license server\"\n                            }\n                      },\n                      {\n                          \"name\": \"gnmi-server\",\n                          \"path\": \"ghcr.io/open-traffic-generator/otg-gnmi-server\",\n                          \"tag\": \"1.53.0\"\n                      },\n                      {\n                          \"name\": \"traffic-engine\",\n                          \"path\": \"ghcr.io/open-traffic-generator/ixia-c-traffic-engine\",\n                          \"tag\": \"1.8.0.245\"\n                      },\n                      {\n                          \"name\": \"protocol-engine\",\n                          \"path\": \"ghcr.io/open-traffic-generator/ixia-c-protocol-engine\",\n                          \"tag\": \"1.00.0.522\"\n                      },\n                      {\n                          \"name\": \"ixhw-server\",\n                          \"path\": \"ghcr.io/open-traffic-generator/keng-layer23-hw-server\",\n                          \"tag\": \"1.53.0-3\"\n                      }\n                  ]\n              }\n    ```\n\n  ```sh\n    # After saving the configmap snippet in a yaml file\n    kubectl apply -f ixiatg-configmap.yaml\n  ```\n\n## Deploy the topology\n\n* The following snippet shows a simple KNE b2b topology.\n\n  ```yaml\n  name: ixia-c\n  nodes:\n    - name: otg\n      vendor: KEYSIGHT\n      version: 1.53.0-1\n      services:\n        8443:\n          name: https\n          inside: 8443\n        40051:\n          name: grpc\n          inside: 40051\n        50051:\n          name: gnmi\n          inside: 50051\n  links:\n    - a_node: otg\n      a_int: eth1\n      z_node: otg\n      z_int: eth2\n  ```\n\n  ```sh\n  # After saving the topology snippet in a yaml file\n  kne create topology.yaml\n  ```\n\n* After deployment, you are now ready to run a test using this topology.\n\n## Destroy/Remove the topology\n\n  ```sh\n  # delete a particular topology\n  kne delete topology.yaml\n  ```\n"
  },
  {
    "path": "docs/deployments.md",
    "content": "# Deployment\n\n## Overview\n\nIxia-c is distributed and deployed as a multi-container application that consists of the following services:\n\n* **controller**: Serves API request from the clients and manages workflow across one or more traffic engines.\n* **traffic-engine**: Generates, captures, and processes traffic from one or more network interfaces (on linux-based OS).\n* **app-usage-reporter**: (Optional) Collects anonymous usage report from the controller and uploads it to the Keysight Cloud, with minimal impact on the host resources.\n\nAll these services are available as docker images on the [GitHub Open-Traffic-Generator repository](https://github.com/orgs/open-traffic-generator/packages). To use specific versions of these images, see [Ixia-c Releases](releases.md) .\n\n![ixia-c-aur](res/ixia-c-aur.drawio.svg \"ixia-c-aur\")\n\n> Once the services are deployed, [conformance](https://github.com/open-traffic-generator/conformance/tree/main) (a collection of [snappi](https://pypi.org/project/snappi/) & [gosnappi](https://otg.dev/clients/gosnappi/) test scripts and configurations) can be setup to run against Ixia-c.\n\n## Bootstrap\n\nThe Ixia-c services can either all be deployed on the same host or each on separate hosts (as long as they are mutually reachable over the network). There is no boot-time dependency between them, which allows **horizontal scalability** without interrupting the existing services.\n\nYou can establish a connectivity between the services in two ways. The options are as follows:\n\n- **controller & traffic-engine**: The client pushes a traffic configuration to the controller, containing the `location` of the traffic engine.\n- **controller & app-usage-reporter**: The Controller periodically tries to establish connectivity with the `app-usage-reporter` on a `location`, which can be overridden by using the controller's deployment parameters.\n\n>The **location** (network address) of the traffic-engine and the app-usage-reporter must be reachable from the controller, even if they are not reachable from the client scripts.\n\n## Deployment types\n\n* [Using docker-compose](deployments-docker-compose.md)\n\n* [Using containerlab](deployments-containerlab.md)\n\n* [Using KNE](deployments-kne.md)\n\n## Diagnostics\n\nCheck and download controller logs:\n\n```sh\ndocker exec <container-id> cat logs/controller.log\n# follow logs\ndocker exec <container-id> tail -f logs/controller.log\n# check stdout output\ndocker logs <container-id>\n# download logs\ndocker cp <container-id>:$(docker exec <container-id> readlink -f logs/controller.log) ./\n```\n\nCheck and download traffic-engine logs:\n\n```sh\ndocker exec <container-id> cat /var/log/usstream/usstream.log\n# follow logs\ndocker exec <container-id> tail -f /var/log/usstream/usstream.log\n# check stdout output\ndocker logs <container-id>\n# download logs\ndocker cp <container-id>:/var/log/usstream/usstream.log ./\n```\n\n## Test Suite\n\n## One-arm Scenario\n\n> TODO: diagram\n\n* Automated\n\n  ```bash\n  docker-compose -f deployments/raw-one-arm.yml up -d # community users\n  # optionally stop and remove services deployed\n  docker-compose -f deployments/raw-one-arm.yml down # community users\n  ```\n\n* Manual\n\n  ```bash\n  # start controller and app usage reporter\n\n  # community users\n  docker run --net=host -d ghcr.io/open-traffic-generator/keng-controller --accept-eula\n  # commercial users\n  docker run --net=host -d ghcr.io/open-traffic-generator/keng-controller --accept-eula --license-servers=\"ip/hostname of license server\"\n  docker run --net=host -d ghcr.io/open-traffic-generator/keng-app-usage-reporter\n\n  # start traffic engine on network interface eth1, TCP port 5555 and cpu cores 0, 1, 2\n  docker run --net=host --privileged -d         \\\n    -e OPT_LISTEN_PORT=\"5555\"                   \\\n    -e ARG_IFACE_LIST=\"virtual@af_packet,eth1\"  \\\n    -e OPT_NO_HUGEPAGES=\"Yes\"                   \\\n    --cpuset-cpus=\"0,1,2\"                       \\\n    ghcr.io/open-traffic-generator/ixia-c-traffic-engine\n  ```\n\n## Two-arm Scenario\n\n> TODO: diagram\n\n* Automated\n\n  ```bash\n  docker-compose -f deployments/raw-two-arm.yml up -d # community users\n  # optionally stop and remove services deployed\n  docker-compose -f deployments/raw-two-arm.yml down # community users\n  ```\n\n* Manual\n\n  ```bash\n  # start controller and app usage reporter\n  # community users\n  docker run --net=host -d ghcr.io/open-traffic-generator/keng-controller --accept-eula\n  # commercial users\n  docker run --net=host -d ghcr.io/open-traffic-generator/keng-controller --accept-eula --license-servers=\"ip/hostname of license server\"\n  docker run --net=host -d ghcr.io/open-traffic-generator/keng-app-usage-reporter\n\n  # start traffic engine on network interface eth1, TCP port 5555 and cpu cores 0, 1, 2\n  docker run --net=host --privileged -d         \\\n    -e OPT_LISTEN_PORT=\"5555\"                   \\\n    -e ARG_IFACE_LIST=\"virtual@af_packet,eth1\"  \\\n    -e OPT_NO_HUGEPAGES=\"Yes\"                   \\\n    --cpuset-cpus=\"0,1,2\"                       \\\n    ghcr.io/open-traffic-generator/ixia-c-traffic-engine\n\n  # start traffic engine on network interface eth2, TCP port 5556 and cpu cores 0, 3, 4\n  docker run --net=host --privileged -d         \\\n    -e OPT_LISTEN_PORT=\"5556\"                   \\\n    -e ARG_IFACE_LIST=\"virtual@af_packet,eth2\"  \\\n    -e OPT_NO_HUGEPAGES=\"Yes\"                   \\\n    --cpuset-cpus=\"0,3,4\"                       \\\n    ghcr.io/open-traffic-generator/ixia-c-traffic-engine\n  ```\n\n## Three-arm Mesh Scenario\n\nThis scenario binds traffic engine to the management network interface, that belongs to the container which in turn is a part of the docker0 network.\n\n> TODO: diagram\n\n* Automated\n\n  ```bash\n  docker-compose -f deployments/raw-three-arm-mesh.yml up -d # community users\n  # optionally stop and remove services deployed\n  docker-compose -f deployments/raw-three-arm-mesh.yml down # community users\n  ```\n\n* Manual\n\n  ```bash\n  # start controller and app usage reporter\n  # community users\n  docker run --net=host -d ghcr.io/open-traffic-generator/keng-controller --accept-eula\n  # commercial users\n  docker run --net=host -d ghcr.io/open-traffic-generator/keng-controller --accept-eula --license-servers=\"ip/hostname of license server\"\n  docker run --net=host -d ghcr.io/open-traffic-generator/keng-app-usage-reporter\n\n  # start traffic engine on network interface eth0, TCP port 5555 and cpu cores 0, 1, 2\n  docker run --privileged -d                    \\\n    -e OPT_LISTEN_PORT=\"5555\"                   \\\n    -e ARG_IFACE_LIST=\"virtual@af_packet,eth0\"  \\\n    -e OPT_NO_HUGEPAGES=\"Yes\"                   \\\n    -p 5555:5555                                \\\n    --cpuset-cpus=\"0,1,2\"                       \\\n    ghcr.io/open-traffic-generator/ixia-c-traffic-engine\n\n  # start traffic engine on network interface eth0, TCP port 5556 and cpu cores 0, 3, 4\n  docker run --privileged -d                    \\\n    -e OPT_LISTEN_PORT=\"5555\"                   \\\n    -e ARG_IFACE_LIST=\"virtual@af_packet,eth0\"  \\\n    -e OPT_NO_HUGEPAGES=\"Yes\"                   \\\n    -p 5556:5555                                \\\n    --cpuset-cpus=\"0,3,4\"                       \\\n    ghcr.io/open-traffic-generator/ixia-c-traffic-engine\n\n  # start traffic engine on network interface eth0, TCP port 5557 and cpu cores 0, 5, 6\n  docker run --privileged -d                    \\\n    -e OPT_LISTEN_PORT=\"5555\"                   \\\n    -e ARG_IFACE_LIST=\"virtual@af_packet,eth0\"  \\\n    -e OPT_NO_HUGEPAGES=\"Yes\"                   \\\n    -p 5557:5555                                \\\n    --cpuset-cpus=\"0,5,6\"                       \\\n    ghcr.io/open-traffic-generator/ixia-c-traffic-engine\n  ```\n\n### TODO: Multi-port per TE container\n\n## Tests\n\n  Please follow [readme](https://github.com/open-traffic-generator/conformance/blob/main/readme.md) to run sample go/python tests.\n"
  },
  {
    "path": "docs/developer/hello-snappi.md",
    "content": "## Use Case\n\nThis tutorial explains some key elements that are required to write a **snappi script** for exercising the following topology.\n\n* Send 1000 UDP packets back and forth between the interfaces `eth1` & `eth2` at a rate of 1000 packets per second.\n* Ensure that the correct number of valid UDP packets are received on both the ends, by using port capture and port metrics.\n\nThe [hello_snappi.py](https://github.com/open-traffic-generator/snappi-tests/tree/3ffe20f/scripts/hello_snappi.py) script covers this extensively.\n\n![Ixia-C Deployment for Bidirectional Traffic](../res/ixia-c.drawio.svg)\n\n## Setup\n\nYou can start by setting up the topology as described above. For more detail, see [deployment steps for two-arm scenario](../deployments.md#two-arm-scenario).\n\n```sh\ngit clone --recurse-submodules https://github.com/open-traffic-generator/ixia-c && cd ixia-c\ndocker-compose -f deployments/raw-two-arm.yml up -d\n```\n\nAfter the set up is completed, install the python packages:\n\n* [snappi](https://pypi.org/project/snappi/) - client SDK auto-generated from [Open Traffic Generator API](https://github.com/open-traffic-generator/models).\n* [dpkt](https://pypi.org/project/dpkt/) - for processing `.pcap` files.\n\n```sh\npython -m pip install --upgrade snappi==1.53.0 dpkt\n```\n\n## Create the API Handle\n\nThe first step in any snappi script is to import the `snappi` package and instantiate an `api` object, where the `location` parameter takes the HTTPS/gRPC address of the controller and `verify` is used to turn off the insecure certificate warning.\n\nIf the controller is deployed with a non-default TCP port by using the [deployment parameters](../deployments.md#deployment-parameters), it must be specified explicitly in the address (default port of HTTPS is 8443 and gRPC is 40051).\n\n```python\nimport snappi\n\n# HTTPS\napi = snappi.api(location='https://localhost', verify=False)\n# or with non-default TCP port\napi = snappi.api(location='https://localhost:8080', verify=False)\n\n#gRPC\napi = snappi.api(location=\"localhost:40051\", transport=snappi.Transport.GRPC)\n# or with non-default TCP port\napi = snappi.api(location=\"localhost:50020\", transport=snappi.Transport.GRPC)\n```\n\n<details>\n<summary><b>Expand</b> This section provides the details on an optional parameter <code>ext</code> which specifies the <i>snappi extension</i> to be loaded.</summary><br/>\n\nIf a traffic generator does not natively support the  [Open Traffic Generator API](https://github.com/open-traffic-generator/models), snappi can be extended to write a translation layer to bridge the gap. For example, [snappi extension for IxNetwork](https://pypi.org/project/snappi-ixnetwork/). This can be installed by using `python -m pip install --upgrade snappi[ixnetwork]`.\n```python\nimport snappi\n# location here refers to HTTPS address of IxNetwork API Server\napi = snappi.api(location=\"https://localhost\", ext='ixnetwork', verify=False)\n```\n\n</details>\n\n## Configuration\n\nYou need to construct the traffic configuration to send it to the controller. Use the `api` object that you created previously. It will act as a handle for the following steps:\n\n* Create new objects for API request (or response)\n\n  ```python\n  cfg = api.config()\n  ```\n\n  > `api.config()` is a factory function for creating an empty `snappi.Config` object, which encapsulates the parameters that the controller needs to configure different aspects of the traffic generator. The next sections discuss about these configuration parameters in details.\n\n* Initiate the API requests (and get back response)\n\n  ```python\n  # this pushes object of type `snappi.Config` to controller\n  api.set_config(cfg)\n  # this retrieves back object of type `snappi.Config` from controller\n  cfg = api.get_config()\n  ```\n\n  > By default, API requests in snappi are made over HTTPS with payloads as a JSON string. Since each object in snappi inherits `SnappiObject` or `SnappiIter`, they all share a common method called `.serialize()` and `deserialize()`, that are used internally during the API requests, for valid conversion to / from a JSON string. You will find more about such conveniences offered by snappi along the way.\n\n<details>\n<summary><b>Expand</b> This section explains how you can effectively navigate through the <a href=\"https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.11/artifacts/openapi.yaml\">snappi API documentation</a>.</summary><br/>\n\nThe objects and methods (for API calls) in snappi are auto-generated from an [Open API Generator YAML file](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.11/artifacts/openapi.yaml). This file adheres to the [OpenAPI Specification](https://github.com/OAI/OpenAPI-Specification), which can (by design) also be rendered as an interactive API documentation.\n\n[ReDoc](https://redocly.github.io/redoc/) is an open-source tool that provides a similar functionality. It accepts a link to valid OpenAPI YAML file and generates a document where all the methods (for API calls) are mentioned in the left navigation bar and for each selected method, there's a request/response body description in the center of the page. These descriptions lay out the entire object tree that documents each node in detail.\n\nThe [snappi API documentation](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.11/artifacts/openapi.yaml) will always point to the API version **v0.11.11**. To use a different version, do the following:\n\n* Identify the API version from [open-traffic-generator releases](https://github.com/open-traffic-generator/snappi/releases/download/v0.11.11/models-release) and replace **v0.11.11** in the URL with the intended snappi version.\n\n* Open the [open-traffic-generator models](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.11/artifacts/openapi.yaml).\n\n</details>\n\n## Ports\n\nEach instance of a **traffic-engine** is usually referred to as a `port`. As the ports are used to send or receive the traffic (as they are directly bound to the network interfaces), provide the following information to the config object, that you created earlier:\n\n* `name`: An unique identifier for each port.\n* `location`: A DNS name or TCP socket address of the traffic-engine (format is specific to a given traffic-engine implementations).\n\n>Note: Unlike the config, creating a new port using `p = api.port()` is not required (and hence not supported), as the `snappi.Port` is never used directly as an API request or response.\n\n```python\n# config has an attribute called `ports` which holds an iterator of type\n# `snappi.PortIter`, where each item is of type `snappi.Port` (p1 and p2)\np1, p2 = cfg.ports.port(name=\"p1\", location=\"localhost:5555\").port(\n    name=\"p2\", location=\"localhost:5556\"\n)\n```\n\n> Instead of using `append()`, use factory method `.port()` on `cfg.ports` which instantiates `snappi.Port`, appends it to `cfg.ports`, and returns the entire iterator (so that it can be unpacked or accessed like a simple list). This is applicable to other iterators in snappi, for example, flows, capture, and layer1.\n\n<details>\n<summary><b>Expand</b> this section for more examples on snappi iterators.</summary>\n\n```python\np = cfg.ports.port(name='p1').port(name='p2')\nassert p[0].name == 'p1'\n\np = cfg.ports.port(name='p3')\nassert p[2].name == 'p3'\n\n# This will remove 3rd index port\ncfg.ports.remove(2)\np4 = cfg.ports.port(name='p4')[-1]\nassert p4.name == 'p4'\n\n# This will clear all the ports\ncfg.ports.clear()\np5 = cfg.ports.port(name='p5')[0]\nassert p5.name == 'p5'\n\np6 = cfg.ports.add(name='p6')\nassert p6.name == 'p6'\n\np7 = p6.clone()\np7.name = 'p7'\ncfg.ports.append(p7)\nassert p7.name == 'p7'\n```\n\n</details>\n\n## Layer1\n\nThe `ports` that you configured earlier, may require a set up for `layer1` (physical layer) properties like speed, MTU, promiscuous mode, and etc.\n\n```python\n# config has an attribute called `layer1` which holds an iterator of type\n# `snappi.Layer1Iter`, where each item is of type `snappi.Layer1` (ly)\nly = cfg.layer1.layer1(name=\"ly\")[-1]\nly.speed = ly.SPEED_1_GBPS\n# set same properties on both ports\nly.port_names = [p1.name, p2.name]\n```\n\n>Note: You can set an enum value (all uppercase) defined in the `ly`'s namespace, instead of using an arbitrary value to the `ly.speed`. These enum values are available in the [snappi API documentation](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.11/artifacts/openapi.yaml).\n\n## Capture\n\nTo start capturing packets on both the ports, enable `capture`.\n\n```python\n# config has an attribute called `captures` which holds an iterator of type\n# `snappi.CaptureIter`, where each item is of type `snappi.Capture` (cp)\ncp = cfg.captures.capture(name=\"cp\")[-1]\ncp.port_names = [p1.name, p2.name]\n```\n\n### Flows\n\nThis section describes how to set up the traffic flows.\n\nEach flow in snappi can be characterized based on the **tx/rx endpoints**, **duration**, **packet contents, packet rate, packet size**, and etc.\n\nYou can configure two flows, one that originates from port `p1` and the other from port `p2`.\n\n```python\n# config has an attribute called `flows` which holds an iterator of type\n# `snappi.FlowIter`, where each item is of type `snappi.Flow` (f1, f2)\nf1, f2 = cfg.flows.flow(name=\"flow p1->p2\").flow(name=\"flow p2->p1\")\n\n# and assign source and destination ports for each\nf1.tx_rx.port.tx_name, f1.tx_rx.port.rx_name = p1.name, p2.name\nf2.tx_rx.port.tx_name, f2.tx_rx.port.rx_name = p2.name, p1.name\n\n# configure packet size, rate and duration for both flows\nf1.size.fixed, f2.size.fixed = 128, 256\nfor f in cfg.flows:\n    # send 1000 packets and stop\n    f.duration.fixed_packets.packets = 1000\n    # send 1000 packets per second\n    f.rate.pps = 1000\n```\n\nOptionally, the flow duration and rate can be configured as follows:\n\n```python\n# send packets for 5 seconds and stop (we could also specify duration in terms\n# of continuous or bursts)\nf.duration.fixed_seconds.seconds = 5\n# send packets at 50% of configured speed (we could also specify absolute rates\n# in terms of bps, kbps, etc.)\nf.rate.percentage = 50\n```\n\n>Note: The `f.rate` is **polymorphic** in nature. It can only be used to set either `pps` or `percentage`, but not both. A special attribute `choice` is used in such cases, which holds the name of the attribute that is currently in use.\n\nIn snappi, `f.rate.choice` is automatically set based on the attribute that was last accessed. For example,\n\n```python\nf.rate.pps = 100\nprint(f.rate.serialize())\n\n# output\n{\n  \"choice\": \"pps\",\n  \"pps\": 100\n}\n```\n\n>You can set (or access) the `f1.rate.pps` without instantiating an object of type `snappi.FlowRate`, which is held by the `f1.rate`. **Accessing an uninitialized attribute** automatically initializes it with the type of object it holds.\n\n## Protocol Headers\n\nPackets sent out in a `flow` needs to be described in terms of the underlying **protocol** and **payload** contents. If no such description is provided, a simple ethernet frame is configured by default.\n\nThe following section describes how you can construct a packet by adding Ethernet, IPv4, and UDP headers (strictly in an order, in which it should appear in the TCP/IP stack).\n\n```python\n# configure packet with Ethernet, IPv4 and UDP headers for both flows\neth1, ip1, udp1 = f1.packet.ethernet().ipv4().udp()\neth2, ip2, udp2 = f2.packet.ethernet().ipv4().udp()\n```\n\nThe `f1.packet` is an iterator which holds the items of type `snappi.FlowHeader` (a **polymorphic** type, instead of the **non-polymorphic** types). Hence, snappi automatically does the following under the hood:\n\n```python\neth1, ip1, udp1 = f.packet.header().header().header()\n# set enum choice for each header and initialize intended object with empty\n# fields just by accessing it\neth1.choice = e.ETHERNET\neth1.ethernet\nip1.choice = i.IPV4\nip1.ipv4\nudp1.choice = u.UDP\nudp1.udp\n```\n\nAt this point, the headers still contain the default field values. Now, you can assign specific values to the various header fields.\n\n> The checksum and length fields in the most of the headers are automatically calculated and inserted before the packets are sent.\n\n### Setup Ethernet\n\nFor the Ethernet header, assign a static source and the destination MAC address value. The ethernet type field is *automatically* set to `0x800`, since the next header is IPv4.\n\n```python\n# set source and destination MAC addresses\neth1.src.value, eth1.dst.value = \"00:AA:00:00:04:00\", \"00:AA:00:00:00:AA\"\neth2.src.value, eth2.dst.value = \"00:AA:00:00:00:AA\", \"00:AA:00:00:04:00\"\n```\n\n### Setup IPv4\n\nFor IPv4 header also, assign a static source and the destination IPv4 address value. The IP protocol field is *automatically* set to `0x11`, since the next protocol in the stack is UDP.\n\n```python\n# set source and destination IPv4 addresses\nip1.src.value, ip1.dst.value = \"10.0.0.1\", \"10.0.0.2\"\nip2.src.value, ip2.dst.value = \"10.0.0.2\", \"10.0.0.1\"\n```\n\n### Setup UDP\n\nWith the UDP header, instead of assigning a single (fixed) value for the header fields, assign multiple values.\n\nYou can achieve this in snappi by using `increment`, `decrement`, and `list` patterns.\n\n```python\n# set incrementing port numbers as source UDP ports\nudp1.src_port.increment.start = 5000\nudp1.src_port.increment.step = 2\nudp1.src_port.increment.count = 10\n\nudp2.src_port.increment.start = 6000\nudp2.src_port.increment.step = 4\nudp2.src_port.increment.count = 10\n\n# assign list of port numbers as destination UDP ports\nudp1.dst_port.values = [4000, 4044, 4060, 4074]\nudp2.dst_port.values = [8000, 8044, 8060, 8074, 8082, 8084]\n```\n\nThe above snippet will result in a sequence of packets as shown in the figure below.\n\n![hello-snappi-packets](../res/hello-snappi-packets.png)\n\n> The patterns for headers fields in snappi provide a very flexible way to generate millions of unique packets to test the DUT functionalities, like hashing based on 5-tuple. For more information, see [common snappi constructs](snappi-constructs.md) .\n\n## Start Capture and Traffic\n\nAfter you have added all the intended configuration parameters to the `cfg`, do the following:\n\n* Push it to the controller, so that the connection with the intended traffic-engines can be established and the intended configuration is applied (to each one of them).\n* Start capturing packets on the configured ports.\n* Start sending packets from the configured ports.\n\nEvery time the `api.set_config()` is called, it essentially resets the state of the controller by **tearing down** any previous connections with traffic-engines and **overriding** any previous configuration. If the call fails at some point, `api.get_config()` will return an empty config.\n\n```python\n# push configuration to controller\napi.set_config(cfg)\n\n# start packet capture on configured ports\ncs = api.capture_state()\ncs.state = cs.START\napi.set_capture_state(cs)\n\n# start transmitting configured flows\nts = api.transmit_state()\nts.state = ts.START\napi.set_transmit_state(ts)\n```\n\n> The transmit or capture will be started on all configured flows or ports respectively, unless you provide any specific flow or port name. For example, `cs.port_names = ['p1']`, `ts.flow_names = ['f1']`.\n\n## Fetch and Validate Metrics\n\nAs you are sending 1000 packets, at a rate of 1000 packets per second, it should take 1 second for the transmit to complete. You can validate the same by using `metrics`.\n\nThe API supports different kinds of metrics, but focus on the `port_metrics` which are similar to the linux network interface stats.\n\n```python\n# create a port metrics request and filter based on port names\nreq = api.metrics_request()\nreq.port.port_names = [p.name for p in cfg.ports]\n# include only sent and received packet counts\nreq.port.column_names = [req.port.FRAMES_TX, req.port.FRAMES_RX]\n\n# fetch port metrics\nres = api.get_metrics(req)\n\n# calculate total frames sent and received across all configured ports\ntotal_tx = sum([m.frames_tx for m in res.port_metrics])\ntotal_rx = sum([m.frames_rx for m in res.port_metrics])\nexpected = sum([f.duration.fixed_packets.packets for f in cfg.flows])\n\nassert expected == total_tx and total_rx >= expected\n```\n\n> Note: Usually this snippet needs to be executed multiple times, until the assertion in the end stands true or a timeout occurs. You can use a function called `wait_for()` in the `hello_snappi.py` script to achieve this.\n\n## Fetch and Validate Captures\n\nValidation by using metrics is limited to counters (for example, total transmitted, total received). To really inspect each packet received, you can use the capture API.\n\nThis API is a little different from the others, in the following ways:\n\n* It returns a sequence of raw bytes (representing `.pcap` file) instead of a JSON string.\n* It needs to be fed to a tool that can inspect `.pcap` files. For example, `dpkt` or `tcpdump`.\n\nThis snippet uses `dpkt` to ensure that each packet received is a valid UDP packet.\n\n```python\nfor p in cfg.ports:\n  # create capture request and filter based on port name\n  req = api.capture_request()\n  req.port_name = p.name\n  # fetch captured pcap bytes and feed it to pcap parser dpkt\n  pcap = dpkt.pcap.Reader(api.get_capture(req))\n  for _, buf in pcap:\n      # check if current packet is a valid UDP packet\n      eth = dpkt.ethernet.Ethernet(buf)\n      assert isinstance(eth.data.data, dpkt.udp.UDP)\n```\n\nOptionally, the following snippet can be used in order to do `tcpdump -r cap.pcap` (inspect captures by using tcpdump).\n\n```python\npcap_bytes = api.get_capture(req)\nwith open('cap.pcap', 'wb') as p:\n  p.write(pcap_bytes.read())\n```\n\n## Putting It All Together\n\n`snappi` provides a fair level of abstraction and ease-of-use while constructing traffic configuration, compared to the [equivalent in JSON](https://github.com/open-traffic-generator/snappi-tests/tree/3ffe20f/configs/hello_snappi.json). More such comparisons can be found in [common snappi constructs](snappi-constructs.md).\n\nFor more information on snappi (per-flow metrics, latency measurements, custom payloads, and etc) and examples on the pytest-based test scripts and utilities, see [snappi-tests](https://github.com/open-traffic-generator/snappi-tests/tree/3ffe20f).\n"
  },
  {
    "path": "docs/developer/introduction.md",
    "content": "# Developer guide introduction \n\nIntroduction to snappi \n"
  },
  {
    "path": "docs/developer/snappi-constructs.md",
    "content": "# Common snappi constructs\n\n## Overview\n\nEvery object in snappi can be serialized to or deserialized from a JSON string which conforms to [Open Traffic Generator API](https://github.com/open-traffic-generator/models). This facilitates storing traffic configurations as JSON files and reusing them in API calls with or without further modifications.\n\n* Create a sample config\n\n  ```python\n  import snappi\n  api = snappi.api()\n  config = api.config()\n\n  config.ports.port(name='p1', location='localhost:5555')\n  config.flows.flow(name='f1')\n  ```\n\n* Serialize to JSON (or python dictionary or YAML)\n\n  ```python\n  json_str = config.serialize()\n  # serialize child of config object to JSON string\n  json_str = config.ports.serialize()\n\n  yaml_str = config.serialize(encoding=config.YAML)\n  obj_dict = config.serialize(encoding=config.DICT)\n  ```\n\n* Deserialize from JSON (or python dictionary or YAML)\n\n  ```python\n  # whether the argument is JSON or YAML or dict is automatically determined\n  config.deserialize('{\"ports\": [{\"name\": \"p2\", \"location\": \"localhost:5556\"}]}')\n  # deserialize child of config object from JSON string\n  config.flows.deserialize('[{\"name\": \"f1\"}]')\n\n  config.deserialize({\"ports\": [{\"name\": \"p1\", \"location\": \"localhost:5555\"}]})\n  config.deserialize('ports:\\n- name: p1\\n  location: localhost:5555\\n')\n  ```\n\n* Pass either snappi object or equivalent JSON string as argument to API calls\n\n  ```python\n  config = api.config()\n\n  config.ports.port(name='p1', location='localhost:5555')\n  # config will be serialized to JSON string and sent on wire\n  api.set_config(config)\n\n  json_str = '{\"ports\": [{\"name\": \"p1\", \"location\": \"localhost:5555\"}]}'\n  # JSON string will be directly sent on wire\n  api.set_config(json_str)\n  ```\n\nFollowing sections discuss most commonly used constructs in snappi comparing each one of them with equivalent JSON snippet.  \nFor brevity, snippet for config creation is not included (since it's the same across all).\n\n## Flows\n\nThis section deals with flow configuration and control.\n\n### Unidirectional Flow\n\n<details>\n<summary>\nA simple unidirectional flow for a **one-arm** test.\n</summary>\n\n<table>\n<tr>\n<th>\nsnappi\n</th>\n<th>\njson\n</th>\n</tr>\n<tr>\n<td>\n\n```python\np1 = config.ports.port(name='p1', \\\n  location='localhost:5555')[-1]\nf1 = config.flows.flow(name='f1')[-1]\n\nf1.tx_rx.port.tx_name = p1.name\n```\n\n</td>\n<td>\n\n```json\n{\n  \"ports\": [\n    {\n      \"location\": \"localhost:5555\",\n      \"name\": \"p1\"\n    }\n  ],\n  \"flows\": [\n    {\n      \"name\": \"f1\",\n      \"tx_rx\": {\n        \"port\": {\n          \"tx_name\": \"p1\"\n        },\n        \"choice\": \"port\"\n      }\n    }\n  ]\n}\n```\n\n</td>\n</tr>\n</table>\n</details>\n\n### Bidirectional Flows\n\n<details>\n<summary>A bi-directional flow between two ports.</summary>\n\n<table>\n<tr><th>snappi</th><th>json</th></tr><tr>\n<td>\n\n```python\np1, p2 = ( \\\n    config.ports \\\n    .port(name='p1', location='localhost:5555') \\\n    .port(name='p2', location='localhost:5556')\n)\nf1, f2 = config.flows.flow(name='flow p1->p2'). \\\n  flow(name='flow p2->p1')\n\nf1.tx_rx.port.tx_name = p1.name\nf1.tx_rx.port.rx_name = p2.name\nf2.tx_rx.port.tx_name = p2.name\nf2.tx_rx.port.rx_name = p1.name\n```\n\n</td>\n<td>\n\n```json\n{\n  \"ports\": [\n    {\n      \"location\": \"localhost:5555\",\n      \"name\": \"p1\"\n    },\n    {\n      \"location\": \"localhost:5556\",\n      \"name\": \"p2\"\n    }\n  ],\n  \"flows\": [\n    {\n      \"name\": \"flow p1->p2\",\n      \"tx_rx\": {\n        \"port\": {\n          \"tx_name\": \"p1\",\n          \"rx_name\": \"p2\"\n        },\n        \"choice\": \"port\"\n      }\n    },\n    {\n      \"name\": \"flow p2->p1\",\n      \"tx_rx\": {\n        \"port\": {\n          \"tx_name\": \"p2\",\n          \"rx_name\": \"p1\"\n        },\n        \"choice\": \"port\"\n      }\n    }\n  ]\n}\n```\n\n</td>\n</tr></table>\n</details>\n\n### Meshed Flows\n\n<details>\n<summary>Fully meshed flows between four ports.  Each port sends flows to all the ports (except itself).  This example is for four ports, it can be easily extended to an arbitrary number of ports.</summary>\n\n<table>\n<tr><th>snappi</th><th>json</th></tr><tr>\n<td>\n\n```python\nimport itertools\n\nfor i in range(1, 4):\n  config.ports.port(name='p%d' % i, \\\n    location='localhost:%d' % (5554 + i))\n\nfor tx, rx in \\\n  itertools.permutations([p.name for \\ \n  p in config.ports], 2):\n  f = config.flows.flow(name='flow %s->%s' \\ \n    % (tx, rx))[-1]\n  f.tx_rx.port.tx_name = tx\n  f.tx_rx.port.rx_name = rx\n```\n\n</td>\n<td>\n\n```json\n{\n  \"ports\": [\n    {\n      \"location\": \"localhost:5555\",\n      \"name\": \"p1\"\n    },\n    {\n      \"location\": \"localhost:5556\",\n      \"name\": \"p2\"\n    },\n    {\n      \"location\": \"localhost:5557\",\n      \"name\": \"p3\"\n    }\n  ],\n  \"flows\": [\n    {\n      \"name\": \"flow p1->p2\",\n      \"tx_rx\": {\n        \"port\": {\n          \"tx_name\": \"p1\",\n          \"rx_name\": \"p2\"\n        },\n        \"choice\": \"port\"\n      }\n    },\n    {\n      \"name\": \"flow p1->p3\",\n      \"tx_rx\": {\n        \"port\": {\n          \"tx_name\": \"p1\",\n          \"rx_name\": \"p3\"\n        },\n        \"choice\": \"port\"\n      }\n    },\n    {\n      \"name\": \"flow p2->p1\",\n      \"tx_rx\": {\n        \"port\": {\n          \"tx_name\": \"p2\",\n          \"rx_name\": \"p1\"\n        },\n        \"choice\": \"port\"\n      }\n    },\n    {\n      \"name\": \"flow p2->p3\",\n      \"tx_rx\": {\n        \"port\": {\n          \"tx_name\": \"p2\",\n          \"rx_name\": \"p3\"\n        },\n        \"choice\": \"port\"\n      }\n    },\n    {\n      \"name\": \"flow p3->p1\",\n      \"tx_rx\": {\n        \"port\": {\n          \"tx_name\": \"p3\",\n          \"rx_name\": \"p1\"\n        },\n        \"choice\": \"port\"\n      }\n    },\n    {\n      \"name\": \"flow p3->p2\",\n      \"tx_rx\": {\n        \"port\": {\n          \"tx_name\": \"p3\",\n          \"rx_name\": \"p2\"\n        },\n        \"choice\": \"port\"\n      }\n    }\n  ]\n}\n```\n\n</td>\n</tr></table>\n</details>\n\n### Protocol Headers With Fixed Fields\n\n<details>\n<summary>Simple flow with Ethernet, IP and TCP protocol headers.</summary>\n<table>\n<tr><th>snappi</th><th>json</th></tr><tr>\n<td>\n\n```python\np1 = config.ports.port(name='p1', \\ \n  location='localhost:5555')[-1]\nf1 = config.flows.flow(name='f1')[-1]\n\nf1.tx_rx.port.tx_name = p1.name\neth, ip, tcp = f1.packet.ethernet().ipv4().tcp()\n\neth.dst.value = '00:00:00:00:00:AA'\nip.dst.value = '192.168.1.1'\ntcp.dst_port.value = 5000\n```\n\n</td>\n<td>\n\n```json\n{\n  \"ports\": [\n    {\n      \"location\": \"localhost:5555\",\n      \"name\": \"p1\"\n    }\n  ],\n  \"flows\": [\n    {\n      \"name\": \"f1\",\n      \"tx_rx\": {\n        \"port\": {\n          \"tx_name\": \"p1\"\n        },\n        \"choice\": \"port\"\n      },\n      \"packet\": [\n        {\n          \"ethernet\": {\n            \"dst\": {\n              \"value\": \"00:00:00:00:00:AA\",\n              \"choice\": \"value\"\n            }\n          },\n          \"choice\": \"ethernet\"\n        },\n        {\n          \"ipv4\": {\n            \"dst\": {\n              \"value\": \"192.168.1.1\",\n              \"choice\": \"value\"\n            }\n          },\n          \"choice\": \"ipv4\"\n        },\n        {\n          \"tcp\": {\n            \"dst_port\": {\n              \"value\": 5000,\n              \"choice\": \"value\"\n            }\n          },\n          \"choice\": \"tcp\"\n        }\n      ]\n    }\n  ]\n}\n```\n\n</td>\n</tr></table>\n</details>\n\n### Protocol Headers With Varying Fields\n\n<details>\n<summary>Flow with Ethernet, IP and TCP headers.  Ethernet destination MAC address, destination IP address and TCP destination port are varied using patterns.</summary>\n<table>\n<tr><th>snappi</th><th>json</th></tr><tr>\n<td>\n\n```python\np1 = config.ports.port(name='p1', \\ \n  location='localhost:5555')[-1]\nf1 = config.flows.flow(name='f1')[-1]\n\nf1.tx_rx.port.tx_name = p1.name\neth, ip, tcp = f1.packet.ethernet().ipv4().tcp()\n\neth.src.value = '00:00:00:00:00:AA'\neth.dst.values = ['00:00:00:00:00:AB', \\ \n  '00:00:00:00:00:AC']\n\nip.src.value = '192.168.1.1'\nip.dst.increment.start = '192.168.1.2'\nip.dst.increment.step = '0.0.0.1'\nip.dst.increment.count = 2\n\ntcp.src_port.value = 5000\ntcp.dst_port.decrement.start = 5002\ntcp.dst_port.decrement.step = 1\ntcp.dst_port.decrement.count = 2\ntcp.seq_num.values = [1, 2]\n```\n\n</td>\n<td>\n\n```json\n{\n  \"ports\": [\n    {\n      \"location\": \"localhost:5555\",\n      \"name\": \"p1\"\n    }\n  ],\n  \"flows\": [\n    {\n      \"name\": \"f1\",\n      \"tx_rx\": {\n        \"port\": {\n          \"tx_name\": \"p1\"\n        },\n        \"choice\": \"port\"\n      },\n      \"packet\": [\n        {\n          \"ethernet\": {\n            \"src\": {\n              \"value\": \"00:00:00:00:00:AA\",\n              \"choice\": \"value\"\n            },\n            \"dst\": {\n              \"values\": [\n                \"00:00:00:00:00:AB\",\n                \"00:00:00:00:00:AC\"\n              ],\n              \"choice\": \"values\"\n            }\n          },\n          \"choice\": \"ethernet\"\n        },\n        {\n          \"ipv4\": {\n            \"src\": {\n              \"value\": \"192.168.1.1\",\n              \"choice\": \"value\"\n            },\n            \"dst\": {\n              \"increment\": {\n                \"start\": \"192.168.1.2\",\n                \"step\": \"0.0.0.1\",\n                \"count\": 2\n              },\n              \"choice\": \"increment\"\n            }\n          },\n          \"choice\": \"ipv4\"\n        },\n        {\n          \"tcp\": {\n            \"src_port\": {\n              \"value\": 5000,\n              \"choice\": \"value\"\n            },\n            \"dst_port\": {\n              \"decrement\": {\n                \"start\": 5002,\n                \"step\": 1,\n                \"count\": 2\n              },\n              \"choice\": \"decrement\"\n            },\n            \"seq_num\": {\n              \"values\": [\n                1,\n                2\n              ],\n              \"choice\": \"values\"\n            }\n          },\n          \"choice\": \"tcp\"\n        }\n      ]\n    }\n  ]\n}\n```\n\n</td>\n</tr></table>\n</details>\n\n### Start Flow Transmit\n\n<details>\n<summary>Start transmit on a certain set of flows.</summary>\n<table>\n<tr><th>snappi</th><th>json</th></tr><tr>\n<td>\n\n```python\n\nts = api.control_state()\nts.traffic.flow_transmit.state = ts.traffic.flow_transmit.START  # noqa\nts.traffic.flow_transmit.flow_names = ['f1', 'f2']\nres = api.set_control_state(ts)\n\n```\n\n</td>\n<td>\n\n```json\n{  \n  \"choice\": \"traffic\", \n  \"traffic\": {    \n      \"choice\": \"flow_transmit\",    \n      \"flow_transmit\": {      \n          \"flow_names\": [\n              \"f1\",\n              \"f2\"     \n          ],      \n          \"state\": \"start\"    \n      }  \n  }\n}\n```\n\n</td>\n</tr></table>\n</details>\n\n## Capture\n\nCapture configuration and control\n\n### Capture Configuration\n\n<details>\n<summary>Configure capture prior to starting capture.</summary>\n</details>\n\n### Start Capture\n\n<details>\n<summary>Start capture on a set of ports.</summary>\n<table>\n<tr><th>snappi</th><th>json</th></tr><tr>\n<td>\n\n```python\ncs = api.control_state()\ncs.port.capture.state = cs.port.capture.START\ncs.port.capture.port_names = ['p1', 'p2']\nres = api.set_control_state(cs)\n\n```\n\n</td>\n<td>\n\n```json\n{\n  \"choice\": \"port\",\n  \"port\": {\n      \"capture\": {\n          \"port_names\": [\n              \"p1\",\n              \"p2\"\n          ],\n          \"state\": \"start\"\n      },\n      \"choice\": \"capture\"\n  }\n}\n```\n\n</td>\n</tr></table>\n</details>\n\n### Get Capture\n\n<details>\n<summary>Retrieve capture for a given port.  Save capture to a .pcap file (python only).</summary><table>\n<tr><th>snappi</th><th>json</th></tr><tr>\n<td>\n\n```python\nreq = api.capture_request()\nreq.port_name = 'p1'\n\nwith open('capture.pcap', 'w') as pcap:\n  pcap.write(api.get_capture(req).read())\n```\n\n</td>\n<td>\n\n```json\n{\n  \"port_name\": \"p1\"\n}\n```\n\n</td>\n</tr></table>\n</details>\n\n## Metrics\n\n### Port Metrics\n\n<details>\n<summary>Get port statistics for a given set of ports.</summary>\n<table>\n<tr><th>snappi</th><th>json</th></tr><tr>\n<td>\n\n```python\nreq = api.metrics_request()\nreq.port.port_names = ['tx', 'rx']\nreq.port.column_names = [req.port.FRAMES_TX, \\\n  req.port.FRAMES_RX]\n\nres = api.get_metrics(req)\nassert res[0].frames_tx == res[1].frames_rx\n```\n\n</td>\n<td>\n\n```json\n{\n  \"port\": {\n    \"port_names\": [\n      \"p1\",\n      \"p2\"\n    ],\n    \"column_names\": [\n      \"frames_tx\",\n      \"frames_rx\"\n    ]\n  },\n  \"choice\": \"port\"\n}\n```\n\n</td>\n</tr></table>\n</details>\n\n### Flow Metrics\n\n<details>\n<summary>Get flow statistics.</summary>\nBlah\n</details>\n\n## TBD\n\n* how to create a flow with certain protocol headers\n* how to create a flow to test 5-tuple hashing\n* how to create flows with changing flow sizes\n* how to create stacked vlans\n* creating bursty flows\n* how to disable timestamps, signature\n"
  },
  {
    "path": "docs/developer/snappi-install.md",
    "content": "# Installing Snappi\n\nThe procedures explained in this section helps to install and configure snappi for an Open Traffic Generator API.\n\nThe test scripts written in **gosnappi**, and the auto-generated Go SDK, can be executed against any traffic generator that conforms to [Open Traffic Generator API](https://github.com/open-traffic-generator/models).\n\n[Ixia-c](https://github.com/open-traffic-generator/ixia-c) is one of such reference implementations of the Open Traffic Generator API.\n\n## To install Snappi for the Go language, do the following:\n\n### Setup the client\n\n```sh\ngo get github.com/open-traffic-generator/snappi/gosnappi\n```\n\n### Start Testing\n\n```Go\npackage examples\n\nimport (\n\t\"encoding/hex\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/open-traffic-generator/snappi/gosnappi\"\n)\n\nfunc TestQuickstart(t *testing.T) {\n\t// Create a new API handle to make API calls against OTG\n\tapi := gosnappi.NewApi()\n\n\t// Set the transport protocol to HTTP\n\tapi.NewHttpTransport().SetLocation(\"https://localhost:8443\")\n\n\t// Create a new traffic configuration that will be set on OTG\n\tconfig := gosnappi.NewConfig()\n\n\t// Add a test port to the configuration\n\tptx := config.Ports().Add().SetName(\"ptx\").SetLocation(\"veth-a\")\n\n\t// Configure a flow and set previously created test port as one of endpoints\n\tflow := config.Flows().Add().SetName(\"f1\")\n\tflow.TxRx().Port().SetTxName(ptx.Name())\n\t// and enable tracking flow metrics\n\tflow.Metrics().SetEnable(true)\n\n\t// Configure number of packets to transmit for previously configured flow\n\tflow.Duration().FixedPackets().SetPackets(100)\n\t// and fixed byte size of all packets in the flow\n\tflow.Size().SetFixed(128)\n\n\t// Configure protocol headers for all packets in the flow\n\tpkt := flow.Packet()\n\teth := pkt.Add().Ethernet()\n\tipv4 := pkt.Add().Ipv4()\n\tudp := pkt.Add().Udp()\n\tcus := pkt.Add().Custom()\n\n\teth.Dst().SetValue(\"00:11:22:33:44:55\")\n\teth.Src().SetValue(\"00:11:22:33:44:66\")\n\n\tipv4.Src().SetValue(\"10.1.1.1\")\n\tipv4.Dst().SetValue(\"20.1.1.1\")\n\n\t// Configure repeating patterns for source and destination UDP ports\n\tudp.SrcPort().SetValues([]int32{5010, 5015, 5020, 5025, 5030})\n\tudp.DstPort().Increment().SetStart(6010).SetStep(5).SetCount(5)\n\n\t// Configure custom bytes (hex string) in payload\n\tcus.SetBytes(hex.EncodeToString([]byte(\"..QUICKSTART SNAPPI..\")))\n\n\t// Optionally, print JSON representation of config\n\tif j, err := config.ToJson(); err != nil {\n\t\tt.Fatal(err)\n\t} else {\n\t\tt.Log(\"Configuration: \", j)\n\t}\n\n\t// Push traffic configuration constructed so far to OTG\n\tif _, err := api.SetConfig(config); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\t// Start transmitting the packets from configured flow\n\tts := gosnappi.NewTransmitState()\n\tts.SetState(gosnappi.TransmitStateState.START)\n\tif _, err := api.SetTransmitState(ts); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\t// Fetch metrics for configured flow\n\treq := gosnappi.NewMetricsRequest()\n\treq.Flow().SetFlowNames([]string{flow.Name()})\n\t// and keep polling until either expectation is met or deadline exceeds\n\tdeadline := time.Now().Add(10 * time.Second)\n\tfor {\n\t\tmetrics, err := api.GetMetrics(req)\n\t\tif err != nil || time.Now().After(deadline) {\n\t\t\tt.Fatalf(\"err = %v || deadline exceeded\", err)\n\t\t}\n\t\t// print YAML representation of flow metrics\n\t\tt.Log(metrics)\n\t\tif metrics.FlowMetrics().Items()[0].Transmit() == gosnappi.FlowMetricTransmit.STOPPED {\n\t\t\tbreak\n\t\t}\n\t\ttime.Sleep(100 * time.Millisecond)\n\t}\n}\n```\n\n## To install Snappi for the Python language, do the following:\n\n### Setup the Client\n \n```sh\npython -m pip install --upgrade snappi \n```\n\n### Start Testing\n\n```python\nimport datetime\nimport time\nimport snappi\nimport pytest\n\n\n@pytest.mark.example\ndef test_quickstart():\n    # Create a new API handle to make API calls against OTG\n    # with HTTP as default transport protocol\n    api = snappi.api(location=\"https://localhost:8443\")\n\n    # Create a new traffic configuration that will be set on OTG\n    config = api.config()\n\n    # Add a test port to the configuration\n    ptx = config.ports.add(name=\"ptx\", location=\"veth-a\")\n\n    # Configure a flow and set previously created test port as one of endpoints\n    flow = config.flows.add(name=\"flow\")\n    flow.tx_rx.port.tx_name = ptx.name\n    # and enable tracking flow metrics\n    flow.metrics.enable = True\n\n    # Configure number of packets to transmit for previously configured flow\n    flow.duration.fixed_packets.packets = 100\n    # and fixed byte size of all packets in the flow\n    flow.size.fixed = 128\n\n    # Configure protocol headers for all packets in the flow\n    eth, ip, udp, cus = flow.packet.ethernet().ipv4().udp().custom()\n\n    eth.src.value = \"00:11:22:33:44:55\"\n    eth.dst.value = \"00:11:22:33:44:66\"\n\n    ip.src.value = \"10.1.1.1\"\n    ip.dst.value = \"20.1.1.1\"\n\n    # Configure repeating patterns for source and destination UDP ports\n    udp.src_port.values = [5010, 5015, 5020, 5025, 5030]\n    udp.dst_port.increment.start = 6010\n    udp.dst_port.increment.step = 5\n    udp.dst_port.increment.count = 5\n\n    # Configure custom bytes (hex string) in payload\n    cus.bytes = \"\".join([hex(c)[2:] for c in b\"..QUICKSTART SNAPPI..\"])\n\n    # Optionally, print JSON representation of config\n    print(\"Configuration: \", config.serialize(encoding=config.JSON))\n\n    # Push traffic configuration constructed so far to OTG\n    api.set_config(config)\n\n    # Start transmitting the packets from configured flow\n    ts = api.transmit_state()\n    ts.state = ts.START\n    api.set_transmit_state(ts)\n\n    # Fetch metrics for configured flow\n    req = api.metrics_request()\n    req.flow.flow_names = [flow.name]\n    # and keep polling until either expectation is met or deadline exceeds\n    start = datetime.datetime.now()\n    while True:\n        metrics = api.get_metrics(req)\n        if (datetime.datetime.now() - start).seconds > 10:\n            raise Exception(\"deadline exceeded\")\n        # print YAML representation of flow metrics\n        print(metrics)\n        if metrics.flow_metrics[0].transmit == metrics.flow_metrics[0].STOPPED:\n            break\n        time.sleep(0.1)\n```\n"
  },
  {
    "path": "docs/eula.md",
    "content": "# End User License Agreement\n\nBy using Keysight Elastic Network Generator and Ixia-c software you accept Keysight Technologies' End User License Agreement (EULA).  The agreement can be found at [www.keysight.com/find/sweula](https://www.keysight.com/find/sweula).\n\nThe End-User License Agreement must be accepted before the KENG controller can start. The user can accept the EULA by specifying `--accept-eula` command line option while\nstarting the `keng-controller` container.\n\n## Copyright notice\n\n© Copyright Keysight Technologies, Inc. 2021, 2022, 2023"
  },
  {
    "path": "docs/faq.md",
    "content": "# FAQ\n\n- [Table of Contents](readme.md)\n  - FAQ\n    - [Ixia-c, Open Traffic Generator and snappi](#ixia-c-open-traffic-generator-and-snappi)\n    - [Diagnostics](#diagnostics)\n    - [Packets](#packets)\n    - [Application Usage Reporter](#application-usage-reporter)\n    - [Ixia-c Free Version](#Ixia-c-free-version)\n    - [Troubleshooting](#troubleshooting)\n    - [Support](#support)\n\n## Ixia-c, Open Traffic Generator and snappi\n\n<details>\n<summary>\nWhat is the relationship between Open Traffic Generator data models, snappi and Ixia-c?\n</summary>\n<br>\n\nThe [Open Traffic Generator](https://github.com/open-traffic-generator/models) data models describe a vendor neutral data models and APIs for test traffic generation.  The models are based on OpenAPI v3.  Ixia-c is a traffic generator that complies with these APIs.  [snappi](https://github.com/open-traffic-generator/snappi) is a *Pythonic* client library that can be used to write tests that run against Ixia-c.\n\nThe following two diagrams illustrate this relationship.\n\n<div align=\"center\">\n  <br>\n  <img src=\"res/api-sdk-tests.drawio.svg\"></img>\n</div>\n<br>\n<div align=\"center\">\n  <br>\n  <img src=\"res/tests-sdk-ixia-c.drawio.svg\"></img>\n</div>\n<br>\n</details>\n\n<details>\n<summary>\nWhere can I find a tutorial on <i>snappi</i>?\n</summary>\n<br>\n\nThe [Hello snappi](hello-snappi.md) tutorial is a good starting point to get familiar with `snappi`.\n</details>\n\n<details>\n<summary>\nHow to use other non-Python clients?\n</summary>\n<br>\n\nTODO: Fill in details here.\n</details>\n\n<details>\n<summary>\nCan I use <i>curl</i> to control Ixia-c?\n</summary>\n<br>\n\nYes.  Refer to the [Quick Start](../readme.md##quick-start) on the Ixia-c home page.\n</details>\n\n## Diagnostics\n\n<details>\n<summary>\nWhat version of the Open Traffic Generator spec does Ixia-c implement?\n</summary>\n<br>\n\nIxia-c implements version **[v0.12.5](https://github.com/open-traffic-generator/models/releases/tag/v0.12.5)** of the Open Traffic Generator Data Model. You can view the model [here](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.12.5/artifacts/openapi.yaml).\n\n</details>\n\n<details>\n<summary>\nHow to find version of Open Traffic Generator spec implemented by Ixia-c?\n</summary>\n<br>\n\nOpen Traffic Generator Data Model can be accessed from any browser by pointing it to (https://\\<controller-host-ip\\>/docs/openapi.json).  The `info` section contains the `version` of the Open Traffic Generator Data Model implemented by the KENG controller.\n\n</details>\n\n## Packets\n\n<details>\n<summary>\nWhat do packets look like?\n</summary>\n<br>\n\nIxia packet testers utilize a proprietary flow-tracking technique which involves inserting a special *instrumentation header* into the packet.  It is inserted after the last valid protocol header ie, in the payload.\n\n<div align=\"center\">\n  <br>\n  <img src=\"res/packet-instrumentation.png\"></img>\n</div>\n<br>\n\nThe fields in this header are:\n\n- a *signature* which servers as marker to indicate start of header\n- a *PGID* or *port group id* field to distinguish between different flows\n- a 32 bit *sequence number* that can be used to detect packet re-ordering\n- a 32 bit timestamp that can be used to measure one-way latency\n\n</details>\n\n<details>\n<summary>\nHow do I disable packet instrumentation?\n</summary>\n<br>\n\nAccording to the Open Traffic Generator data model packet instrumentation is enabled by default on all the flows.  It is not possible to disable it at the moment.  An update to the data model that allows the end user to disable instrumentation is in the process of being merged into the *main* branch and will be submitted in the coming weeks.  Ixia-c will implement it at that point.\n\n</details>\n\n<details>\n<summary>\nDoes Ixia-c calculate packet checksums?  If so, which ones?\n</summary>\n<br>\n\nYes, the Ixia-c traffic-engine automatically calculates the Ethernet FCS, IPv4, TCP and UDP checksums.  The traffic-engine is capable of calculating *four* checksums (in each packet).  TODO: verify.\n</details>\n\n<details>\n<summary>\nWhat <i>layer1</i> settings does Ixia-c utilize?\n</summary>\n<br>\n\nThe only `layer1` setting that is used by the Ixia-c traffic engine is `speed`.  This setting is used to help convert flow rate specified as *percentage line-rate* into packets/second (pps) and to ensure that proper inter-packet-gaps are used.\n</details>\n\n<details>\n<summary>\nWhat is the purpose of the <i>layer1</i> setting <i>speed</i>?\n</summary>\n<br>\n\nTo calculate packets/second (pps) when the flow rate is specified as *percentage line-rate* and to ensure proper inter-packet-gaps.\n</details>\n\n## Application Usage Reporter\n\n<details>\n<summary>\nWhat is <i>Application Usage Reporter</i>?\n</summary>\n<br>\n\nThe `app-usage-reporter` container collects and uploads to the Keysight cloud some basic telemetry information from the KENG controller.  This information helps Keysight improve the controller by focusing on the features that are being used by end users.\n</details>\n\n<details>\n<summary>\nWhat information does <i>Application Usage Reporter</i> collect?\n</summary>\n<br>\n\nThe *Application Usage Reporter* collects configuration related information like the number of ports in a test, number of flows configured, number of values used in a pattern. TODO:  Need to give an exhaustive list.\n</details>\n\n<details>\n<summary>\nDoes <i>Application Usage Reporter</i> collect any personally identifiable information?\n</summary>\n<br>\n\nNo.  The *Application Usage Reporter* does NOT collect any personally identifiable information like username, hostname, email address, etc.\n</details>\n\n<details>\n<summary>\nDoes <i>Application Usage Reporter</i> save my IP address?\n</summary>\n<br>\nNo.\n</details>\n\n<details>\n<summary>\nCan I disable <i>Application Usage Reporter</i>? If so, how?\n</summary>\n<br>\n\nYes, the *Application Usage Reporter* can be disabled.  Refer to the [Deployment Parameters](deployments.md#deployment-parameters) section in the Deployment Guide.\n</details>\n\n## Ixia-c Free Version\n\n<details>\n<summary>\nWhat are the limitations of the free version of Ixia-c?\n</summary>\n<br>\n\nThe free version of KENG controller supports up to 4 ports in one session and the Ixia-c traffic-engine is limited to running over `raw` sockets.\n</details>\n\n<details>\n<summary>\nWhat are the differences between the commercial and the free version of Ixia-c?\n</summary>\n<br>\nThe following table highlights the differences between the commercial and the free version of Ixia-c.\n\n| Capability | Ixia-c Free | Ixia-c Commercial |\n-------------| ------------| ------------------|\n| # of Ports | 4 | Unlimited |\n| Traffic Engine - Raw | Supported | Supported |\n| Traffic Engine - DPDK PCI | Not Supported | Supported |\n| Support | Slack Channel | Keysight Support |\n\n</details>\n\n<details>\n<summary>\nHow do I purchase the commercial version of Ixia-c?\n</summary>\n<br>\n\nContact your Keysight Sales Rep or reach out to us [here](https://www.keysight.com/us/en/contact.html).\n</details>\n\n## Troubleshooting\n\n<details>\n<summary>\nHow do I view KENG controller logs?\n</summary>\n<br>\n\nUse `docker logs` to view the controller log.\n</details>\n\n<details>\n<summary>\nWhat is the message <i>\"App usage reporting service is down\"</i> in KENG controller log?\n</summary>\n<br>\n\nThis message indicates that the `app-usage-reporter` container is not reachable from the KENG controller.  This does NOT affect KENG controller's normal operation.  Refer to [Deployment Parameters](deployments.md#deployment-parameters) for more details on how to override the default location for the app-usage-reporter or how to disable it all together.\n</details>\n\n## Support\n\n<details>\n<summary>\nWhere do I get support for the free version of Ixia-c?\n</summary>\n<br>\n\nReach out to us on [Slack](support.md) for support.\n</details>\n"
  },
  {
    "path": "docs/features.md",
    "content": "### Feature metrics showcasing free vs commercial usage"
  },
  {
    "path": "docs/index.md",
    "content": "<h1 align=\"center\">Ixia-c & Elastic Network Generator</h1>\n<h3 align=\"center\">Agile and composable network test system designed for continuous integration</h3>\n\n<section>\n    <div class=\"container\">\n        <div class=\"column\">\n          <img src=\"assets/keng-diagram.png\">\n        </div>\n        <div class=\"column\">\n            <ul>\n                <li>Implements <a href=\"https://otg.dev\" target=\"_blank\">Open Traffic Generator API</a></li>\n                <li>Emulates key <a href=\"reference/capabilities/#protocol-emulation\">control plane protocols</a></li>\n                <li>Generates complex <a href=\"reference/capabilities/#traffic-generation\">data plane traffic</a></li>\n                <li>Supports <a href=\"deployments\">software</a>, <a href=\"tests-uhd400\">white-box</a> and <a href=\"tests-chassis-app\">hardware</a> test ports​</li>\n                <li>Reduces time-to-test with fast API response time and <a href=\"developer/hello-snappi\">agile developer experience</a></li>\n                <li>Deploys using <a href=\"quick-start/deployment\">modular architecture</a> based on containers and microservices</li>\n                <li>Accelerates network validation by <a href=\"integrated-environments\">integrating</a> with popular network emulation software.</li>\n            </ul>\n        </div>\n    </div>\n</section>\n\n## Community Edition\n\nFirst in its class [Ixia-c Community Edition](quick-start/introduction.md) of the Elastic Network Generator with **BGP emulation and full set traffic capabilities** [limited by scale and performance](licensing.md) is available to anyone without registration and at no cost.\n\n## OTG Examples\n\nExplore [otg-examples](https://otg.dev/examples/otg-examples/) library to get hands-on experience with using Open Traffic Generator and Ixia-c. With a minimum Linux host or VM you can be running your first network data and control plane validation scenarios in minutes.\n\n## Key Features\n\n* Software multi-container application:\n    * runs on Linux x86 compute,\n    * includes software traffic generation and protocol emulation capabilities,\n    * built using DPDK to generate high traffic rates on a single CPU core,\n    * can control Keysight network test hardware.\n* Easily integrates into CI/CD pipelines like GitHub, GitLab, Jenkins.\n* Supports test frameworks like Pytest or Golang test.\n* Emulates key data center protocols with high scale of sessions and routes:\n    * capable of leveraging 3rd party libraries to add unsupported packet formats,\n    * provides patterns to modify common packet header fields to generate millions of unique packets.\n* Supports:\n    * configurable frame sizes,\n    * rate specification in pps (packets per second) or % line-rate,\n    * ability to send traffic bursts.\n* Statistics:\n    * per port and per flow,\n    * tracks flows based on common packet header fields,\n    * one way latency measurements (min, max, average) on a per flow basis,\n    * capture packets and write to PCAP or analyze in the test logic.\n\n## Copyright notice\n\n© Copyright Keysight Technologies, Inc. 2021, 2022, 2023"
  },
  {
    "path": "docs/integrated-environments.md",
    "content": "## Network Topology Emulation\n\nIxia-c supports the following modern network emulation software:\n\n* [Containerlab:](deployments-containerlab.md) Simple yet powerful specialized tool for orchestrating and managing container-based networking labs.\n* [OpenConfig KNE:](deployments-kne.md) Kubernetes Network Emulation, which is a Google initiative to develop tooling for quickly setting up topologies of containers running various device OSes.\n"
  },
  {
    "path": "docs/licensing.md",
    "content": "# Licensing\n\n## License Editions\n\nThe following License Editions are available for Keysight Elastic Network Generator:\n\n  | Capability                          | Community            | Developer            | Team                           | System                              |\n  |-------------------------------------|----------------------|----------------------|--------------------------------|-------------------------------------|\n  | Ixia-c Traffic Port Capacity        |  4 x 1/10GE          |  50GE                |  400GE                         | 800GE                               |\n  | Test Concurrency                    |  1 Seat              |  1 Seat              |  8 Seats                       | 16 Seats                            |\n  | Protocol Scale                      |  Restricted          |  Limited             |  Limited                       | Unlimited                           |\n  | Requires a valid license            |  N                   |  Y                   |  Y                             | Y                                   |\n  | Includes Ixia-c Software Test Ports |  Y                   |  Y                   |  Y                             | Y                                   |\n  | Works with UHD400T Hardware         |  N                   |  N                   |  Y                             | Y                                   |\n  | Works with IxOS Hardware            |  N                   |  N                   |  N                             | Y                                   |\n\n The **Ixia-c Traffic Port Capacity** is determined as a sum of the configured Ixia-c software test port speeds with the possible values of: 100GE, 50GE, 40GE, 25GE, 10GE, and 1GE. The Maximum data plane performance of an Ixia-c port may be less than the configured port speed, depending on the capabilities of the underlying hardware and software drivers. Doesn't apply to the UHD400T and IxOS hardware.\n\n The **Test seat concurrency** applies to a number of controller instances that are running with a configuration that exceeds the capabilities of the Community Edition.\n\n The **Restricted** protocol scale supports the maximum of 4 BGP sessions per test.\n\n The Capabilities of the **Limited** protocol scale depend on the protocol. For details, contact [Keysight Support](https://support.ixiacom.com/contact/support).\n\n Keysight Elastic Network Generator can simultaneously consume multiple licenses to increase the capabilities of a test. For example, if the Ixia-c Traffic Port Capacity configured in one test is 100GE, two Developer licenses will be consumed if available.\n\n If you require capabilities beyond those provided by the Community Edition, use [Keysight Elastic Network Generator](https://www.keysight.com/us/en/products/network-test/protocol-load-test/keysight-elastic-network-generator.html) product page to request an evaluation or a quote.\n\n## License Server\n\nIn order to use capabilities of Elastic Network Generator that require a valid license, you need to deploy a Keysight License Server. Keysight uses the license server to manage floating or network shared licenses for its software products. The license server enables licenses to float and not be tied to a specific Elastic Network Generator instance. The Elastic Network Generator controllers must be able to reach the License server.\n\n### Deployment\n\nThe license server is a virtual machine and it is distributed as OVA and QCOW2 images (you only need one of them depending on your hypervisor, downloading may need credentials for support website.).\n\n* [OVA image](https://downloads.ixiacom.com/support/downloads_and_updates/public/KENG-License-Server-VM/4.4.0/4.4.0-202/slum-4.4.0-202.ova), 5.8GB\n* [QCOW2 image](https://downloads.ixiacom.com/support/downloads_and_updates/public/KENG-License-Server-VM/4.4.0/4.4.0-202/slum-4.4.0-202.qcow2), 6GB\n\nTo make a decision where to deploy the License Server VM, take into the account the following requirements:\n\n* For VMware ESXi, use the OVA image\n* For Linux-based QEMU or KVM, use the QCOW2 image\n* 2 vCPU cores\n* 8GB RAM for ESXi, 4GB RAM for QEMU/KVM\n* 100GB storage\n* 1 vNIC for network connectivity. Note that DHCP is the preferred option, and this is also how the VM is configured to obtain its IP address.\n\nNetwork connectivity requirements for the License Server VM\n\n1. Internet access from the VM over HTTPS is desirable for online license activation, but not strictly required. Offline activation method is available as well.\n2. Access from a user over HTTPS (TCP/443) for license operations (activation, deactivation, reservation, sync).\n3. Access from any `keng-controller` that needs a license during a test run over gRPC (TCP/7443) for license checkout and check-in.\n\nHere is an example of how different components communicate with the License Server:\n\n![License Server Connectivity](./res/license-server.drawio.svg)\n\n### Configuration\n\nIf your network doesn't provide DHCP, you can configure a static IP address for the License Server VM. Access the VM console and go through two-step login process:\n\n* First prompt: `console` (no password)\n* Second promt: `admin`/`admin`\n* Run the following commands to configure a static IP address, where `x.x.x.x` is the IP address, `yy` is the prefix length, `z.z.z.z` is the default gateway, `a.a.a.a` and `b.b.b.b` are DNS servers:\n\n```Shell\nkcos networking ip set mgmt0 x.x.x.x/yy z.z.z.z\nkcos networking dns-servers add a.a.a.a b.b.b.b\n```\n\n### Activation\n\nNow you shall be able to activate licenses and use the License Server with your Elastic Network Generator environments. Go to `https://your-license-server-hostname` to access the application. Enter credentials: `admin`/`admin` to login.\n\nIf you have an activation code, to perform an online activation, click \"Activate Licenses\", enter the code and click \"Activate\". For offline mode, choose \"Offline Operations\" instead.\n\nYou can also use a command-line session, via console or SSH, to perform license operations. Run `kcos licensing --help` to see the list of available commands.\n\n## Using Licenses\n\nTo use the licenses with the Elastic Network Generator, provide the location of the license servers to the controller instances using\n\n```\n--license-servers=\"server1 server2 server3 server4\"\n```\n\nargument when launching the controller. The argument accepts a space-separated list of hostnames or IP addresses of the License Servers, up to four. The controller will try to connect to the License Servers in the order they are specified in the list. If the first License Server is not available, or doesn't have enough available licenses to run the test, the controller will try to connect to the next one in the list.\n\nAn alternative way is to use an environment variable `LICENSE_SERVERS`.\n\n## Additional Information\n\nPlease refer to the [Reference Guide](reference/licensing.md) for more information on the license operations."
  },
  {
    "path": "docs/limitations.md",
    "content": "# Limitations\n\n* Supported protocol headers are `ethernet`, `ipv4`, `ipv6`, `vlan`, `tcp`, `udp`, `gtpv1`, `gtpv2`, `arp`, `icmp` and `custom`.\n* `fixed_packets`, `fixed_seconds`,`continuous` and `burst` are supported for flow duration (fixed number of `burst` is not supported).\n* Size of the packet must be a value greater than or equal to 64 bytes.\n* Setting random frame size is not supported.\n* Only `value`, `values`,`increment` and `decrement` patterns are supported for Protocol Header fields.\n* A maximum of `4` increment, decrement and values patterns are supported per flow.\n* A maximum of `500K` list entries are supported per list pattern, per flow.\n* A maximum of `256 flows` for a given tx-rx port pair is supported.\n* Statistics based on `ingress_result_name` is not supported.\n* Tx statistics for flow results is not supported.\n* Starting or stopping transmit on selected flows is not supported. Pausing flows is not supported.\n* `lags`, `devices` and `options` in `Config` are not supported.\n* Only `speed`, `promiscuous` and `mtu` settings are supported in `Layer1`.\n* In Centos 7+, with Python 2.7+, virtualenv creation fails due to a known limitation \n  (https://github.com/pypa/virtualenv/issues/1609). It can be avoided by upgrading pip and then\n"
  },
  {
    "path": "docs/news.md",
    "content": "# News\n\n* **21st April, 2026**: Ixia-c version 1.53.0 (build 1) released.  This conforms to **[v1.53.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.53.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **1st April, 2026**: Ixia-c version 1.51.0 (build 1) released.  This conforms to **[v1.51.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.51.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **11th March, 2026**: Ixia-c version 1.48.0 (build 5) released.  This conforms to **[v1.48.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.48.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **20th February, 2026**: Ixia-c version 1.45.0 (build 5) released.  This conforms to **[v1.45.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.45.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **9th February, 2026**: Ixia-c version 1.44.0 (build 8) released.  This conforms to **[v1.44.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.44.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **29th January, 2026**: Ixia-c version 1.43.0 (build 7) released.  This conforms to **[v1.43.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.43.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **22nd December, 2025**: Ixia-c version 1.42.1 (build 4) released.  This conforms to **[v1.42.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.42.1/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **8th December, 2025**: Ixia-c version 1.42.0 (build 4) released.  This conforms to **[v1.42.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.42.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **24th November, 2025**: Ixia-c version 1.41.0 (build 8) released.  This conforms to **[v1.41.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.41.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes bug fixes. [Read more](releases.md)\n\n* **11th November, 2025**: Ixia-c version 1.41.0 (build 1) released.  This conforms to **[v1.41.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.41.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **24th October, 2025**: Ixia-c version 1.40.0 (build 15) released.  This conforms to **[v1.40.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.40.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **26th September, 2025**: Ixia-c version 1.40.0 (build 1) released.  This conforms to **[v1.40.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.40.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **12th September, 2025**: Ixia-c version 1.35.0 (build 14) released.  This conforms to **[v1.35.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.35.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **1st September, 2025**: Ixia-c version 1.34.0 (build 1) released.  This conforms to **[v1.34.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.34.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **20th August, 2025**: Ixia-c version 1.33.0 (build 34) released.  This conforms to **[v1.33.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.33.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **18th July, 2025**: Ixia-c version 1.33.0 (build 1) released.  This conforms to **[v1.33.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.33.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **1st July, 2025**: Ixia-c version 1.32.0 (build 1) released.  This conforms to **[v1.32.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.32.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **14th June, 2025**: Ixia-c version 1.31.0 (build 6) released.  This conforms to **[v1.31.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.31.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **2nd June, 2025**: Ixia-c version 1.31.0 (build 3) released.  This conforms to **[v1.31.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.31.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **19th May, 2025**: Ixia-c version 1.28.0 (build 45) released.  This conforms to **[v1.28.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.28.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **7th May, 2025**: Ixia-c version 1.28.0 (build 33) released.  This conforms to **[v1.28.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.28.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **18th April, 2025**: Ixia-c version 1.28.0 (build 6) released.  This conforms to **[v1.28.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.28.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **29th March, 2025**: Ixia-c version 1.24.0 (build 15) released.  This conforms to **[v1.24.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.24.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **7th March, 2025**: Ixia-c version 1.24.0 (build 4) released.  This conforms to **[v1.24.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.24.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **26th February, 2025**: Ixia-c version 1.20.0 (build 8) released.  This conforms to **[v1.20.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.20.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new bug fixes. [Read more](releases.md)\n\n* **11th February, 2025**: Ixia-c version 1.20.0 (build 6) released.  This conforms to **[v1.20.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.20.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **24th January, 2025**: Ixia-c version 1.19.0 (build 18) released.  This conforms to **[v1.19.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.19.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **23rd December, 2024**: Ixia-c version 1.19.0 (build 5) released.  This conforms to **[v1.19.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.19.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **29th November, 2024**: Ixia-c version 1.17.0 (build 9) released.  This conforms to **[v1.17.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.17.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **18th November, 2024**: Ixia-c version 1.16.0 (build 2) released.  This conforms to **[v1.16.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.16.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **25th October, 2024**: Ixia-c version 1.14.0 (build 1) released.  This conforms to **[v1.14.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.14.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **4th October, 2024**: Ixia-c version 1.13.0 (build 9) released.  This conforms to **[v1.13.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.13.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **13th September, 2024**: Ixia-c version 1.13.0 (build 1) released.  This conforms to **[v1.13.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.13.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **2nd September, 2024**: Ixia-c version 1.12.0 (build 1) released.  This conforms to **[v1.12.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.12.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **20th August, 2024**: Ixia-c version 1.8.0 (build 1) released.  This conforms to **[v1.8.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.8.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **7th August, 2024**: Ixia-c version 1.7.2 (build 1) released.  This conforms to **[v1.7.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.7.1/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **19th July, 2024**: Ixia-c version 1.6.2 (build 13) released.  This conforms to **[v1.6.2](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.6.2/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **28th June, 2024**: Ixia-c version 1.6.2 (build 1) released.  This conforms to **[v1.6.2](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.6.2/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **14th June, 2024**: Ixia-c version 1.5.1 (build 11) released.  This conforms to **[v1.5.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.5.1/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **1st June, 2024**: Ixia-c version 1.5.1 (build 3) released.  This conforms to **[v1.5.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.5.1/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **23rd May, 2024**: Ixia-c version 1.5.0 (build 1) released.  This conforms to **[v1.5.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.5.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes bug fixes. [Read more](releases.md)\n\n* **20th May, 2024**: Ixia-c version 1.4.0 (build 15) released.  This conforms to **[v1.4.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.4.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes bug fixes. [Read more](releases.md)\n\n* **7th May, 2024**: Ixia-c version 1.4.0 (build 1) released.  This conforms to **[v1.4.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.4.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **19th April, 2024**: Ixia-c version 1.3.0 (build 2) released.  This conforms to **[v1.3.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.3.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n\n* **29th March, 2024**: Ixia-c version 1.1.0 (build 21) released.  This conforms to **[v1.1.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.1.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **22nd March, 2024**: Ixia-c version 1.1.0 (build 12) released.  This conforms to **[v1.1.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.1.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **20th March, 2024**: Ixia-c version 1.1.0 (build 10) released.  This conforms to **[v1.1.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.1.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **1st March, 2024**: Ixia-c version 1.0.0 (build 104) released.  This conforms to **[v1.0.2](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.0.2/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **22nd February, 2024**: Ixia-c version 1.0.0 (build 92) released.  This conforms to **[v1.0.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.0.1/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **5th February, 2024**: Ixia-c version 1.0.0 (build 7) released.  This conforms to **[v1.0.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.0.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **19th January, 2024**: Ixia-c version 0.1.0 (build 222) released.  This conforms to **[v0.13.7](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.13.7/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **21st December, 2023**: Ixia-c version 0.1.0 (build 158) released.  This conforms to **[v0.13.4](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.13.4/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **7th December, 2023**: Ixia-c version 0.1.0 (build 84) released.  This conforms to **[v0.13.2](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.13.2/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **24th November, 2023**: Ixia-c version 0.1.0 (build 81) released.  This conforms to **[v0.13.2](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.13.2/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **10th November, 2023**: Ixia-c version 0.1.0 (build 53) released.  This conforms to **[v0.13.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.13.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features and bug fixes. [Read more](releases.md)\n\n* **3rd November, 2023**: Ixia-c version 0.1.0 (build 26) released.  This conforms to **[v0.13.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.13.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes stability fixes. [Read more](releases.md)\n\n* **20th October, 2023**: Ixia-c version 0.1.0 (build 3) released.  This conforms to **[v0.13.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.13.0/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features, stability and bug fixes. [Read more](releases.md)\n\n* **29th September, 2023**: Ixia-c version 0.0.1 (build 4554) released.  This conforms to **[v0.12.5](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.12.5/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes bug fixes. [Read more](releases.md)\n\n* **14th September, 2023**: Ixia-c version 0.0.1 (build 4478) released.  This conforms to **[v0.12.3](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.12.3/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes stability fixes. [Read more](releases.md)\n\n\n* **1st September, 2023**: Ixia-c version 0.0.1 (build 4435) released.  This conforms to **[v0.12.2](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.12.2/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes bug fixes. [Read more](releases.md)\n\n* **21st August, 2023**: Ixia-c version 0.0.1 (build 4399) released.  This conforms to **[v0.12.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.12.1/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **4th August, 2023**: Ixia-c version 0.0.1 (build 4306) released.  This conforms to **[v0.11.11](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.11/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes stability fixes. [Read more](releases.md)\n\n* **21st July, 2023**: Ixia-c version 0.0.1 (build 4167) released.  This conforms to **[v0.11.10](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.10/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **29th June, 2023**: Ixia-c version 0.0.1 (build 4139) released.  This conforms to **[v0.11.10](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.10/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **16th June, 2023**: Ixia-c version 0.0.1 (build 4124) released.  This conforms to **[v0.11.9](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.9/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **2nd June, 2023**: Ixia-c version 0.0.1 (build 4080) released.  This conforms to **[v0.11.9](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.9/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes stability fixes. [Read more](releases.md)\n\n* **18th May, 2023**: Ixia-c version 0.0.1 (build 4064) released.  This conforms to **[v0.11.8](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.8/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes bug fix. [Read more](releases.md)\n\n* **5th May, 2023**: Ixia-c version 0.0.1 (build 4013) released.  This conforms to **[v0.11.8](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.8/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **21st April, 2023**: Ixia-c version 0.0.1 (build 3927) released.  This conforms to **[v0.11.8](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.8/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **31st March, 2023**: Ixia-c version 0.0.1 (build 3889) released.  This conforms to **[v0.11.4](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.4/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **16th March, 2023**: Ixia-c version 0.0.1 (build 3865) released.  This conforms to **[v0.11.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.1/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes new features. [Read more](releases.md)\n\n* **3rd March, 2023**: Ixia-c version 0.0.1 (build 3841) released.  This conforms to **[v0.10.12](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.10.12/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  **Announcement**\n\n  `ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages), We stopped publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom).\n\n  * This build includes new features. [Read more](releases.md)\n\n* **17th February, 2023**: Ixia-c version 0.0.1 (build 3807) released.  This conforms to **[v0.10.9](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.10.9/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  **Announcement**\n\n  `ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages), We stopped publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom).\n\n  * This build includes bug fixes. [Read more](releases.md)\n\n* **2nd February, 2023**: Ixia-c version 0.0.1 (build 3768) released.  This conforms to **[v0.10.7](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.10.7/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  **Announcement**\n\n  `ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages), We stopped publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom).\n\n  * This build includes bug fixes. [Read more](releases.md)\n\n* **20th January, 2023**: Ixia-c version 0.0.1 (build 3724) released.  This conforms to **[v0.10.6](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.10.6/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  **Announcement**\n\n  `ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages), We stopped publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom).\n\n  * This build includes bug fixes. [Read more](releases.md)\n\n\n* **15th December, 2022**: Ixia-c version 0.0.1 (build 3698) released.  This conforms to **[v0.10.5](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.10.5/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  **Announcement**\n\n  `ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages), We stopped publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom).\n\n\n* **1st December, 2022**: Ixia-c version 0.0.1 (build 3662) released.  This conforms to **[v0.9.10](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.9.10/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  **Announcement**\n\n  `ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages). However we will continue publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom) until 18th November, 2022.\n\n\n* **10th November, 2022**: Ixia-c version 0.0.1 (build 3619) released.  This conforms to **[v0.9.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.9.1/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  **Announcement**\n\n  `ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages). However we will continue publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom) until 18th November, 2022.\n\n  * This build includes new features along with bugs fixes. [Read more](releases.md)\n\n* **28th October, 2022**: Ixia-c version 0.0.1 (build 3587) released.  This conforms to **[v0.9.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.9.1/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  **Announcement**\n\n  `ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages). However we will continue publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom) until 18th November, 2022.\n\n  * This build includes bug fixes. [Read more](releases.md)\n\n\n* **29th September, 2022**: Ixia-c version 0.0.1 (build 3423) released.  This conforms to **[v0.9.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.9.1/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  **Announcement**\n\n  `ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages). However we will continue publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom) until 18th November, 2022.\n\n  * This build includes stability fixes. [Read more](releases.md)\n\n* **16th September, 2022**: Ixia-c version 0.0.1 (build 3383) released.  This conforms to **[v0.9.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.9.1/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  **Announcement**\n\n  `ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages). However we will continue publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom) until 18th November, 2022.\n\n  * This build includes new features. [Read more](releases.md)\n\n\n* **1st September, 2022**: Ixia-c version 0.0.1 (build 3182) released.  This conforms to **[v0.9.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.9.1/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  **Announcement**\n\n  `ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages). However we will continue publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom) until 18th November, 2022.\n\n  * This build includes new features. [Read more](releases.md)\n\n\n* **18th August, 2022**: Ixia-c version 0.0.1 (build 3113) released.  This conforms to **[v0.8.6](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.8.6/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  **Announcement**\n\n  From now onwards `ixia-c` container images will be hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages). However we will continue publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom) as well for the next 3 months. (until 18th November, 2022)\n\n  * This build includes new feature along with bug fix. [Read more](releases.md)\n\n* **4th August, 2022**: Ixia-c version 0.0.1 (build 3027) released.  This conforms to **[v0.8.6](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.8.6/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * Support added for static `MPLS` packet header in flows. [Read more](releases.md)\n\n\n* **27th July, 2022**: Ixia-c version 0.0.1 (build 3002) released.  This conforms to **[v0.8.5](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.8.5/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes stability fixes. [Read more](releases.md)\n\n\n* **21st July, 2022**: Ixia-c version 0.0.1 (build 3000) released.  This conforms to **[v0.8.5](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.8.5/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes stability fixes. [Read more](releases.md)\n\n\n* **1st July, 2022**: Ixia-c version 0.0.1 (build 2994) released.  This conforms to **[v0.8.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.8.1/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes stability fixes. [Read more](releases.md)\n\n\n* **30th June, 2022**: Ixia-c version 0.0.1 (build 2992) released.  This conforms to **[v0.8.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.8.1/artifacts/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes stability fixes. [Read more](releases.md)\n\n\n* **16th June, 2022**: Ixia-c version 0.0.1 (build 2969) released.  This conforms to **[v0.7.15](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.15/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes stability fixes. [Read more](releases.md)\n\n* **2nd June, 2022**: Ixia-c version 0.0.1 (build 2934) released.  This conforms to **[v0.7.13](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.13/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes bug fixes. [Read more](releases.md)\n\n* **19th May, 2022**: Ixia-c version 0.0.1 (build 2897) released.  This conforms to **[v0.7.8](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.8/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * `ixia-c-one` is now supported on platforms with `cgroupv2` enabled. [Read more](releases.md)\n\n* **9th May, 2022**: Ixia-c version 0.0.1 (build 2801) released.  This conforms to **[v0.7.8](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.8/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes stability fixes. [Read more](releases.md)\n\n* **5th May, 2022**: Ixia-c version 0.0.1 (build 2790) released.  This conforms to **[v0.7.8](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.8/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes stability fixes. [Read more](releases.md)\n\n* **21st April, 2022**: Ixia-c version 0.0.1 (build 2770) released.  This conforms to **[v0.7.8](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.8/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes stability fixes. [Read more](releases.md)\n\n* **7th April, 2022**: Ixia-c version 0.0.1 (build 2755) released.  This conforms to **[v0.7.8](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.8/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes following bug fix [Read more](releases.md)\n    - Clearing of `port` and `flow` statistics as part of `set_config`.\n\n* **25th March, 2022**: Ixia-c version 0.0.1 (build 2738) released.  This conforms to **[v0.7.8](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.8/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes following new functionalities [Read more](releases.md)\n    - fix in handling of `ether_type` field of ethernet packet\n\n* **24th March, 2022**: Ixia-c version 0.0.1 (build 2727) released.  This conforms to **[v0.7.8](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.8/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build includes following new functionalities [Read more](releases.md)\n    - correct received(rx) rate statistics in port metrics\n    - auto destination mac learning support in destination mac field of ethernet packet\n\n* **11th March, 2022**: Ixia-c version 0.0.1 (build 2678) released.  This conforms to **[v0.7.3](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.3/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build contains stability and debuggability enhancements. [Read more](releases.md)\n\n* **24th February, 2022**: Ixia-c version 0.0.1 (build 2662) released.  This conforms to **[v0.7.3](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.3/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build implements transmit(tx) statistics & transmit state of flow metrics. [Read more](releases.md)\n\n* **10th February, 2022**: Ixia-c version 0.0.1 (build 2610) released.  This conforms to **[v0.7.3](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.3/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build contains stability fixes. [Read more](releases.md)\n\n\n* **27th January, 2022**: Ixia-c version 0.0.1 (build 2597) released.  This conforms to **[v0.7.2](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.2/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build contains debuggability enhancements. [Read more](releases.md)\n\n* **16th December, 2021**: Ixia-c version 0.0.1 (build 2543) released.  This conforms to **[v0.7.2](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.2/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build contains stability fixes. [Read more](releases.md)\n\n* **2nd December, 2021**: Ixia-c version 0.0.1 (build 2446) released.  This conforms to **[v0.6.13](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.6.13/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build introduces ability to return large `FramesTx/RX` values by `metric` APIs. [Read more](releases.md)\n\n* **18th November, 2021**: Ixia-c version 0.0.1 (build 2399) released.  This conforms to **[v0.6.10](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.6.10/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build introduces ability to auto plug in default values for missing fields with primitive types upon receiving JSON payload. [Read more](releases.md)\n\n* **5th November, 2021**: Ixia-c version 0.0.1 (build 2367) released.  This conforms to **[v0.6.7](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.6.7/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build introduces uniform logging across some Ixia-c components. [Read more](releases.md)\n\n* **27th October, 2021**: Ixia-c version 0.0.1 (build 2342) released.  This conforms to **[v0.6.5](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.6.5/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build contains validation bug fixes. [Read more](releases.md)\n\n* **21st October, 2021**: Ixia-c version 0.0.1 (build 2337) released.  This conforms to **[v0.6.5](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.6.5/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build contains performance improvement in SetConfig and more correct fps vaules in scenarios involving multiple start or stop traffic. [Read more](releases.md)\n\n* **29th September, 2021**: Ixia-c version 0.0.1 (build 2289) released.  This conforms to **[v0.6.1](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.6.1/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build contains bugfixes for SetConfig and FPS values in GetMetrics. [Read more](releases.md)\n\n* **8th September, 2021**: Ixia-c version 0.0.1 (build 2185) released.  This conforms to **[v0.5.4](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.5.4/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This build contains support for updating flow rate without disrupting transmit state. [Read more](releases.md)\n\n* **27th August, 2021**: Ixia-c version 0.0.1 (build 2120) released.  This conforms to **[v0.4.12](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.4.12/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This release provides support for capture filter, setting GRE checksum flag, redirecting Ixia-c controller log to stdout and some bug fixes. [Read more](releases.md)\n\n* **2nd July, 2021**: Ixia-c End User License Agreement (EULA) updated.  New EULA can be found [here](https://www.keysight.com/us/en/assets/ndx/9921-02222/exhibits/EULA-Jul-1-21.pdf).\n\n* **25th June, 2021**: Ixia-c version 0.0.1 (build 1622) released.  This conforms to **[v0.4.0](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.4.0/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This release provides support for protocols GRE and VXLAN (RFC 2784), enabling/disabling flow metrics and some bug fixes. [Read more](releases.md)\n\n* **31st May, 2021**: Ixia-c version 0.0.1 (build 1388) released.  This conforms to **[v0.3.10](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.3.10/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This release provides support for flow delay and also fixes some bugs. [Read more](releases.md)\n\n* **13th May, 2021**: Ixia-c version 0.0.1 (build 1293) released.  This conforms to **[v0.3.8](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.3.8/openapi.yaml)** of the Open Traffic Generator Models specification.\n\n  * This is the very first release of ixia-c. [Read more](readme.md)\n"
  },
  {
    "path": "docs/prerequisites.md",
    "content": "# Ixia-c Prerequisites\n\n## System Prerequisites\n\n### CPU and RAM\n\nThe minimum memory and cpu requirements for a basic use-case are as follows:\n\n* `keng-controller`: Each instance requires at least 10m CPU core and 25Mi RAM.\n* `ixia-c-traffic-engine`: Each instance requires 200m CPU core per test port, plus one shared CPU core and 60Mi RAM. Generic formula for CPU cores is `1 + 2 * number_of_ports`.\n* `ixia-c-protocol-engine`: Each instance requires 200m CPU core and 350Mi RAM per port.\n\nFor more granularity on resource requirements for advanced deployments, see [Resource requirements](reference/resource-requirements.md).\n\n### OS and Software\n\n* x86_64 Linux Distribution (Centos 7+ or Ubuntu 18+ have been tested)\n* Docker 19+ (as distributed by <https://docs.docker.com/>)\n* For test-environment,\n    * Python 3.6+ (with `pip`) or\n    * Go 1.17+\n\n## Software Prerequisites\n\n### Docker\n\n* Docker Engine (Community Edition)\n\n### Python\n\n* **Ensure that you have `python` and `pip` installed on your system.**\n\n    You may have to use `python3` or `absolute path to python executable` depending on the Python Installation on your system.\n\n    ```sh\n    python -m pip --help\n    ```\n\n    If you do not see a help message, see [pip installation guide](https://pip.pypa.io/en/stable/installing/), .\n\n  * **It is recommended that you use a python virtual environment for development.**\n\n    ```sh\n    python -m pip install --upgrade virtualenv\n    # create virtual environment inside `env/` and activate it.\n    python -m virtualenv env\n    # on linux\n    source env/bin/activate\n    # on windows\n    env\\Scripts\\activate on Windows\n    ```\n\n> If you do not want to activate the virtual env, use `env/bin/python` (or `env\\scripts\\python` on Windows) instead of `python`.\n\n## Network Interface Prerequisites\n\nIn order for `ixia-c-traffic-engine` to function, several settings need to be tuned on the host system. They are as follows:\n\n1. Ensure that all the existing network interfaces are `Up` and have `Promiscuous` mode enabled.\n\n* The following example illustrates a sample configured interface `eth1`\n\n    ```sh\n    # check interface details\n    ip addr\n    # configure as required\n    ip link set eth1 up\n    ip link set eth1 promisc on\n    ```\n\n2. (Optional) You need to create the `veth` interface pairs, to deploy the `ixia-c-traffic-engine` against them.\n\n    ```sh\n    # create veth pair veth1 and veth2\n    ip link add veth1 type veth peer name veth2\n    ip link set veth1 up\n    ip link set veth2 up\n    ```\n"
  },
  {
    "path": "docs/quick-start/deployment.md",
    "content": "# Deployment\n\nIxia-c is distributed and deployed as a multi-container application that consists of the following services:\n\n* **controller**: Serves API request from the clients and manages workflow across one or more traffic engines.\n* **traffic-engine**: Generates, captures, and processes traffic from one or more network interfaces (on linux-based OS).\n* **app-usage-reporter**: (Optional) Collects anonymous usage report from the controller and uploads it to the Keysight Cloud, with minimal impact on the host resources.\n\nAll these services are available as docker images on the [GitHub Open-Traffic-Generator repository](https://github.com/orgs/open-traffic-generator/packages). To use specific versions of these images, see [Ixia-c Releases](../releases.md) .\n\n![ixia-c-aur](../res/ixia-c-aur.drawio.svg \"ixia-c-aur\")\n\n> Once the services are deployed, [conformance](https://github.com/open-traffic-generator/conformance/blob/main/readme.md) (a collection of [snappi](https://pypi.org/project/snappi/) test scripts and configurations) can be setup to run against Ixia-c.\n\n## Deploy Ixia-c using docker-compose\n\nDeploying multiple services manually (along with the required parameters) is not always applicable in some scenarios. For convenience, the [deployments](../deployments) directory consists of the following `docker-compose` files:\n\n- `*.yml`: Describes the services for a given scenario and the deployment parameters that are required to start them.\n- `.env`: Holds the default parameters, that are used across all `*.yml` files. For example, the name of the interface, the version of docker images, and etc.\n\nIf a concerned `.yml` file does not include certain variables from `.env`, those can then safely be ignored.\nFollwoing is the example of a usual workflow, by using  `docker-compose`.\n\n```sh\n# change default parameters if needed; e.g. interface name, image version, etc.\nvi deployments/.env\n# deploy and start services for community users\ndocker-compose -f deployments/<scenario>.yml up -d\n# stop and remove services deployed\ndocker-compose -f deployments/<scenario>.yml down\n```\n\nOn most of the systems, `docker-compose` needs to be installed separately even if the docker is already installed. Before you start, ensure that the [docker prerequisites](../prerequisites.md#docker) are met.\n\nFor more information on deployment, see [Deployment Guide](../deployments.md).\n"
  },
  {
    "path": "docs/quick-start/introduction.md",
    "content": "## What is Ixia-c ?\n\n- A modern, powerful and **API-driven** traffic generator designed to cater to the needs of hyper-scalers, network hardware vendors and hobbyists alike.\n\n- **Free for basic use-cases** and distributed / deployed as a multi-container application consisting primarily of a [controller](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller), a [traffic-engine](https://github.com/orgs/open-traffic-generator/packages/container/package/Ixia-c-traffic-engine) and a [protocol-engine](https://github.com/orgs/open-traffic-generator/packages/container/package/Ixia-c-protocol-engine).\n\n- As a reference implementation of [Open Traffic Generator API](https://github.com/open-traffic-generator/models), supports client SDKs in various languages, most prevalent being [snappi](https://github.com/open-traffic-generator/snappi) (Python SDK) and [gosnappi](https://github.com/open-traffic-generator/snappi/tree/main/gosnappi).\n\n<p align=\"center\">\n<img src=\"/res/ixia-c.drawio.svg\" alt=\"Ixia-c deployment for two-arm test with DUT\">\n</p>\n\n## Quick Start\n\nPlease ensure that following prerequisites are met by the setup:\n\n* At least **2 x86_64 CPU cores** and **7GB RAM**, preferably running **Ubuntu 22.04 LTS** OS\n* **Python 3.8+** (and **pip**) or **Go 1.19+**\n* **Docker Engine** (Community Edition)\n\n\n### 1. Deploy Ixia-c\n\n```bash\n# clone this repository\ngit clone --recurse-submodules https://github.com/open-traffic-generator/Ixia-c.git && cd Ixia-c\n\n# create a veth pair and deploy Ixia-c containers where one traffic-engine is bound\n# to each interface in the pair, and controller is configured to figure out how to\n# talk to those traffic-engine containers\ncd conformance && ./do.sh topo new dp\n```\n\n### 2. Setup and run standalone test using [snappi](https://github.com/open-traffic-generator/snappi) or [gosnappi](https://github.com/open-traffic-generator/snappi/tree/main/gosnappi)\n\n```bash\n# change dir to conformance if you haven't already\ncd conformance\n\n# setup python virtual environment and install dependencies\n./do.sh prepytest\n\n# run standalone snappi test that configures and sends UDP traffic\n# upon successful run, flow metrics shall be printed on console\n./do.sh pytest examples/test_quickstart.py\n\n# optionally, go equivalent of the test can be run like so\n./do.sh gotest examples/quickstart_test.go\n```\n\n> Checkout the contents of [test_quickstart.py](https://github.com/open-traffic-generator/conformance/blob/22563e20fe512ef13baf44c1bc69bc59f87f6c25/examples/test_quickstart.py) and equivalent [quickstart_test.go](https://github.com/open-traffic-generator/conformance/blob/22563e20fe512ef13baf44c1bc69bc59f87f6c25/examples/quickstart_test.go) for quick explanation on test steps\n\n### 3. Optionally, run test using [curl](https://curl.se/)\n\nWe can also pass equivalent **JSON configuration** directly to **controller**, just by using **curl**.\nThe description of each node in the configuration is detailed in self-updating  [online documentation](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.13.0/artifacts/openapi.yaml).\n\n\n```bash\n# push traffic configuration\ncurl -skL https://localhost:8443/config -H \"Content-Type: application/json\" -d @conformance/examples/quickstart_config.json\n\n# start transmitting configured flows\ncurl -skL https://localhost:8443/control/state -H \"Content-Type: application/json\" -d @conformance/examples/quickstart_control.json\n\n# fetch flow metrics\ncurl -skL https://localhost:8443/monitor/metrics -H \"Content-Type: application/json\" -d @conformance/examples/quickstart_metrics.json\n```\n"
  },
  {
    "path": "docs/quick-start/sample-test.md",
    "content": "# Quick start sample test \n\nHow to run the sample test \n"
  },
  {
    "path": "docs/reference/capabilities.md",
    "content": "# Supported capabilities\n\n## Protocol emulation\n\n| Feature  | OTG model specification | Ixia-c software | IxOS hardware | UHD400T system | Comments  |\n|---|---|---|---|---|---|\n| <span style=\"color: grey;\">**BGP(v4/v6)**</span>  | Y  | Y  |  Y | Y  |   |\n|  v4/v6  Routes   | Y  |  Y |  Y | Y  |   |\n|  Route Withdraw/Re-advertise | Y  | Y  | Y  | Y  |   |\n|  Md5 Authentication  |  Y  |  Y |  Y | Y  |  |\n|  Learned Routes Retrieval | Y  | Y  | Y  |  Y |   |\n|  Extended Community  |  Y |  Y | Y  | Y  |   |\n|  Graceful Restart (Helper and Restarting) | Y | Y  | Y  |  Y |   |\n| <span style=\"color: grey;\">**Static LAG**</span>   | Y  | Y  | Y  |  N |   |\n| <span style=\"color: grey;\">**LAG with LACP**</span>  | Y  | Y  | Y  |  N |   |\n| Protocols/Data over LAG with traffic switch   | Y  |  Y |  N |  N |   |\n| <span style=\"color: grey;\">**ISIS**</span> | Y | Y | Y | Y  |   |\n|  v4/v6 Routes  | Y  | Y | Y | Y  |   |\n|  Learned Routes Retrieval |  Y | Y  | Y | Y  |   |\n|  Simulated Topology | Y |  Y | Y  | Y  |    |\n|  Segment Routing  | Y  |  Y | Y  | Y |   |\n| Multiple ports/adjacencies  |  Y | N  | N  |  N |   |\n| <span style=\"color: grey;\">**RSVP p2p LSPs (Ingress or Egress)**</span>  | Y  |  Y | Y  |  N |  |\n|  Srefresh and Bundle extensions | Y  | Y  | Y  | N  |   |\n|  <span style=\"color: grey;\">**LLDP**</span> |  Y | Y  |  N |  Y |   |\n|   Per Port | Y  | Y  | N | Y  |   |\n|  Learned LLDP Neighbors | Y  | Y  | N  |  Y |   |\n| Per LAG member Port  | Y  |  Y |  N |  N |   |\n\n## Traffic generation\n\n| Feature  | OTG model specification | Ixia-c software | IxOS hardware | UHD400T system | Comments  |\n|---|---|---|---|---|---|\n|  Egress Tracking | Y  |  Y | Y  |  N |   |\n| Imix  | Y  |  Y |  Y |  N |   |\n| Dynamic ARP Resolution  | Y  | Y  | Y  |  Y |   |\n|  Dynamic Frame Size control | Y  |  Y |  Y |  N |   |\n| Dynamic Rate Control  | Y  |  Y |  N |  N |   |\n|  Multiple Rx Ports and drilldown  | Y  | Y  |   Y|  N |   |\n| <span style=\"color: grey;\">**Packet headers**</span>  |   |   |   |   |   |\n| Vlan  | Y  | Y  | Y  | Y  |   |\n| IPv4  |  Y | Y  | Y  | Y  |   |\n| IPv6  | Y  |  Y | Y  | Y  |   |\n| TCP  |  Y |  Y | Y  | Y  |   |\n| UDP  |  Y | Y  | Y  | Y  |   |\n|  MPLS |  Y | Y  | Y  | N  |   |\n|  ARP |  Y | Y  |  Y | Y  |   |\n|  PPP |  Y |  Y |  Y | N  |   |\n|   GRE| Y  | Y  | Y  |  N |   |\n|IGMPv1   | Y  | Y  | Y  | N  |   |\n|  ICMP | Y  | Y  |  Y |N   |   |\n|  ICMPv6 |  Y | Y  | Y  | N  |   |\n| ETHERNETPAUSE  | Y  | Y  |  Y |  N |   |\n|  VXLAN | Y  |  Y |  Y | N  |   |\n|  PFCPAUSE | Y  | N  |  Y |  N |   |\n|  CUSTOM |  Y | Y  |  Y |  N |   |\n\n## Infrastructure\n\n| Feature  | OTG model specification | Ixia-c software | IxOS hardware | UHD400T system | Comments  |\n|---|---|---|---|---|---|\n|  Capture (Rx only) |  Y |  Y | Y  |  N |   |\n|  Link Down/Up  | Y  |  Y |  Y | N  |   |\n|  MTU greater than 1500 | Y  |  Y |  Y | N  |   |\n"
  },
  {
    "path": "docs/reference/licensing.md",
    "content": "# Licensing\n\n## License consumption mechanism and feature licenses\n\nElastic Network Generator [licenses](../licensing.md) include the following features which depends on the license edition. Details on how the features are consumed are as follows:\n\n### Feature Licenses\n\n| Feature Licenses                    | Developer            | Team            | System                 |\n|-------------------------------------|----------------------|-----------------|------------------------|\n| KENG-SEAT                           | 1                    |  8              |  16                    |\n| KENG-SEAT​-UHD                       | N/A                  |  8              |  16                    |\n| KENG-SEAT​-IXHW                      | N/A                  |  N/A            |  16                    |\n| KENG-DPLU                           | 50                   |  400            |  800                   |\n| KENG-CPLU                           | 50                   |  400            |  800                   |\n| KENG-UNLIMITED-CP                   | N/A                  |  N/A            |  16                    |\n\nThe exact list of feature licenses that are required by a specific test configuration, is calculated based on the test port type, port speed, protocol, protocol sessions, and etc. Overall, the list of required licenses is referred to as Test Cost.\n\n### Test Cost Calculation\n\n```\nTest Cost = Seat Cost + CP Cost * KENG-CPLU + DP Cost * KENG-DPLU​\n```\n\n| Port Type        | Condition                     | Seat Cost                                                             | CP Cost                            | DP cost                        |\n|------------------|-------------------            |-----------------------------------------------------------------------|-------------------------           |---------------                 |\n| Ixia-c SW        | `If CP Cost <= 50`            |  `1x KENG-SEAT`                                                       |  `SUM (Protocol Cost)`            ​ |  `SUM (Speed Cost)`            |\n| Ixia-c SW        | `If CP Cost > 50`<sup>3</sup> |  `1x KENG-SEAT`<br/>`1x KENG-UNLIMITED-CP`                            |  `50`                              |  `SUM (Speed Cost)`            |\n| UHD400T          | `If CP Cost <= 50`​            |  `1x KENG-SEAT`​<br/>`1x KENG-SEAT-UHD`​                                |  `SUM (Protocol Cost)​`             |  `0`                           |\n| UHD400T          | `If CP Cost > 50`<sup>3</sup> |  `1x KENG-SEAT`<br/>`1x KENG-SEAT-UHD`<br/>`1x KENG-UNLIMITED-CP`     |  `50`                              |  `0`                           |\n| IxOS Hardware    |                               |  `1x KENG-SEAT`<br/>`1x KENG-SEAT-IXHW`​                               |  `0`                               |  `0`                           |\n\n- **Seat** is the number of the running `keng-controller` instances, with a configuration that exceeds the capabilities of the Community Edition.\n- **The Data Plane License Unit** (`KENG-DPLU`) is associated with the traffic port capacity.\nThe number of required units is determined as a sum of the configured port speeds (1, 10, 25, 40, 50, 100GE). The maximum port performance might be less than the configured port speed.\n- **The Control Plane License unit** (`KENG-CPLU`) is associated with the control plane protocol scale. The number of required CP units is determined as a sum of the configured protocol sessions.\n- If `KENG-UNLIMITED-CP` is not available, an exact number of `KENG-CPLU` will be consumed.\n- See [Control Plane Cost](#control-plane-cost) for the `Protocol Cost` and [Data Plane Cost](#data-plane-cost) for the `Speed Cost`.\n\n### Control Plane Cost\n\nApplies only to the Ixia-c software and UHD400T ports.\n\n```\nCP Cost = For each Port: SUM (Protocol Cost)\n```\n\n| Protocol                     | Session Definition                                                                       | Protocol Cost/Session | Comment                                   |\n|------------------------------|-----------------------------------------                                                 |-----------------------|-----------------------                    |\n| IP Interface (ARP, ND)       | devices: <br /> - ethernets: <br /> - ipv4_addresses:<br />  - ipv6_addresses:           |  0                    |                                           |\n| IP Loopbacks​                 | devices: <br /> - ipv4_loopbacks:<br />  - ipv6_loopbacks:                               |  0                    |                                           |\n| LLDP​                         | lldp: <br /> - connection:<br />  - port_name:                                           |  1                    | Session = Test Port with LLDP enabled     |\n| LACP                         | lacp: <br /> - ports:<br />  - port_name: <br /> lacp:                                   |  1                    | Session = LAG group, no matter group size​ |\n| BGP                          | devices: <br /> - bgp: <br /> - ipv4_addresses:<br />  - ipv6_addresses: <br />- peers:​  | 1                     | Session = BGP peer                        |\n| ISIS                         | devices: <br /> - isis: <br /> - interfaces:<br />  - eth_name: ​                         | 1                     | Session = ISIS interface                  |\n| RSVP                         | devices: <br /> - rsvp: <br /> - ipv4_interfaces:<br />  - neighbor_ip: ​                 | 1                     | Session = RSVP neighbor​                   |\n\n### Data Plane Cost\n\nApplies only to the Ixia-c software ports.\n\n| Test Port Speed        | DP Cost         |\n|------------------------|-----------------|\n| 1GE                    | 1               |\n| 10GE                   | 10              |\n| 25GE                   | 25              |\n| 40GE                   | 40              |\n| 50GE                   | 50              |\n| 100GE                  | 100             |\n| 200GE                  | 200             |\n| 400GE                  | 400             |\n\n## Sample license consumption scenarios\n\n### Test configuration\n\nNumber of `keng-controller` instances: `1`\n\n* Number of ports: `4`\n* Port type: `Ixia-c software`\n* Port Speed: `100GE`\n* Protocol scale: `100 BGP sessions/port`\n\n### Scenario 1: Limited control plane licenses\n\n```\nKENG-SEAT:         1 = (1 keng-controller instance and ixia-c SW port)\nKENG-DPLU:         400 = (100G speed * 4 ports)\nKENG-CPLU:         400 = (100 BGP sessions/port * 4 ports)\n```\n\n### Scenario 2: Unlimited control plane licenses\n\n```\nKENG-SEAT:         1 = (1 keng-controller instance and ixia-c SW port)\nKENG-DPLU:         400 = (100G speed * 4 ports)\nKENG-CPLU:         50 = (CP cost = 400 (100 BGP sessions/port * 4 ports) which is greater than 50 and unlimited cp capability is present)\nKENG-UNLIMITED-CP: 1\n```\n\n## Q&A\n\n<details>\n<summary>When the licenses are checked-out / checked-in?</summary>\n<br>\nThe license check-out/check-in mechanism in the keng-controller works as follows:</br>\n\n1. Calculate the Test Cost. For example,  Test Cost = N.</br>\n2. Based on the calculation performed in step (1), check-out the licenses at the time of the OTG SetConfig API call.</br>\n3. Execute the test if license check-out is successful.</br>\n4. For the next configuration, calculate Test Cost, For example, Test Cost = M.</br>\n\n```\nif M == N:\n    - keng-controller will not have any communication with license servers\nelse if M > N:\n    - keng-controller will not check-in licenses\n    - it will attempt to check-out required additional licenses\nelse if M < N:\n    - keng-controller will check-in surplus of the licenses\n```\n</details>\n\n<details>\n<summary>Does licensing have impact on API response time?</summary>\n<br>\nOn the timing aspect, the entire license check-out/check-in mechanism works concurrently with the control plane and the data plane configurations in the ports during the OTG SetConfig operation. Therefore, potentially there is a minimal impact in the OTG SetConfig API response time. If the license server is on a remote site from the controller, the OTG SetConfig API response time might get impacted due to the network latency.\n</details>\n\n<details>\n<summary>What happens if license servers are not available?</summary>\n<br>\nThe keng-controller can work with up to 4 license servers. The controller tries to connect to all the license servers during the startup. If none of them is available, the controller capabilities are reduced to the Community Edition. After that, a background routine is initiated to make recurrent attempts to connect the configured license servers in 30 second intervals. <br />\n\nOnce the controller is able to establish a connection with any of the license servers, for any new configuration beyond capabilities of the Community Edition, the keng-controller will try to check-out a license from the license server with which the connection is established. <br />\n</details>\n\n<details>\n<summary>What is the message generated when the license server is not available?</summary>\n<br>\nWhen a configured license server is not reachable, the log message with error code 13 is generated by the keng-controller:</br>\n<br>\n\"level\":\"warn\",\"ctx\":\"impl/licensing\",\"Not all license server could be reached\":\"code: 13 ...error details... \"\n</details>\n\n<details>\n<summary>What is the error generated when a license cannot be checked out?</summary>\n<br>\nThere are two possible scenarios when the license cannot checkout.<br>\n<br>\nScenario 1: Any of the license servers does not have the adequate license features that are required for the test configuration. It will throw an error with the error code 13 and the following error message:<br>\n<br>\nCurrent configuration requires following additional license feature(s): {...details...} which is not available in configured license server(s): {...details...} Available license feature(s) in license-server(s) are {...details...}.\n<br>\n<br>\nScenario 2: Previously active license server is no longer available/reachable. It will throw an error with the error code 13 and the following error message:<br>\n<br>\nissue consuming license from server ...address...: rpc error: code = DeadlineExceeded desc = context deadline exceeded\n<br>\n</details>\n\n<details>\n<summary>After how many retries things are considered dead and how long does it take?</summary>\n<br>\nThe controller will keep probing the list of license servers that are supplied at the time in the background routine in every 30 seconds during the controller lifetime.\n</details>\n\n<details>\n<summary>What happens if the controller can't check-out the license for a specific server?</summary>\n<br>\nThe keng-controller will attempt to check out licenses from the next available license server in the configured list.\n</details>\n\n<details>\n<summary>How long does a license remain checked-out?</summary>\n<br>\nFor the duration of the current test configuration, the license will remain checked-out. Once the new test configuration is applied that doesn't require the license, the license will be checked-in.\n</details>\n\n<details>\n<summary>How to check-in all the licenses?</summary>\n<br>\nTo check-in all the licenses, apply an empty configuration. Alternatively, gracefully stop the keng-controller container.\n</details>\n\n<details>\n<summary>What happens of the controller can't check-in the license back?</summary>\n<br>\nThere is a keep-alive mechanism between the controller and the license server. If the controller crashes, is forcefully stopped, or lost the connection to the license server, the licenses will be automatically checked-in after 5 minutes of keep-alive inactivity.\n</details>\n"
  },
  {
    "path": "docs/reference/resource-requirements.md",
    "content": "# Resource requirement\n\nThe minimum memory and cpu requirements for each Ixia-c components are captured in the following table. Kubernetes metrics server has been used to collect the resource usage data.\n\nThe memory represents the minimum working set of memory required. For protocol and traffic engines, it varies depending on the number of co-located ports. For example, multiple ports are added to a 'group' for LAG use-cases, when a single test container has more than one test NIC connected to the DUT. The figures are in Mi or MB per container and do not include shared or cached memory across multiple containers/pods in a system.\n\n| Component        |1 Port (Default)| 2 Port  | 4 Port  | 6 Port  |8 Port|\n|:---              |:---            |:---     |:---     |:---     |:---  |\n| Protocol Engine  | 350            |  420    | 440     |  460    | 480  |\n|  Traffic Engine  | 60             | 70      |  90     | 110     | 130  |\n|  Controller      |   25*          |         |         |         |      |\n|  gNMI            | 15*            |         |         |         |      |\n\n>Note: Controller and gNMI have a fixed minimum memory requirement and is currently not dependent on number of test ports for the topology.\n\nThe cpu resource figures are in millicores.\n\n|         |Protocol | Traffic Engine | Controller Engine | gNMI  |\n| :---    | :---    | :---           | :---              | :---  |\n| Min CPU |   200   |   200          |     10            |   10  |\n\n## Minimum and maximum resource usage based on various test configurations\n\nDepending on the nature of the test run, the memory and cpu resource requirements may vary across all Ixia-c components. The following table captures the memory usage for LAG scenarios with varying numbers of member ports. The minimum value represents the initial memory on topology deployment and the maximum value indicates the peak memory usage during the test run. The values are in Mi or MB.\n\n| Component     | Min/Max    | 1 Port   | 2 Port   | 4 Port   | 6 Port   | 8 Port   |\n|:---           |:---        |:---\t    |:---      |:---\t  |:---\t     |:---\t    |\n|Protocol Engine| Max<br>Min |348<br>323|423<br>360|455<br>360|464<br>360|492<br>360|\n|Traffic Engine | Max<br>Min |58<br>47  | 68 <br>49| 90 <br>49|111<br>49 |134<br>49 |\n| Controller    | Max<br>Min |21<br>13  | 21<br>13 | 23<br>13 | 24<br>13 |25<br>13  |\n|   gNMI        | Max<br>Min |14<br>7   | 14<br>7  | 14<br>7  | 14<br>7  | 14<br>7  |\n\nFollowing is the memory usage variation with scaling in the control plane. The variation is on the number of BGP sessions (1K, 5K, and 10K), in a back to back setup. The values are in Mi or MB.\n\n| Component      | Min/Max    |   1K     |   5K     |  10K      |\n| :----------    | :-------   | :------  | :------  | :-----    |\n| Protocol Engine| Max<br>Min |516<br>323|906<br>323|1367<br>323|\n| Controller     | Max<br>Min |53<br>12  |149<br>12 |259<br>12  |\n| gNMI           | Max<br>Min | 7<br>7   | 7<br>7   |  7<br>7   |\n\nFollowing is the memory usage variation with scaling in data plane. The variation is on the number of MPLS flows (10, 1K, and 4K), in a back to back setup with labels provided by the RSVP-TE control plane. The values are in Mi or MB.\n\n| Component      | Min/Max    |   10   |   1K   |   4K    |\n| :----------    | :-------   | :------| :------| :------ |\n| Traffic Engine | Max<br>Min |58<br>47|59<br>47|95<br>47 |\n|  Controller    | Max<br>Min |18<br>12|46<br>12|120<br>12|\n|  gNMI          | Max<br>Min |10<br>7 |17<br>7 |28<br>7  |\n"
  },
  {
    "path": "docs/releases.md",
    "content": "# Ixia-c Release Notes and Version Compatibility\n\n## Release  v1.53.0-1 (Latest)\n> 21st April, 2026\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.53.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.53.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.53.0](https://pypi.org/project/snappi/1.53.0)        |\n| gosnappi                      | [1.53.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.53.0)        |\n| keng-controller               | [1.53.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.522](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.53.0-3](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.4.0](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.53.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.53.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.10](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.10/artifacts.tar)         |\n\n\n### Release Feature(s):\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for disabling/enabling ISIS Simulated Links on the fly. [details](https://github.com/open-traffic-generator/models/pull/465)\n    ```go\n        cs := gosnappi.NewControlState()\n        cs.Protocol().Isis().SimulatedLinks().\n            SetNames([]string{\"isisSimLink1\", \"isisSimLink2\"}).\n            SetState(gosnappi.StateProtocolIsisSimLinksState.DOWN/UP)\n    ```\n    Note: Links will be disconnected from both directions for supplied simulated links.\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added port speed in port metrics. [details](https://github.com/open-traffic-generator/models/pull/472)\n    - New attribute named `speed` is now available in port metrics response. This will contain the negotiated HW port speed in `KBps`. \n    - Examples are given below.\n        - 100 Gbps is 100 * 1000 * 1000 / 8 = 12500000 KBps,\n        - 1.6 Tbps (high performance devices) is 1.6 * 1000 * 1000 * 1000 / 8 = 200000000 KBps,\n        - 10 Mbps (legacy devices) is 10 * 1000 / 8 = 1250 KBps\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for GTPv1 & GTPv2 packet headers in flows.\n    - To configure GTPv2 packet:\n        ```go\n            flow := config.Flows().Add()\n            ...\n            eth := flow.Packet().Add().Ethernet()\n            ...\n            ip := flow.Packet().Add().Ipv4()\n            ...\n\n            udp := flow.Packet().Add().Udp()\n            udp.SrcPort().SetValue(uint32(5000))\n            udp.DstPort().SetValue(uint32(2123)) // 2123 is GTPv2\n\n            gtp := flow.Packet().Add().Gtpv2()\n            gtp.PiggybackingFlag().SetValue(1)\n            gtp.TeidFlag().SetValue(1)\n            gtp.MessageType().SetValue(32)\n            gtp.Teid().SetValue(1)\n            gtp.SequenceNumber().SetValue(10)\n            gtp.Spare1().SetValue(1)\n            gtp.Spare2().SetValue(1)\n        ```\n    - To configure GTPv1 flow:\n        ```go\n            flow := config.Flows().Add()\n            ...\n            eth := flow.Packet().Add().Ethernet()\n            ...\n            ip := flow.Packet().Add().Ipv4()\n            ...\n\n            udp := flow.Packet().Add().Udp()\n            udp.SrcPort().SetValue(uint32(4000))\n            udp.DstPort().SetValue(uint32(2152)) // 2152 is GTPv1\n\n            gtp := flow.Packet().Add().Gtpv1()\n            gtp.MessageType().SetValue(255)\n            gtp.Teid().SetValue(10)\n\n            inner := flow.Packet().Add().Ipv4()\n            inner.Src().SetValue(\"11.0.0.1\")\n            inner.Dst().SetValue(\"12.0.0.1\")\n        ```\n    Note: GTPv1 & GTPv2 flows are already supported in `Ixia-C`.\n\n* <b><i>Keng-Operator</i></b>: Deprecated `gcr.io/kubebuilder/kube-rbac-proxy` is now removed.\n    Note: Users of the `keng-operator` should now use the `yaml` published corresponding to the release at [ixiatg-operator.yaml(v0.4.0)](https://github.com/open-traffic-generator/keng-operator/releases/download/v0.4.0/ixiatg-operator.yaml)\n\n    Example: The `yaml` at [openconfig/kne/manifests/keysight/ixiatg-operator.yaml](https://github.com/openconfig/kne/blob/main/manifests/keysight/ixiatg-operator.yaml) for usage in KNE environment.\n    \n### Bug Fix(s):\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Attempted fix is included for intermittent issue where a test initially fails with `\"context deadline exceeded\"` for `set_config` and subsequent API calls, returned the error `\"Processing of previous API in keng-layer23-hw-server still in progress. Cannot execute current API\"`. \n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where incorrect information was being returned for contents of `is_reachability_tlvs` and `extended_is_reachability_tlvs`.\n    - In `get_states` response for `isis_lsps.lsps[i].tlvs[j].is_reachability_tlvs[k]/extended_is_reachability_tlvs[k]`.\n    - In gNMI response for `isis-routers/isis-router[name=*]/state/link-state-database/lsp-states/lsps[lsp-id=*][pdu-type=*]/tlvs/is-reachability|extended-is-reachability`.\n* <b><i>Ixia-C & UHD400</i></b>: Issue is fixed where intermittent crash was seen for long duration run with multiple tests when starting `BGP/BGP+` with back trace containing `\"ix_set_ifindex, nsm_util_interface_address_add, bgp_nsm_recv_address\"` keywords.\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n## Release  v1.51.0-1\n> 1st April, 2026\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.51.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.51.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.51.0](https://pypi.org/project/snappi/1.51.0)        |\n| gosnappi                      | [1.51.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.51.0)        |\n| keng-controller               | [1.51.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.517](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.51.0-2](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.51.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.51.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.10](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.10/artifacts.tar)         |\n\n\n### Release Feature(s):\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne) & UHD400</i></b>: Support added for allowing user to specify a delay between Notification and FIN for BGP/BGP+ `set_control_action`. [details](https://github.com/open-traffic-generator/models/pull/460)\n    - User can enable BGP/BGP+ FIN delay using following snippet, \n        ```go\n            ceaseAction := gosnappi.NewControlAction()\n            ceaseAction.Protocol().Bgp().Notification().\n                        SetNames([]string{\"BGP4.peer\"}).\n                        Custom().SetCode(6).SetSubcode(6).\n                        SetFinDelay(500) // wait for 500 millisecond before tearing down connection.\n\n         ```\n    Note: Normally DUT will initiate the TCP FIN on receiving the Notification before the time expires.\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for `flows[i].packet.ipv4.options.timestamp` and `flows[i].packet.ipv4.options.end_of_options`. [details](https://github.com/open-traffic-generator/models/pull/464)\n    - IPv4 `timestamp` option can be configured using following snippet,\n    ```go\n        ipv4 := gosnappi.NewConfig().Flows().Add().Packet().Add().Ipv4()\n        ts := ipv4.Options().Add().Timestamp()\n        tsFormat := ts.Format().Timestamps().Add() // Other options for ts format are Format().AddressAndTimestamps() and Format().PrespecifiedAddressAndTimestamps()\n    ```\n    \n    - IPv4 `end_of_options` option can be added using following snippet,\n    ```go\n        ipv4.Options().Add().EndOfOptions()\n    ```\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n\n## Release  v1.48.0-5\n> 11th March, 2026\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.48.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.48.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.48.0](https://pypi.org/project/snappi/1.48.0)        |\n| gosnappi                      | [1.48.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.48.0)        |\n| keng-controller               | [1.48.0-5](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.507](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.48.0-4](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.48.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.48.0-5](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.10](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.10/artifacts.tar)         |\n\n\n### Release Feature(s):\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne) & UHD400</i></b>: Support added for retrieval of BGP MPLS IPv4/v6 labeled unicast prefixes. [details](https://github.com/open-traffic-generator/models/pull/447)\n    - To enable storage of MPLS prefixes, \n        ```go\n            bgpPeer.LearnedInformationFilter().SetIpv4MplsUnicastPrefix(true).SetIpv6MplsUnicastPrefix(true)\n         ```\n    - To fetch prefixes,\n        ```go\n            req := gosnappi.NewStatesRequest()\n            req.BgpPrefixes().SetBgpPeerNames(peerNames)\n            req.BgpPrefixes().SetPrefixFilters([]gosnappi.BgpPrefixStateRequestPrefixFiltersEnum{\n                gosnappi.BgpPrefixStateRequestPrefixFilters.IPV4_MPLS_UNICAST,\n                gosnappi.BgpPrefixStateRequestPrefixFilters.IPV6_MPLS_UNICAST,\n            })\n            res, _ := client.GetStates(req)\n            // MPLS Prefix information can be accessed within the following objects.\n            res.BgpPrefixes().Ipv4MplsUnicastPrefixes()\n            res.BgpPrefixes().Ipv6MplsUnicastPrefixes()\n        ```\n    Note: `gNMI` support will be added in subsequent sprints.\n\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne) & UHD400</i></b>: Support added for sending and withdrawing IPv4 routes from BGPv4 peers using `MP_REACH/UNREACH` NLRIs. [details](https://github.com/open-traffic-generator/models/pull/439)\n    ```go\n        bgpPeer := bgpIntf.\n                Peers().\n                Add().\n                ...\n                .SetTraditionalNlriForIpv4Routes(false) \n    ```\n    Note: Default behavior is to send/withdraw IPv4 routes from BGPv4 peers using `Traditional REACH/UNREACH` NLRI.\n\n### Bug Fix(s):\n<b><i>Ixia-C & UHD400</i></b> Issue is fixed in DHCPv4 client where the client was unable to use the offered address provided by pre-configured DHCPv4 server.\n\n<b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b> Issue is fixed for RSVP-TE where assigned ERO was not being published for `get_states` for `rsvp_lsps[i].ipv4_lsps[j].eros` on the ingress test port.\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n\n## Release  v1.45.0-5\n> 20th February, 2026\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.45.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.45.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.45.0](https://pypi.org/project/snappi/1.45.0)        |\n| gosnappi                      | [1.45.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.45.0)        |\n| keng-controller               | [1.45.0-5](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.504](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.45.0-4](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.45.1](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.45.0-5](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.10](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.10/artifacts.tar)         |\n\n\n### Release Feature(s):\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for enabling and fetching `data-integrity` port statistics in `set_config` and `get_metrics`. [details](https://github.com/open-traffic-generator/models/pull/454)\n    - To configure enable `data-integrity` at global level.\n    ```go\n        cfg.Options().PortOptions().SetDataIntegrity(true)\n    ```\n    - to fetch `data-integrity` metrics use the following snippet. \n        ```go\n            req := gosnappi.NewMetricsRequest()\n            reqPort := req.Port()\n            reqPort.SetPortNames([]string{\"port1\", \"port2\"})\n            res, err := client.GetMetrics(req)\n        ```\n        - If `data-integrity` is enabled, new object called `data-integrity` will be returned in the `port` metrics which will contain two new fields `total-frames-rx` and `error-frames-rx`.\n\n    - gNMI support [details](https://github.com/open-traffic-generator/models-yang/pull/51):\n        ```\n            ports/port[name=*]/state/data-integrity\n        ```\n      Note: `featureprofiles` users needs to sync to latest otherwise retrieval of OTG Port counters/state using gNMI might give incorrect results.\n    \n    Note: Only frames generated from flows will have `data-integrity` enabled.\n\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne) & UHD400</i></b>: Support added for capturing `rx` packets on ports using `pcapng` format.\n    ```go\n        c1 := config.Captures().Add().SetName(\"Capture\")\n        c1.SetPortNames([]string{\"port1\"})\n        c1.SetFormat(\"pcapng\")\n\n    ```\n\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne) & UHD400</i></b>: gNMI support is added for `link-bandwidth` subtype in `transitive_2octet_as_type` under `extended_communities` for BGP/BGP+ routes in `get_states`. [details](https://github.com/open-traffic-generator/models-yang/pull/50)\n    ```\n      bgp-peers/bgp-peer[name=*]/unicast-ipv4-prefixes/unicast-ipv4-prefix/state/extended-community[i]/structured/transitive_2octet_as_type/link_bandwidth_subtype\n\n      bgp-peers/bgp-peer[name=*]/unicast-ipv6-prefixes/unicast-ipv6-prefix/state/extended-community[i]/structured/transitive_2octet_as_type/link_bandwidth_subtype\n    ```\n    Note: `featureprofiles` users needs to sync to latest otherwise retrieval of OTG BGP state using gNMI might give incorrect results.\n\n### Bug Fix(s):\n* <b><i>Ixia-C & UHD400</i></b>: Issue is fixed in BGP/BGP+ where the pod/container would sometimes restart on trying to start BGP for the first time with `ixstack_bgp_accept_check` backtrace present in the protocol-engine logs, especially on slower systems.\n\n* <b><i>Ixia-C & UHD400</i></b>: The default mode of transmission of BGPv4 routes from BGP peers is changed from `MP_REACH/UNREACH` to `Traditional REACH/UNREACH`, to bring it in sync with default behavior of Ixia Chassis & Appliances(Novus, AresOne).\n\n* <b><i>otg-gnmi-server</i></b>: Issue is fixed in `models-yang` due to which error `schema \"lsp-id\": \"192000002001-00-00\" does not match regular expression pattern \"^([0-9a-fA-F]*)$\"` would be seen during gNMI client validation when accessing ISIS `lsp-id` using `/isis-routers/isis-router[name=*]/state/link-state-database/lsp-states/lsps[lsp-id=*][pdu-type=*]/state/lsp-id`.\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n\n## Release  v1.44.0-8\n> 9th February, 2026\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.44.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.44.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.44.0](https://pypi.org/project/snappi/1.44.0)        |\n| gosnappi                      | [1.44.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.44.0)        |\n| keng-controller               | [1.44.0-8](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.501](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.44.0-8](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.44.1](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.44.0-8](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.10](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.10/artifacts.tar)         |\n\n\n### Release Feature(s):\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne) & UHD400</i></b>: Support added for `link_bandwidth_subtype` in `transitive_2octet_as_type` under `extended_communities` for BGP/BGP+ routes in `set_config` and `get_states`. [details](https://github.com/open-traffic-generator/models/pull/455)\n    - To configure:\n        ```go\n            ext_comm := route.ExtendedCommunities().Add()\n            ext_comm.Transitive2OctetAsType().LinkBandwidthSubtype().\n                            SetGlobal2ByteAs(peer.AsNumber()).\n                            SetBandwidth(10000.0)\n        ```\n    - To fetch:\n        ```go\n            req := gosnappi.NewStatesRequest()\n            req.BgpPrefixes().SetBgpPeerNames(peerNames)\n            res, err := client.GetStates(req)\n            if err != nil {\n                return nil, err\n            }\n            \n            learnedRoutes := res.BgpPrefixes()\n            liFirstPeer := actualBGPv4Prefix.Items()[0]\n            route := liFirstPeer.Ipv4UnicastPrefixes().Items()[0]\n            extComm := route.ExtendedCommunities().Items()[0]\n            if ( extComm.Structured().Transitive2OctetAsType().LinkBandwidthSubtype().Bandwidth()!= 1000.0 ||\n                    extComm.Structured().Transitive2OctetAsType().LinkBandwidthSubtype().Global2ByteAs() != 65000){\n                    t.Fatal(\"Bandwidth value / AS value not as expected.\")\n            }\n        ```\n    Note: gNMI support will be added in the subsequent sprint once `ondatra` incorporates latest [`models-yang`](https://github.com/open-traffic-generator/models-yang/pull/50).\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for auto detection of port left in dirty state by other user and automatic reboot during `set_config`.\n \n\n### Bug Fix(s):\n* <b><i>otg-gnmi-server</i></b>: Issue is fixed in `models-yang` due to which error `validation failed: /device/flows/flow/tagged-metrics/tagged-metric/state/tags/tag-value/value-as-hex: schema \"value-as-hex\": \"0x02\" does not match regular expression pattern \"^([0-9a-fA-F]*)$\"` would be seen during gNMI client validation for tagged metrics.\n\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne) & UHD400</i></b>: Issue is fixed where incorrect packet template related to ICMPv6 over IPv4 and ICMPv4 over IPv6 was incorrectly accepted by the controller, resulting in incorrect behavior including `context deadline exceeded` error. Instead proper error will now be returned on `set_config` and only valid configurations of `icmp` over `ipv4` and `icmpv6` over `ipv6` will be accepted.\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where in certain scenarios the time taken for `set_config` API was seen to be increasing for large number of iterations.\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n## Release  v1.43.0-7\n> 29th January, 2026\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.43.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.43.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.43.0](https://pypi.org/project/snappi/1.43.0)        |\n| gosnappi                      | [1.43.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.43.0)        |\n| keng-controller               | [1.43.0-7](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.494](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.43.0-3](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.43.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.43.0-7](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.10](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.10/artifacts.tar)         |\n\n\n### Release Feature(s):\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `reboot` support is added for port in `set_control_action`.\n    ```go\n        // port reboot action with empty port-names - to reboot all ports in the otg configuration\n        ca1 := gosnappi.NewControlAction()\n        ca1.Port().Reboot()\n        result, err := client.Api().SetControlAction(ca1)\n\n        // port reboot action with specific port-names - to reboot specific ports in the otg configuration\n        ca2 := gosnappi.NewControlAction()\n        ca2.Port().Reboot().SetPortNames([]string{\"port1\", \"port2\"})\n        result, err := client.Api().SetControlAction(ca2)\n    ```\n    - same could be achieved using `curl`/`Rest Api` after a successful `set_config` operation,\n        ```bash\n            curl -k -X POST -H \"Content-Type: application/json\" --data-binary \"@rebootports.json\" https://<controller-ip>:8443/control/action\n\n            // port reboot action with empty port-names - to reboot all ports in the otg configuration\n            rebootports.json:\n            {\n                \"choice\": \"port\",\n                \"port\": {\n                    \"choice\": \"reboot\"\n                }\n            }\n\n            // port reboot action with specific port-names - to reboot specific ports in the otg configuration\n            rebootports.json:\n            {\n                \"choice\": \"port\",\n                \"port\": {\n                    \"choice\": \"reboot\",\n                    \"reboot\":{\n                        \"port_names\": [\"port1\", \"port2\"]\n                    }\n                }\n            }\n        ```\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n## Release  v1.42.1-4\n> 22nd December, 2025\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.42.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.42.1/artifacts/openapi.yaml)         |\n| snappi                        | [1.42.1](https://pypi.org/project/snappi/1.42.1)        |\n| gosnappi                      | [1.42.1](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.42.1)        |\n| keng-controller               | [1.42.1-4](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.491](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.42.1-2](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.42.5](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.42.1-4](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.10](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.10/artifacts.tar)         |\n\n\n### Release Feature(s):\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `ping` support is added for IPv4/v6 protocol in `set_control_action`.\n    ```go\n        // IPv4 Ping\n        ca := gosnappi.NewControlAction()\n        pa := ca.Protocol().Ipv4().Ping()\n        // If the requests list is not provided, by default ping will be invoked for all IPv4 and IPv4 Loopback interfaces in the current configuration.\n        // requests is list of local IPv4 interface name + Destination IPv4 tuple\n        for _, req := range requests {\n            pingReq := gosnappi.NewActionProtocolIpv4PingRequest().SetSrcName(req.SrcName).SetDstIp(req.DstIp)\n            pa.Requests().Append(pingReq)\n        }\n\n        result, err := client.Api().SetControlAction(ca)\n\n        // process responses\n        pingResponseItems := result.Response().Protocol().Ipv4().​Ping().Responses().Items()\n        for _, actM := range pingResponseItems {\n            t.Logf(\"%v  %v : %v\", actM.SrcName(), actM.DstIp(), actM.Result()) // Where Result is success or failure.\n        }\n\n        // IPv6 Ping\n        ca := gosnappi.NewControlAction()\n        pa := ca.Protocol().Ipv6().Ping()\n        // If the requests list is not provided, by default ping will be invoked for all IPv6 and IPv6 Loopback interfaces in the current configuration.\n        // requests is list of local IPv6 interface name + Destination IPv6 tuple\n        for _, req := range requests {\n            pingReq := gosnappi.NewActionProtocolIpv6PingRequest().SetSrcName(req.SrcName).SetDstIp(req.DstIp)\n            pa.Requests().Append(pingReq)\n        }\n\n        // Result processing is similar to IPv4 above.\n    ```\n    - using `curl`/`Rest Api`,\n        ```bash\n            curl -k -X POST -H \"Content-Type: application/json\" --data-binary \"@ping.json\" https://<controller-ip>:8443/control/action\n\n            cat ping.json\n            {\n                \"choice\": \"protocol\",\n                    \"protocol\": {\n                        \"choice\": \"ipv4\",\n                        \"ipv4\": {\n                            \"choice\": \"ping\"\n                    }\n                }\n            }\n        ```\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support of Ingress Flow tracking is added for any combination of supported fields with `metric_tags` up to a maximum combined tracking bits of 12, which includes flow tracking as well.\n\n    ```go\n        flow := cfg.Flow().Add()​\n        flow.Packet().Add().Ethernet()​\n        ipv4 := flow.Packet().Add().Ipv4()​\n        ipv4.Src().MetricTags().Add().SetName(\"src\").SetLength(32)​ // Currently the maximum length of the field being tracked must be provided.\n        ipv4.Dst().MetricTags().Add().SetName(\"dst\").SetLength(32) // Ingress tracking for partial bits in a field is not supported.\n    ```\n    - User can set `get_metrics.flow.tagged_metrics.include=false` not to include `tagged_metrics` in the `flow_metrics` response.\n    - Specific `tagged_metrics` can be fetched by setting `get_metrics.flow.tagged_metrics.filters[i].name`.\n    - Support is available in gNMI to fetch the drill-down statistics for ingress tracking as follows. [details](https://github.com/open-traffic-generator/models-yang/blob/main/artifacts/open-traffic-generator-flow.txt):\n        ```\n            1. Flow level metrics + Tagged Metrics:\n                example path: \"flows/flow[name=f1]“\n            2. Only Tagged metrics \n                example path: \"flows/flow[name=f1]/tagged-metrics“\n            3. Filtered Tagged metrics: \n                example path: \"flows/flow[name=f1]/tagged-metrics/tagged-metric[name-value-pairs=flow_ipv6_dst=0x2]”\n        ```\n\n    Note: Ingress and Egress tracking together, is currently not supported.\n\n### Bug Fix(s):\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne) & UHD400</i></b>: Issue is fixed where context deadline was being seen intermittently for large ISIS configurations especially with Simulated Topology for repeated `set_config`, `set_control_state.protocol.start/stop` actions, due to port crashes while processing ISIS Hellos.\n\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n\n## Release  v1.42.0-4\n> 8th December, 2025\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.42.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.42.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.42.0](https://pypi.org/project/snappi/1.42.0)        |\n| gosnappi                      | [1.42.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.42.0)        |\n| keng-controller               | [1.42.0-4](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.488](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.42.0-4](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.42.4](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.42.0-4](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.10](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.10/artifacts.tar)         |\n\n\n### Release Feature(s):\n* <b><i>Ixia-C, UHD400 & Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for BGP Monitoring Protocol (BMP). [details](https://github.com/open-traffic-generator/models/pull/427)\n    ```go\n        p1 := config.Ports().Add().SetName(\"p1\").SetLocation(\"...\")\n        device := config.Devices().Add().SetName(\"p1.dev1\")\n        ...\n        bmpIntf := device.Bmp().Ipv4Interfaces().Add()\n        bmpIntf.SetIpv4Name(\"p1.dev1.eth1.ipv4\")\n\n        bmpServer := bmpIntf.Servers().Add()\n        bmpServer.SetName(device.Name()+\".bmp\")\n        bmpServer.SetClientIp(\"1.1.1.1\")\n        // To control which TCP port on which to accept requests from DUT BMP Client.\n        bmpServer.Connection().Passive().SetListenPort(10123)\n\n        //To store all routes\n        //bmpServer.PrefixStorage().Ipv4Unicast().Store()\n\n        //Store specifically needed routes\n        discard := bmpServer.PrefixStorage().Ipv4Unicast().Discard()\n        discard.Exceptions().Add().\n                SetIpv4Prefix(\"172.16.0.0\").\n                SetPrefixLength(16)\n\n        //Store all IPv6 prefixes\n        // bmpServer.PrefixStorage().Ipv6Unicast().Store()\n\n        //Store subset of IPv6 prefixes\n        v6discard := bmpServer.PrefixStorage().Ipv6Unicast().Discard()\n        v6discard.Exceptions().Add().\n                SetIpv6Prefix(\"172:16:0:1::\").\n                SetPrefixLength(64)\n            \n        //To get BMP Metrics: \n        reqMetrics := gosnappi.NewMetricsRequest()\n        reqMetrics.BmpServer()\n        bmpMetrics, err := client.Api().GetMetrics(reqMetrics)\n        ...\n\n        // To get BMP State info ( the per peer stats/prefixes information sent by BMP Client) \n        reqStates := gosnappi.NewStatesRequest()\n        reqStates.BmpServers()\n        bmpState, err := client.Api().GetStates(reqStates)\n    ```\n    -  gNMI support added to fetch metics and states of BGP Monitoring Protocol (BMP) [models-yang](https://github.com/open-traffic-generator/models-yang/blob/main/artifacts/open-traffic-generator-bmp-server.txt).\n\n        ```gNMI\n            // metrics\n            bmp-servers/bmp-server[name=*]/state/counters\n            \n            // states\n            bmp-servers/bmp-server[name=*]/state/peer-state-database/peers\n        ```\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n\n## Release  v1.41.0-8\n> 24th November, 2025\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.41.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.41.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.41.0](https://pypi.org/project/snappi/1.41.0)        |\n| gosnappi                      | [1.41.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.41.0)        |\n| keng-controller               | [1.41.0-8](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.486](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.41.0-5](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.41.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.41.0-8](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.10](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.10/artifacts.tar)         |\n\n\n### Bug Fix(s):\n* <b><i>Ixia Chassis & Appliances(Novus)</i></b>: Issue is fixed where if protocols were restarted followed by restart of previously configured flows , flow packets were not being transmitted on the wire and flow `tx` metrics stayed at `0`. This issue is specific to `Novus` load module.\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>:  Issue is fixed where for certain cases multiple consecutive API calls would fail and result in `'potential deadlock'` related messages in `keng-layer23-hw-server` logs. Now if `keng-layer23-hw-server` is stuck & busy on processing last API, future API calls will immediately fail with proper error instead of earlier `'context deadline'` error after timeout of 10 min.\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n\n## Release  v1.41.0-1\n> 11th November, 2025\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.41.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.41.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.41.0](https://pypi.org/project/snappi/1.41.0)        |\n| gosnappi                      | [1.41.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.41.0)        |\n| keng-controller               | [1.41.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.483](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.41.0-2](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.41.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.41.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.10](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.10/artifacts.tar)         |\n\n\n### Release Features(s):\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne) & UHD400</i></b>: Support added for BGP/BGP+ labeled IPv4/v6 unicast routes.\n    - To configure single label.\n    ```go\n        peer.Capability().SetIpv4Mpls(true).SetIpv6Mpls(true)​\n        peerRoutes := peer.​\n            V4Routes().Add().SetName(\"peer.routes\")​\n        peerRoutes.Addresses().Add().SetAddress(\"20.20.20.1\").SetPrefix(32).SetCount(2)\n\n        peerRouteLabel := peerRoutes.MplsLabels()​\n        peerRouteLabel.Labels().Add().SetStart(10000).SetStep(10)\n        // This will result in prefix 20.20.20.1/32 to be sent with label 10000 and\n        // prefix 20.20.20.2/32 to be sent with label 10010\n    ```\n    - To configure multiple labels.\n    ```go\n        multiMpls := peer.Capability().MultipleIpv4Mpls()​\n        multiMpls.SetLabelCount(2)\n        peerRoutes := peer.​\n            V4Routes().Add().SetName(\"peer.routes\")​\n        peerRoutes.Addresses().Add().SetAddress(\"20.20.20.1\").SetPrefix(32).SetCount(2)\n\n        peerRouteLabels := peerRoutes.MplsLabels()​\n        peerRouteLabels.Labels().Add().SetStart(10000)​.SetStep(10)\n        peerRouteLabels.Labels().Add().SetStart(20000).SetStep(10)\n        // This will result in prefix 20.20.20.1/32 to be sent with label stack 10000, 20000 and\n        // prefix 20.20.20.2/32 to be sent with label stack 10010, 20020\n    ```\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n## Release  v1.40.0-15\n> 24th October, 2025\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.40.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.40.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.40.3](https://pypi.org/project/snappi/1.40.3)        |\n| gosnappi                      | [1.40.3](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.40.3)        |\n| keng-controller               | [1.40.0-15](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.482](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.40.0-5](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.40.3](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.40.0-15](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.10](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.10/artifacts.tar)         |\n\n***Note***\n\n`gosnappi` will support go version >=v1.24 and `snappi` will support python version from `v3.8` to `v3.12`.\n\n### Release Features(s):\n* <b><i>UHD400</i></b>: Support added for capturing packets on multiple test ports.\n    ```go\n        // Enabling capture ports​\n        enableCapture := config.Captures().Add().SetName(\"Capture\")​\n        enableCapture.SetPortNames([]string{\"p1\", \"p2\", \"p3\", \"p4\"})​\n\n        // startCapture on enabled ports​\n        for _, capture := range gosnappi.Config.Captures().Items() {​\n            capturePorts = append(capturePorts, capture.PortNames()...)​\n        }​\n        ​\n        s := gosnappi.NewControlState()​\n        s.Port().Capture().SetPortNames(portNames).SetState(gosnappi.StatePortCaptureState.START)​\n        client.Api().SetControlState(s, \"StartCapture\")​\n        ​\n        // Retrieve Capture​\n        captureFileObj, err := os.Create(“capture_test.pcap”)​\n        req := gosnappi.NewCaptureRequest().SetPortName(portName)​\n        captureBytes, err := client.Api().GetCapture(req)​\n        captureFileObj.Write(captureBytes)​\n        pcap.OpenOffline(outCaptureFile)​\n    ```​\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>:Support added for extended IPv6 routing header type 4(IPv6 SR) as Data traffic.\n    ```go\n        // go-snappi snippet​\n        f1Eth := f1.Packet().Add().Ethernet()​\n        ...\n        f1Ip := f1.Packet().Add().Ipv6()​\n        ...​\n\n        // IPv6 SR Header ​\n        f1ExtHdr := f1.Packet().Add().Ipv6ExtensionHeader()​\n        f1SR := f1ExtHdr.Routing().SegmentRouting()​\n        f1SR.SegmentsLeft().SetValue(2)​\n        f1SR.LastEntry().SetValue(2)​\n        f1SegList := f1SR.SegmentList()​\n        f1SegList.Add().Segment().SetValue(\"5000:0:0:1:0:0:0:1\")​\n        f1SegList.Add().Segment().SetValue(\"1000:0:0:1:0:0:0:1\")​\n        ...\n    ```\n\n### Bug Fix(s): \n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where for certain scaled ISIS simulated topology configs `\"context deadline exceeded\"` error was being encountered on `set_config`.\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n## Release  v1.40.0-1\n> 26th September, 2025\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.40.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.40.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.40.0](https://pypi.org/project/snappi/1.40.0)        |\n| gosnappi                      | [1.40.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.40.0)        |\n| keng-controller               | [1.40.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.482](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.40.0-2](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.40.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.40.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.8](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.8/artifacts.tar)         |\n\n\n### Release Features(s):\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for `LACP` header in flow. [details](https://github.com/open-traffic-generator/models/pull/435)\n    ```go\n        f1Eth := flow.Packet().Add().Ethernet()\n        f1Eth.Src().SetValue(\"00:00:00:00:00:AA\")\n        f1Eth.Dst().SetValue(\"01:80:C2:00:00:02\")\n\n        f1Lacp := flow.Packet().Add().Lacp()\n        f1Lacpdu := f1Lacp.Lacpdu()\n\n        f1LacpActor := f1Lacpdu.Actor()\n        f1LacpActor.SystemPriority().SetValue(32768)\n        f1LacpActor.SystemId().SetValue(\"00:00:00:00:00:AA\")\n        f1LacpActor.Key().SetValue(13)\n        f1LacpActor.PortPriority().SetValue(32768)\n        f1LacpActor.PortNumber().SetValue(25)\n        f1LacpActor.ActorState().Activity.SetValue(1)\n        f1LacpActor.ActorState().Aggregation.SetValue(1)\n        f1LacpActor.ActorState().Collecting.SetValue(1)\n\n        f1LacpPartner := f1Lacpdu.Partner()\n        f1LacpPartner.SystemPriority().SetValue(32768)\n        f1LacpPartner.SystemId().SetValue(\"00:0c:29:1e:a2:6d\")\n        f1LacpPartner.Key().SetValue(1)\n        f1LacpPartner.PortPriority().SetValue(32768)\n        f1LacpPartner.PortNumber().SetValue(1)\n        f1LacpPartner.PartnerState().Distributing.SetValue(1)  \n    ```\n\n    Note: `flows[i].metrics.enable` should be set to `false`, to ensure that instrumentation data is not appended to the `LACP` PDU being transmitted on the wire.\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for fetching user specified packet slice from captured packets. [details](https://github.com/open-traffic-generator/models/pull/436)\n    ```go\n        // Capture Slice: get N number of packets starting from Mth packet \n        captureRequest = gosnappi.NewCaptureRequest()\n        captureRequest.SetPortName(\"p1\")\n        captureRequest.Packets().Slice().Initial().SetStart(10).SetCount(50)\n    ```\n\n### Bug Fix(s): \n* <b><i>Ixia-C, UHD400</i></b>: Issue is fixed where if `devices[i].bgp.ipv4/6_interfaces[j].peers[k].capability.route_refresh` was explicitly set to `false`, the IPv6 capability would not be advertised in the BGP Open message, resulting in IPv6 routes not getting installed in this specific scenario.\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n## Release  v1.35.0-14\n> 12th September, 2025\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.35.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.35.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.35.0](https://pypi.org/project/snappi/1.35.0)        |\n| gosnappi                      | [1.35.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.35.0)        |\n| keng-controller               | [1.35.0-14](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.466](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.35.0-5](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.35.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.35.0-14](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.8](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.8/artifacts.tar)         |\n\n\n### Release Features(s):\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne) & UHD400</i></b>: Support added to set `flows[i].packet.payload` as `fixed`, `increment_byte`, `decrement_byte`, `increment_word` & `decrement_word`. [details](https://github.com/open-traffic-generator/models/pull/432)\n\n    ```go\n        flow := config.Flows().Add()\n        f1Payload := flow.Payload()\n        f1Payload.SetFixed(gosnappi.NewFlowPayloadFixed().SetPattern(\"aabbccdd\").SetRepeat(false))\n        //increment Payload\n        f1Payload.IncrementByte()\n        f1Payload.IncrementWord()\n        //Decrement Payload\n        f1Payload.DecrementByte()\n        f1Payload.DecrementWord() \n    ```\n\n    Note: If `flows[i].metrics.enable` is set to `true`, some part of the payload will be overwritten with instrumentation data used for tracking the flow.\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Changes in version compatibility check for IxOS installed on chassis.\n    - `set_config` will now return a deprecation warning, if ports are present in the configuration connected to chassis with IxOS version `< 10.00EA`. Support for `9.xx` IxOS versions is planned to be removed in near future.\n    - Support is now added for `11.10.x` and no warnings will be returned any longer when connected to chassis with up-to IxOS version `11.10.x`.\n\n\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne) & UHD400</i></b>: Support added in `keng-controller` to store last 10 configurations in compressed format(*.tar.gz) at location `~/logs/configs` within the container.\n    - Extracted configs will be in `*.pb` or `*pbtxt` (if streaming mode is enabled) format.\n    - Number of last `n` configs can be controlled by a commandline option `-archive-configs=<count>` if default value of 10 configs needs to be overridden.\n    - To extract  `gosnappi`/`json` config from the extracted config please use the following snippet.\n        ```go\n            data, _ := os.ReadFile(\"Set_Config_11_4th_JAN_02_15_27PM_UTC.08265.pb\")\n            pb := otg.Config{}\n            proto.Unmarshal(data, &pb)\n            otgCfg := gosnappi.NewConfig()\n            otgCfg, _ = otgCfg.Unmarshal().FromProto(&pb)\n            jsonCfg, _ := otgCfg.Marshal().ToJson()\n            os.WriteFile(\"config.json\", []byte(jsonCfg), 0644)\n        ```\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n## Release  v1.34.0-1 (Latest)\n> 1st September, 2025\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.34.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.34.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.34.1](https://pypi.org/project/snappi/1.34.1)        |\n| gosnappi                      | [1.34.1](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.34.1)        |\n| keng-controller               | [1.34.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.465](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.34.0-3](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.34.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.34.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.8](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.8/artifacts.tar)         |\n\n\n### Release Features(s):\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne) & UHD400</i></b>: Support added for ISIS Graceful Restart(both helper & restarting roles) in planned Mode[RFC 8706](https://datatracker.ietf.org/doc/html/rfc8706#section-3.2.3). [details](https://github.com/open-traffic-generator/models/pull/431)\n    - To trigger planned Graceful Restart,\n        ```go\n            grAction := gosnappi.NewControlAction()\n            isisRestart := grAction.Protocol().Isis().InitiateGracefulRestart()\n            isisRestart.SetRouterNames([]string{\"isisRtr\"})\n            planned := isisRestart.Planned() \n            planned.SetRestartTime(30)\n            planned.SetRestartAfter(20)\n\n            if _, err := gosnappi.NewApi().SetControlAction(grAction); err != nil {\n                t.Fatal(err)\n            }\n            \n        ```\n\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n## Release  v1.33.0-34 \n> 20th August, 2025\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.33.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.33.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.33.4](https://pypi.org/project/snappi/1.33.4)        |\n| gosnappi                      | [1.33.4](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.33.4)        |\n| keng-controller               | [1.33.0-34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.462](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.33.0-11](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.33.7](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.33.0-34](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.8](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.8/artifacts.tar)         |\n\n\n### Release Features(s):\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne) & UHD400</i></b>: Support added for ISIS Graceful Restart(both helper & restarting roles) in Unplanned Mode[RFC 8706]. [details](https://github.com/open-traffic-generator/models/pull/423)\n    - To configure Graceful Restart,\n        ```go\n            isisRtr.GracefulRestart().SetHelperMode(true)\n        ```\n    - To trigger Unplanned Graceful Restart,\n        ```go\n            grAction := gosnappi.NewControlAction()\n            isisRestart := grAction.Protocol()\n                .Isis().InitiateRestart()\n            isisRestart.SetRouterNames([]string{\"isisRtr\"})\n                .Unplanned()\n                .SetHoldingTime(30)\n                .SetRestartAfter(20)\n\n            if _, err := gosnappi.NewApi().SetControlAction(grAction); err != nil {\n                t.Fatal(err)\n            }\n        ```\n    - New metrics exposed in ISIS `get_metrics` are `gr_initiated`,`gr_succeeded`,`neighbor_gr_initiated`,`neighbor_gr_succeeded`.\n    - New `get_states` option `isis_adjacencies` is introduced to access adjacency information per ISIS neighbor including received Graceful Restart TLV.\n\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne) & UHD400</i></b>: gNMI support added to fetch `gr-initiated`,`gr-succeeded`,`neighbor-gr-initiated`,`neighbor-gr_succeeded` and `adjacencies` for ISIS.\n    ```gNMI\n    // To fetch ISIS gr-initiated,gr-succeeded,neighbor-gr-initiated,neighbor-gr_succeeded counters\n    isis-routers/isis-router[name=*]/state/counters\n\n    // To fetch ISIS adjacencies state\n    isis-routers/isis-router[name=*]/state/adjacencies/state/adjacencies[neighbor-system-id=*][interface-name=*]/state\n    ```\n\n    Note: `featureprofiles` users needs to sync to latest otherwise retrieval of OTG ISIS counters/state using gNMI might give incorrect results.\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Version compatibility check added for IxOS installed on chassis.\n    - `set_config` will now return error, if ports are present in the configuration connected to chassis with IxOS version `< 9.20EA`.\n    - `set_config` will now return warning, if ports are present in the configuration connected to chassis with IxOS version `> 10.80EA`.\n\n* <b><i>Snappi</i></b>: Support added to set `maximum_receive_buffer_size`  and `chunk_size` in `MB` for gRPC streaming API creation.\n    ```py\n        grpc_api = snappi.api(location=\"localhost:40051\",\n                          transport=snappi.Transport.GRPC)\n\n        grpc_api.enable_grpc_streaming = True\n        grpc_api.chunk_size = 2 # 2 MB instead of default 4 MB\n\n        grpc_api.maximum_receive_buffer_size = 10 # 10 MB instead of default 4 MB\n        \n    ```\n    Note: `gosnappi` already supports both feature.\n\n### Bug Fix(s):\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where prefix of “0x” was provided in value or mask fields for capture filter was resulting in incorrect capture filter getting set.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where input value & mask for capture filter were not working as expected for some fields which were not byte aligned (example: `vlan.cfi`).\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where the value in the capture filter was provided in short form without the leading Zero(s), then value was incorrectly set during filter matching. Example a value of \"1\" was being interpreted as \"0x10\" instead of expected \"0x01\" for a 1-byte field.\n* <b><i>Ixia-C</i></b>: Issue is fixed where prefix of “0x” was provided in value or mask fields for capture filter was resulting in runtime error in set_config. \n* <b><i>Ixia-C</i></b>: Issue is fixed where capture filter for `vlan.protocol` field was not working.\n\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n## Release  v1.33.0-1\n> 18th July, 2025\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.33.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.33.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.33.0](https://pypi.org/project/snappi/1.33.0)        |\n| gosnappi                      | [1.33.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.33.0)        |\n| keng-controller               | [1.33.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.461](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.33.0-3](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.33.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.33.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.8](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.8/artifacts.tar)         |\n\n\n### Release Features(s):\n* <b><i>Ixia-C & UHD400</i></b>: Support added for ISIS Graceful Restart(both helper & restarting roles) in Unplanned Mode[RFC 8706]. [details](https://github.com/open-traffic-generator/models/pull/423)\n    - To configure Graceful Restart,\n        ```go\n            isisRtr.GracefulRestart().SetHelperMode(true)\n        ```\n    - To trigger Unplanned Graceful Restart,\n        ```go\n            grAction := gosnappi.NewControlAction()\n            isisRestart := grAction.Protocol()\n                .Isis().InitiateRestart()\n            isisRestart.SetRouterNames([]string{\"isisRtr\"})\n                .Unplanned()\n                .SetHoldingTime(30)\n                .SetRestartAfter(20)\n\n            if _, err := gosnappi.NewApi().SetControlAction(grAction); err != nil {\n                t.Fatal(err)\n            }\n        ```\n    - New metrics exposed in ISIS `get_metrics` are `gr_initiated`,`gr_succeeded`,`neighbor_gr_initiated`,`neighbor_gr_succeeded`.\n    - New `get_states` option `isis_adjacencies` is introduced to access adjacency information per ISIS neighbor including received Graceful Restart TLV.\n    \n    Note: gNMI support will be available in subsequent sprint.\n\n* <b><i>UHD400</i></b>:Support added for adding/deleting traffic flows without having to restart protocol separately from protocols.\n    - Append Config​\n    ```go\n        ca := gosnappi.NewConfigAppend()​\n        flow := ca.ConfigAppendList().Add().Flows().Add()​\n        ... // add more flows and associated properties\n        client.AppendConfig(ca)\n    ```\n    - Delete Config\n    ```go\n        cd := gosnappi.NewConfigDelete()​\n        flowsToDelete := []string{}\n        flowsToDelete := append(flowsToDelete, flowName)\n        ...​ // add list of flow names to be deleted\n        cd.ConfigDeleteList().Add().SetFlows(flowsToDelete)​\n        client.DeleteConfig(cd)​\n    ```\n\n### Bug Fix(s):\n* <b><i>Ixia-C</i></b>: Issue is fixed where, if Tx and Rx endpoints of a flow was terminating in different ports of a single multinic pod/container with `auto` dest mac enabled, intermittently <i>\"error starting tx port ...: unsuccessful Response: MAC address resolution failed for IP...\"</i> was being seen during start transmit despite proper ARP/ND resolution.\n\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n## Release  v1.32.0-1\n> 1st July, 2025\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.32.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.32.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.32.0](https://pypi.org/project/snappi/1.32.0)        |\n| gosnappi                      | [1.32.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.32.0)        |\n| keng-controller               | [1.32.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.457](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.32.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.32.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.32.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.7](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.7/artifacts.tar)         |\n\n\n### Release Features(s):\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne), UHD400</i></b>:Support added to enable communication between snappi/gosnappi client and `keng-controller` in streaming mode.\n    - User needs to enable grpc streaming while creating connection with `keng-controller`.\n    ```go\n    api := gosnappi.NewApi()​\n    grpcTransport := api.NewGrpcTransport().​\n    SetClientConnection(conn).​\n    SetRequestTimeout(30 * time.Second)​\n    grpcTransport.SetLocation(addr).EnableGrpcStreaming().SetStreamChunkSize(100)​ // max 100 MB per chunk\n    ```\n    Note: \n        - If `StreamChunkSize` is not explicitly specified in streaming mode, default chunk size of 4 MB will be used.\n        - By default client will communicate in non-streaming mode as earlier.\n\n\n\n### Bug Fix(s):\n* <b><i>Ixia-C, UHD400</i></b>: Issue is fixed where, for iBGP sessions, if `as-path` segments were explicitly specified for a route, the local AS was being incorrectly prepended to the transmitted as-path, resulting in the DUT dropping the route.\n\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n## Release  v1.31.0-6\n> 14th June, 2025\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.31.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.31.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.31.0](https://pypi.org/project/snappi/1.31.0)        |\n| gosnappi                      | [1.31.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.31.0)        |\n| keng-controller               | [1.31.0-6](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.453](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.31.0-4](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.31.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.31.0-6](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.7](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.7/artifacts.tar)         |\n\n\n### Release Features(s):\n* <b><i>Ixia-C</i></b>:Support added for adding/deleting traffic flows without having to restart protocol separately from protocols.\n    - Append Config​\n    ```go\n        ca := gosnappi.NewConfigAppend()​\n        flow := ca.ConfigAppendList().Add().Flows().Add()​\n        ... // add more flows and associated properties\n        client.AppendConfig(ca)\n    ```\n    - Delete Config\n    ```go\n        cd := gosnappi.NewConfigDelete()​\n        flowsToDelete := []string{}\n        flowsToDelete := append(flowsToDelete, flowName)\n        ...​ // add list of flow names to be deleted\n        cd.ConfigDeleteList().Add().SetFlows(flowsToDelete)​\n        client.DeleteConfig(cd)​\n    ```\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n## Release  v1.31.0-3\n> 2nd June, 2025\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.31.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.31.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.31.0](https://pypi.org/project/snappi/1.31.0)        |\n| gosnappi                      | [1.31.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.31.0)        |\n| keng-controller               | [1.31.0-3](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.453](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.31.0-3](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.31.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.31.0-3](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.7](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.7/artifacts.tar)         |\n\n\n### Release Features(s):\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>:Support added for adding/deleting traffic flows without having to restart protocol separately from protocols.\n    - Append Config​\n    ```go\n        ca := gosnappi.NewConfigAppend()​\n        flow := ca.ConfigAppendList().Add().Flows().Add()​\n        ... // add more flows and associated properties\n        client.AppendConfig(ca)\n    ```\n    - Delete Config\n    ```go\n        cd := gosnappi.NewConfigDelete()​\n        flowsToDelete := []string{}\n        flowsToDelete := append(flowsToDelete, flowName)\n        ...​ // add list of flow names to be deleted\n        cd.ConfigDeleteList().Add().SetFlows(flowsToDelete)​\n        client.DeleteConfig(cd)​\n    ```\n\n### Bug Fix(s):\n* <b><i>Ixia-C, UHD400</i></b>: Issue is fixed where multi-port LAG/LACP configurations would result in context deadline failures for \n`set_config` API and rapid memory consumption increase for the protocol-engine container in the test pod. This would also result in huge amount of logs to be generated causing docker logs output to be overwritten.\n* <b><i>Ixia-C, UHD400</i></b>: Issue is fixed where `set_control_state.protocol.all.state=start` was failing for LLDP in multinic port setup with error similar to <i>\"Protocol service for port \\\"port2\\\" is not registered\".</i>\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where `set_control_state.traffic.flow_transmit.state=stop` was resulting in the flow not getting stopped properly when flow names containing \".\" were explicitly specified.\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.28.0-45\n> 19th May, 2025\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.28.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.28.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.28.2](https://pypi.org/project/snappi/1.28.2)        |\n| gosnappi                      | [1.28.2](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.28.2)        |\n| keng-controller               | [1.28.0-45](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.450](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.28.0-14](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.28.4](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.28.0-45](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.7](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.7/artifacts.tar)         |\n\n\n### Note: \nUsers of `featureprofiles` must update to latest where `ondatra` is updated to `v0.9.1`, otherwise erroneous behavior is possible when fetching flow stats using gNMI due to addition of `in/out-l1-rate`.\n\n### Release Features(s):\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne), UHD400</i></b>:Support added for ISIS Simulated Topology Secondary Link.\n    ```go\n        ethernet.Connection().SimulatedLink().​\n            SetLinkType(gosnappi.EthernetSimulatedLinkLinkType.SECONDARY).​\n            SetRemoteSimulatedLink(remoteSecondaryEthName)​\n    ```\n    - Please refer to previous release note for more details on Simulated link configuration.\n* <b><i>UHD400</i></b>: Egress tracking is now supported for MPLS inner header fields when encapsulated inside UDP/TCP.\n  ```go\n      //egress tracking\n      f1.EgressPacket().Add().Ethernet()\n      f1.EgressPacket().Add().Ipv4()\n      f1.EgressPacket().Add().Udp()\n      f1.EgressPacket().Add().Mpls()\n      mplsLabelTracking := f1.EgressPacket().Add().Mpls()\n      tr1 := mplsLabelTracking.Label().MetricTags().Add()\n      tr1.SetName(\"MplsLabelEgressTracking\")\n      tr1.SetOffset(17)\n      tr1.SetLength(3)\n  ```\n* <b><i>Ixia-C</i></b>: gNMI support added for `tx/rx_rate_bps` in `flow_metrics`.\n    ```sh\n        # flow Tx rate in bits per second\n        flows/flow[name=*]/state/out-rate\n\n        # flow Rx rate in bits per second\n        flows/flow[name=*]/state/in-rate\n    ```\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: gNMI support added for `tx/rx_l1_rate_bps` in `flow_metrics`.\n    ```sh\n        # flow Tx L1 rate in bits per second\n        flows/flow[name=*]/state/out-l1-rate\n\n        # flow L1 Rx rate in bits per second\n        flows/flow[name=*]/state/in-l1-rate\n    ```\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n## Release  v1.28.0-33\n> 7th May, 2025\n\n### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.28.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.28.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.28.2](https://pypi.org/project/snappi/1.28.2)        |\n| gosnappi                      | [1.28.2](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.28.2)        |\n| keng-controller               | [1.28.0-33](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.448](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.28.0-10](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.28.3](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.28.0-33](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.6](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.6/artifacts.tar)         |\n\n\n### Release Features(s):\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for `tx/rx_rate_bps` in `flow_metrics`.\n\n    ```sh\n        # flow Tx rate in bits per second\n        flows/flow[name=*]/state/out-rate\n\n        # flow Rx rate in bits per second\n        flows/flow[name=*]/state/in-rate\n    ```\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for `tx/rx_l1_rate_bps` in `flow_metrics`.\n    Note: This is not yet supported while fetching flow metrics using gNMI.\n\n* <b><i>UHD400</i></b>:Support added for single MPLS header in flows [Segment Routing, Static MPLS & MPLSoUDPoIPv4].\n    ```go\n        f1Eth := f1.Packet().Add().Ethernet()​\n        ...​\n        f1Mpls := f1.Packet().Add().Mpls()​\n        f1Mpls.Label().SetValue(100)​​​\n    ```\n    Notes:\n        1. UDP checksum is always zero which can result in failure for UDP over IPv6 tunneling use-cases.\n        2. TCP checksum is always zero which can result in failure for tunneling use-cases.\n        3. Egress Tracking on MPLS label header is not supported.\n\n### Bug Fix(s)\n* <b><i>Ixia-C</i></b>: Issue is fixed where MPLS over GRE in flows was resulting in malformed packets to be transmitted.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where OSPFv2 DB Descriptor PDUs were carrying MTU value as zero resulting OSPFv2 sessions to be stuck in ExStart state with certain DUTs.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where flow transmit state wouldn't move to `stopped` unless `flow_transmit.stop` was explicitly executed for fixed duration flows.\n\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n## Release  v1.28.0-6\n> 18th April, 2025\n\n#### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.28.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.28.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.28.2](https://pypi.org/project/snappi/1.28.2)        |\n| gosnappi                      | [1.28.2](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.28.2)        |\n| keng-controller               | [1.28.0-6](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.448](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.28.0-6](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.28.2](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.28.0-6](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.5](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.5/artifacts.tar)         |\n\n\n### Release Features(s):\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for OSPFv3. [details](https://github.com/open-traffic-generator/models/pull/401)\n\n    ```go\n        ospfv3Router := device1.Ospfv3()\n        ospfv3Router.RouterId().SetCustom(\"1.1.1.1\")\n\n        ospfv3RouterInstance := ospfv3Router.Instances().Add().\n                SetName(\"Ospfv3RtrInstance\").\n                SetStoreLsa(true)\n\n        intf := ospfv3RouterInstance.Interfaces().Add().\n                        SetName(\"Ospfv3Intf\").\n                        SetIpv6Name(\"Ipv6Intf1\")\n        intf.Area().SetId(0)\n        intf.NetworkType().PointToPoint()\n\n        ospfv3Route := ospfv3RouterInstance.V6Routes().\n                                Add().\n                                SetName(\"Ospfv3Route1\")\n        ospfv3Route.\n                Addresses().\n                Add().\n                SetAddress(\"11::1\").\n                SetPrefix(64).\n                SetCount(100).\n                SetStep(2)\n    ```\n    - OSPFv3 Learned LSAs can be fetched by the following.\n    ```go\n        req := gosnappi.NewStatesRequest()\n        req.Ospfv3Lsas().SetRouterNames(routerNames)\n        res, err := client.GetStates(req)\n    ```\n    - OSPFv3 metrics can be fetched by the following.\n    ```go\n        req := gosnappi.NewMetricsRequest()\n        reqOspf := req.Ospfv3()\n        reqOspf.SetRouterNames(routerNames)\n    ```\n* <b><i>UHD400, Ixia Chassis & Appliances(Novus, AresOne)</i></b>:Support added for start/stop on specific flows.\n    ```go\n        cs := gosnappi.NewControlState()​\n        cs.Traffic().FlowTransmit().\n            SetState(gosnappi.StateTrafficFlowTransmitState.START/STOP).\n            SetFlowNames([]string{flow1, flow2 .. flowN})​\n    ```\n* <b><i>Ixia-C, UHD400, Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for configuring flows to be transmitted for a fixed duration.\n    ```go\n        flow := config.Flows().Add()\n\t\tflow.Duration().FixedSeconds().SetSeconds(5)\n    ```\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne), UHD400</i></b>: gNMI support added to retrieve some new ISIS TLVs related to ISIS segment routing. [More Details](https://github.com/open-traffic-generator/models-yang/pull/41)\n  - router-capabilities TLV\n  - adjacency-sid sub TLVs in extended-is-reachability\n  - prefix-sid sub TLVs in extended-ipv4-reachability\n  - prefix-sid sub TLVs in ipv6-reachability\n\n  ```gNMI\n      isis-routers/isis-router[name=*]/state/link-state-database\n  ```\n  Note: Please update featureprofiles/ondatra to latest if the setup is upgraded to this build, otherwise gnmi failures might be seen while fetching isis link-state-database.\n* <b><i>snappi</i></b>: Support is added for `grpcio` <= 1.59.5 [earlier supported till <=1.59.0].\n  Note: As of now, we are unable to upgrade to higher version of `grpcio` to continue providing support for python versions 3.6 and 3.7.\n### Bug Fix(s)\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where ISIS `get_states` was returning only one set of learned LSPs for L1+L2 LSP advertisements.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where for certain scenarios `flow_metrics.bytes_tx` was returning incorrect values[same as `bytes_rx`].\n* <b><i>Ixia-C</i></b>: Issue is fixed where the protocol-engine container would restart in certain scenarios, especially when run in bare metal setups with a large number of cores in multi-nic mode, and the test would be run immediately or within a short interval after the container/topology had come up.\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.24.0-15\n> 29th March, 2025\n\n#### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.24.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.24.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.24.0](https://pypi.org/project/snappi/1.24.0)        |\n| gosnappi                      | [1.24.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.24.0)        |\n| keng-controller               | [1.24.0-15](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.443](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.24.0-5](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.24.2](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.24.0-15](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.5](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.5/artifacts.tar)         |\n\n\n# Release Features(s):\n* <b><i>Ixia-C, UHD400, Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for ISIS Segment Routing for  Emulated and Simulated ISIS Routers.\n    - To configure Router Capability with Segment Routing in `devices[i].isis.segment_routing.router_capability` use the following snippet.\n    ```go\n        srCap := rtrCap.SrCapability()​\n        srCap.Flags().SetIpv4Mpls(true).SetIpv6Mpls(true)​\n        srCap.SrgbRanges().Add().SetStartingSid(uint32(srStartingSid)).SetRange(uint32(srRange))​\n    ```\n    - To configure routes with Node-SID or Prefix-SID under `devices[i].isis.v4/6_routes[j].prefix_sids[0]` use the following snippet.\n    ```go\n        isisV4Route.PrefixSids().Add().​\n            SetSidIndex(sidOffset).​\n            SetRFlag(true).​\n            SetNFlag(true).​\n            SetPFlag(true).​\n            SetAlgorithm(1)​\n    ```\n    - To configure Adjacency-SID under `devices[i].isis.interfaces[0].adjacency_sids[j]` use the following snippet.\n    ```go\n        isisInterface.AdjacencySids().Add().​\n\t        SetSidIndex(sidOffset).​\n\t        SetPFlag(true).\n            SetWeight(10)​\n    ```\n    - To configure traffic using Segment Routing MPLS Labels use the following snippet.\n    ```go\n        eth := flow.Packet().Add().Ethernet()​\n        eth.Src().SetValue(ethIntf.Mac())​\n        eth.Dst().Auto()​\n        mpls := flow.Packet().Add().Mpls()​\n        mpls.Label().SetValue(uint32(900010))​ // Set the Segment Routing MPLS Label to which traffic has to be steered.​\n    ```\n    Note: MPLS headers in flows is not yet supported for UHD400.\n\n    - To configure ISIS on simulated routers, please refer to previous release notes.\n\n* <b><i>UHD400</i></b>: Support added to send flows over DHCPv4/6 endpoints.\n  ```go\n    clientToServerFlow := config.Flows().Add()\n    clientToServerFlow.SetName(flowName).\n      TxRx().Device().\n      SetTxNames([]string{\"p1d1dhcpv4_1\"}).\n      SetRxNames([]string{\"p2d1ipv4\"})\n    clientToServerFlowIp := f1.Packet().Add().Ipv4()\n    // will be populated automatically by the DHCP Client with the the dynamically allocated IP.\n    clientToServerFlowIp.Src().Auto().Dhcp()\n    …\n    // will be populated automatically by the DHCP Server with the the dynamically allocated IP to DHCP client \n    serverToClientFlowIp.Dst().Auto().Dhcp()\n  ```\n\n* <b><i>Ixia-C, UHD400, Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added in RSVP-TE Egress emulation to automatically respond to a Path message with Label Recording Desired flag set in Session Attribute with a RRO in the Resv message with corresponding Label Sub Object included.  \n    - User needs to set the following flag `devices[i].rsvp.lsp_ipv4_interfaces[j].p2p_ingress_ipv4_lsps[k].session_attribute.label_recording_desired`.\n\n\n\n### Bug Fix(s)\n* <b><i>UHD400</i></b>: Issue is fixed non default VLAN wiring was not working properly, resulting in ARP/ND failures.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where Label Sub Objects were not being returned correctly for RSVP-TE learned information (`rsvp_lsps[i].rros[k].reported_label`) \n* <b><i>Ixia-C, UHD400</i></b>: Issue is fixed where fetching ISIS learned information containing LSPs with Router Capability without any Segment Routing Sub TLV would result in an error <i>\"grpc: failed to unmarshal the received message: proto: cannot parse invalid wire-format data\"</i> in certain conditions.\n\n\n#### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. \n\n\n## Release  v1.24.0-4\n> 7th March, 2025\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [1.24.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.24.0/artifacts/openapi.yaml) |\n| snappi                     | [1.24.0](https://pypi.org/project/snappi/1.24.0)                                                                                              |\n| gosnappi                   | [1.24.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.24.0)                                                        |\n| keng-controller            | [1.24.0-4](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                         |\n| ixia-c-traffic-engine      | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                  |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.438](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [1.24.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.24.2](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                           |\n| ixia-c-one                 | [1.24.0-4](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n| UHD400                     | [1.5.3](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.3/artifacts.tar)                                    |\n\n# Release Features(s):\n\n* <b><i>Ixia-C & UHD400</i></b>: Support added for ISIS Simulated Topology. [More Details](https://github.com/open-traffic-generator/models/pull/327)\n\n  - Configuration for ISIS attributes for newly introduced simulated routers are identical to configuration for currently supported directly connected emulated routers.\n  - `devices[i].ethernets[j].connection.simulated_link` is introduced to create a simulated ethernet connection to build a Simulated Topology.\n\n  ```go\n    simulatedRouterEthernet := simulatedRouter.Ethernets().Add().\n                SetName(\"simRtrEth\").\n                SetMac(\"00:00:11:02:02:02\")\n    simulatedRouterEthernet.Connection().SimulatedLink().SetRemoteSimulatedLink(\"connRtrSimEth\")\n\n    connectedRouterSimulatedEthernet := connectedRouter.Ethernets().Add().\n                SetName(\"connRtrSimEth\").\n                SetMac(\"00:00:01:01:01:01\")\n    connectedRouterSimulatedEthernet.Connection().SimulatedLink().SetRemoteSimulatedLink(\"simRtrEth\")\n  ```\n\n  - BGP/BGP+/RSVP-TE can also be configured on loopback interfaces on the simulated devices.\n    Note: `get_metrics/states` APIs are only applicable for the connected emulated routers and not for the simulated routers.\n* <b><i>Ixia-C & UHD400</i></b>: Support added for ISIS Segment Routing for emulated ISIS routers.\n\n  - To configure Router Capability with Segment Routing in `devices[i].isis.segment_routing.router_capability` use the following snippet.\n\n  ```go\n      srCap := rtrCap.SrCapability()\n      srCap.Flags().SetIpv4Mpls(true).SetIpv6Mpls(true)\n      srCap.SrgbRanges().Add().SetStartingSid(uint32(srStartingSid)).SetRange(uint32(srRange))\n  ```\n\n  - To configure routes with Node-SID or Prefix-SID under `devices[i].isis.v4/6_routes[j].prefix_sids[0]` use the following snippet.\n\n  ```go\n      isisV4Route.PrefixSids().Add().\n          SetSidIndex(sidOffset).\n          SetRFlag(true).\n          SetNFlag(true).\n          SetPFlag(true).\n          SetAlgorithm(1)\n  ```\n\n  - To configure Adjacency-SID under `devices[i].isis.interfaces[0].adjacency_sids[j]` use the following snippet.\n\n  ```go\n      isisInterface.AdjacencySids().Add().\n          SetSidIndex(sidOffset).\n          SetPFlag(true).\n          SetWeight(10)\n  ```\n\n  - To configure traffic using Segment Routing MPLS Labels use the following snippet.\n\n  ```go\n      eth := flow.Packet().Add().Ethernet()\n      eth.Src().SetValue(ethIntf.Mac())\n      eth.Dst().Auto()\n      mpls := flow.Packet().Add().Mpls()\n      mpls.Label().SetValue(uint32(900010)) // Use the Segment Routing MPLS Label to which traffic has to be steered.\n  ```\n\n  Note: MPLS headers in flows is not yet supported for UHD400.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne), UHD400</i></b>: gNMI support added to retrieve timestamp of the last link state change event of the test port. [More Details](https://github.com/open-traffic-generator/models-yang/pull/40)\n\n  ```gNMI\n      ports/port[name=*]/state/last-change\n  ```\n  Note: Please update featureprofiles/ondatra to latest if the setup is upgraded to this build, otherwise gnmi failures might be seen while fetching port metrics.\n\n### Bug Fix(s)\n\n* <b><i>Ixia-C & UHD400</i></b>:  Issue is fixed where DHCPv6 was intermittently crashing on stop.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Non default virtual wiring configuration can result in ARP failures and traffic loss due to dropped packets on the rx path.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.20.0-8\n\n> 26th February, 2025\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [1.20.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.20.0/artifacts/openapi.yaml) |\n| snappi                     | [1.20.0](https://pypi.org/project/snappi/1.20.0)                                                                                              |\n| gosnappi                   | [1.20.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.20.0)                                                        |\n| keng-controller            | [1.20.0-8](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                         |\n| ixia-c-traffic-engine      | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                  |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.431](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [1.20.0-2](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.20.2](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                           |\n| ixia-c-one                 | [1.20.0-8](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n| UHD400                     | [1.5.3](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.3/artifacts.tar)                                    |\n\n### Bug Fix(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where on running a test with a large number of `replay_updates` multiple times would cause a PCPU out of memory crash, resulting in `<i>`\"context deadline\"`</i>` error on `set_config` or `set_control_state.protocol.start`.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Non default virtual wiring configuration can result in ARP failures and traffic loss due to dropped packets on the rx path.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.20.0-6\n\n> 11th February, 2025\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [1.20.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.20.0/artifacts/openapi.yaml) |\n| snappi                     | [1.20.0](https://pypi.org/project/snappi/1.20.0)                                                                                              |\n| gosnappi                   | [1.20.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.20.0)                                                        |\n| keng-controller            | [1.20.0-6](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                         |\n| ixia-c-traffic-engine      | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                  |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.431](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [1.20.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.20.2](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                           |\n| ixia-c-one                 | [1.20.0-6](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n| UHD400                     | [1.5.3](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.3/artifacts.tar)                                    |\n\n# Release Features(s)\n\n* <b><i>UHD400</i></b>: Support added to retrieve timestamp of the last link state change event of the test port. [More Details](https://github.com/open-traffic-generator/models/pull/398)\n  - This can be retrieved by accessing `port_metrics[i].last_change`.\n\n    Note:\n\n    - Test ports and DUT must be time synced to the same time source if link state change timestamps need to be co-related.\n\n### Bug Fix(s)\n\n* <b><i>Ixia-C & UHD400</i></b>: For certain asymmetric configurations of BGPv4/v6 `replay_updates` with a large number of updates, `set_config` or `set_control_state.protocol.start` would result in the protocol-engine container to get stuck and ultimately result in `context_deadline_exceeded` error and subsequent actions to not return a response. This issue is fixed.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.19.0-18\n\n> 24th January, 2025\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [1.19.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.19.0/artifacts/openapi.yaml) |\n| snappi                     | [1.19.0](https://pypi.org/project/snappi/1.19.0)                                                                                              |\n| gosnappi                   | [1.19.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.19.0)                                                        |\n| keng-controller            | [1.19.0-18](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                        |\n| ixia-c-traffic-engine      | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                  |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.426](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [1.19.0-9](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.19.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                           |\n| ixia-c-one                 | [1.19.0-18](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                            |\n| UHD400                     | [1.5.1](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.1/artifacts.tar)                                    |\n\n# Release Features(s)\n\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for GUEv1 IPv4/v6 over UDP traffic.\n\n  ```go\n      f1Ip1 := f1.Packet().Add().Ipv4()\n      f1Ip1.Src().SetValue(\"1.1.1.1\")\n      f1Ip1.Dst().SetValue(\"1.1.1.2\")\n    \n      f1Udp := f1.Packet().Add().Udp()\n      f1Udp.SrcPort().SetValue(30000)\n      f1Udp.DstPort().SetValue(6080)\n      // IPv4 Over UDP\n      f1Ip2 := f1.Packet().Add().Ipv4()\n      f1Ip2.Src().SetValues([]string{\n          \"2.2.2.1\",\n          \"2.2.2.2\",\n          \"2.2.2.3\",\n          \"2.2.2.4\",\n      })\n      f1Ip2.Dst().SetValue(\"3.3.3.1\")\n  ```\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for MPLS Over UDP traffic.\n\n  ```go\n      //udp Dst port as 6635\n      f1Udp := f1.Packet().Add().Udp()\n      f1Udp.DstPort().SetValue(6635)\n      f1Udp.SrcPort().SetValue(65530)\n      //mpls over udp\n      f1Mpls1 := f1.Packet().Add().Mpls()\n      f1Mpls1.Label().SetValue(10001)\n      f1Mpls1.BottomOfStack().SetValue(0)\n      f1Mpls2 := f1.Packet().Add().Mpls()\n      f1Mpls2.Label().SetValue(10011)\n      //ipv4 over mpls over udp\n      f1MplsIp := f1.Packet().Add().Ipv4()\n      f1MplsIp.Dst().SetValues([]string{\n          \"20.20.20.1\",\n          \"20.20.20.2\",\n          \"20.20.20.3\",\n          \"20.20.20.4\",\n      })\n      f1MplsIp.Src().SetValue(\"10.10.10.1\")\n  ```\n\n  Note: MPLS Over UDP with DTLS is not supported.\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Egress tracking is now supported for UDP, TCP(src/dst port fields), MPLS and IPv4/v6 inner header fields when encapsulated inside UDP/TCP.\n\n  ```go\n      //egress tracking\n      f1.EgressPacket().Add().Ethernet()\n      f1.EgressPacket().Add().Ipv4()\n      f1.EgressPacket().Add().Udp()\n      f1.EgressPacket().Add().Mpls()\n      mplsLabelTracking := f1.EgressPacket().Add().Mpls()\n      tr1 := mplsLabelTracking.Label().MetricTags().Add()\n      tr1.SetName(\"MplsLabelEgressTracking\")\n      tr1.SetOffset(17)\n      tr1.SetLength(3)\n  ```\n\n### Bug Fix(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where configs with RSVP and multiple Loopback interfaces was throwing error similar to `\"loopback p2.d2.lo and lo.d not compatible\"` on `set_config`.\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue where config with large number of route ranges was causing error similar to `\"grpc: received message larger than max (114278270 vs. 104857600)\"` on `set_config` is fixed by increasing the default gRPC receive buffer size to 1GB.\n  - Note that for Ixia Chassis & Appliances(Novus, AresOne) the buffer can now be controlled by setting the environment variable of `keng-controller` as given below.\n    ```sh\n        command:\n            ...\n            - \"--grpc-max-msg-size\"\n            - \"500\"\n    ```\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where `set_config` was throwing error if Traffic Engineering was enabled for ISIS interface, but Priority BandWidths were not explicitly specified.\n* <b><i>Ixia-C, UHD400</i></b>: Issue is fixed where DHCPv4 was intermittently crashing on stop.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where OSPFv2 Router Ids were not getting set properly when multiple OSPFv2 Routers were configured on a port.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.19.0-5\n\n> 23rd December, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [1.19.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.19.0/artifacts/openapi.yaml) |\n| snappi                     | [1.19.0](https://pypi.org/project/snappi/1.19.0)                                                                                              |\n| gosnappi                   | [1.19.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.19.0)                                                        |\n| keng-controller            | [1.19.0-5](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                         |\n| ixia-c-traffic-engine      | [1.8.0.241](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                  |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.424](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [1.19.0-5](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.19.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                           |\n| ixia-c-one                 | [1.19.0-5](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n| UHD400                     | [1.5.1](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.1/artifacts.tar)                                    |\n\n# Release Features(s)\n\n* <b><i>Ixia-C</i></b>: Support added to send flows over DHCPv6 endpoints.\n\n  ```go\n    f1 := config.Flows().Add()\n    f1.SetName(flowName).\n      TxRx().Device().\n      SetTxNames([]string{\"p1d1dhcpv6_1\"}).\n      SetRxNames([]string{\"p2d1ipv6\"})\n    f1Ip := f1.Packet().Add().Ipv6()\n    // will be populated automatically with the the dynamically allocated Ip to DHCP client\n    f1Ip.Src().Auto().Dhcp()\n    …\n    f2Ip.Dst().Auto().Dhcp()\n  ```\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added to retrieve timestamp of the last link state change event of the test port. [More Details](https://github.com/open-traffic-generator/models/pull/398)\n\n  - This can be retrieved by accessing `port_metrics[i].last_change`.\n\n    Note:\n\n    - As mentioned in the `Known Issues`, ports being used in the tests must be rebooted once after upgrading to the latest version of `keng-layer23-hw-server`.\n    - Test ports and DUT must be time synced to the same time source if link state change timestamps need to be co-related.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for RSVP over ISIS Simulated Topology.\n\n  ```go\n    // Create RSVP neighbor on interface connected to DUT.\n    // Note that get_states and get_metrics are supported only for the connected RSVP neighbors.\n    p2RsvpNeighbor := p2d1.Rsvp().SetName(\"p2RsvpNbr\")\n    p2RsvpNeighbor.Ipv4Interfaces().\n            Add().SetIpv4Name(p2d1Ipv4.Name()).\n            SetNeighborIp(p2d1Ipv4.Gateway())\n\n    // Create RSVP ingress LSPs on the loopback behind the simulated topology.\n    fromLoRsvpIngress := fromLoRsvpLsp.P2PIngressIpv4Lsps().Add().SetName(\"ingressLsp\")\n    fromLoRsvpIngress.SetRemoteAddress(\"1.1.1.1\").SetTunnelId(100)\n\n    // Create RSVP egress endpoint on the loopback behind the simulated topology.\n    toLoRsvpLsp := toLoRsvpPeer.LspIpv4Interfaces().Add().SetIpv4Name(\"loopback\")\n    toLoRsvpLspEgress := toLoRsvpLsp.P2PEgressIpv4Lsps().SetName(\"egressLsp\")\n\n    // Note: for TE SPF to work properly on DUT, ensure you have added TrafficEngineering to all ISIS interfaces.\n    te = p2d1IsisIntf.TrafficEngineering().Add().SetMetricLevel(10)\n    te.PriorityBandwidths().\n            SetPb0(125000000).\n            ...\n            SetPb7(125000000)\n  ```\n\n### Bug Fix(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where `set_config` was failing with the error `\"BgpIPRouteRange is missing\"` when IPv4 routes with IPv6 next-hops (RFC5549) was configured.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where `get_states` on `bgpv4/6_prefixes` was returning error `\"Error occurred while fetching bgp_prefix states:Length cannot be less than zero. (Parameter 'length')\"` if the prefix contained `as_path` with multiple segments.\n* <b><i>Ixia-C, UHD400</i></b>: Issue is fixed where `get_states` for `isis` was returning IPv6 prefixes in upper case causing prefix match for IPv6 prefixes to fail in tests.\n* <b><i>Ixia-C</i></b>: Issue is fixed where `set_config` was failing with error `\"Error occurred while setting Traffic config (Layer1 only) for user common:Error fetching stats for port port9: unsuccessful Response: Port 7 is not added\"` when the traffic engine was deployed in multi nic mode (e.g. for lag setups with 8 ports).\n* <b><i>Ixia-C</i></b>: Issue is fixed where the traffic engine was crashing on deployment using a single cpu core (`--cpuset-cpus=\"0-1\"`).\n* <b><i>VM Licensing</i></b>: Issue is fixed for users using the VM License Server where,  after a reboot, license-server VM serving multiple keng-controller(s) did not come up and tests running with those controller(s) started failing.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.17.0-9\n\n> 29th November, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [1.17.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.17.0/artifacts/openapi.yaml) |\n| snappi                     | [1.17.0](https://pypi.org/project/snappi/1.17.0)                                                                                              |\n| gosnappi                   | [1.17.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.17.0)                                                        |\n| keng-controller            | [1.17.0-9](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                         |\n| ixia-c-traffic-engine      | [1.8.0.193](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                  |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.419](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [1.17.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.14.18](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                          |\n| ixia-c-one                 | [1.17.0-9](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n| UHD400                     | [1.5.1](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.1/artifacts.tar)                                    |\n\n# Release Features(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for BGP/BGP+ over ISIS Simulated Topology. [More Details](https://github.com/open-traffic-generator/models/pull/327)\n\n  ```go\n    loopback = simRtr.Ipv4Loopbacks().\n                Add().\n                SetName(\"IPv4Loopback\").\n                SetAddress(dutIPv4).\n                SetEthName(simRtr.Ethernets().Items()[0].Name())\n    simRtrBgp= simRtr.Bgp().\n            SetRouterId(loopback.Address())\n    simRtrBgpIntf = simRtrBgp.Ipv4Interfaces().Add().\n            SetIpv4Name(loopback.Name())\n    simRtrBgpIntf.Peers().Add().\n            SetAsNumber(1111).\n            SetAsType(gosnappi.BgpV4PeerAsType.EBGP).\n            SetPeerAddress(fromPeerIp).\n            SetName(\"BgpPeer1\")\n  ```\n\n  Note: For configuration of simulated topology please refer [here](https://github.com/open-traffic-generator/ixia-c/releases/tag/v1.16.0-2).\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for GRE header in traffic flows.\n\n  ```go\n    flow1 := config.Flows().Add()\n    ...\n    gre := flow1.Packet().Add().Gre()\n    ...\n  ```\n\n  Note: By default the correct GRE Protocol value will be set automatically depending on next header eg. IPv4/v6.\n\n### Bug Fix(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where fetching ISIS learned information using `get_states` would sometimes fail with a error `<i>`Cannot clear data while transfer is in progress - data would be inconsistent`</i>`.\n* <b><i>Ixia-C</i></b>: Issue is fixed where ARP/ND resolution was failing for LAG configurations with a mix of Loopback and connected interfaces.\n* <b><i>Ixia-C</i></b>: Issue is fixed where on fetching BGP/BGP+ learned prefix information using `get_states` would return an incorrect prefix in certain scenarios. This was more likely to happen for IPv6 prefixes.\n* <b><i>Ixia-C, UHD400</i></b>: Issue is fixed where if the DHCPv6 client type is configured as IANAPD, DHCPv6 Server `get_states` doesn't show IAPD addresses.\n* <b><i>UHD400</i></b>: Issue is fixed where Auto MAC resolution was not working properly for multinic scenarios such as LAG, resulting in flows being transmitted with dest MAC as 00:00:00:00:00:00 and DUT not forwarding these packets.\n\n#### Known Issues\n\n* <b><i>Ixia-C, UHD400</i></b>: When DHCPv6 Server is configured with multiple pools, The DHCPv6 clients are not accepting addresses from different pools.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.16.0-2\n\n> 18th November, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [1.16.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.16.0/artifacts/openapi.yaml) |\n| snappi                     | [1.16.0](https://pypi.org/project/snappi/1.16.0)                                                                                              |\n| gosnappi                   | [1.16.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.16.0)                                                        |\n| keng-controller            | [1.16.0-2](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                         |\n| ixia-c-traffic-engine      | [1.8.0.193](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                  |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.415](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [1.16.0-2](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.14.16](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                          |\n| ixia-c-one                 | [1.16.0-2](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n| UHD400                     | [1.5.1](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.1/artifacts.tar)                                    |\n\n# Release Features(s)\n\n* <b><i>Ixia-C, UHD400</i></b>: Support added for DHCPv6 Client and Server in control plane.\n\n  - User will be the able to configure DHCPv6 Client and Server by the following code snippet.\n\n  ```go\n    // Configure a DHCP Client\n      dhcpv6client := d1Eth1.Dhcpv6Interfaces().Add().\n        SetName(\"p1d1dhcpv61\")\n\n      dhcpv6client.IaType().Iata()\n      dhcpv6client.DuidType().Llt()\n\n      // Configure a DHCPv6 Server\n      d1Dhcpv6Server := d2.DhcpServer().Ipv6Interfaces().Add().\n        SetName(\"p2d1Dhcpv6Server1\").\n\n      d1Dhcpv6ServerPool := d1Dhcpv6Server.SetIpv6Name(\"p2d1ipv6\").\n        Leases().Add().\n        SetLeaseTime(3600)\n      IaType := d1Dhcpv6ServerPool.IaType().Iata()\n      IaType.\n        SetStartAddress(\"2000:0:0:1::100\").\n        SetStep(1).\n        SetSize(10).\n        SetPrefixLen(64) \n  ```\n* <b><i>UHD400</i></b>: Support of Egress Flow tracking for multiple flows is added any location of supported fields upto 10 bits.\n\n  - Supported fields are `ethernet.src/dst`, `vlan.id`, `vlan.priority`, `ipv4.src/dst`, `ipv4.precedence`, `ipv6.src/dst`, `ipv6.traffic_class`.\n\n  ```go\n    eth := flow.EgressPacket().Add().Ethernet()\n    ipv4 := flow.EgressPacket().Add().Ipv4()\n    ipv4Tag := ipv4.Dst().MetricTags().Add()\n    ipv4Tag.SetName(\"flow_ipv4_dst\")\n    ipv4Tag.SetOffset(22)\n    ipv4Tag.SetLength(10)\n  ```\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for ISIS Simulated Topology. [More Details](https://github.com/open-traffic-generator/models/pull/327)\n\n  - Configuration for ISIS attributes for newly introduced simulated routers are identical to configuration for currently supported directly connected emulated routers.\n  - `devices[i].ethernets[j].connection.simulated_link` is introduced to create a simulated ethernet connection to build a Simulated Topology.\n\n  ```go\n    simulatedRouterEthernet := simulatedRouter.Ethernets().Add().\n                SetName(\"simRtrEth\").\n                SetMac(\"00:00:11:02:02:02\")\n    simulatedRouterEthernet.Connection().SimulatedLink().SetRemoteSimulatedLink(\"connRtrSimEth\")\n\n    connectedRouterSimulatedEthernet := connectedRouter.Ethernets().Add().\n                SetName(\"connRtrSimEth\").\n                SetMac(\"00:00:01:01:01:01\")\n    connectedRouterSimulatedEthernet.Connection().SimulatedLink().SetRemoteSimulatedLink(\"simRtrEth\")\n  ```\n\n  Note: `get_metrics/states` APIs are only applicable for the connected emulated routers and not for the simulated routers.\n* <b><i>Ixia-C, UHD400, Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for fetching `lldp_neighbors[i].custom_tlvs[j].information` as hex bytes using `get_states` API. [More details](https://github.com/open-traffic-generator/models/pull/392)\n\n### Bug Fix(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where for certain scenarios such as retrieving large control capture buffer or fetching `get_metrics/states` for large amount of data results in errors similar to `<i>`\"grpc: received message larger than max (7934807 vs. 4194304)\"`</i>`.\n\n  - For such scenarios note that the grpc receive buffer on the client should also be locally increased if necessary from default value of 4 MB.\n* <b><i>Ixia-C</i></b>: Issue is fixed for LLDP where, when multiple custom tlvs are configured to be sent, sometimes the bytes in the `information` field in the outgoing LLDP PDUs were corrupted.\n\n#### Known Issues\n\n* <b><i>Ixia-C, UHD400</i></b>: When the DHCPv6 client type is configured as IANAPD, DHCPv6 Server `get_states` doesn't show IAPD addresses\n* <b><i>Ixia-C, UHD400</i></b>: When DHCPv6 Server is configured with multiple pools, The DHCPv6 clients are not accepting addresses from different pools.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.14.0-1\n\n> 25th October, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [1.14.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.14.0/artifacts/openapi.yaml) |\n| snappi                     | [1.14.0](https://pypi.org/project/snappi/1.14.0)                                                                                              |\n| gosnappi                   | [1.14.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.14.0)                                                        |\n| keng-controller            | [1.14.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                         |\n| ixia-c-traffic-engine      | [1.8.0.99](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.405](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [1.14.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.14.15](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                          |\n| ixia-c-one                 | [1.14.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n| UHD400                     | [1.4.0](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.4/1.4.0/artifacts.tar)                                    |\n\n# Release Features(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for OSPFv2. [details](https://github.com/open-traffic-generator/models/pull/384)\n\n  ```go\n    ospfRouter := device1.Ospfv2().\n            SetName(\"OspfRtr\").\n            SetStoreLsa(true)\n\n    intf := ospfRouter.Interfaces().Add().\n                    SetName(\"OspfIntf\").\n                    SetIpv4Name(\"Ipv4Intf1\")\n\n    intf.Area().SetId(0)\n    intf.NetworkType().PointToPoint()\n    ospfRoutes := ospfRouter.V4Routes().\n                            Add().\n                            SetName(\"OspfRoutes\")\n    ospfRoutes.\n            Addresses().\n            Add().\n            SetAddress(\"10.10.10.0\").\n            SetPrefix(24).\n            SetCount(100).\n            SetStep(2)\n  ```\n\n  - Learned LSAs can be fetched by the following\n\n  ```go\n    req := gosnappi.NewStatesRequest()\n    req.Ospfv2Lsas().SetRouterNames(routerNames)\n    res, err := client.GetStates(req)\n  ```\n\n  - OSPFv2 metrics can be fetched by the following\n\n  ```go\n    req := gosnappi.NewMetricsRequest()\n    reqOspf := req.Ospfv2()\n    reqOspf.SetRouterNames(routerNames)\n  ```\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added to update `flows[i].size` and `flows[i].rate` on the fly.\n\n  ```go\n    \n    flow = get_config.Flows().Items()[0]\n    flow.Rate().SetPps(120)\n    flow.Size().SetFixed(512)\n\n    flowUpdateCfg: = gosnappi.NewConfigUpdate().Flows()\n    flowUpdateCfg.Flows().Append(flow)\n    flowUpdateCfg.SetPropertyNames ([]gosnappi.FlowsUpdatePropertyNamesEnum{\n      gosnappi.FlowsUpdatePropertyNames.SIZE, gosnappi.FlowsUpdatePropertyNames.RATE\n    })\n\n    configUpdate = gosnappi.NewConfigUpdate()\n    configUpdate.SetFlows(flowUpdateCfg)\n    res, err := client.Api().UpdateConfig(configUpdate)\n  ```\n\n### Bug Fix(s)\n\n* <b><i>Ixia-C</i></b>: Issue where flows containing `ipv4/v6` header without `src/dst` specified was returning error on `set_config` `<i>`\"Error flow [ flow-name ] has AUTO IPv4 src address and Tx device [ flow-end-point ] with no dhcpv4 interface\"`</i>` is fixed.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.13.0-9\n\n> 4th October, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [1.13.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.13.0/artifacts/openapi.yaml) |\n| snappi                     | [1.13.0](https://pypi.org/project/snappi/1.13.0)                                                                                              |\n| gosnappi                   | [1.13.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.13.0)                                                        |\n| keng-controller            | [1.13.0-9](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                         |\n| ixia-c-traffic-engine      | [1.8.0.90](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.404](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [1.13.0-5](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.34](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.14.14](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                          |\n| ixia-c-one                 | [1.13.0-9](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n| UHD400                     | [1.4.0](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.4/1.4.0/artifacts.tar)                                    |\n\n# Release Features(s)\n\n* <b><i>Keng-Operator</i></b>: go version is upgraded to use `v1.23` along with security updates.\n* <b><i>Ixia-C</i></b>: Support added to send flows over DHCPv4 endpoints.\n\n  ```go\n    f1 := config.Flows().Add()\n    f1.SetName(flowName).\n      TxRx().Device().\n      SetTxNames([]string{\"p1d1dhcpv4_1\"}).\n      SetRxNames([]string{\"p2d1ipv4\"})\n    f1Ip := f1.Packet().Add().Ipv4()\n    // will be populated automatically with the the dynamically allocated Ip to DHCP client\n    f1Ip.Src().Auto().Dhcp()\n    …\n    f2Ip.Dst().Auto().Dhcp()\n  ```\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for LLDP.\n\n  ```go\n    // LLDP configuration.\n    lldp := config.Lldp().Add()\n    lldp.SystemName().SetValue(lldpSrc.systemName)\n    lldp.SetName(lldpSrc.otgName)\n    lldp.Connection().SetPortName(portName)\n    lldp.ChassisId().MacAddressSubtype().\n      SetValue(lldpSrc.macAddress)\n  ```\n\n### Bug Fix(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: There was degradation in time taken for starting large number of  BGP/BGP+ peers on one port. This issue is fixed.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: There was an exception being returned from `set_config` on creating multiple loopbacks in a device and configuring protocols on top of that. This issue is fixed.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If multiple routes are received by a BGP/BGP+ peer with some having MED/Local Preference and some not having MED/Local Preference, in `get_states` MED/Local Preference were not being correctly returned. This issue is fixed.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.13.0-1\n\n> 17th September, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [1.13.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.13.0/artifacts/openapi.yaml) |\n| snappi                     | [1.13.0](https://pypi.org/project/snappi/1.13.0)                                                                                              |\n| gosnappi                   | [1.13.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.13.0)                                                        |\n| keng-controller            | [1.13.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                         |\n| ixia-c-traffic-engine      | [1.8.0.25](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.399](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [1.13.0-3](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.30](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.14.14](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                          |\n| ixia-c-one                 | [1.13.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n| UHD400                     | [1.4.0](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.4/1.4.0/artifacts.tar)                                    |\n\n# Release Features(s)\n\n* <b><i>gosnappi</i></b>: `gosnappi` is updated to work with `go` >= `v1.21`.\n\n  - Older versions of `go` are no longer supported.\n    - When older version of `go` is installed on the server, User will be liable to get errors like `\"slices: package slices is not in GOROOT (/root/.local/go/src/slices)\"`.\n\n  Note: `keng-controller` and `otg-gnmi-server` are upgraded to use `go` `v1.23`.\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne), UHD400</i></b>: Support added for BGP GracefulRestart Notification Enhancement based on [RFC8538](https://datatracker.ietf.org/doc/html/rfc8538).\n\n  - To enable advertisement of Notification support in GracefulRestart capability:\n\n  ```go\n      peer.GracefulRestart().SetEnableNotification(true)\n  ```\n\n  - To optionally send Notification when peer is going down during `InitiateGracefulRestart` trigger:\n\n  ```go\n      grAction := gosnappi.NewControlAction()\n      bgpPeersRestart := grAction.Protocol().Bgp().InitiateGracefulRestart()\n      bgpPeersRestart.\n          SetPeerNames([]string{\"peer1\"}).\n          SetRestartDelay(20)\n      notification:= bgpPeersRestart.Notification()\n      if sendHardReset == true {            \n        notification.Cease().SetSubcode(\n          gosnappi.DeviceBgpCeaseErrorSubcode.HARD_RESET_CODE6_SUBCODE9)\n      } \n      else {\n        /* Send anything else except hard reset */ \n        notification.Cease().SetSubcode(\n            gosnappi.DeviceBgpCeaseErrorSubcode.OUT_OF_RESOURCES_CODE6_SUBCODE8)\n      }\n  ```\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added to update traffic rate on the fly.\n\n  ```go\n    req := gosnappi.NewConfigUpdate()\n    reqFlow := req.Flows().SetPropertyNames([]gosnappi.FlowsUpdatePropertyNamesEnum{\n      gosnappi.FlowsUpdatePropertyNames.RATE,\n    })\n    f1.Rate().SetPps(100) // f1 is an existing flow in the config\n    reqFlow.Flows().Append(f1)\n      gosnappi.NewApi().UpdateConfig(req)\n  ```\n\n### Bug Fix(s)\n\n* <b><i>UHD400</i></b>: Issue where `flows[i].packet.ipv6.dst.increment` was not being reflected in transmitted packets when two or more flows were configured, is now fixed.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.12.0-1\n\n> 2nd September, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [1.12.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.12.0/artifacts/openapi.yaml) |\n| snappi                     | [1.12.0](https://pypi.org/project/snappi/1.12.0)                                                                                              |\n| gosnappi                   | [1.12.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.12.0)                                                        |\n| keng-controller            | [1.12.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                         |\n| ixia-c-traffic-engine      | [1.8.0.25](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.398](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [1.12.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.30](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.14.12](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                          |\n| ixia-c-one                 | [1.12.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n| UHD400                     | [1.3.5](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.3/1.3.5/artifacts.tar)                                    |\n\n# Release Features(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for DHCPv6 client interfaces to be used as source/destination for device traffic.\n\n  - In this the learned IPv6 address from the DHCPv6 server is automatically populated in `ipv6.src/dst` if the choice is set to auto.dhcp.\n\n  ```go\n    clientToServerFlow.SetName(\"ClientToServer\").TxRx().Device().\n    SetTxNames([]string{\"DHCPv6ClientName\"}).\n    SetRxNames([]string{\"DHCPv6ServerInterfaceName\"})\n    clientToServerFlow.Packet().Add().Ethernet()\n    clientToServerFlowIp := clientToServerFlow.Packet().Add().Ipv6()\n    clientToServerFlowIp.Src().Auto().Dhcp()\n\n    serverToClientFlow.SetName(\"ServerToClient\").TxRx().Device().\n        SetTxNames([]string{\"DHCPv6ServerInterfaceName\"}).\n        SetRxNames([]string{\"DHCPv6ClientName\"})\n    serverToClientFlow.Packet().Add().Ethernet()\n    serverToClientFlowIp := serverToClientFlow.Packet().Add().Ipv6()\n    serverToClientFlowIp.Dst().Auto().Dhcp()\n  ```\n\n  Note: For DHCPv6 client to DHCPv6 server each flow supports only one source endpoint in tx_rx.device.tx_names, hence a separate flow has to be configured for each DHCPv6 client if packet[i].ipv6.src.auto.dhcp is set.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for `devices[i].ethernets[j].dhcpv6_interfaces[k].options/options_request` and `devices[i].dhcp_server.ipv6_interfaces[j].options`.\n\n  ```go\n        // Configure a DHCPv6 Client\n        dhcpv6Client := d1Eth1.Dhcpv6Interfaces().Add().\n          SetName(\"DHCPv6-Client\")\n\n        .........\n\n        //options\n        dhcpv6Client.Options().VendorInfo().\n          SetEnterpriseNumber(1000).\n          OptionData().\n          Add().\n          SetCode(88).\n          SetData(\"enterprise\")\n        dhcpv6Client.Options().VendorInfo().AssociatedDhcpMessages().All()\n\n        //option request\n        dhcpv6Client.OptionsRequest().Request().Add().BootfileUrl()\n        dhcpv6Client.OptionsRequest().Request().Add().Custom().SetType(3)\n        dhcpv6Client.OptionsRequest().AssociatedDhcpMessages().All()\n\n        // Configure a DHCPv6 Server\n        dhcpv6Server := d2.DhcpServer().Ipv6Interfaces().Add().\n          SetName(\"DHCPv6-Server\")\n\n        ............\n        dhcpv6Server.Options().BootfileUrl().SetUrl(\"URL\").AssociatedDhcpMessages().All()\n          dhcpv6Server.Options().Dns().SetPrimary(\"8::8\").SecondaryDns().Add().SetIp(\"9::9\")\n  ```\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for `devices[i].dhcp_server.ipv6_interfaces[j].leases[k].ia_type.choice.iapd/ianapd`.\n\n  ```go\n        // Configure a DHCPv6 Server\n        dhcpv6Server := d2.DhcpServer().Ipv6Interfaces().Add().\n          SetName(\"DHCPv6-Server\")\n\n        dhcpv6ServerPool := dhcpv6Server.SetIpv6Name(\"p2d1ipv6\").\n          Leases().Add().\n          SetLeaseTime(3600)\n        IaType := dhcpv6ServerPool.IaType().Iapd()\n        IaType.\n          SetAdvertisedPrefixLen(64).\n          SetStartPrefixAddress(\"2000:0:0:100::0\").\n          SetPrefixStep(1).\n          SetPrefixSize(10)\n  ```\n* <b><i>Ixia-c</i></b>: Support added for sending Organizational tlvs in LLDP PDUs.\n\n  ```go\n    lldp := config.Lldp().Items()[0]\n\n    orgInfos1 := lldp.OrgInfos().Add()\n    orgInfos1.Information().SetInfo(\"AABB11\")\n    orgInfos1.SetOui(\"1abcdf\").SetSubtype(1)\n  ```\n\n  Note: Received Organizational tlvs can be seen in the `get_states` response of `lldp_neighbors`.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.8.0-1\n\n> 20th August, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.8.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.8.0/artifacts/openapi.yaml) |\n| snappi                     | [1.8.0](https://pypi.org/project/snappi/1.8.0)                                                                                              |\n| gosnappi                   | [1.8.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.8.0)                                                        |\n| keng-controller            | [1.8.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                        |\n| ixia-c-traffic-engine      | [1.8.0.25](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                 |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.393](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.8.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.30](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.14.8](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                         |\n| ixia-c-one                 | [1.8.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                            |\n| UHD400                     | [1.3.5](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.3/1.3.5/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for DHCPv6 Client and Server in control plane. [details](https://github.com/open-traffic-generator/models/pull/369)\n\n  - User will be the able to configure DHCPv6 Client and Server by the following code snippet.\n\n  ```go\n        // Configure a DHCP Client\n        dhcpv6client := d1Eth1.Dhcpv6Interfaces().Add().\n          SetName(\"p1d1dhcpv61\")\n\n        dhcpv6client.IaType().Iata()\n        dhcpv6client.DuidType().Llt()\n\n        // Configure a DHCPv6 Server\n        d1Dhcpv6Server := d2.DhcpServer().Ipv6Interfaces().Add().\n          SetName(\"p2d1Dhcpv6Server1\").\n\n        d1Dhcpv6ServerPool := d1Dhcpv6Server.SetIpv6Name(\"p2d1ipv6\").\n          Leases().Add().\n          SetLeaseTime(3600)\n        IaType := d1Dhcpv6ServerPool.IaType().Iata()\n        IaType.\n          SetStartAddress(\"2000:0:0:1::100\").\n          SetStep(1).\n          SetSize(10).\n          SetPrefixLen(64) \n  ```\n\n  Note: Support for `devices[i].dhcp_server.ipv6_interfaces[j].options` and `devices[i].dhcp_server.ipv6_interfaces[j].leases[k].ia_type.choice.iapd/ianapd` will be available in the subsequent sprints.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: gNMI support added to fetch control plane metics and states of DHCPv6 [Client](https://github.com/open-traffic-generator/models-yang/blob/main/artifacts/open-traffic-generator-dhcpv6client.txt) and [Server](https://github.com/open-traffic-generator/models-yang/blob/main/artifacts/open-traffic-generator-dhcpv6server.txt).\n\n  - Support added for DHCPv6 Client/Server metrics using following gNMI paths.\n\n  ```gNMI\n   // dhcpv6 client\n   dhcpv6-clients/dhcpv6-client[name=*]/state/counters\n\n   // dhcpv6 server\n   dhcpv6-servers/dhcpv6-server[name=*]/state/counters\n  ```\n\n  - Support added for DHCPv6 Client/Server states using following gNMI paths.\n\n  ```gNMI\n   // dhcpv6 client\n   dhcpv6-clients/dhcpv6-client[name=*]/state/interface\n\n   // dhcpv6 server\n   dhcpv6-servers/dhcpv6-server[name=*]/state/interface\n  ```\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.7.2-1\n\n> 7th August, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.7.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.7.1/artifacts/openapi.yaml) |\n| snappi                     | [1.7.2](https://pypi.org/project/snappi/1.7.2)                                                                                              |\n| gosnappi                   | [1.7.2](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.7.2)                                                        |\n| keng-controller            | [1.7.2-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                        |\n| ixia-c-traffic-engine      | [1.8.0.25](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                 |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.392](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.7.1-4](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.30](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.14.7](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                         |\n| ixia-c-one                 | [1.7.2-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                            |\n| UHD400                     | [1.3.5](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.3/1.3.5/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for new traffic applying infrastructure.\n\n  - Instead of <b><i>\"Failed to apply flow configurations due to: Please contact Ixia Support.\"</i></b> ,\n    - In scenarios where underlying hardware module doesn't have the resources to apply the flow a proper error message such as <b><i>\"Failed to apply flow configurations due to: Error  occurred for flow 'ipv6flowlabel': The Tx Ports of the flow do not support the combinations of fields and size of value lists configured. Please reduce the size of the value lists or/and fields with value lists configured or use a load module ( or variant) with more resources.\"</i></b> Based on this either test can be modified or appropriate load modules can be used for the test.\n    - There were certain scenarios with large `values` in packet fields in the flows which were failing with above error inspite of being within the modules capabilities and can now be applied without any error.\n  - Earlier configuration with multiples flows with large `values` in packet fields would fail with error as <b><i>\"Failed to apply flow configurations due to: Traffic configuration exceeds port background memory size.\"</i></b>. This issue is also fixed with the upgrade to new traffic applying infrastructure.\n  - Issue where  correct `values`/`increment`/`decrement` for `ethernet.src/dst` was not being transmitted on the wire is fixed.\n  - In this new infrastructure, traffic will be directly applied to the hardware ports resulting in better performance on `set_transmit_state`.\n* <b><i>gosnappi</i></b>: Client side file organization of the `gosnappi` sdk is modified to allow for better auto-completion support when writing test programs.\n  Note: Client must be upgraded to gosnappi [v1.7.2](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.7.2).\n* <b><i>Ixia-C, UHD400</i></b>: Support added for DHCPv4 Client and Server in control plane. [details](https://github.com/open-traffic-generator/models/pull/371)\n\n  - User will be the able to configure DHCPv4 Client and Server by the following code snippet. More comprehensive [B2B example](https://github.com/open-traffic-generator/featureprofiles/blob/dev-dhcp/feature/dhcp/dhcpv4_client_server_b2b_test.go)\n\n  ```go\n    // Configure a DHCP Client\n    dhcpclient := d1Eth1.Dhcpv4Interfaces().Add().\n        SetName(\"p1d1dhcpv41\")\n\n    dhcpclient.FirstServer()\n    dhcpclient.ParametersRequestList().\n        SetSubnetMask(true).\n        SetRouter(true).\n        SetRenewalTimer(true)\n\n  // Configure a DHCP Server\n    d2Dhcpv4Server := d2.DhcpServer().Ipv4Interfaces().Add().\n        SetName(\"p2d1dhcpv4server\")\n\n    d2Dhcpv4Server.SetIpv4Name(\"p2d1ipv4\").AddressPools().\n        Add().SetName(\"pool1\").\n        SetLeaseTime(3600).\n        SetStartAddress(\"100.1.100.1\").\n        SetStep(1).\n        SetCount(1).\n        SetPrefixLength(16).Options().SetRouterAddress(\"100.1.0.1\").SetEchoRelayWithTlv82(true)\n  ```\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne), UHD400</i></b>: Support added for `random` in following flow fields. [details](https://github.com/open-traffic-generator/models/pull/380)\n\n  - `ipv4.src/dst`\n  - `ipv6.flow_label`\n  - `tcp.src_port/dst_port`\n  - `udp.src_port/dst_port`\n\n    - User can configure by using following snippet.\n      ```go\n        ipv6 := flow1.Packet().Add().Ipv6()\n        ipv6.FlowLabel().Random().SetMin(1).SetMax(1048574).SetCount(250000).SetSeed(1)\n      ```\n\n    Note: For <b><i>UHD400</i></b> an intermittent issue is present on using `random`, where `rx` fields of `flow_metrics` can return zero values.\n* <b><i>Ixia-C</i></b>: New environment variable `OPT_ADAPTIVE_CPU_USAGE=\"\"` is introduced for docker based ixia-c-traffic-engine setups which enables adaptive CPU usage on the `rx` port for a flow. By default a non adaptive receiver is used when the `rx` CPU core usage reaches up to 100%. The adaptive receiver reduces `rx` CPU core usage from 100% to less than 5% in idle mode. To disable the adaptive receiver please remove this environment variable from docker run command. It is recommended to also pin the `rx` to specific cpu cores using the `ARG_CORE_LIST` environment variable when enabling `OPT_ADAPTIVE_CPU_USAGE`.\n\n  - Example docker usage:\n\n  ```yml\n    docker run --net=host --privileged --rm -d \\\n      -e OPT_LISTEN_PORT=\"5555\" \\\n      -e ARG_CORE_LIST=\"1 2 3\" \\\n      -e ARG_IFACE_LIST=\"virtual@af_packet,enp7s0\" \\\n      -e OPT_NO_HUGEPAGES=\"Yes\" \\\n      -e OPT_ADAPTIVE_CPU_USAGE=\"\" \\\n      --name ixia-c-traffic-engine \\\n      ixia-c-traffic-engine:1.8.0.25\n  ```\n\n### Bug Fix(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue where `flow_metrics` were not being returned within timeout resulting in <b><i>\"Could not send message, error: unexpected queue Get(1) error: queue: disposed\" and \"Stats may be inconsistent\"</i></b> error is fixed.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue where BGP/BGP+ learned information containing `origin` of type `incomplete` was not being returned properly by `get_states` is fixed. This would result in deserialization error while accessing BGP/BGP+ learned information using `otg-gNMI-server`.\n* <b><i>Ixia Chassis & Appliances(AresOne)</i></b>: Issue where `port_metrics` were not available when load module of type `1 x 400G AresOne-M` with transceiver of type `800GE LAN QSFP-DD` was being used, is fixed.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue where `set_control_state.protocol.route.state=withdraw/advertise` is triggered with an empty `names` field, all configured route ranges were being not withdrawn or advertised, is fixed.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue where on `set_control_state.protocol.all.state=start`, a `l1` `up/down` event was triggered even when `l1` state was already `up`, is now fixed.\n\n  Note: If port is in `down` state, it has to be brought back to `up` state before starting a test.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4 clients receive the leased IPv4 addresses from the DHCPv4 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.6.2-13\n\n> 19th July, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.6.2](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.6.2/artifacts/openapi.yaml) |\n| snappi                     | [1.6.2](https://pypi.org/project/snappi/1.6.2)                                                                                              |\n| gosnappi                   | [1.6.2](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.6.2)                                                        |\n| keng-controller            | [1.6.2-13](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                       |\n| ixia-c-traffic-engine      | [1.8.0.12](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                 |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.390](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.6.2-4](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.30](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.14.6](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                         |\n| ixia-c-one                 | [1.6.2-13](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n| UHD400                     | [1.3.3](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.3/1.3.3/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne)</i></b>: gNMI support added for `first-timestamp` and `last-timestamp` in flow metrics. [details](https://github.com/open-traffic-generator/models-yang/blob/main/artifacts/open-traffic-generator-flow.txt)\n\n  - User needs to set `flows[i].metrics.timestamps=true` to fetch these new fields.\n\n  ```gNMI\n    module: open-traffic-generator-flow\n    +--rw flows\n      +--ro flow* [name]\n        +--ro name              -> ../state/name\n        +--ro state\n          |  +--ro name?              string\n          .........\n          |  +--ro first-timestamp?   decimal64\n          |  +--ro last-timestamp?    decimal64\n  ```\n\n### Bug Fix(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue where `devices[i].rsvp.ipv4_interfaces[j].summary_refresh_interval` was not setting correctly, is fixed.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue where destination mac address was not getting resolved properly for traffic over ISIS IPv6 routes, is fixed.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4 clients receive the leased IPv4 addresses from the DHCPv4 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.6.2-1\n\n> 28th June, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.6.2](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.6.2/artifacts/openapi.yaml) |\n| snappi                     | [1.6.2](https://pypi.org/project/snappi/1.6.2)                                                                                              |\n| gosnappi                   | [1.6.2](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.6.2)                                                        |\n| keng-controller            | [1.6.2-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                        |\n| ixia-c-traffic-engine      | [1.8.0.12](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                 |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.390](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.6.2-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.30](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.14.4](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                         |\n| ixia-c-one                 | [1.6.2-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                            |\n| UHD400                     | [1.3.3](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.3/1.3.3/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for DHCPv4 client interfaces to be used as source/destination for device traffic.\n\n  - In this the learned IPv4 address from the DHCPv4 server is automatically populated in `ipv4.src/dst` if the choice is set to `auto.dhcp`.\n\n  ```go\n    clientToServerFlow.SetName(\"ClientToServer\").TxRx().Device().\n    SetTxNames([]string{\"DHCPv4ClientName\"}).\n    SetRxNames([]string{\"DHCPv4ServerInterfaceName\"})\n    clientToServerFlowIp := clientToServerFlow.Packet().Add().Ipv4()\n    clientToServerFlowIp.Src().Auto().Dhcp()\n\n    serverToClientFlow.SetName(\"ServerToClient\").TxRx().Device().\n        SetTxNames([]string{\"DHCPv4ServerInterfaceName\"}).\n        SetRxNames([]string{\"DHCPv4ClientName\"})\n    serverToClientFlowIp := serverToClientFlow.Packet().Add().Ipv4()\n    serverToClientFlowIp.Dst().Auto().Dhcp()\n  ```\n\n  Note: For DHCPv4 client to DHCPv4 server each flow supports only one source endpoint in `tx_rx.device.tx_names`, hence a separate flow has to be configured for each DHCPv4 client if `packet[i].ipv4.src.auto.dhcp` is set.\n* <b><i>Ixia-C</i></b>: Support added for multiple address groups in BGPv4/v6 routes.\n\n  ```go\n    route = peer.V4Routes().Add().\n      SetNextHopIpv4Address(\"2.2.2.2\").\n      SetName(\"peer1.rr1\")\n\n    route.Addresses().Add().\n      SetAddress(\"20.20.20.1\").SetPrefix(32).SetCount(2).SetStep(2)\n\n    route.Addresses().Add().\n      SetAddress(\"20.20.21.1\").SetPrefix(32).SetCount(2).SetStep(2)\n  ```\n\n### Bug Fix(s)\n\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue where if a BGPv4/v6 prefix with extended-community or community attributes was updated via a BGP Update with the extended-community or community attribute deleted without a Route Withdraw in between , the subsequent get_states call on the bgp prefixes would incorrectly continue to show the extended-community or community attributes learned via the previous received Update is fixed.\n* <b><i>Ixia-C</i></b>: Issue where If a test was setup such that only test port would initiate ARP/ND and time taken to configure the soft-DUT connected to the test port was taking extended time such that it would not respond to ARP/ND requests within 10s, ARP/ND procedures would fail resulting in test failures in ARP/ND verification step is fixed.\n* <b><i>Ixia-C</i></b>: Issue where if a IPv6 address on the emulated interface was configured in non-shortest format e.g.  `2001:0db8::192:0:2:2` instead of `2001:db8::192:0:2:2` (notice the redundant leading 0 in :0db8), the test port would not initiate IPv6 Neighbor Discovery for corresponding IPv6 gateway result in Neighbor Discovery failure is fixed.\n* <b><i>Keng-Operator</i></b>: Some fixes are provided to handle security warnings raised by k8s security scanning tool such as `<i>'container \"manager\" in Deployment \"ixiatg-op-controller-manager\" does not set readOnlyRootFilesystem: true in its securityContext. This setting is encouraged because it can prevent attackers from writing malicious binaries into runnable locations in the container filesystem.'``</i>`.\n* <b><i>UHD400</i></b>: Issue is fixed where `frames_rx` is reported twice of `frames_tx` in `flow_metrics` is fixed.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4 clients receive the leased IPv4 addresses from the DHCPv4 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.5.1-12\n\n> 14th June, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.5.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.5.1/artifacts/openapi.yaml) |\n| snappi                     | [1.5.1](https://pypi.org/project/snappi/1.5.1)                                                                                              |\n| gosnappi                   | [1.5.1](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.5.1)                                                        |\n| keng-controller            | [1.5.1-12](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                       |\n| ixia-c-traffic-engine      | [1.8.0.12](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                 |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.383](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.5.1-6](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.29](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.14.2](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                         |\n| ixia-c-one                 | [1.5.1-12](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n| UHD400                     | [1.2.9](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.2/1.2.9/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: gNMI support for `GetStates` of DHCP Server added.\n\n  - [DHCPv4 Server](https://github.com/open-traffic-generator/models-yang/blob/main/artifacts/open-traffic-generator-dhcpv4server.txt)\n\n  ```gNMI\n    # States information\n    dhcpv4-servers/dhcpv4-servers[name=serverName]/state/leases\n  ```\n* <b><i>UHD400</i></b>: Value-list support added for IPv4 `dscp` field.\n\n  ```go\n    flowEth := flow.Packet().Add().Ethernet()\n    .... \n    ipv4 := flow.Packet().Add().ipv4()\n      ipv4.Src().SetValue(srcAddr)\n      ipv4.Dst().SetValue(dstAddr)\n      ipv4.Priority().Dscp().Phb().SetValues([]uint32{10,12,14,18 ...})\n  ```\n\n### Bug Fix(s)\n\n* <b><i>Ixia-C</i></b>: Issue where withdrawing BGP/BGP+ routes using `set_control_state.protocol.route.withdraw` was failing in multi-nic topology is fixed.\n* <b><i>Ixia Chassis & Appliances(AresOne)</i></b>: Issue where after running BGP/BGP+ tests on multi-nic ports would result intermittently in `context deadline` errors for subsequent tests/sub tests is fixed.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue where after running tests involving continuous connect/reconnect of test ports for long duration (e.g. 2 - 3 hrs) would result in intermittent `context deadline` errors for a bunch of consecutive tests is fixed.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4 clients receive the leased IPv4 addresses from the DHCPv4 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.5.1-3\n\n> 1st June, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.5.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.5.1/artifacts/openapi.yaml) |\n| snappi                     | [1.5.1](https://pypi.org/project/snappi/1.5.1)                                                                                              |\n| gosnappi                   | [1.5.1](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.5.1)                                                        |\n| keng-controller            | [1.5.1-3](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                        |\n| ixia-c-traffic-engine      | [1.8.0.12](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                 |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.383](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.5.1-4](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.29](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.14.2](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                         |\n| ixia-c-one                 | [1.5.1-3](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                            |\n| UHD400                     | [1.2.8](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.2/1.2.8/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for DHCPv4 Client and Server in control plane. [details](https://github.com/open-traffic-generator/models/pull/371)\n\n  - User will be the able to configure DHCPv4 Client and Server by the following code snippet. More comprehensive [B2B example](https://github.com/open-traffic-generator/featureprofiles/blob/dev-dhcp/feature/dhcp/dhcpv4_client_server_b2b_test.go)\n\n  ```go\n    // Configure a DHCP Client\n      dhcpclient := d1Eth1.Dhcpv4Interfaces().Add().\n          SetName(\"p1d1dhcpv41\")\n\n      dhcpclient.FirstServer()\n      dhcpclient.ParametersRequestList().\n          SetSubnetMask(true).\n          SetRouter(true).\n          SetRenewalTimer(true)\n\n    // Configure a DHCP Server\n      d2Dhcpv4Server := d2.DhcpServer().Ipv4Interfaces().Add().\n          SetName(\"p2d1dhcpv4server\")\n\n      d2Dhcpv4Server.SetIpv4Name(\"p2d1ipv4\").AddressPools().\n          Add().SetName(\"pool1\").\n          SetLeaseTime(3600).\n          SetStartAddress(\"100.1.100.1\").\n          SetStep(1).\n          SetCount(1).\n          SetPrefixLength(16).Options().SetRouterAddress(\"100.1.0.1\").SetEchoRelayWithTlv82(true)\n  ```\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: gNMI support added to fetch DHCPv4 Client and Server statistics.\n\n  - [DHCPv4 Client](https://github.com/open-traffic-generator/models-yang/blob/main/artifacts/open-traffic-generator-dhcpv4client.txt)\n\n  ```gNMI\n    # Combined metrics and states information\n    dhcpv4-clients/dhcpv4-client[name=clientName]/state\n\n    # Metrics information \n    dhcpv4-clients/dhcpv4-client[name=clientName]/state/counters\n\n    # States information\n    dhcpv4-clients/dhcpv4-client[name=clientName]/state/interface\n  ```\n\n  - [DHCPv4 Server](https://github.com/open-traffic-generator/models-yang/blob/main/artifacts/open-traffic-generator-dhcpv4server.txt)\n\n  ```gNMI\n    # Combined metrics and states information\n    dhcpv4-servers/dhcpv4-servers[name=serverName]/state\n\n    # Metrics information\n    dhcpv4-servers/dhcpv4-servers[name=serverName]/state/counters\n\n    # States information\n    dhcpv4-servers/dhcpv4-servers[name=serverName]/state/leases (For now it will return empty responses.)\n  ```\n\n  Note: Support for `GetStates`/`dhcpv4-servers/dhcpv4-servers[name=serverName]/state/leases` of DHCP Server will be provided in subsequent release.\n\n### Bug Fix(s)\n\n* <b><i>UHD400</i></b>: An issue has been fixed where, Despite proper ARP resolution, packets of `flows` of type `device` might not get forwarded by the DUT, resulting in 0 `rx` statistics.\n  This issue is visible for UHD400/ixia-c releases up to `v1.5.0-1`.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `set_control_state.protocol.all.start` can get stuck till the time all DHPCv4 clients receive the leased IPv4 addresses from the DHCPv4 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.5.0-1\n\n> 23rd May, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.5.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.5.0/artifacts/openapi.yaml) |\n| snappi                     | [1.5.0](https://pypi.org/project/snappi/1.5.0)                                                                                              |\n| gosnappi                   | [1.5.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.5.0)                                                        |\n| keng-controller            | [1.5.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                        |\n| ixia-c-traffic-engine      | [1.8.0.7](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                  |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.382](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.5.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.28](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.14.1](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                         |\n| ixia-c-one                 | [1.5.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                            |\n| UHD400                     | [1.2.7](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.2/1.2.7/artifacts.tar)                                  |\n\n# Bug Fix(s)\n\n* <b><i>Ixia-C</i></b>: An issue has been detected whereby some internal certificates used in the ixia-c containerized solution has expired. <b><i>This is fixed in this patch build.</i></b>\n\n  The most common manifestation of this is that despite proper ARP resolution, Traffic Start in tests will fail in combined protocol-engine/traffic-engine setups with `Error occurred while starting flows: [error starting tx port <portname>: unsuccessful Response: MAC address resolution failed for IP: <ip address>  ]`.\n\n  <b><i>This issue should not affect standalone traffic-engine setups using 'port' or raw traffic flows.</i></b>\n\n  This issue is visible for ixia-c community releases starting from `v0.1.0-3` to `v1.4.0-15`.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.4.0-15\n\n> 20th May, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.4.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.4.0/artifacts/openapi.yaml) |\n| snappi                     | [1.4.0](https://pypi.org/project/snappi/1.4.0)                                                                                              |\n| gosnappi                   | [1.4.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.4.0)                                                        |\n| keng-controller            | [1.4.0-15](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                       |\n| ixia-c-traffic-engine      | [1.8.0.3](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                  |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.379](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.4.0-3](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.28](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.13.18](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                        |\n| ixia-c-one                 | [1.4.0-15](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n| UHD400                     | [1.2.7](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.2/1.2.7/artifacts.tar)                                  |\n\n# Bug Fix(s)\n\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne), UHD400</i></b>: Issue is fixed where metric columns were being returned that were not part of the requested metric columns in the `get_metrics` request for `port`/`flow`.\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne), UHD400</i></b> Issue where BGP learned information intermittently fails to correctly fetch information from peers across multiple test ports is fixed.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue where `flow_metrics[i].timestamps.first_timestamp_ns/last_timestamp_ns` is being returned with wrong values is fixed.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.4.0-1\n\n> 7th May, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.4.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.4.0/artifacts/openapi.yaml) |\n| snappi                     | [1.4.0](https://pypi.org/project/snappi/1.4.0)                                                                                              |\n| gosnappi                   | [1.4.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.4.0)                                                        |\n| keng-controller            | [1.4.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                        |\n| ixia-c-traffic-engine      | [1.6.0.167](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.379](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.4.0-2](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.28](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.13.18](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                        |\n| ixia-c-one                 | [1.4.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                            |\n| UHD400                     | [1.2.7](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.2/1.2.7/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne), UHD400</i></b>: Support added for fetching information about received extended community attributes in `get_states` for `bgp_prefixes`.\n\n  - OTG support [details](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/master/artifacts/openapi.yaml&nocors#tag/Monitor/operation/get_states). For more details and example please refer [here](https://github.com/open-traffic-generator/models/pull/374).\n\n    ```\n    monitor/get_state/responses/200/bgp_prefixes/ipv[4|6]_unicast_prefixes/extended_communities\n    ```\n  - gNMI support [details](https://github.com/open-traffic-generator/models-yang/blob/main/artifacts/open-traffic-generator-bgp.txt).\n\n    ```\n      bgp-peers/bgp-peer[name=*]/unicast-ipv4-prefixes/unicast-ipv4-prefix/state/extended-community\n\n      bgp-peers/bgp-peer[name=*]/unicast-ipv6-prefixes/unicast-ipv6-prefix/state/extended-community\n    ```\n\n  Note: To store the received routes, please set `devices[i].bgp.ipv4/v6_interfaces[j].peers[k].learned_information_filter.unicast_ipv4/v6_prefix=true`.\n* <b><i>OTG-gNMI-Server</i></b>: Support added for get software and sdk version of keng-controller. [details](https://github.com/open-traffic-generator/models-yang/blob/main/artifacts/open-traffic-generator-platform.txt)\n\n  * gNMI query path\n    ```\n    /components/component[name=keng-controller]/\n    ```\n\n# Bug Fix(s)\n\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne), UHD400</i></b>: Issue is fixed where metric columns were being returned that were not part of the requested metric columns in the `get_metrics` request for `bgpv4`/`bgpv6`/`isis`/`rsvp`/`lag`/`lacp`.\n* <b><i>Ixia-C</i></b>: Issue is fixed where extended communities of type Transitive IPv4 were being sent with reversed bytes on the wire is fixed.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue where storage of learned LSPs for ISIS was always enabled is now fixed. User can enable it by setting `devices[i].isis.basic.learned_lsp_filter=true`.\n* <b><i>UHD400</i></b>: Issue where tx and rx statistics returned erroneously for multiple runs on same traffic config is now fixed.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.3.0-2\n\n> 19th April, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.3.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.3.0/artifacts/openapi.yaml) |\n| snappi                     | [1.3.0](https://pypi.org/project/snappi/1.3.0)                                                                                              |\n| gosnappi                   | [1.3.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.3.0)                                                        |\n| keng-controller            | [1.3.0-2](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                        |\n| ixia-c-traffic-engine      | [1.6.0.167](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.378](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.3.0-4](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.28](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.13.15](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                        |\n| ixia-c-one                 | [1.3.0-2](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                            |\n| UHD400                     | [1.2.4](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.2/1.2.4/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne), UHD400</i></b>: Support added for advertising Segment Routing Traffic Engineering(SR-TE) policy using `replay_updates`.\n  ```go\n    peer.Capability().SetIpv4SrTePolicy(true) \n    updateReplayBlock := peer.ReplayUpdates().StructuredPdus()\n    adv := updateReplayBlock.Updates().Add()\n    ...\n    adv.PathAttributes().\n      Community().\n      Add().\n      NoAdvertised()\n    ipv4_sr_routes_adv := adv.PathAttributes().\n      MpReach().\n      Ipv4Srpolicy()\n    ipv4_sr_routes_adv.SetEndpoint(\"0.0.0.0\").\n      SetColor(100).\n      SetDistinguisher(1)\n    sr := adv.PathAttributes().\n      TunnelEncapsulation().\n      SrPolicy()\n    sr.Preference().SetValue(3)\n    sr.PolicyName().SetValue(\"TypeA Policy\")\n    ...\n    sr.BindingSegmentIdentifier().Mpls().\n      SetFlagSpecifiedBsidOnly(true).\n      MplsSid().\n      SetLabel(22222)\n    segmentList := sr.SegmentList().Add()\n    segmentList.Weight().\n      SetValue(200)\n    typeA := segmentList.Segments().Add().TypeA()\n    typeA.Flags().\n      SetSFlag(true)\n    typeA.MplsSid().\n      SetLabel(10000)\n    //More segments and segments lists\n  ```\n* <b><i>Ixia-C </i></b>: Support added for zero and custom checksum in `TCP/UDP/ICMPv4/v6/IPv4/GRE` packet templates in flows.\n  ```go\n    udp := cfg.Flows().Add().Packet().Add().Udp()\n    udp.Checksum().SetCustom(0)\n  ```\n* <b><i>Ixia-C </i></b>: DPDK version upgraded from v21.11 to v23.11 for standalone `ixia-c-traffic-engine` container based deployment in DPDK mode.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for IPv4/v6 route ranges with varying number of `communities`/`extended_communities` for BGP/BGP+ peers.\n  ```go\n    route.Communities().Add().\n      SetAsNumber(65534).\n      SetAsCustom(20410).\n      SetType(gosnappi.BgpCommunityType.MANUAL_AS_NUMBER)\n  ```\n\n# Bug Fix(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where sometimes fetching ISIS `get_states` would result in `Error occurred while fetching isis lsps states:Index was outside the bounds of the array` exception.\n* <b><i>Ixia-C, Ixia Chassis & Appliances(Novus, AresOne), UHD400</i></b>: Issue is fixed where sometimes misleading warnings were being returned from `set_config` when running consecutive `replay_updates` tests with different types of BGP peers configured(iBGP/eBGP).\n* <b><i>Ixia-C </i></b>: Memory leak fixed for BGPv4/v6 peers with large number of routes configured.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>UHD400</i></b>: Port statistics are not getting cleared on `SetConfig`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.1.0-21\n\n> 29th March, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.1.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.1.0/artifacts/openapi.yaml) |\n| snappi                     | [1.1.1](https://pypi.org/project/snappi/1.1.1)                                                                                              |\n| gosnappi                   | [1.1.1](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.1.1)                                                        |\n| keng-controller            | [1.1.0-21](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                       |\n| ixia-c-traffic-engine      | [1.6.0.109](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.375](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.1.0-6](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.28](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.13.14](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                        |\n| ixia-c-one                 | [1.1.0-21](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n| UHD400                     | [1.2.4](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.2/1.2.4/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus + AresOne)</i></b>: Support added for BGP/BGP+ update replay. This feature can be used to configure the BGP/BGP+ peer to send series of updates containing advertised or withdrawn IPv4/v6 unicast routes.\n\n  ```go\n    updateReplayBlock := bgpPeer.ReplayUpdates().StructuredPdus()\n    adv := updateReplayBlock.Updates().Add()\n    adv.PathAttributes().SetOrigin(gosnappi.BgpAttributesOrigin.IGP)\n    adv.PathAttributes().AsPath().\n          FourByteAsPath().\n          Segments().\n          Add().\n          SetType(gosnappi.BgpAttributesFourByteAsPathSegmentType.AS_SEQ).\n          SetAsNumbers([]uint32{2222, 1113, 7000, 80000})\n\n    adv.PathAttributes().Community().Add().CustomCommunity().SetAsNumber(65534).SetCustom(\"4FBA\")\n    adv.PathAttributes().Community().Add().CustomCommunity().SetAsNumber(65534).SetCustom(\"AAAA\")\n    ....\n    adv.PathAttributes().MpReach(). NextHop().SetIpv4(\"1.1.1.2\")\n    ipv4_unicast_routes_adv := adv.PathAttributes().MpReach().Ipv4Unicast() \n    ipv4_unicast_routes_adv.Add().SetAddress(\"10.10.10.10\").SetPrefix(32)\n    ...  \n  ```\n* <b><i>UHD400</i></b>: Support added for setting ports state using `set_control_state.port.link.state=up/down`.\n* <b><i>snappi</i></b>: support added for python `v3.12`.\n\n# Bug Fix(s)\n\n* <b><i>Ixia-C</i></b>: Issue where BGP/BGP+ sessions were intermittently flapping for large number of routes such as 1 million is fixed.\n* <b><i>Ixia-C</i></b>: Issue where if `priority` bits were set in VLAN header for incoming ISIS PDUs session was not coming up is fixed.\n* <b><i>Ixia Chassis & Appliances(AresOne)</i></b>: Issue where port stats were not coming for port type `TA1-KD08D` of AresOne is fixed.\n* <b><i>UHD400</i></b>: Intermittent issue where `rx` counters were not being incremented for flow stats is fixed.\n\n#### Known Issues\n\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>UHD400</i></b>: Port statistics are not getting cleared on `SetConfig`.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.1.0-12\n\n> 22nd March, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.1.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.1.0/artifacts/openapi.yaml) |\n| snappi                     | [1.1.0](https://pypi.org/project/snappi/1.1.0)                                                                                              |\n| gosnappi                   | [1.1.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.1.0)                                                        |\n| keng-controller            | [1.1.0-12](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                       |\n| ixia-c-traffic-engine      | [1.6.0.109](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                |\n| keng-app-usage-reporter    | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.370](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.1.0-5](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.28](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.13.13](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                        |\n| ixia-c-one                 | [1.1.0-12](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n| UHD400                     | [1.2.3](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.2/1.2.3/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>UHD400</i></b>: Support for LAG and LACP protocol is added.\n\n  - LACP parameters are supported as per LAG/LACP section in OTG model `<a href=\"https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v1.1.0/openapi.yaml\"><img alt=\"Release v1.1.0\" src=\"https://img.shields.io/badge/release-v1.1.0-brightgreen\">``</a>`\n  - Per Port LACP Metrics can be retrieved using GNMI as per otg-models-yang `<a href=\"https://github.com/open-traffic-generator/models-yang/blob/main/artifacts/open-traffic-generator-lacp.txt\">`details`</a>`.\n  - Per LAG Metrics can be retrieved using GNMI as per otg-models-yang `<a href=\"https://github.com/open-traffic-generator/models-yang/blob/main/artifacts/open-traffic-generator-lag.txt\">`details`</a>`.\n* <b><i>UHD400</i></b>: Support for data traffic over LAG is added for `rx` ports.\n\n#### Known Issues\n\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>UHD400</i></b>: Port statistics are not getting cleared on `SetConfig`.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.1.0-10\n\n> 20th March, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.1.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.1.0/artifacts/openapi.yaml) |\n| snappi                     | [1.1.0](https://pypi.org/project/snappi/1.1.0)                                                                                              |\n| gosnappi                   | [1.1.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.1.0)                                                        |\n| keng-controller            | [1.1.0-10](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                       |\n| ixia-c-traffic-engine      | [1.6.0.109](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                |\n| keng-app-usage-reporter    | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.370](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.1.0-5](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.28](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.13.12](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                        |\n| ixia-c-one                 | [1.1.0-10](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n| UHD400                     | [1.1.1](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.1/1.1.1/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>Ixia-C & UHD400</i></b>: Support added for BGP/BGP+ update replay. This feature can be used to configure the BGP/BGP+ peer to send series of updates containing advertised or withdrawn IPv4/v6 unicast routes.\n\n  ```go\n    updateReplayBlock := bgpPeer.ReplayUpdates().StructuredPdus()\n    adv := updateReplayBlock.Updates().Add()\n    adv.PathAttributes().SetOrigin(gosnappi.BgpAttributesOrigin.IGP)\n    adv.PathAttributes().AsPath().\n          FourByteAsPath().\n          Segments().\n          Add().\n          SetType(gosnappi.BgpAttributesFourByteAsPathSegmentType.AS_SEQ).\n          SetAsNumbers([]uint32{2222, 1113, 7000, 80000})\n    ....\n    adv.PathAttributes().MpReach(). NextHop().SetIpv4(\"1.1.1.2\")\n    ipv4_unicast_routes_adv := adv.PathAttributes().MpReach().Ipv4Unicast() \n    ipv4_unicast_routes_adv.Add().SetAddress(\"10.10.10.10\").SetPrefix(32)\n    ...  \n  ```\n\n  - custom attributes can be added in following manner.\n\n  ```go\n    adv1.PathAttributes().\n            OtherAttributes().Add().\n            SetFlagOptional(true).\n            SetFlagTransitive(true).\n            SetType(8).\n            SetRawValue(\"04ffff0007\")\n  ```\n\n  - Complete custom update packet can be added by using `RawBytes` option as shown below.\n\n  ```go\n    updateReplayBlock := d1BgpIpv4Interface1Peer1.ReplayUpdates().RawBytes()\n        adv1 := updateReplayBlock.Updates().Add()\n        adv1.SetUpdateBytes(\"400101004002004005040\")\n  ```\n* <b><i>Ixia-C</i></b>: Value-list support added for IPv4 `dscp` field.\n\n  ```go\n    flowEth := flow.Packet().Add().Ethernet()\n    .... \n    ipv4 := flow.Packet().Add().ipv4()\n      ipv4.Src().SetValue(srcAddr)\n      ipv4.Dst().SetValue(dstAddr)\n      ipv4.Priority().Dscp().Phb().SetValues([]uint32{10,12,14,18 ...})\n  ```\n* <b><i>OTG-gNMI-Server</i></b>: Support added for `InUpdates`, `OutUpdates`, `InOpens`, `OutOpens`, `InNotifications` and `OutNotifications` for gNMI path `/bgp-peers/bgp-peer/state/counters`.\n\n# Bug Fix(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus + AresOne)</i></b>: Issue where for protocol over LAG scenarios (e.g. BGP over LAG) `get_metrics` was returning empty protocol metrics, is fixed.\n* <b><i>Ixia-C</i></b>: Issue where `get_states.ipv4/v6_neighbors` for interfaces created over LAG was failing, is now fixed.\n* <b><i>Ixia-C</i></b>: Issue where `peers[i].advanced.time_to_live` attribute was not working as expected for BGPv4 peers is fixed.\n\n#### Known Issues\n\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values.\n* <b><i>UHD400</i></b>: Port statistics are not getting cleared on `SetConfig`.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.0.0-104\n\n> 1st March, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.0.2](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.0.2/artifacts/openapi.yaml) |\n| snappi                     | [1.0.2](https://pypi.org/project/snappi/1.0.2)                                                                                              |\n| gosnappi                   | [1.0.2](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.0.2)                                                        |\n| keng-controller            | [1.0.0-104](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                      |\n| ixia-c-traffic-engine      | [1.6.0.109](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                |\n| keng-app-usage-reporter    | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.367](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.0.2-4](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.28](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.13.10](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                        |\n| ixia-c-one                 | [1.0.1-104](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                          |\n| UHD400                     | [1.1.1](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.1/1.1.1/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>UHD400</i></b>: Value-list support added for IPv6 flow label.\n\n  ```go\n    flowEth := flow.Packet().Add().Ethernet()\n    .... \n    ipv6 := flow.Packet().Add().Ipv6()\n      ipv6.Src().SetValue(srcAddr)\n      ipv6.Dst().SetValue(dstAddr)\n      ipv6.FlowLabel().SetValues([]uint32{1000,2000, ...})\n  ```\n* <b><i>UHD400</i></b>: Support added for egress tracking on DSCP field in IPv4 traffic header using Priority.Raw field with appropriate offsets.\n\n  ```go\n    eth := flow.EgressPacket().Add().Ethernet()\n    ipv4 := flow.EgressPacket().Add().Ipv4()\n    ipv4PhbTag := ipv4.Priority().Raw().MetricTags().Add()\n    ipv4PhbTag.SetName(\"flow_ipv4_dscp_phb\")\n    ipv4PhbTag.SetOffset(0)\n    ipv4PhbTag.SetLength(6)\n      ipv4EcnTag := ipv4.Priority().Raw().MetricTags().Add()\n    ipv4EcnTag.SetName(\"flow_ipv4_dscp_ecn\")\n    ipv4EcnTag.SetOffset(6)\n    ipv4EcnTag.SetLength(2)\n  ```\n* <b><i>Ixia Chassis & Appliances(Novus + AresOne), Ixia-C and UHD400</i></b>: Support added for partial Start / Stop for ISIS .\n\n  ```go\n    s := gosnappi.NewControlState()\n    isisRouters := s.Protocol().Isis().Routers()      \n    isisRouters.SetRouterNames(routerNames).SetState(\"up/down\")\n    _ , err := client.Api().SetControlState(s)\n  ```\n* <b><i>Ixia Chassis & Appliances(Novus + AresOne)</i></b>: Support added for partial Start / Stop for BGP.\n\n  ```go\n    s := gosnappi.NewControlState()\n    bgpPeers := s.Protocol().Bgp().Peers()      \n    bgpPeers.SetPeerNames(peerNames).SetState(\"up/down\")\n    _ , err := client.Api().SetControlState(s)\n  ```\n* <b><i>Ixia Chassis & Appliances(Novus + AresOne) and Ixia-C</i></b>: Support for all objects including ERO and RRO are now available for RSVP packet header.\n\n  - User can encode `rsvp` packet using `flows` and invoke `set_control_state.traffic.flow_transmit` to transmit the `rsvp` packets.\n\n  ```go\n    f1.Packet().Add().Ethernet()\n    ip := f1.Packet().Add().Ipv4()\n    ip.Options().Add().SetChoice(\"router_alert\")\n    rsvp := f1.Packet().Add().Rsvp()\n    rsvpPathMsg := rsvp.MessageType().Path()\n    session := rsvpPathMsg.Objects().Add().ClassNum().Session().CType().LspTunnelIpv4()\n    session.Ipv4TunnelEndPointAddress().SetValue(\"2.2.2.2\")\n    session.TunnelId().SetValue(1)\n    session.ExtendedTunnelId().AsIpv4().SetValue(\"1.1.1.1\")\n    rsvpHop := rsvpPathMsg.Objects().Add().ClassNum().RsvpHop().CType().Ipv4()\n    rsvpHop.Ipv4Address().SetValue(\"1.1.2.1\")\n    rsvpPathMsg.Objects().Add().ClassNum().TimeValues()\n    rsvpPathMsg.Objects().Add().ClassNum().LabelRequest()\n    ero := rsvpPathMsg.Objects().Add().ClassNum().ExplicitRoute().CType().Type1()\n    ero.Subobjects().Add().Type().Ipv4Prefix().Ipv4Address().SetValue(\"1.1.3.1\")\n    ero.Subobjects().Add().Type().Ipv4Prefix().Ipv4Address().SetValue(\"1.1.4.1\")\n    sessionAttribute := rsvpPathMsg.Objects().Add().ClassNum().SessionAttribute().CType().LspTunnel()\n    sessionAttribute.SetSessionName(\"otg_test_port\")\n    senderTemplate := rsvpPathMsg.Objects().Add().ClassNum().SenderTemplate().CType().LspTunnelIpv4()\n    senderTemplate.Ipv4TunnelSenderAddress().SetValue(\"1.1.1.1\")\n    senderTemplate.LspId().SetValue(1)\n    senderTspec := rsvpPathMsg.Objects().Add().ClassNum().SenderTspec().CType().IntServ()\n    senderTspec.MaximumPacketSize().SetValue(1500)\n    senderTspec.SetPeakDataRate(1e+10)\n    rro := rsvpPathMsg.Objects().Add().ClassNum().RecordRoute().CType().Type1()\n    rro.Subobjects().Add().Type().Ipv4Address().Ipv4Address().SetValue(\"1.1.1.1\")\n    rro.Subobjects().Add().Type().Ipv4Address().Ipv4Address().SetValue(\"1.1.2.1\")\n  ```\n\n  - Note:\n    - Variable field values within the flow using `increment`, `decrement` and `values` are not supported for `rsvp` fields.\n    - Tracking should not be enabled if intention is for device under test to consume the generated packets.\n\n# Bug Fix(s)\n\n* <b><i>Ixia-C and UHD400</i></b>: Intermittent issue is fixed where for certain ISIS L1+L2 test scenarios, ISIS Hello PDUs were not being transmitted from test ports.\n* <b><i>Ixia-C and UHD400</i></b>: Potential deadlock during `SetConfig` related to creation of interfaces is fixed.\n* <b><i>Ixia-C and UHD400</i></b>: Intermittent issue is fixed where ixia-c-protocol-engine container was restarting during BGP session establishment in certain scenarios.\n* <b><i>Ixia Chassis & Appliances(AresOne)</i></b>: Issue where `SetConfig` returns error `Object reference not set to an instance of an object.` for AresOne ports (QSFP-DD-400GE+200G+100G+50G) is fixed.\n* <b><i>Ixia Chassis & Appliances(Novus + AresOne)</i></b>: Issue where `SetConfig` returns error `Somehow <lag_name> not available within BGP portData` for BGP over LAG is fixed (Please refer to Known Issues section for issue related to BGP metrics returning empty values for BGP over LAG scenario).\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus + AresOne)</i></b>: For protocol over LAG scenarios (e.g. BGP over LAG) `get_metrics` is returning empty protocol metrics.\n* <b><i>Ixia-C</i></b>: Get neighbor states for a LAG member port fails.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.0.0-92\n\n> 22nd February, 2024\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.0.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.0.1/artifacts/openapi.yaml) |\n| snappi                     | [1.0.1](https://pypi.org/project/snappi/1.0.1)                                                                                              |\n| gosnappi                   | [1.0.1](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.0.1)                                                        |\n| keng-controller            | [1.0.0-92](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                       |\n| ixia-c-traffic-engine      | [1.6.0.109](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                |\n| keng-app-usage-reporter    | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.360](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.0.1-4](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.28](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.13.9](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                         |\n| ixia-c-one                 | [1.0.1-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                            |\n| UHD400                     | [1.1.1](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.1/1.1.1/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>UHD400</i></b>: Enabling metric_tags for egress tracking is now supported for ethernet.src/ dst, vlan.id, vlan.priority, ipv4.src/ dst, ipv4.precedence, ipv6.src/ dst, ipv6.traffic_class\n\n  ```go\n  eth := flow.EgressPacket().Add().Ethernet()\n  ipv4 := flow.EgressPacket().Add().Ipv4()\n  ipv4Tag := ipv4.Dst().MetricTags().Add()\n  ipv4Tag.SetName(\"flow_ipv4_dst\")\n  ipv4Tag.SetOffset(22)\n  ipv4Tag.SetLength(10)\n  ```\n\n  - Limitations:\n    - Maximum of 10 tracking bits is supported.\n    - Only a single flow is supported when egress tracking is enabled, except when the tracking header field is Vlan.priority, IPv4.precedence or IPv6.traffic_class. Multiple flows are supported when tracking is enabled on these fields.\n    - Tracking is supported on the last 10 bits of header fields, except for IPv4 src/ dst where first 5 bit tracking is also supported.\n* <b><i>UHD400</i></b>: Support is added for `values` on header fields ethernet.src /dst, ipv4.src /dst, ipv6.src /dst, vlan.id, tcp.src_port, tcp.dst_port, udp.src_port, udp.dst_port.\n* <b><i>Ixia-C</i></b>: Support added for `rsvp` Path Message PDU in raw traffic.\n\n  - User can encode `rsvp` packet using `flows` and invoke `set_control_state.traffic.flow_transmit` to transmit the `rsvp` packets.\n\n  ```go\n    f1.Packet().Add().Ethernet()\n    ip := f1.Packet().Add().Ipv4()\n    ip.Options().Add().SetChoice(\"router_alert\")\n    rsvp := f1.Packet().Add().Rsvp()\n    rsvpPathMsg := rsvp.MessageType().Path()\n    session := rsvpPathMsg.Objects().Add().ClassNum().Session().CType().LspTunnelIpv4()\n    session.Ipv4TunnelEndPointAddress().SetValue(\"2.2.2.2\")\n    session.TunnelId().SetValue(1)\n    session.ExtendedTunnelId().AsIpv4().SetValue(\"1.1.1.1\")\n    rsvpHop := rsvpPathMsg.Objects().Add().ClassNum().RsvpHop().CType().Ipv4()\n    rsvpHop.Ipv4Address().SetValue(\"1.1.2.1\")\n    rsvpPathMsg.Objects().Add().ClassNum().TimeValues()\n    rsvpPathMsg.Objects().Add().ClassNum().LabelRequest()\n    sessionAttribute := rsvpPathMsg.Objects().Add().ClassNum().SessionAttribute().CType().LspTunnel()\n    sessionAttribute.SetSessionName(\"otg_test_port\")\n    senderTemplate := rsvpPathMsg.Objects().Add().ClassNum().SenderTemplate().CType().LspTunnelIpv4()\n    senderTemplate.Ipv4TunnelSenderAddress().SetValue(\"1.1.1.1\")\n    senderTemplate.LspId().SetValue(1)\n    senderTspec := rsvpPathMsg.Objects().Add().ClassNum().SenderTspec().CType().IntServ()\n    senderTspec.MaximumPacketSize().SetValue(1500)\n    senderTspec.SetPeakDataRate(1e+10)\n  ```\n\n  - Note:\n    - Variable field values within the flow using `increment`, `decrement` and `values` are not supported for `rsvp` fields.\n    - Optional objects `ClassNum().ExplicitRoute()` and `ClassNum().RecordRoute()` are not yet supported.\n    - Tracking should not be enabled if intention is for device under test to consume the generated packets.\n\n# Bug Fix(s)\n\n* <b><i>keng-operator</i></b>: Issue is fixed where `Ixia-C` containers would incorrectly signal readiness even when containers were not fully started in kne deployment, resulting in `SetConfig` and licensing errors.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where `SetConfig` fails for a traffic flow where inner header (v4/v6) has DSCP value set.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v1.0.0-7\n\n> 5th February, 2024\n\n#### About\n\nThis release introduces `snappi v1.0` and `keng-controller v1.0`.\nBackwards API compatibility will be maintained within  `1.x` versions of Open Traffic Generator, `go-snappi` and `snappi` APIs.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [1.0.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.0.0/artifacts/openapi.yaml) |\n| snappi                     | [1.0.0](https://pypi.org/project/snappi/1.0.0)                                                                                              |\n| gosnappi                   | [1.0.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.13.7)                                                       |\n| keng-controller            | [1.0.0-7](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                        |\n| ixia-c-traffic-engine      | [1.6.0.109](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                |\n| keng-app-usage-reporter    | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.358](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                              |\n| keng-layer23-hw-server     | [1.0.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                 |\n| keng-operator              | [0.3.22](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                           |\n| otg-gnmi-server            | [1.13.8](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                         |\n| ixia-c-one                 | [1.0.0-7](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                            |\n| UHD400                     | [1.0.28](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.0/1.0.28/artifacts.tar)                                |\n\n# Release Features(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for `snmpv2c` raw traffic.\n\n  - User can encode `snmpv2c` packet using `flows` and invoke `set_control_state.traffic.flow_transmit` to transmit the `snmpv2c` packets.\n\n  ```go\n    flowEth := flow.Packet().Add().Ethernet()\n    .... \n    flowIp := flow.Packet().Add().Ipv4()\n    ....\n    flowUdp := flow.Packet().Add().Udp()\n    ....\n    flowUdp.DstPort().SetValue(uint32(161)) // 161 = SNMP\n    flowSnmpv2c := flow.Packet().Add().Snmpv2C()\n    pdu := flowSnmpv2c.Data().GetRequest()\n    pdu.RequestId().SetValue(77777)\n    varBinds := pdu.VariableBindings().Add()\n    varBinds.SetObjectIdentifier(\n      \"1.3.6....\",\n    )\n  ```\n\n  Note: Variable field values within the same flow using `increment`, `decrement` and `values` are not supported for `snmpv2c` fields.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for `AresOne-M 800G`` load modules. For using this, `IXOS 10.00 `must be installed on the chassis. For other load modules, it will continue to work with`IXOS 9.20 and 9.30` setups.\n\n# Bug Fix(s)\n\n* <b><i>Ixia-C</i></b>: Issue where `set_control_state.port.link.state` was not working when applied to member ports of a LAG is now fixed.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v0.1.0-222\n\n> 19th January, 2024\n\n#### About\n\nThis build includes new features and bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.13.7](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.13.7/artifacts/openapi.yaml) |\n| snappi                     | [0.13.7](https://pypi.org/project/snappi/0.13.7)                                                                                              |\n| gosnappi                   | [0.13.7](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.13.7)                                                        |\n| keng-controller            | [0.1.0-222](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                        |\n| ixia-c-traffic-engine      | [1.6.0.109](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                  |\n| keng-app-usage-reporter    | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.355](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [0.13.7-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.15](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.13.7](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                           |\n| ixia-c-one                 | [0.1.0-222](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                            |\n| UHD400                     | [1.0.28](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.0/1.0.28/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>Ixia-C</i></b>: Support added for `snmpv2c` raw traffic.\n\n  - User can encode `snmpv2c` packet using `flows` and invoke `set_control_state.traffic.flow_transmit` to transmit the `snmpv2c` packets.\n\n  ```go\n    flowEth := flow.Packet().Add().Ethernet()\n    .... \n    flowIp := flow.Packet().Add().Ipv4()\n    ....\n    flowUdp := flow.Packet().Add().Udp()\n    ....\n    flowUdp.DstPort().SetValue(uint32(161)) // 161 = SNMP\n    flowSnmpv2c := flow.Packet().Add().Snmpv2C()\n    pdu := flowSnmpv2c.Data().GetRequest()\n    pdu.RequestId().SetValue(77777)\n    varBinds := pdu.VariableBindings().Add()\n    varBinds.SetObjectIdentifier(\n      \"1.3.6....\",\n    )\n  ```\n\n  Note: Variable field values within the same flow using `increment`, `decrement` and `values` are not supported for `snmpv2c` fields.\n* <b><i>Ixia-C</i></b>: Support added for `ipv4.options` in `ipv4` header of raw traffic.\n\n  - `router_alert` option allows devices to intercept packets not addressed to them directly as defined in RFC2113.\n  - `custom` option is provided for to be able to configure user defined `ipv4.options` as needed.\n\n  ```go\n    // Sample of router_alert option:\n    ip.Options().Add().SetChoice(\"router_alert\")\n\n    // Sample of user defined custom TLV options (Stream ID)\n    ipOptionCustom := ip.Options().Add().SetChoice(\"custom\")\n    ipOptionCustom.Custom().Type().CopiedFlag().SetChoice(\"value\").SetValue(0)\n    ipOptionCustom.Custom().Type().OptionClass().SetChoice(\"value\").SetValue(0)\n    ipOptionCustom.Custom().Type().OptionNumber().SetChoice(\"value\").SetValue(8)\n\n    ipOptionCustom.Custom().Length().SetChoice(\"value\").SetValue(4)\n    ipOptionCustom.Custom().SetValue(\"0088\")\n  ```\n* <b><i>Ixia-C</i></b>: Support added to enable/disable LACP sessions on the fly.\n\n  ```go\n    lagOnlyStart := port2.NewControlState().\n        SetChoice(gosnappi.ControlStateChoice.PROTOCOL)\n    lagMembers := lagOnlyStart.Protocol().\n        Lacp().\n        MemberPorts()\n    lagMembers.\n        SetState(gosnappi.StateProtocolLacpMemberPortsState.UP)\n  ```\n\n# Bug Fix(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue where egress tracking(`metric_tags`) was returning an error when trying to track on 'ipv4.priority.raw'(for DSCP) is fixed.\n* <b><i>Ixia-C</i></b>: Issue where `BGP` AS4 number was being logged incorrectly in `ixia-c-protocol-engine` logs is fixed. [#217](https://github.com/open-traffic-generator/snappi/issues/217)\n* <b><i>Ixia-C</i></b>: Couple of memory leak issues fixed in BGP seen for multiple start/stop of large number of BGP sessions on a port.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v0.1.0-158\n\n> 21st December, 2023\n\n#### About\n\nThis build includes new features and bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.13.4](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.13.4/artifacts/openapi.yaml) |\n| snappi                     | [0.13.4](https://pypi.org/project/snappi/0.13.4)                                                                                              |\n| gosnappi                   | [0.13.4](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.13.4)                                                        |\n| keng-controller            | [0.1.0-158](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                        |\n| ixia-c-traffic-engine      | [1.6.0.109](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                  |\n| keng-app-usage-reporter    | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.348](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [0.13.4-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.14](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.13.4](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                           |\n| ixia-c-one                 | [0.1.0-158](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                            |\n| UHD400                     | [1.0.28](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.0/1.0.28/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>Ixia-C, UHD400, Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for BGP/BGP+ peers to use `custom` ports instead of default `179` tcp port.\n  - Listen Port - TCP port number on which to accept BGP/BGP+ connections from the remote peer.\n  - Neighbor Port - Destination TCP port number to be used by the BGP/BGP+ peer when initiating a session to the remote peer.\n\n  ```go\n    bgpPeer.Advanced().SetListenPort(55555)\n    bgpPeer.Advanced().SetNeighborPort(55555)\n  ```\n* <b><i>Ixia-C</i></b>: Support added to enable/disable BGP/BGP+ peers on the fly.\n  ```go\n    s := gosnappi.NewControlState().             \n        SetChoice(gosnappi.ControlStateChoice.PROTOCOL)\n    bgpPeers := s.Protocol().Bgp().Peers()      \n    bgpPeers.SetPeerNames(peerNames).\n    SetState(gosnappi.StateProtocolBgpPeersState.UP/DOWN)\n    _ , err := client.Api().SetControlState(s)\n  ```\n* Public API in `gosnappi` SDK has been cleaned up and refactored. [PR with the details](https://github.com/open-traffic-generator/snappi/pull/214)\n  - `GosnappiApi` interface is now renamed to `Api` interface.\n  - All public methods for creation of structs are now removed from `GosnappiApi` interface.\n  - There were helper methods defined on each struct which have been reorganized or hidden.\n  - Choice setter `SetChoice()` has been made private and is now implicitly set based on the `choice` property set by the user.\n  - Impact on backward compatibility:\n    - Updating of gosnappi to `0.13.4` or higher will need change of test programs/implementations utilizing `gosnappi` SDK.\n    - If gosnappi is not updated on the client current tests will continue to work with new `keng-controller:0.1.0-158`.\n\n# Bug Fix(s)\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If a port was in link down state, the state was not being cleared on fresh `SetConfig` for `AresOne` ports and `Novus100G` mode, affecting future tests. This issue is fixed.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v0.1.0-84\n\n> 7th December, 2023\n\n#### About\n\nThis build includes new features.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.13.2](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.13.2/artifacts/openapi.yaml) |\n| snappi                     | [0.13.2](https://pypi.org/project/snappi/0.13.2)                                                                                              |\n| gosnappi                   | [0.13.2](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.13.2)                                                        |\n| keng-controller            | [0.1.0-84](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                         |\n| ixia-c-traffic-engine      | [1.6.0.100](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                  |\n| keng-app-usage-reporter    | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.340](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [0.13.2-2](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.13](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.13.2](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                           |\n| ixia-c-one                 | [0.1.0-84](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n| UHD400                     | [1.0.27](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.0/1.0.27/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* <b><i>Ixia-C</i></b>: Support added to trigger link `up/down` on test ports using the API `set_control_state.port.link`. This applicable only when the test port is directly connected to device under test via `veth` connection, e.g in KNE single node cluster, containerlab.\n  ```go\n    portStateAction := gosnappi.NewControlState()\n    linkState := portStateAction.Port().Link().\n                    SetPortNames([]string{port.Name()}).\n                    SetState(gosnappi.StatePortLinkState.DOWN/UP)\n    api.SetControlState(portStateAction)\n  ```\n\n  - It removes the deviation (`deviation_ate_port_link_state_operations_unsupported`) which was added in `featuresprofile` tests for no supporting the LinkState trigger in <b><i>Ixia-C</i></b>.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v0.1.0-81\n\n> 24th November, 2023\n\n#### About\n\nThis build includes new features and bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.13.2](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.13.2/artifacts/openapi.yaml) |\n| snappi                     | [0.13.2](https://pypi.org/project/snappi/0.13.2)                                                                                              |\n| gosnappi                   | [0.13.2](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.13.2)                                                        |\n| keng-controller            | [0.1.0-81](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                         |\n| ixia-c-traffic-engine      | [1.6.0.100](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                  |\n| keng-app-usage-reporter    | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.339](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [0.13.2-2](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.13](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.13.2](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                           |\n| ixia-c-one                 | [0.1.0-81](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n| UHD400                     | [1.0.27](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.0/1.0.27/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* Support for BGP/BGP+ passive mode <b><i>Ixia-C, UHD400 and Ixia Chassis & Appliances(Novus, AresOne)</i></b>. If `passive_mode` of a peer is set to true, it will wait for the remote peer to initiate the BGP session.\n\n  - User needs to set `devices[i].bgp.ipv4/v6_interfaces[j].peers[k].advance.passive_mode` to `true` for enabling passive mode.\n* When `layer1[i].speed` is not explicitly set, the current speed of underlying test interface shall be assumed.\n\n  - This allows setting of `layer1` MTU in tests to run on  setups with different port speeds on <b><i>Ixia-C and Ixia Chassis & Appliances(Novus, AresOne)</i></b> without any modifications.\n    ```go\n      otgConfig.Layer1().Add().\n          SetName(\"layerOne\").\n          SetPortNames(portNames).\n          SetMtu(9000)\n    ```\n  - For traffic with `flow.rate.percentage` specified and `layer1[i].speed` not specified, the rate is now automatically calculated based on the port speed of the port from where traffic is being transmitted.\n\n# Bug Fix(s)\n\n* Issue where `devices[i].bgp.ipv4/v6_interfaces[j].peers[k].v4/v6_routes[m].communities` was not being sent properly for <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b> is now fixed.\n\n#### Known Issues\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v0.1.0-53\n\n> 10th November, 2023\n\n#### About\n\nThis build includes new features and bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.13.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.13.0/artifacts/openapi.yaml) |\n| snappi                     | [0.13.0](https://pypi.org/project/snappi/0.13.0)                                                                                              |\n| gosnappi                   | [0.13.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.13.0)                                                        |\n| keng-controller            | [0.1.0-53](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                         |\n| ixia-c-traffic-engine      | [1.6.0.85](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| keng-app-usage-reporter    | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.337](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [0.13.0-6](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.13](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.13.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                           |\n| ixia-c-one                 | [0.1.0-53](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n| UHD400                     | [1.0.27](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.0/1.0.27/artifacts.tar)                                  |\n\n# Release Features(s)\n\n* Support added for link `up/down` trigger for <b><i>UHD400</i></b>.\n  ```go\n    portStateAction := gosnappi.NewControlState().\n                          Port().\n                          Link().\n                          SetPortNames([]string{\"port1\"}).\n                          SetState(gosnappi.StatePortLinkState.DOWN)\n    gosnappi.setControlState(portStateAction)\n  ```\n* Support added for 0x8100(Vlan) and 0x6007(Google Discovery Protocol) ether types in data plane traffic in <b><i>UHD400</i></b>.\n\n# Bug Fix(s)\n\n* Some tests were failing because packets were not sent on wire due to frame size of flows not being sufficient to include tracking information in <b><i>Ixia Chassis & Appliances(AresOne only)</i></b> is fixed.\n* `egress` tracking on VLAN id or other fields for more than 3 bits was not working in <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>, is fixed.\n  - `egress` tracking now supports upto 11 bits.\n* Issue in ARP resolution in certain cases is now fixed in <b><i>UHD400</i></b>.\n\n#### Known Issues\n\n* If `keng-layer23-hw-server` version is upgraded/downgraded, the ports from Ixia Chassis & Appliances(Novus, AresOne) which will be used from this container must be rebooted once before running the tests.\n* Adding more than 256 devices on a single ixia-c-port causing failure for Ixia Chassis & Appliances(Novus, AresOne).\n* Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* With certain DUTs, ssh service hangs if ISIS L1 MD5 is enabled.\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.1.0-26\n\n> 3rd November, 2023\n\n#### About\n\nThis build includes stability fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.13.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.13.0/artifacts/openapi.yaml) |\n| snappi                     | [0.13.0](https://pypi.org/project/snappi/0.13.0)                                                                                              |\n| gosnappi                   | [0.13.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.13.0)                                                        |\n| keng-controller            | [0.1.0-26](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                         |\n| ixia-c-traffic-engine      | [1.6.0.85](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| keng-app-usage-reporter    | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.337](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [0.13.0-2](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.13](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.13.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                           |\n| ixia-c-one                 | [0.1.0-26](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n| UHD400                     | [1.0.26](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.0/1.0.26/artifacts.tar)                                  |\n\n#### Known Issues\n\n* If `keng-layer23-hw-server` version is upgraded/downgraded, the ports from Ixia Chassis & Appliances(Novus, AresOne) which will be used from this container must be rebooted once before running the tests.\n* Adding more than 256 devices on a single ixia-c-port causing failure for Ixia Chassis & Appliances(Novus, AresOne).\n* Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* With certain DUTs, ssh service hangs if ISIS L1 MD5 is enabled.\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.1.0-3\n\n> 20th October, 2023\n\n#### About\n\nThis build includes new features, stability and bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.13.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.13.0/artifacts/openapi.yaml) |\n| snappi                     | [0.13.0](https://pypi.org/project/snappi/0.13.0)                                                                                              |\n| gosnappi                   | [0.13.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.13.0)                                                        |\n| keng-controller            | [0.1.0-3](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)                                          |\n| ixia-c-traffic-engine      | [1.6.0.85](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| keng-app-usage-reporter    | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.337](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)                                |\n| keng-layer23-hw-server     | [0.13.0-2](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)                                  |\n| keng-operator              | [0.3.13](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)                                             |\n| otg-gnmi-server            | [1.13.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)                                           |\n| ixia-c-one                 | [0.1.0-3](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                              |\n\n#### Release Feature(s)\n\n* Ixia-C now offers following existing licensed features free for community use (without requiring Keysight Licensing Solution):\n  1. `ixia-c-protocol-engine`, which enables control plane emulation in Ixia-C is now publicly downloadable.\n  2. Emulation of one or more IPv4 and IPv6 interfaces with Address Resolution Protocol (ARP) and Neighbor Discovery (ND), respectively, is now supported.\n  3. Automatic destination MAC address resolution for flows with IPv4 / IPv6 endpoints is now supported.\n  4. Configuring one BGP session over IPv4 / IPv6, advertising V4 / V6 routes is now supported.\n* Users exercising full feature set ([Keysight Elastic Network Generator aka KENG](https://www.keysight.com/us/en/products/network-test/protocol-load-test/keysight-elastic-network-generator.html)) will now have to subscribe to Keysight Licensing Solution. Please reach out to Keysight for more details.\n* `keng-layer23-hw-server`, which facilitates control and data plane operations on **Ixia Chassis & Appliances(Novus, AresOne)** is now publicly downloadable (but can only be used with Keysight Licensing Solution)\n* Support is added for overload bit and extended ipv4 reachability in `get_states` for isis_lsps in **Ixia Chassis & Appliances(Novus, AresOne)**; gNMI path for `isis_lsps`:\n  ```\n    +--rw isis-routers\n      +--ro isis-router* [name]\n          +--ro name     -> ../state/name\n          +--ro state\n            +--ro name?                  string\n            .\n            .\n            +--ro link-state-database\n                +--ro lsp-states\n  ```\n\n> The container image paths have changed for some Ixia-C artifacts. Please review **Build Details** for correct paths.\n\n#### Bug Fix(s)\n\n* Memory leak in **Ixia Chassis & Appliances(Novus, AresOne)** is fixed for long duration tests.\n* `gosnappi` now correctly validates required primitive types when they're not explicitly set by users.\n* IS-IS metric is no longer sent as 63 when configured as 200 (or more than 63) with wide metrics enabled on **Ixia Chassis & Appliances(Novus, AresOne)**.\n\n#### Known Issues\n\n* If `keng-layer23-hw-server` version is upgraded/downgraded, the ports from Ixia Chassis & Appliances(Novus, AresOne) which will be used from this container must be rebooted once before running the tests.\n* Adding more than 256 devices on a single ixia-c-port causing failure for Ixia Chassis & Appliances(Novus, AresOne).\n* Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* With certain DUTs, ssh service hangs if ISIS L1 MD5 is enabled.\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-4554\n\n> 29th September, 2023\n\n#### About\n\nThis build includes bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.12.5](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.12.5/artifacts/openapi.yaml) |\n| snappi                     | [0.12.6](https://pypi.org/project/snappi/0.12.6)                                                                                              |\n| gosnappi                   | [0.12.6](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.12.6)                                                        |\n| ixia-c-controller          | [0.0.1-4554](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.85](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.331](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-ixhw-server         | [0.12.5-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                      |\n| ixia-c-operator            | [0.3.6](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.12.7](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                        |\n| ixia-c-one                 | [0.0.1-4554](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n\n#### Bug Fix(s)\n\n* `monitor.flow_metrics` will now correctly reports `bytes_tx`.\n* The VLAN TPID field in flow packet header configuration is now set to correct default of 65535 when it’s not encapsulating known protocol header.\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-4478\n\n> 14th September, 2023\n\n#### About\n\nThis build includes stability fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.12.3](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.12.3/artifacts/openapi.yaml) |\n| snappi                     | [0.12.3](https://pypi.org/project/snappi/0.12.3)                                                                                              |\n| gosnappi                   | [0.12.3](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.12.3)                                                        |\n| ixia-c-controller          | [0.0.1-4478](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.45](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.326](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-ixhw-server         | [0.12.3-2](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                      |\n| ixia-c-operator            | [0.3.6](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.12.5](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                        |\n| ixia-c-one                 | [0.0.1-4478](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-4435\n\n> 1st September, 2023\n\n#### About\n\nThis build includes bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.12.2](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.12.2/artifacts/openapi.yaml) |\n| snappi                     | [0.12.2](https://pypi.org/project/snappi/0.12.2)                                                                                              |\n| gosnappi                   | [0.12.2](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.12.2)                                                        |\n| ixia-c-controller          | [0.0.1-4435](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.35](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.325](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-ixhw-server         | [0.12.2-2](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                      |\n| ixia-c-operator            | [0.3.4](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.12.4](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                        |\n| ixia-c-one                 | [0.0.1-4435](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n| `                          |                                                                                                                                            |\n\n#### Bug Fix(s)\n\n* `set_config` fails with `unsuccessful Response: RX runtime not configured for port: ` if large port testbed is used on subsequent test runs is fixed.\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-4399\n\n> 21st August, 2023\n\n#### About\n\nThis build includes new features.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.12.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.12.1/artifacts/openapi.yaml) |\n| snappi                     | [0.12.1](https://pypi.org/project/snappi/0.12.1)                                                                                              |\n| gosnappi                   | [0.12.1](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.12.1)                                                        |\n| ixia-c-controller          | [0.0.1-4399](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.35](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.320](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-ixhw-server         | [0.12.1-2](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                      |\n| ixia-c-operator            | [0.3.4](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.12.2](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                        |\n| ixia-c-one                 | [0.0.1-4399](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n| `                          |                                                                                                                                            |\n\n# Release Feature(s)\n\n* Support for deprecated control, action and update APIs (`set_transmit_state`, `set_link_state`, `set_capture_state`, `update_flows`, `set_route_state`, `send_ping`, `set_protocol_state`, `set_device_state`) have been removed. Please use following `set_control_state`, `set_control_action` and `update_config` APIs instead of the previous ones. Please refer to [go utils](https://github.com/open-traffic-generator/conformance/commit/ecffd7edf93a4e60105a263cc7a074e2abe26ae4#diff-2f28df5cf5ed455b[…]c48b9ac5ef7ac25e5a018a) and [python utils](https://github.com/open-traffic-generator/conformance/commit/ecffd7edf93a4e60105a263cc7a074e2abe26ae4#diff-205d55e3f01484e637c6b5b597a6dfb44e74638964605a23b20d5fa72e773a38) for further details usage.\n* Most properties in OTG with integer data type have been assigned correct integer format (from `uint32`, `uint64`, `int32` and `int64`). Please [click here](https://github.com/open-traffic-generator/models/pull/301) to examine all changes.\n* Once you upgrade the new ixia-c release, in addition to removing the deprecated APIs from the test programs, data types of some variables in the test programs might need to be changed to avoid compilation errors.\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-4306\n\n> 4th August, 2023\n\n#### About\n\nThis build includes stability fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                      |\n| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.11.11](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.11/artifacts/openapi.yaml) |\n| snappi                     | [0.11.17](https://pypi.org/project/snappi/0.11.17)                                                                                              |\n| gosnappi                   | [0.11.17](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.11.17)                                                        |\n| ixia-c-controller          | [0.0.1-4306](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                       |\n| ixia-c-traffic-engine      | [1.6.0.35](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                     |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.318](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                       |\n| ixia-c-ixhw-server         | [0.11.11-2](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                       |\n| ixia-c-operator            | [0.3.4](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                              |\n| ixia-c-gnmi-server         | [1.11.16](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                         |\n| ixia-c-one                 | [0.0.1-4306](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n| `                          |                                                                                                                                              |\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-4167\n\n> 21st July, 2023\n\n#### About\n\nThis build includes new features.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                      |\n| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.11.10](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.10/artifacts/openapi.yaml) |\n| snappi                     | [0.11.16](https://pypi.org/project/snappi/0.11.16)                                                                                              |\n| gosnappi                   | [0.11.16](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.11.16)                                                        |\n| ixia-c-controller          | [0.0.1-4167](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                       |\n| ixia-c-traffic-engine      | [1.6.0.35](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                     |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.316](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                       |\n| ixia-c-ixhw-server         | [0.11.10-13](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                      |\n| ixia-c-operator            | [0.3.4](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                              |\n| ixia-c-gnmi-server         | [1.11.16](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                         |\n| ixia-c-one                 | [0.0.1-4167](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n\n# Release Feature(s)\n\n* Enabling `metric_tags` for egress tracking is now also supported on ipv6.src/dst, ipv6.traffic_class, ipv6.flow_label and ipv6.payload_length. <b><i>[Ixia-C]</i></b>\n  ```go\n    eth := flow.EgressPacket().Add().Ethernet()\n    ipv6 := flow.EgressPacket().Add().Ipv6()\n    ipv6Tag := ipv6.Dst().MetricTags().Add()\n    ipv6Tag.SetName(\"flow_ipv6_dst\")\n    ipv6Tag.SetOffset(120)\n    ipv6Tag.SetLength(8)\n  ```\n* Support is available in gNMI to fetch the drill-down statistics for egress tracking as follows <b><i>[Ixia-C]</i></b> [details](https://github.com/open-traffic-generator/models-yang/blob/main/artifacts/open-traffic-generator-flow.txt):\n  ```\n    1. Flow level metrics + Tagged Metrics:\n        example path: \"flows/flow[name=f1]“\n    2. Only Flow level metrics:\n        example path: \"flows/flow[name=f1]/state“\n    3. Only Tagged metrics \n        example path: \"flows/flow[name=f1]/tagged-metrics“\n    4. Filtered Tagged metrics: \n        example path: \"flows/flow[name=f1]/tagged-metrics/tagged-metric[name-value-pairs=flow_ipv6_dst=0x2]”\n  ```\n\n# Bug Fix(s)\n\n* For `flow.duration.continuous` type of traffic in Ixia-C, intermittent issue where last few packets in a traffic flow were not accounted for in `flow_metrics.frames_rx` statistics after stopping a flow is fixed.\n* Proper error mesage is propagated to user if user has used community edition of Ixia-C (instead of licensed edition) and invoked any API/Configuration not supported by it.\n  example: `Device configuration is not supported in free version of controller.`\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-4139\n\n> 29th June, 2023\n\n#### About\n\nThis build includes new features.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                      |\n| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.11.10](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.10/artifacts/openapi.yaml) |\n| snappi                     | [0.11.16](https://pypi.org/project/snappi/0.11.16)                                                                                              |\n| gosnappi                   | [0.11.16](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.11.16)                                                        |\n| ixia-c-controller          | [0.0.1-4139](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                       |\n| ixia-c-traffic-engine      | [1.6.0.35](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                     |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.315](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                       |\n| ixia-c-ixhw-server         | [0.11.10-2](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                       |\n| ixia-c-operator            | [0.3.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                              |\n| ixia-c-gnmi-server         | [1.11.16](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                         |\n| ixia-c-one                 | [0.0.1-4139](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n\n# Release Features(s)\n\n* Support added for multiple Rx endpoints both port traffic.\n\n  ```go\n  // Port Traffic\n  flow.SetName(\"flow:p1->p2,p3\").\n    TxRx().Port().\n    SetTxName(\"p1\").\n    SetRxNames([]string{\"p2\", \"p3\"})\n  ```\n* Support added for Rx port disaggregation of flow metrics.\n\n  ```go\n  flow := config.Flows().Add().SetName(\"flow\")\n  flow.Metrics(). PredefinedMetricTags().SetRxName(true)\n  ```\n\n  ```json\n  // gNMI state fetch on flows will show the drilldown as given below\n  \"updates\": [\n    {\n    \"Path\": \"flows/flow[name=f1]\",\n    \"values\": {\n      \"flows/flow\": {\n      \"open-traffic-generator-flow:name\": \"f1\",\n      \"open-traffic-generator-flow:state\": {                     // Contains the aggregated per-flow stats\n        ....\n      },\n      \"open-traffic-generator-flow:tag-metrics\": {              // Contains the disaggregated per-flow stats\n        \"tag-metric\": [\n        {\n          \"name-value\": \"rx_name=p2\",\n          \"state\": {\n            ....\n            \"name-value\": \"rx_name=p2\",\n            \"tags\": [\n              {\n              \"tag-name\": \"rx_name\",\n              \"tag-value\": \n                {\n                  \"value-as-string\": \"p2\",\n                  \"value-type\": \"STRING\"\n                }\n          ....\n        },\n        {\n          \"name-value\": \"rx_name=p3\",\n          \"state\": {\n            ....\n          }\n        }\n      ....\n    }\n  ]\n  ```\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-4124\n\n> 16th June, 2023\n\n#### About\n\nThis build includes new features.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.11.9](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.9/artifacts/openapi.yaml) |\n| snappi                     | [0.11.15](https://pypi.org/project/snappi/0.11.14)                                                                                            |\n| gosnappi                   | [0.11.15](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.11.14)                                                      |\n| ixia-c-controller          | [0.0.1-4124](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.35](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.310](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-ixhw-server         | [0.11.9-6](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                      |\n| ixia-c-operator            | [0.3.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.11.14](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                       |\n| ixia-c-one                 | [0.0.1-4124](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n\n# Release Features(s)\n\n* Support added for weighted pairs for packet size distribution in traffic flows.\n  - `predefined` packet size distributions supported are `imix`, `ipsec_imix`, `ipv6_imix`, `standard_imix`, `tcp_imix`. It can be configured as follows:\n    ```go\n      myFlow.Size().WeightPairs().SetPredefined(gosnappi.FlowSizeWeightPairsPredefined.IMIX)\n    ```\n  - Custom packet size distribution is also supported. It can configured as follows,\n    ```go\n      customWeightPairs := myFlow.Size().WeightPairs().Custom()\n      customWeightPairs.Add().SetSize(64).SetWeight(7)\n      customWeightPairs.Add().SetSize(570).SetWeight(4)\n      customWeightPairs.Add().SetSize(1518).SetWeight(1)\n    ```\n* Support is added for egress tracking based on IPv4 total length.\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-4080\n\n> 2nd June, 2023\n\n#### About\n\nThis build includes bug fix.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.11.9](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.9/artifacts/openapi.yaml) |\n| snappi                     | [0.11.15](https://pypi.org/project/snappi/0.11.14)                                                                                            |\n| gosnappi                   | [0.11.15](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.11.14)                                                      |\n| ixia-c-controller          | [0.0.1-4080](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.35](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.02.21.29](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-ixhw-server         | [0.11.9-3](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                      |\n| ixia-c-operator            | [0.3.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.11.14](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                       |\n| ixia-c-one                 | [0.0.1-4080](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-4064\n\n> 18th May, 2023\n\n#### About\n\nThis build includes bug fix.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.11.8](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.8/artifacts/openapi.yaml) |\n| snappi                     | [0.11.14](https://pypi.org/project/snappi/0.11.14)                                                                                            |\n| gosnappi                   | [0.11.14](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.11.14)                                                      |\n| ixia-c-controller          | [0.0.1-4064](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.35](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.02.21.17](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-ixhw-server         | [0.11.8-12](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                     |\n| ixia-c-operator            | [0.3.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.11.13](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                       |\n| ixia-c-one                 | [0.0.1-4064](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n\n# Bug Fix(s)\n\n* [Stop exposing TLS 1.0/1.1 ](https://github.com/open-traffic-generator/ixia-c/issues/125) in `ixia-c-controller`.\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-4013\n\n> 5th May, 2023\n\n#### About\n\nThis build includes new features.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.11.8](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.8/artifacts/openapi.yaml) |\n| snappi                     | [0.11.14](https://pypi.org/project/snappi/0.11.14)                                                                                            |\n| gosnappi                   | [0.11.14](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.11.14)                                                      |\n| ixia-c-controller          | [0.0.1-4013](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.35](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.299](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-ixhw-server         | [0.11.8-8](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                      |\n| ixia-c-operator            | [0.3.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.11.13](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                       |\n| ixia-c-one                 | [0.0.1-4013](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n\n# Release Features(s)\n\n* Egress tracking now also supports tracking for `vlan`, `mpls` packet headers.\n* Support added in `ixia-c-gnmi-server` for fetching Latency measurements.\n  - User can enable latency measurement by setting `f1.Metrics().SetEnable(true).Latency().SetEnable(true)`.\n    - Only `cut_through` latency mode  is supported.\n  - User can fetch latency measurements using given models-yang path.\n    ```\n      module: open-traffic-generator-flow\n      +--rw flows\n        +--ro flow* [name]\n            +--ro name              -> ../state/name\n            +--ro state\n            |  ....\n            |  ....\n            |  +--ro minimum-latency?   otg-types:timeticks64\n            |  +--ro maximum-latency?   otg-types:timeticks64\n            |  +--ro average-latency?   otg-types:timeticks64\n            |  ....\n            |  ....\n\n    ```\n\n# Bug Fix(s)\n\n* Intermittent crash in ixia-c-controller while fetching `flow_metrics` is fixed.\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-3927\n\n> 24th April, 2023\n\n#### About\n\nThis build includes new features.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.11.8](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.8/artifacts/openapi.yaml) |\n| snappi                     | [0.11.14](https://pypi.org/project/snappi/0.11.14)                                                                                            |\n| gosnappi                   | [0.11.14](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.11.14)                                                      |\n| ixia-c-controller          | [0.0.1-3927](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.35](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.298](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-ixhw-server         | [0.11.8-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                      |\n| ixia-c-operator            | [0.3.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.11.10](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                       |\n| ixia-c-one                 | [0.0.1-3927](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n\n# Release Features(s)\n\n* A new property `egress_packet` inside flow has been introduced to configure expected packet shape as it is received on the test port.\n  ``go eth := flow.EgressPacket().Add().Ethernet() ipv4 := flow.EgressPacket().Add().Ipv4() ``\n* A new property `metric_tags` has been introduced for fields inside headers configured in `egress_packet` to enable tracking metrics for each applicable value corresponding to a portion of or all bits inside the field.\n\n  ```go\n    ipv4Tag := ipv4.Dst().MetricTags().Add()\n    ipv4Tag.SetName(\"flow_ipv4_dst\")\n    ipv4Tag.SetOffset(24)\n    ipv4Tag.SetLength(8)\n  ```\n\n  - As of this release, enabling metric_tags is only supported on ethernet.src/dst, ipv4.src/dst, ipv4.tos. Support for more fields shall be added in upcoming releases.\n  - Limitations:\n\n    - The total number of tracking bits available on an ixia-c Rx port is 12 bits. Out of these some of the bits are needed for tracking flows, example 2 flows need 1 bit, 4 flows need 2 bits, 8 flows need 3 bits etc. The sum of `metric_tag.length` for each field inside each header configured in `egress_packet` cannot exceed the remaining bits available on the Rx port.\n    - The total number of tracking fields that can be configured across a set of flows which have the same Rx port, is two.\n* A new property is introduced in `get_metrics.flow` to fetch tagged metrics.\n\n- User can set `get_metrics.flow.tagged_metrics.include=false` not to include `tagged_metrics` in the `flow_metrics` response.\n- Specific `tagged_metrics` can be fetched by setting `get_metrics.flow.tagged_metrics.filters[i].name`.\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-3889\n\n> 31st March, 2023\n\n#### About\n\nThis build includes new features.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.11.4](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.4/artifacts/openapi.yaml) |\n| snappi                     | [0.11.6](https://pypi.org/project/snappi/0.11.6)                                                                                              |\n| gosnappi                   | [0.11.6](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.11.6)                                                        |\n| ixia-c-controller          | [0.0.1-3889](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.35](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.290](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-ixhw-server         | [0.11.4-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                      |\n| ixia-c-operator            | [0.3.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.11.5](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                        |\n| ixia-c-one                 | [0.0.1-3889](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n\n### Features(s)\n\n* All API response errors over gRPC and HTTP transport can now be inspected like so:\n\n  ```snappi\n      # snippet of error handling in snappi\n      try:\n      # call set config\n      api.set_config(payload)\n      except Exception as e:\n          err = api.from_exception(e)  # helper function to parse exception\n          if err is not None: # exception was of otg error format\n              print(err.code)\n              print(err.errors)\n          else: # some other exception\n              print(e)\n  ```\n\n  ```gosnappi\n      // gosnappi snippet for error handling\n      resp, err := api.SetConfig(config)\n      if err != nil {\n          // helper function to parse error\n          // retuns a bool with err, indicating wheather the error was of otg error format \n          errSt, ok := api.FromError(err)\n          if ok {\n              fmt.Println(errSt.Code())\n              if errSt.errSt.HasKind() {\n              fmt.Println(errSt.Kind())\n              }\n              fmt.Println(errSt.Errors())\n          } else {\n              fmt.Println(err.Error())\n          }\n      }\n  ```\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-3865\n\n> 16th March, 2023\n\n#### About\n\nThis build includes new features.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.11.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.11.1/artifacts/openapi.yaml) |\n| snappi                     | [0.11.1](https://pypi.org/project/snappi/0.11.1)                                                                                              |\n| gosnappi                   | [0.11.1](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.11.1)                                                        |\n| ixia-c-controller          | [0.0.1-3865](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.35](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.283](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-ixhw-server         | [0.11.1-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                      |\n| ixia-c-operator            | [0.3.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.11.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                        |\n| ixia-c-one                 | [0.0.1-3865](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n\n### Features(s)\n\n* Warning messages shall now be automatically printed on STDOUT if a property or an API with status deprecated or under-review is exercised in `snappi` / `gosnappi`. This may also lead to linters raising deprecation error.\n* New API endpoints `/control/state` and `/control/action` have been exposed consolidating pre-existing API endpoints inside `/control/` (now deprecated) in order to reduce API surface and introducing clean organization. Please see [snappi-tests utils](https://github.com/open-traffic-generator/snappi-tests/blob/main/tests/utils/common.py) for usage.\n* API endpoints `/results/*` have now been renamed to `/monitor/*` .\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-3841\n\n> 3rd March, 2023\n\n#### Announcement\n\n`ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages), We stopped publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom).\n\n#### About\n\nThis build includes new features.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                      |\n| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.10.12](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.10.12/artifacts/openapi.yaml) |\n| snappi                     | [0.10.9](https://pypi.org/project/snappi/0.10.9)                                                                                                |\n| gosnappi                   | [0.10.9](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.10.9)                                                          |\n| ixia-c-controller          | [0.0.1-3841](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                       |\n| ixia-c-traffic-engine      | [1.6.0.35](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                     |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                                 |\n| ixia-c-protocol-engine     | [1.00.0.279](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                       |\n| ixia-c-ixhw-server         | [0.10.12-2](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                       |\n| ixia-c-operator            | [0.3.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                              |\n| ixia-c-gnmi-server         | [1.10.19](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                         |\n| ixia-c-one                 | [0.0.1-3841](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                             |\n\n### Features(s)\n\n* API version compatibility check is now automatically performed between ixia-c containers upon API calls to `ixia-c-controller` . It can be disabled by booting `ixia-c-controller` container with `--disable-version-check` flag.\n* API version compatibility check can now be automatically performed between `snappi`/`gosnappi` and ixia-c-controller upon API calls by enabling version check flag in API handle like so:\n\n  - gosnappi\n\n  ```\n      api := gosnappi.NewApi()\n      api.SetVersionCompatibilityCheck(true)\n  ```\n\n  - snappi\n\n  ```\n      api = snappi.api(version_check=True)\n  ```\n\n  In upcoming releases, this will be enabled by default.\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-3807\n\n> 17th February, 2023\n\n#### Announcement\n\n`ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages), We stopped publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom).\n\n#### About\n\nThis build contains bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.10.9](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.10.9/artifacts/openapi.yaml) |\n| snappi                     | [0.10.7](https://pypi.org/project/snappi/0.10.7)                                                                                              |\n| gosnappi                   | [0.10.7](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.10.7)                                                        |\n| ixia-c-controller          | [0.0.1-3807](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.30](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.271](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-ixhw-server         | [0.10.7-8](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                      |\n| ixia-c-operator            | [0.3.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.10.14](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                       |\n| ixia-c-one                 | [0.0.1-3807](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n\n### Bug Fix(s)\n\n* Concurrent API calls (where at least one call was `set_config`) to `ixia-c-controller` was resulting in crash.\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-3767\n\n> 2nd February, 2023\n\n#### Announcement\n\n`ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages), We stopped publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom).\n\n#### About\n\nThis build contains bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.10.7](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.10.7/artifacts/openapi.yaml) |\n| snappi                     | [0.10.5](https://pypi.org/project/snappi/0.10.5)                                                                                              |\n| gosnappi                   | [0.10.5](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.10.5)                                                        |\n| ixia-c-controller          | [0.0.1-3768](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.29](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.271](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-ixhw-server         | [0.10.7-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                      |\n| ixia-c-operator            | [0.3.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.10.8](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                        |\n| ixia-c-one                 | [0.0.1-3768](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n\n### Bug Fix(s)\n\n* Issue where TCP header length was not set correctly is fixed. [#117](https://github.com/open-traffic-generator/ixia-c/issues/117)\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n* [#118](https://github.com/open-traffic-generator/ixia-c/issues/118)\n\n## Release  v0.0.1-3724\n\n> 20th January, 2023\n\n#### Announcement\n\n`ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages), We stopped publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom).\n\n#### About\n\nThis build contains bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.10.6](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.10.6/artifacts/openapi.yaml) |\n| snappi                     | [0.10.4](https://pypi.org/project/snappi/0.10.4)                                                                                              |\n| gosnappi                   | [0.10.4](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.10.4)                                                        |\n| ixia-c-controller          | [0.0.1-3724](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.24](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.256](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-ixhw-server         | [0.10.6-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-ixhw-server)                                      |\n| ixia-c-operator            | [0.3.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.10.6](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                        |\n| ixia-c-one                 | [0.0.1-3722](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n\n### Bug Fix(s)\n\n* Payload size field in all inner headers for tunneling protocols do not take into account inner FCS is fixed. [#112](https://github.com/open-traffic-generator/ixia-c/issues/112)\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v0.0.1-3698\n\n> 15th December, 2022\n\n#### Announcement\n\n`ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages), We stopped publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom).\n\n#### About\n\nThis build contains stability fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.10.5](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.10.5/artifacts/openapi.yaml) |\n| snappi                     | [0.10.3](https://pypi.org/project/snappi/0.10.3)                                                                                              |\n| gosnappi                   | [0.10.3](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.10.3)                                                        |\n| ixia-c-controller          | [0.0.1-3698](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.19](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.252](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-operator            | [0.3.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.10.5](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                        |\n| ixia-c-one                 | [0.0.1-3698](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v0.0.1-3662\n\n> 1st December, 2022\n\n#### Announcement\n\n`ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages). However we will continue publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom) until 18th November, 2022.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                    |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Open Traffic Generator API | [0.9.10](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.9.10/artifacts/openapi.yaml) |\n| snappi                     | [0.9.8](https://pypi.org/project/snappi/0.9.8)                                                                                                |\n| gosnappi                   | [0.9.8](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.9.8)                                                          |\n| ixia-c-controller          | [0.0.1-3662](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                     |\n| ixia-c-traffic-engine      | [1.6.0.19](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                   |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                               |\n| ixia-c-protocol-engine     | [1.00.0.243](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                     |\n| ixia-c-operator            | [0.3.0](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                            |\n| ixia-c-gnmi-server         | [1.9.9](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                         |\n| ixia-c-one                 | [0.0.1-3662](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                           |\n\n### Features(s)\n\n* `ixia-c-controller` now runs with a non-root user inside the container (instead of root user previously)\n* `ixia-c-controller` now listens on non-privileged HTTPs port 8443 (instead of 443 previously)\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v0.0.1-3619\n\n> 10th November, 2022\n\n#### Announcement\n\n`ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages). However we will continue publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom) until 18th November, 2022.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.9.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.9.1/artifacts/openapi.yaml) |\n| snappi                     | [0.9.4](https://pypi.org/project/snappi/0.9.4)                                                                                              |\n| gosnappi                   | [0.9.4](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.9.4)                                                        |\n| ixia-c-controller          | [0.0.1-3619](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                   |\n| ixia-c-traffic-engine      | [1.6.0.19](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                 |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                             |\n| ixia-c-protocol-engine     | [1.00.0.238](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                   |\n| ixia-c-operator            | [0.2.6](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                          |\n| ixia-c-gnmi-server         | [1.9.7](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                       |\n| ixia-c-one                 | [0.0.1-3619](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                         |\n\n### Features(s)\n\n* `ixia-c-controller` and `ixia-c-gnmi-server` can now accept the environment variables `HTTP_PORT` and `HTTP_SERVER` respectively, overriding the values provided for corresponding arguments `--http-port` and `--http-server`.\n* `ixia-c-controller` and `ixia-c-gnmi-server` can now be run using an arbitrary UID (user ID), to support deployment in OpenShift environment.\n\n#### Bug Fix(s)\n\n* Fixed [#15](https://github.com/open-traffic-generator/ixia-c-operator/issues/15).\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v0.0.1-3587\n\n> 28th October, 2022\n\n#### Announcement\n\n`ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages). However we will continue publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom) until 18th November, 2022.\n\n#### About\n\nThis build contains bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.9.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.9.1/artifacts/openapi.yaml) |\n| snappi                     | [0.9.4](https://pypi.org/project/snappi/0.9.4)                                                                                              |\n| gosnappi                   | [0.9.4](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.9.4)                                                        |\n| ixia-c-controller          | [0.0.1-3587](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                   |\n| ixia-c-traffic-engine      | [1.6.0.19](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                 |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                             |\n| ixia-c-protocol-engine     | [1.00.0.236](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                   |\n| ixia-c-operator            | [0.2.5](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                          |\n| ixia-c-gnmi-server         | [1.9.5](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                       |\n| ixia-c-one                 | [0.0.1-3587](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                         |\n\n#### Bug Fix(s)\n\n* [#101](https://github.com/open-traffic-generator/ixia-c/issues/101) fixed.\n\n#### Known Issues\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v0.0.1-3423\n\n> 29th September, 2022\n\n#### Announcement\n\n`ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages). However we will continue publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom) until 18th November, 2022.\n\n#### About\n\nThis build contains stability fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.9.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.9.1/artifacts/openapi.yaml) |\n| snappi                     | [0.9.4](https://pypi.org/project/snappi/0.9.4)                                                                                              |\n| gosnappi                   | [0.9.4](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.9.4)                                                        |\n| ixia-c-controller          | [0.0.1-3423](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                   |\n| ixia-c-traffic-engine      | [1.6.0.19](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                 |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                             |\n| ixia-c-protocol-engine     | [1.00.0.232](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                   |\n| ixia-c-operator            | [0.2.2](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                          |\n| ixia-c-gnmi-server         | [1.9.5](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                       |\n| ixia-c-one                 | [0.0.1-3423](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                         |\n\n#### Known Limitations\n\n* Supported value for `flows[i].metrics.latency.mode` is `cut_through`.\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets.\n\n## Release  v0.0.1-3383\n\n> 16th September, 2022\n\n#### Announcement\n\n`ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages). However we will continue publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom) until 18th November, 2022.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.9.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.9.1/artifacts/openapi.yaml) |\n| snappi                     | [0.9.4](https://pypi.org/project/snappi/0.9.4)                                                                                              |\n| gosnappi                   | [0.9.4](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.9.4)                                                        |\n| ixia-c-controller          | [0.0.1-3383](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                   |\n| ixia-c-traffic-engine      | [1.6.0.17](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                 |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                             |\n| ixia-c-protocol-engine     | [1.00.0.225](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                   |\n| ixia-c-operator            | [0.2.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                          |\n| ixia-c-gnmi-server         | [1.9.3](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                       |\n| ixia-c-one                 | [0.0.1-3380](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                         |\n\n#### Release Features(s)\n\n* Support added for `increment` and `decrement` `values` in all `MPLS` packet header fields.\n* Support added for raw traffic where `tx` and `rx` endpoints could be same.\n* Support added in `traffic-engine-service` deployment to disable IPv6 networking.\n  - `OPT_ENABLE_IPv6` environment flag is introduced. If it is `Yes` ipv6 networking will be enabled and if it is `No` ipv6 networking status will be unchanged.\n\n#### Bug Fix(s)\n\n* `get_config` is failing, if config contains TCP header. it is fixed now. [#184](https://github.com/open-traffic-generator/snappi/issues/184)\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets\n\n## Release  v0.0.1-3182 (Latest)\n\n> 1st September, 2022\n\n#### Announcement\n\n`ixia-c` container images are hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages). However we will continue publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom) until 18th November, 2022.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.9.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.9.1/artifacts/openapi.yaml) |\n| snappi                     | [0.9.3](https://pypi.org/project/snappi/0.9.3)                                                                                              |\n| gosnappi                   | [0.9.3](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.9.3)                                                        |\n| ixia-c-controller          | [0.0.1-3182](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                   |\n| ixia-c-traffic-engine      | [1.6.0.9](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                  |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                             |\n| ixia-c-protocol-engine     | [1.00.0.217](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                   |\n| ixia-c-operator            | [0.2.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                          |\n| ixia-c-gnmi-server         | [1.9.1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                       |\n| ixia-c-one                 | [0.0.1-3182](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                         |\n\n#### Release Features(s)\n\n* `ixia-c-controller` container now supports gRPC requests on default TCP port 40051 (alongside TCP port 8443 for HTTP) and hence `ixia-c-grpc-server` container is no longer needed.\n* There has been a breaking change in OTG API to provide stronger compatibility guarantees across different `semver patch versions` of snappi and ixia-c-controller.\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets\n\n## Release  v0.0.1-3113\n\n> 18th August, 2022\n\n#### Announcement\n\nFrom now onwards `ixia-c` container images will be hosted on [GitHub Container Registry](https://github.com/orgs/open-traffic-generator/packages). However we will continue publishing `ixia-c` container images to [DockerHub](https://hub.docker.com/r/ixiacom) as well for the next 3 months. (until 18th November, 2022)\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.8.6](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.8.6/artifacts/openapi.yaml) |\n| snappi                     | [0.8.8](https://pypi.org/project/snappi/0.8.8)                                                                                              |\n| gosnappi                   | [0.8.8](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.8.8)                                                        |\n| ixia-c-controller          | [0.0.1-3113](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-controller)                                   |\n| ixia-c-traffic-engine      | [1.6.0.9](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)                                  |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-app-usage-reporter)                             |\n| ixia-c-protocol-engine     | [1.00.0.214](https://github.com/orgs/open-traffic-generator/packages/container/package/licensed%2Fixia-c-protocol-engine)                   |\n| ixia-c-operator            | [0.1.95](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-operator)                                         |\n| ixia-c-gnmi-server         | [1.8.13](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-gnmi-server)                                      |\n| ixia-c-grpc-server         | [0.8.9](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-grpc-server)                                       |\n| ixia-c-one                 | [0.0.1-3113](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                         |\n\n#### Release Features(s)\n\n* Support added for setting transmit state on subset of configured flows.\n  https://github.com/open-traffic-generator/ixia-c/issues/56\n\n#### Bug Fix(s)\n\n* When flow duration is configured using `fixed_seconds`, then in some cases packet transmission does not stop after specified duration has elapsed.\n  https://github.com/open-traffic-generator/ixia-c/issues/95\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n* When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets\n\n## Release  v0.0.1-3027\n\n> 4th August, 2022\n\n#### About\n\nSupport added for static `MPLS` packet header in flows.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.8.6](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.8.6/artifacts/openapi.yaml) |\n| snappi                     | [0.8.8](https://pypi.org/project/snappi/0.8.8)                                                                                              |\n| gosnappi                   | [0.8.8](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.8.8)                                                        |\n| ixia-c-controller          | [0.0.1-3027](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                       |\n| ixia-c-traffic-engine      | [1.4.1.29](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                                     |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                                 |\n| ixia-c-protocol-engine     | 1.00.0.209                                                                                                                               |\n| ixia-c-operator            | [0.1.94](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                             |\n| ixia-c-gnmi-server         | [1.8.10](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                          |\n| ixia-c-grpc-server         | [0.8.8](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                           |\n| ixia-c-one                 | [0.0.1-3027](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                         |\n\n#### Release Features(s)\n\n* Support added for static `MPLS` packet header in flows.\n  - Fixed value is supported for all fields.\n  - Dynamic `MPLS` is not supported yet.\n    - `label` field's  default choice is `value` if it is selected as `auto`.\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release  v0.0.1-3002\n\n> 27th July, 2022\n\n#### About\n\nThis build contains stability fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.8.5](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.8.5/artifacts/openapi.yaml) |\n| snappi                     | [0.8.5](https://pypi.org/project/snappi/0.8.5)                                                                                              |\n| gosnappi                   | [0.8.5](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.8.5)                                                        |\n| ixia-c-controller          | [0.0.1-3002](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                       |\n| ixia-c-traffic-engine      | [1.4.1.29](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                                     |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                                 |\n| ixia-c-protocol-engine     | 1.00.0.205                                                                                                                               |\n| ixia-c-operator            | [0.1.94](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                             |\n| ixia-c-gnmi-server         | [1.8.8](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                           |\n| ixia-c-grpc-server         | [0.8.7](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                           |\n| ixia-c-one                 | [0.0.1-3002](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                         |\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release  v0.0.1-3000\n\n> 21st July, 2022\n\n#### About\n\nThis build contains stability fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.8.5](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.8.5/artifacts/openapi.yaml) |\n| snappi                     | [0.8.5](https://pypi.org/project/snappi/0.8.5)                                                                                              |\n| gosnappi                   | [0.8.5](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.8.5)                                                        |\n| ixia-c-controller          | [0.0.1-3000](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                       |\n| ixia-c-traffic-engine      | [1.4.1.29](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                                     |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                                 |\n| ixia-c-protocol-engine     | 1.00.0.203                                                                                                                               |\n| ixia-c-operator            | [0.1.94](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                             |\n| ixia-c-gnmi-server         | [1.8.8](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                           |\n| ixia-c-grpc-server         | [0.8.7](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                           |\n| ixia-c-one                 | [0.0.1-3000](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                         |\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release  v0.0.1-2994\n\n> 1st July, 2022\n\n#### About\n\nThis build contains stability fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.8.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.8.1/artifacts/openapi.yaml) |\n| snappi                     | [0.8.2](https://pypi.org/project/snappi/0.8.2)                                                                                              |\n| gosnappi                   | [0.8.2](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.8.2)                                                        |\n| ixia-c-controller          | [0.0.1-2994](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                       |\n| ixia-c-traffic-engine      | [1.4.1.29](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                                     |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                                 |\n| ixia-c-protocol-engine     | 1.00.0.192                                                                                                                               |\n| ixia-c-operator            | [0.1.94](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                             |\n| ixia-c-gnmi-server         | [1.8.3](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                           |\n| ixia-c-grpc-server         | [0.8.2](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                           |\n| ixia-c-one                 | [0.0.1-2994](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                         |\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release  v0.0.1-2992\n\n> 30th June, 2022\n\n#### About\n\nThis build contains stability fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                                  |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.8.1](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v0.8.1/artifacts/openapi.yaml) |\n| snappi                     | [0.8.2](https://pypi.org/project/snappi/0.8.2)                                                                                              |\n| gosnappi                   | [0.8.2](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.8.2)                                                        |\n| ixia-c-controller          | [0.0.1-2992](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                       |\n| ixia-c-traffic-engine      | [1.4.1.29](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                                     |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                                 |\n| ixia-c-protocol-engine     | 1.00.0.191                                                                                                                               |\n| ixia-c-operator            | [0.1.94](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                             |\n| ixia-c-gnmi-server         | [1.8.3](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                           |\n| ixia-c-grpc-server         | [0.8.2](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                           |\n| ixia-c-one                 | [0.0.1-2992](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                         |\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release  v0.0.1-2969\n\n> 16th June, 2022\n\n#### About\n\nThis build contains stability fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                             |\n| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.7.15](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.15/openapi.yaml) |\n| snappi                     | [0.7.41](https://pypi.org/project/snappi/0.7.41)                                                                                       |\n| gosnappi                   | [0.7.41](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.7.41)                                                 |\n| ixia-c-controller          | [0.0.1-2969](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                  |\n| ixia-c-traffic-engine      | [1.4.1.29](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                                |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                            |\n| ixia-c-protocol-engine     | 1.00.0.181                                                                                                                          |\n| ixia-c-operator            | [0.1.94](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                        |\n| ixia-c-gnmi-server         | [1.7.31](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                     |\n| ixia-c-grpc-server         | [0.7.17](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                     |\n| ixia-c-one                 | [0.0.1-2969](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                    |\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release  v0.0.1-2934\n\n> 2nd June, 2022\n\n#### About\n\nThis build contains bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                             |\n| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.7.13](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.13/openapi.yaml) |\n| snappi                     | [0.7.37](https://pypi.org/project/snappi/0.7.37)                                                                                       |\n| gosnappi                   | [0.7.37](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.7.37)                                                 |\n| ixia-c-controller          | [0.0.1-2934](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                  |\n| ixia-c-traffic-engine      | [1.4.1.26](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                                |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                            |\n| ixia-c-protocol-engine     | 1.00.0.174                                                                                                                          |\n| ixia-c-operator            | [0.1.94](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                        |\n| ixia-c-gnmi-server         | [1.7.27](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                     |\n| ixia-c-grpc-server         | [0.7.15](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                     |\n| ixia-c-one                 | [0.0.1-2934](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                    |\n\n#### Bug Fix(s)\n\n* `ixia-c-controller` will return an empty response instead of error when `metrics` / `states` are queried right after boot-up.\n* `ixia-c-gnmi-server` will return an empty response instead of error when `metrics` / `states` are queried without ever setting config\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release  v0.0.1-2897\n\n> 19th May, 2022\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.7.8](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.8/openapi.yaml) |\n| snappi                     | [0.7.18](https://pypi.org/project/snappi/0.7.18)                                                                                     |\n| gosnappi                   | [0.7.18](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.7.18)                                               |\n| ixia-c-controller          | [0.0.1-2897](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.1.26](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                              |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.165                                                                                                                        |\n| ixia-c-operator            | [0.1.94](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                      |\n| ixia-c-gnmi-server         | [1.7.23](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                   |\n| ixia-c-grpc-server         | [0.7.12](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                   |\n| ixia-c-one                 | [0.0.1-2897](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)                                  |\n\n#### New Feature(s)\n\n* `ixia-c-one` is now supported on platforms with `cgroupv2` enabled. https://github.com/open-traffic-generator/ixia-c/issues/77\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release  v0.0.1-2801\n\n> 9th May, 2022\n\n#### About\n\nThis build includes stability fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.7.8](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.8/openapi.yaml) |\n| snappi                     | [0.7.18](https://pypi.org/project/snappi/0.7.18)                                                                                     |\n| gosnappi                   | [0.7.18](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.7.18)                                               |\n| ixia-c-controller          | [0.0.1-2801](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.1.26](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                              |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.158                                                                                                                        |\n| ixia-c-operator            | [0.1.89](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                      |\n| ixia-c-gnmi-server         | [1.7.15](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                   |\n| ixia-c-grpc-server         | [0.7.8](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                    |\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release  v0.0.1-2790\n\n> 5th May, 2022\n\n#### About\n\nThis build includes stability fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.7.8](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.8/openapi.yaml) |\n| snappi                     | [0.7.18](https://pypi.org/project/snappi/0.7.18)                                                                                     |\n| gosnappi                   | [0.7.18](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.7.18)                                               |\n| ixia-c-controller          | [0.0.1-2790](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.1.26](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                              |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.158                                                                                                                        |\n| ixia-c-operator            | [0.0.80](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                      |\n| ixia-c-gnmi-server         | [1.7.15](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                   |\n| ixia-c-grpc-server         | [0.7.8](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                    |\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release  v0.0.1-2770\n\n> 21st April, 2022\n\n#### About\n\nThis build includes stability fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.7.8](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.8/openapi.yaml) |\n| snappi                     | [0.7.18](https://pypi.org/project/snappi/0.7.18)                                                                                     |\n| gosnappi                   | [0.7.18](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.7.18)                                               |\n| ixia-c-controller          | [0.0.1-2770](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.0.0.275](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                             |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.154                                                                                                                        |\n| ixia-c-operator            | [0.0.80](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                      |\n| ixia-c-gnmi-server         | [1.7.13](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                   |\n| ixia-c-grpc-server         | [0.7.8](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                    |\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release  v0.0.1-2755\n\n> 7th April, 2022\n\n#### About\n\nThis build includes following bug fix\n\n- Clearing of `port` and `flow` statistics as part of `set_config`.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.7.8](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.8/openapi.yaml) |\n| snappi                     | [0.7.18](https://pypi.org/project/snappi/0.7.18)                                                                                     |\n| gosnappi                   | [0.7.18](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.7.18)                                               |\n| ixia-c-controller          | [0.0.1-2755](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.1.23](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                              |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.152                                                                                                                        |\n| ixia-c-operator            | [0.0.75](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                      |\n| ixia-c-gnmi-server         | [0.7.8](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                    |\n| ixia-c-grpc-server         | [0.7.8](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                    |\n\n#### Bug Fix(s)\n\n* Clearing of `port` and `flow` statistics is now part of `set_config`.\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release  v0.0.1-2738\n\n> 25th March, 2022\n\n#### About\n\nThis build includes following new functionalities\n\n- fix in handling of `ether_type` field of ethernet packet\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.7.8](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.8/openapi.yaml) |\n| snappi                     | [0.7.18](https://pypi.org/project/snappi/0.7.18)                                                                                     |\n| gosnappi                   | [0.7.18](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.7.18)                                               |\n| ixia-c-controller          | [0.0.1-2738](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.1.23](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                              |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.151                                                                                                                        |\n| ixia-c-operator            | [0.0.75](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                      |\n| ixia-c-gnmi-server         | [0.7.8](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                    |\n| ixia-c-grpc-server         | [0.7.8](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                    |\n\n#### New Feature(s)\n\n* Users would be able to set `ether_type` in ethernet header which may not be based on the next header type.\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release  v0.0.1-2727\n\n> 24th March, 2022\n\n#### About\n\nThis build includes following new functionalities\n\n- correct received(rx) rate statistics in port metrics\n- auto destination mac learning support in destination mac field of ethernet packet\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.7.8](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.8/openapi.yaml) |\n| snappi                     | [0.7.18](https://pypi.org/project/snappi/0.7.18)                                                                                     |\n| gosnappi                   | [0.7.18](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.7.18)                                               |\n| ixia-c-controller          | [0.0.1-2727](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.1.23](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                              |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.151                                                                                                                        |\n| ixia-c-operator            | [0.0.75](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                      |\n| ixia-c-gnmi-server         | [0.7.8](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                    |\n| ixia-c-grpc-server         | [0.7.8](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                    |\n\n#### New Feature(s)\n\n* Correct received(rx) rate statistics support is incorporated as part of port metrics.\n\n  * `frames_rx_rate`\n  * `bytes_rx_rate`\n* [Breaking Change] Auto learning of destination MAC is currently supported for both IPv4 and IPv6 Flows without any VLAN(originated from device endpoints) by setting ethernet destination with `choice` as `auto` in the packet. Earlier this was working by setting ethernet destination mac with \"00:00:00:00:00:00\" in the packet header.\n\n  ```\n      {\n          \"choice\": \"ethernet\",\n          \"ethernet\": {\n              \"dst\": {\n                  \"choice\": \"auto\"\n              },\n              \"src\": {\n                  \"choice\": \"value\",\n                  \"value\": \"00:00:01:01:01:01\"\n              }\n          }\n      },\n  ```\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release  v0.0.1-2678\n\n> 11th March, 2022\n\n#### About\n\nThis build contains stability and debuggability enhancements.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.7.3](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.3/openapi.yaml) |\n| snappi                     | [0.7.13](https://pypi.org/project/snappi/0.7.13)                                                                                     |\n| gosnappi                   | [0.7.13](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.7.13)                                               |\n| ixia-c-controller          | [0.0.1-2678](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.1.23](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                              |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.146                                                                                                                        |\n| ixia-c-operator            | [0.0.75](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                      |\n| ixia-c-gnmi-server         | [0.7.5](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                    |\n| ixia-c-grpc-server         | [0.7.7](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                    |\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release  v0.0.1-2662\n\n> 24th February, 2022\n\n#### About\n\nThis build implements transmit(tx) statistics & transmit state of flow metrics.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.7.3](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.3/openapi.yaml) |\n| snappi                     | [0.7.13](https://pypi.org/project/snappi/0.7.13)                                                                                     |\n| gosnappi                   | [0.7.13](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.7.13)                                               |\n| ixia-c-controller          | [0.0.1-2662](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.1.23](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                              |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.144                                                                                                                        |\n| ixia-c-operator            | [0.0.75](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                      |\n| ixia-c-gnmi-server         | [0.7.5](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                    |\n| ixia-c-grpc-server         | [0.7.6](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                    |\n\n#### New Feature(s)\n\n* Transmit(tx) statistics & Transmit state support is incorporated as part of flow metrics.\n  * `transmit`\n  * `frames_tx`\n  * `frames_tx_rate`\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release v0.0.1-2610\n\n> 10th February, 2022\n\n#### About\n\nThis build contains stability fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.7.3](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.3/openapi.yaml) |\n| snappi                     | [0.7.13](https://pypi.org/project/snappi/0.7.13)                                                                                     |\n| gosnappi                   | [0.7.13](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.7.13)                                               |\n| ixia-c-controller          | [0.0.1-2610](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.1.5](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                               |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.133                                                                                                                        |\n| ixia-c-operator            | [0.0.72](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                      |\n| ixia-c-gnmi-server         | [0.7.5](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                    |\n| ixia-c-grpc-server         | [0.7.5](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                    |\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release v0.0.1-2597\n\n> 27th January, 2022\n\n#### About\n\nThis build contains debuggability enhancements.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.7.2](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.2/openapi.yaml) |\n| snappi                     | [0.7.6](https://pypi.org/project/snappi/0.7.6)                                                                                       |\n| gosnappi                   | [0.7.6](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.7.6)                                                 |\n| ixia-c-controller          | [0.0.1-2597](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.1.2](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                               |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.133                                                                                                                        |\n| ixia-c-operator            | [0.0.70](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                      |\n| ixia-c-gnmi-server         | [0.7.4](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                    |\n| ixia-c-grpc-server         | [0.7.4](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                    |\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release v0.0.1-2543\n\n> 16th December, 2021\n\n#### About\n\nThis build contains stability fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.7.2](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.7.2/openapi.yaml) |\n| snappi                     | [0.7.3](https://pypi.org/project/snappi/0.7.3)                                                                                       |\n| gosnappi                   | [0.7.3](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.7.3)                                                 |\n| ixia-c-controller          | [0.0.1-2543](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.1.2](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                               |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.127                                                                                                                        |\n| ixia-c-operator            | [0.0.70](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                      |\n| ixia-c-gnmi-server         | [0.7.2](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                    |\n| ixia-c-grpc-server         | [0.7.2](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                    |\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release v0.0.1-2446\n\n> 2nd December, 2021\n\n#### About\n\nThis build introduces ability to return large `FramesTx/RX` values by `metric` APIs.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                             |\n| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.6.13](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.6.13/openapi.yaml) |\n| snappi                     | [0.6.21](https://pypi.org/project/snappi/0.6.21)                                                                                       |\n| gosnappi                   | [0.6.21](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.6.21)                                                 |\n| ixia-c-controller          | [0.0.1-2446](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                  |\n| ixia-c-traffic-engine      | [1.4.0.15](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                                |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                            |\n| ixia-c-protocol-engine     | 1.00.0.115                                                                                                                          |\n| ixia-c-operator            | [0.0.70](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                        |\n| ixia-c-gnmi-server         | [0.6.18](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                     |\n| ixia-c-grpc-server         | [0.6.17](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                     |\n\n#### New Feature(s)\n\n* Maximum `FramesTx` and `FramesRx` value that can be correctly returned by `flow_metrics` and `port_metrics` has been increased from 2147483648 to 9.223372e+18\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release v0.0.1-2399\n\n> 18th November, 2021\n\n#### About\n\nThis build introduces ability to auto plug in default values for missing fields with primitive types upon receiving JSON payload.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                             |\n| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.6.10](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.6.10/openapi.yaml) |\n| snappi                     | [0.6.16](https://pypi.org/project/snappi/0.6.16)                                                                                       |\n| gosnappi                   | [0.6.16](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.6.16)                                                 |\n| ixia-c-controller          | [0.0.1-2399](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                  |\n| ixia-c-traffic-engine      | [1.4.0.15](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                                |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                            |\n| ixia-c-protocol-engine     | 1.00.0.111                                                                                                                          |\n| ixia-c-operator            | [0.0.70](https://hub.docker.com/r/ixiacom/ixia-c-operator/tags)                                                                        |\n| ixia-c-gnmi-server         | [0.6.14](https://hub.docker.com/r/ixiacom/ixia-c-gnmi-server/tags)                                                                     |\n| ixia-c-grpc-server         | [0.6.15](https://hub.docker.com/r/ixiacom/ixia-c-grpc-server/tags)                                                                     |\n\n#### New Feature(s)\n\n* Upon receiving JSON payload, ixia-c-controller will now automatically plug in default values for missing fields with primitive types.\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release v0.0.1-2367\n\n> 5th November, 2021\n\n#### About\n\nThis build introduces uniform logging across some Ixia-c components.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.6.7](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.6.7/openapi.yaml) |\n| snappi                     | [0.6.12](https://pypi.org/project/snappi/0.6.12)                                                                                     |\n| gosnappi                   | [0.6.12](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.6.12)                                               |\n| ixia-c-controller          | [0.0.1-2367](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.0.15](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                              |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.96                                                                                                                         |\n| ixia-c-operator            | 0.0.1-65                                                                                                                          |\n| ixia-c-gnmi-server         | [0.6.11](https://hub.docker.com/r/otgservices/otg-gnmi-server/tags)                                                                  |\n| ixia-c-grpc-server         | [0.6.11](https://hub.docker.com/r/otgservices/otg-grpc-server/tags)                                                                  |\n\n#### Bug Fix(s)\n\n* Introduced structured logging for `ixia-c-gnmi-server` and `ixia-c-grpc-server` to aid uniform logging across Ixia-c components.\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release v0.0.1-2342\n\n> 27th October, 2021\n\n#### About\n\nThis build contains validation bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.6.5](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.6.5/openapi.yaml) |\n| snappi                     | [0.6.5](https://pypi.org/project/snappi/0.6.5)                                                                                       |\n| gosnappi                   | [0.6.5](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.6.5)                                                 |\n| ixia-c-controller          | [0.0.1-2342](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.0.15](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                              |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.83                                                                                                                         |\n| ixia-c-operator            | 0.0.1-65                                                                                                                          |\n| ixia-c-gnmi-server         | [0.6.6](https://hub.docker.com/r/otgservices/otg-gnmi-server/tags)                                                                   |\n| ixia-c-grpc-server         | [0.6.6](https://hub.docker.com/r/otgservices/otg-grpc-server/tags)                                                                   |\n\n#### Bug Fix(s)\n\n* Validation has been fixed for traffic configuration consisting of IPv4 and IPv6 interface names\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release v0.0.1-2337\n\n> 21st October, 2021\n\n#### About\n\nThis build contains bugfixes for SetConfig and FPS values in GetMetrics.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.6.5](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.6.5/openapi.yaml) |\n| snappi                     | [0.6.5](https://pypi.org/project/snappi/0.6.5)                                                                                       |\n| gosnappi                   | [0.6.5](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v0.6.5)                                                 |\n| ixia-c-controller          | [0.0.1-2337](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.0.14](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                              |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.83                                                                                                                         |\n| ixia-c-operator            | 0.0.1-65                                                                                                                          |\n| ixia-c-gnmi-server         | [0.6.6](https://hub.docker.com/r/otgservices/otg-gnmi-server/tags)                                                                   |\n| ixia-c-grpc-server         | [0.6.6](https://hub.docker.com/r/otgservices/otg-grpc-server/tags)                                                                   |\n\n#### New Feature(s)\n\n* The race condition during connection initialization in `SetConfig` is fixed for scenarios involving large port count.\n* FPS value in `GetMetrics` for ports and flows is fixed for scenarios involving multiple consecutive SetTransmitState calls.\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release v0.0.1-2289\n\n> 29th September, 2021\n\n#### About\n\nThis build contains support for performance optimisation through concurrent port operations.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.6.1](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.6.1/openapi.yaml) |\n| snappi                     | [0.6.1](https://pypi.org/project/snappi/0.6.1)                                                                                       |\n| ixia-c-controller          | [0.0.1-2289](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.0.13](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                              |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.70                                                                                                                         |\n| otg-gnmi-server            | [0.6.1](https://hub.docker.com/r/otgservices/otg-gnmi-server/tags)                                                                   |\n| otg-grpc-server            | [0.6.1](https://hub.docker.com/r/otgservices/otg-grpc-server/tags)                                                                   |\n\n#### New Feature(s)\n\n* Performance is optimised through concurrent port operations.\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release v0.0.1-2185\n\n> 8th September, 2021\n\n#### About\n\nThis build contains support for updating flow rate without disrupting transmit state.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.5.4](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.5.4/openapi.yaml) |\n| snappi                     | [0.5.3](https://pypi.org/project/snappi/0.5.3)                                                                                       |\n| ixia-c-controller          | [0.0.1-2185](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                |\n| ixia-c-traffic-engine      | [1.4.0.11](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                              |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                          |\n| ixia-c-protocol-engine     | 1.00.0.56                                                                                                                         |\n| otg-gnmi-server            | [0.5.2](https://hub.docker.com/r/otgservices/otg-gnmi-server/tags)                                                                   |\n| otg-grpc-server            | [0.5.3](https://hub.docker.com/r/otgservices/otg-grpc-server/tags)                                                                   |\n\n#### New Feature(s)\n\n* Updating flow rate without disrupting transmit state is now supported. Rate of multiple flows can be updated simultaneously through `update_flows` api without stopping the traffic.\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release v0.0.1-2120\n\n> 27th August, 2021\n\n#### About\n\nThis build contains support for capture filter, setting GRE checksum flag, redirecting Ixia-c controller log to stdout and some bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                             |\n| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.4.12](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.4.12/openapi.yaml) |\n| snappi                     | [0.4.25](https://pypi.org/project/snappi/0.4.25)                                                                                       |\n| ixia-c-controller          | [0.0.1-2120](https://hub.docker.com/r/ixiacom/ixia-c-controller/tags)                                                                  |\n| ixia-c-traffic-engine      | [1.4.0.9](https://hub.docker.com/r/ixiacom/ixia-c-traffic-engine/tags)                                                                 |\n| ixia-c-app-usage-reporter  | [0.0.1-37](https://hub.docker.com/r/ixiacom/ixia-c-app-usage-reporter/tags)                                                            |\n| ixia-c-protocol-engine     | 1.00.0.50                                                                                                                           |\n| otg-gnmi-server            | [0.4.4](https://hub.docker.com/r/otgservices/otg-gnmi-server/tags)                                                                     |\n| otg-grpc-server            | [0.0.9](https://hub.docker.com/r/otgservices/otg-grpc-server/tags)                                                                     |\n\n#### New Feature(s)\n\n* Capture filters are now supported. Multiple patterns can be specified in the configuration.\n* Controller log is now redirected to stdout. `docker logs` can now be used to access Ixia-c controller logs.\n* Checksum field in `GRE` header now can be set.\n\n#### Bug Fixes\n\n* All patterns of IPv6 value now can be set for `increment` and `decrement` properties in flow header fields.\n* Default value of step for `decrement` properties in flow header fields is now set correctly.\n\n#### Known Issues\n\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release v0.0.1-1622\n\n> 25th June, 2021\n\n#### About\n\nThis build contains support for protocols GRE and VXLAN (RFC 2784), enabling/disabling flow metrics and some bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                           |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.4.0](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.4.0/openapi.yaml) |\n| snappi                     | 0.4.0                                                                                                                             |\n| ixia-c-controller          | 0.0.1-1622                                                                                                                        |\n| ixia-c-traffic-engine      | 1.4.0.1                                                                                                                           |\n| ixia-c-app-usage-reporter  | 0.0.1-36                                                                                                                          |\n\n#### New Feature(s)\n\n* Flow header configuration for protocols `GRE` and `VXLAN (RFC 2784)` are now supported.\n* Flow metrics is now disabled by default to allow transmitting packets with `unaltered payload `(i.e. without any timestamps and instrumentation bytes embedded in it).\n* Flow metrics (including metrics that are its sub-properties, e.g. `latency` and `timestamp`) can now be explicitly enabled on per-flow basis.\n\n#### Bug Fixes\n\n* `ixia-c-controller` can now safely serve multiple parallel requests from different clients preventing any undefined behavior.\n* Port metrics can now be fetched for ports which are not part of flow configuration.\n* Providing port locations for `ixia-c-traffic-engine` running in unsupported mode will now throw a user-friendly error.\n* Default values for `increment` and `decrement` properties in flow header fields are now aligned per Open Traffic Generator API.\n\n#### Known Issues\n\n* Checksum field in `GRE` header currently cannot be set.\n* The metric `loss` in flow metrics is currently not supported.\n\n## Release v0.0.1-1388\n\n> 31st May, 2021\n\n#### About\n\nThis build contains support for flow delay and some bug fixes.\n\n#### Build Details\n\n| Component                  | Version                                                                                                                             |\n| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| Open Traffic Generator API | [0.3.10](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.3.10/openapi.yaml) |\n| snappi                     | 0.3.20                                                                                                                              |\n| ixia-c-controller          | 0.0.1-1388                                                                                                                          |\n| ixia-c-traffic-engine      | 1.2.0.12                                                                                                                            |\n| ixia-c-app-usage-reporter  | 0.0.1-36                                                                                                                            |\n\n#### New Feature(s)\n\n* Ixia-c now supports `delay` parameter in flow configuration.  Refer to [v0.3.10](https://redocly.github.io/redoc/?url=https://github.com/open-traffic-generator/models/releases/download/v0.3.10/openapi.yaml) of the Open Traffic Generator API specification for more details.\n\n#### Bug Fixes\n\n* The flow configuration parameter `inter_burst_gap` when specified in nanoseconds can now be set to a value larger than 4.2 seconds.\n* Invalid values can now be set for the `phb` (per hob behavior) field in the DSCP bits in the IPv4 header.\n* The `set_config` method will return an error when flows are over subscribed.\n* Fixed an error in calculation for packet counts when `duration` is set in terms of fixed_seconds.\n\n#### Known Issues\n\n* The metrics `frames_rx_rate` and `bytes_rx_rate` in port statistics are not calculated correctly and are always zero.\n* The metric `min_latency_ns` in flow statistics is not calculated correctly and is always zero.\n"
  },
  {
    "path": "docs/res/hw-server.drawio",
    "content": "<mxfile host=\"65bd71144e\">\n    <diagram name=\"Page-1\" id=\"kdscWATnTdKI_hbdzj3E\">\n        <mxGraphModel dx=\"714\" dy=\"571\" grid=\"1\" gridSize=\"10\" guides=\"0\" tooltips=\"1\" connect=\"1\" arrows=\"1\" fold=\"1\" page=\"1\" pageScale=\"1\" pageWidth=\"850\" pageHeight=\"1100\" math=\"0\" shadow=\"0\">\n            <root>\n                <mxCell id=\"0\"/>\n                <mxCell id=\"1\" parent=\"0\"/>\n                <mxCell id=\"bLDb5Kxm9XP_twkMBnbg-3\" value=\"Test Client\" style=\"rounded=1;whiteSpace=wrap;html=1;fillColor=#E6FFCC;fontStyle=1\" parent=\"1\" vertex=\"1\">\n                    <mxGeometry x=\"60\" y=\"200\" width=\"120\" height=\"60\" as=\"geometry\"/>\n                </mxCell>\n                <mxCell id=\"bLDb5Kxm9XP_twkMBnbg-4\" value=\"gNMI client\" style=\"rounded=1;whiteSpace=wrap;html=1;fillColor=#E6FFCC;fontStyle=1\" parent=\"1\" vertex=\"1\">\n                    <mxGeometry x=\"60\" y=\"340\" width=\"120\" height=\"60\" as=\"geometry\"/>\n                </mxCell>\n                <mxCell id=\"bLDb5Kxm9XP_twkMBnbg-9\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;dashed=1;\" parent=\"1\" vertex=\"1\">\n                    <mxGeometry x=\"330\" y=\"40\" width=\"240\" height=\"420\" as=\"geometry\"/>\n                </mxCell>\n                <mxCell id=\"bLDb5Kxm9XP_twkMBnbg-5\" value=\"&lt;span style=&quot;color: rgb(33, 33, 33);&quot;&gt;&lt;font style=&quot;font-size: 12px;&quot;&gt;keng-layer23-hw-server&lt;/font&gt;&lt;/span&gt;\" style=\"rounded=1;whiteSpace=wrap;html=1;fontStyle=1;fillColor=#FFF4C3;\" parent=\"1\" vertex=\"1\">\n                    <mxGeometry x=\"380\" y=\"70\" width=\"120\" height=\"60\" as=\"geometry\"/>\n                </mxCell>\n                <mxCell id=\"bLDb5Kxm9XP_twkMBnbg-19\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;dashed=1;\" parent=\"1\" source=\"bLDb5Kxm9XP_twkMBnbg-6\" target=\"bLDb5Kxm9XP_twkMBnbg-7\" edge=\"1\">\n                    <mxGeometry relative=\"1\" as=\"geometry\">\n                        <Array as=\"points\">\n                            <mxPoint x=\"440\" y=\"280\"/>\n                            <mxPoint x=\"440\" y=\"280\"/>\n                        </Array>\n                    </mxGeometry>\n                </mxCell>\n                <mxCell id=\"bLDb5Kxm9XP_twkMBnbg-29\" value=\"\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;\" parent=\"1\" source=\"bLDb5Kxm9XP_twkMBnbg-6\" target=\"bLDb5Kxm9XP_twkMBnbg-5\" edge=\"1\">\n                    <mxGeometry relative=\"1\" as=\"geometry\"/>\n                </mxCell>\n                <mxCell id=\"bLDb5Kxm9XP_twkMBnbg-6\" value=\"&lt;span style=&quot;font-family: Consolas; color: rgb(33, 33, 33);&quot;&gt;keng-controller&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;localhost:8443&lt;br&gt;localhost:40051&lt;/span&gt;\" style=\"rounded=1;whiteSpace=wrap;html=1;fontStyle=1;fillColor=#FFF4C3;\" parent=\"1\" vertex=\"1\">\n                    <mxGeometry x=\"380\" y=\"190\" width=\"120\" height=\"70\" as=\"geometry\"/>\n                </mxCell>\n                <mxCell id=\"bLDb5Kxm9XP_twkMBnbg-7\" value=\"&lt;span style=&quot;color: rgb(33, 33, 33);&quot;&gt;&lt;b style=&quot;&quot;&gt;&lt;font style=&quot;font-size: 12px;&quot;&gt;otg-gnmi-server&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;localhost:50051\" style=\"rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF4C3;\" parent=\"1\" vertex=\"1\">\n                    <mxGeometry x=\"380\" y=\"340\" width=\"120\" height=\"60\" as=\"geometry\"/>\n                </mxCell>\n                <mxCell id=\"bLDb5Kxm9XP_twkMBnbg-13\" value=\"&lt;b&gt;Keysight Ixia Hardware Chassis with IxOS&lt;/b&gt;\" style=\"rounded=1;whiteSpace=wrap;html=1;fillColor=#CCFFFF;\" parent=\"1\" vertex=\"1\">\n                    <mxGeometry x=\"650\" y=\"60\" width=\"160\" height=\"360\" as=\"geometry\"/>\n                </mxCell>\n                <mxCell id=\"bLDb5Kxm9XP_twkMBnbg-14\" value=\"\" style=\"endArrow=classic;html=1;rounded=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.017;entryY=0.108;entryDx=0;entryDy=0;entryPerimeter=0;dashed=1;\" parent=\"1\" target=\"bLDb5Kxm9XP_twkMBnbg-13\" edge=\"1\">\n                    <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n                        <mxPoint x=\"500\" y=\"100\" as=\"sourcePoint\"/>\n                        <mxPoint x=\"540\" y=\"170\" as=\"targetPoint\"/>\n                    </mxGeometry>\n                </mxCell>\n                <mxCell id=\"bLDb5Kxm9XP_twkMBnbg-20\" value=\"Keysight Elastic Network Generator\" style=\"whiteSpace=wrap;html=1;strokeColor=none;fontStyle=1\" parent=\"1\" vertex=\"1\">\n                    <mxGeometry x=\"340\" width=\"220\" height=\"30\" as=\"geometry\"/>\n                </mxCell>\n                <mxCell id=\"bLDb5Kxm9XP_twkMBnbg-22\" value=\"\" style=\"endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;\" parent=\"1\" edge=\"1\">\n                    <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n                        <mxPoint x=\"180\" y=\"230.96\" as=\"sourcePoint\"/>\n                        <mxPoint x=\"380\" y=\"231\" as=\"targetPoint\"/>\n                    </mxGeometry>\n                </mxCell>\n                <mxCell id=\"bLDb5Kxm9XP_twkMBnbg-25\" value=\"\" style=\"endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;\" parent=\"1\" source=\"bLDb5Kxm9XP_twkMBnbg-4\" edge=\"1\">\n                    <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n                        <mxPoint x=\"190\" y=\"370\" as=\"sourcePoint\"/>\n                        <mxPoint x=\"380\" y=\"370\" as=\"targetPoint\"/>\n                    </mxGeometry>\n                </mxCell>\n                <mxCell id=\"bLDb5Kxm9XP_twkMBnbg-31\" value=\"Open Traffic Generator (OTG) API\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeColor=none;\" parent=\"1\" vertex=\"1\">\n                    <mxGeometry x=\"210\" y=\"190\" width=\"110\" height=\"40\" as=\"geometry\"/>\n                </mxCell>\n                <mxCell id=\"bLDb5Kxm9XP_twkMBnbg-33\" value=\"gNMI&amp;nbsp;\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeColor=none;\" parent=\"1\" vertex=\"1\">\n                    <mxGeometry x=\"190\" y=\"340\" width=\"110\" height=\"20\" as=\"geometry\"/>\n                </mxCell>\n            </root>\n        </mxGraphModel>\n    </diagram>\n</mxfile>"
  },
  {
    "path": "docs/res/system_with_UHD400T.drawio",
    "content": "<mxfile host=\"Electron\" modified=\"2023-09-21T16:50:13.027Z\" agent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.7.5 Chrome/114.0.5735.289 Electron/25.8.1 Safari/537.36\" etag=\"YTqr323EwXiXRqakbrsP\" version=\"21.7.5\" type=\"device\">\n  <diagram name=\"Page-1\" id=\"xETqCdHlxPcs6NdaO8hL\">\n    <mxGraphModel dx=\"1050\" dy=\"629\" grid=\"1\" gridSize=\"10\" guides=\"1\" tooltips=\"1\" connect=\"1\" arrows=\"1\" fold=\"1\" page=\"1\" pageScale=\"1\" pageWidth=\"1100\" pageHeight=\"850\" math=\"0\" shadow=\"0\">\n      <root>\n        <mxCell id=\"0\" />\n        <mxCell id=\"1\" parent=\"0\" />\n        <mxCell id=\"PLbw0gD5GbnBkSZS6gT8-2\" value=\"\" style=\"endArrow=classic;startArrow=classic;html=1;rounded=0;\" parent=\"1\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"180\" y=\"340\" as=\"sourcePoint\" />\n            <mxPoint x=\"260\" y=\"340\" as=\"targetPoint\" />\n            <Array as=\"points\">\n              <mxPoint x=\"180\" y=\"340\" />\n            </Array>\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"PLbw0gD5GbnBkSZS6gT8-4\" value=\"&lt;span style=&quot;font-size: 15px;&quot;&gt;DUT/SUT&lt;/span&gt;\" style=\"rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;fontSize=15;fontStyle=1\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"40\" y=\"160\" width=\"140\" height=\"200\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"PLbw0gD5GbnBkSZS6gT8-5\" value=\"\" style=\"endArrow=classic;startArrow=classic;html=1;rounded=0;\" parent=\"1\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"181\" y=\"180\" as=\"sourcePoint\" />\n            <mxPoint x=\"260\" y=\"180\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"PLbw0gD5GbnBkSZS6gT8-6\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"260\" y=\"140\" width=\"240\" height=\"240\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"PLbw0gD5GbnBkSZS6gT8-7\" value=\"&lt;b style=&quot;font-size: 17px;&quot;&gt;UHD-400&lt;/b&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=17;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"355\" y=\"110\" width=\"75\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"PLbw0gD5GbnBkSZS6gT8-10\" value=\"Port 1-16 VLANs\" style=\"html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.twoWayArrow;dy=0.6;dx=35;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;fontStyle=1;fontSize=11;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"500\" y=\"235\" width=\"160\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"PLbw0gD5GbnBkSZS6gT8-11\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"660\" y=\"150\" width=\"390\" height=\"220\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"PLbw0gD5GbnBkSZS6gT8-12\" value=\"&lt;b style=&quot;font-size: 13px;&quot;&gt;Protocol Engine&lt;/b&gt;\" style=\"rounded=0;whiteSpace=wrap;html=1;fontSize=13;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"730\" y=\"190\" width=\"110\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"PLbw0gD5GbnBkSZS6gT8-13\" value=\"&lt;b style=&quot;border-color: var(--border-color); font-size: 13px;&quot;&gt;Protocol Engine&lt;/b&gt;\" style=\"rounded=0;whiteSpace=wrap;html=1;fontSize=13;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"730\" y=\"280\" width=\"110\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"PLbw0gD5GbnBkSZS6gT8-14\" value=\"&lt;b style=&quot;font-size: 15px;&quot;&gt;Test Controller&lt;/b&gt;\" style=\"rounded=0;whiteSpace=wrap;html=1;fontSize=15;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"910\" y=\"230\" width=\"120\" height=\"70\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"PLbw0gD5GbnBkSZS6gT8-15\" value=\"&lt;b style=&quot;font-size: 18px;&quot;&gt;Server&lt;/b&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=18;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"820\" y=\"120\" width=\"60\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Ra6OazM8XzkDVHMEAll4-3\" value=\"\" style=\"endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;\" parent=\"1\" target=\"PLbw0gD5GbnBkSZS6gT8-6\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"260\" y=\"180\" as=\"sourcePoint\" />\n            <mxPoint x=\"520\" y=\"260\" as=\"targetPoint\" />\n            <Array as=\"points\">\n              <mxPoint x=\"440\" y=\"180\" />\n            </Array>\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"Ra6OazM8XzkDVHMEAll4-4\" value=\"\" style=\"endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;exitX=-0.003;exitY=0.839;exitDx=0;exitDy=0;exitPerimeter=0;\" parent=\"1\" source=\"PLbw0gD5GbnBkSZS6gT8-6\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"300\" y=\"340\" as=\"sourcePoint\" />\n            <mxPoint x=\"500\" y=\"260\" as=\"targetPoint\" />\n            <Array as=\"points\">\n              <mxPoint x=\"430\" y=\"340\" />\n            </Array>\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"Ra6OazM8XzkDVHMEAll4-5\" value=\"&lt;b style=&quot;font-size: 14px;&quot;&gt;Port 1&lt;/b&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;spacingTop=2;fontSize=14;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"280\" y=\"150\" width=\"60\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Ra6OazM8XzkDVHMEAll4-6\" value=\"&lt;b style=&quot;font-size: 13px;&quot;&gt;Port 16&lt;/b&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;spacing=3;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"280\" y=\"310\" width=\"60\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Ra6OazM8XzkDVHMEAll4-7\" value=\"Port 1 VLAN\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"360\" y=\"150\" width=\"80\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Ra6OazM8XzkDVHMEAll4-8\" value=\"Port 16 VLAN\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"350\" y=\"340\" width=\"90\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Ra6OazM8XzkDVHMEAll4-9\" value=\"&lt;b style=&quot;font-size: 13px;&quot;&gt;Port 32&lt;/b&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"390\" y=\"245\" width=\"50\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Ra6OazM8XzkDVHMEAll4-10\" value=\"\" style=\"endArrow=classic;html=1;rounded=0;\" parent=\"1\" source=\"Ra6OazM8XzkDVHMEAll4-9\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"470\" y=\"259.5\" as=\"sourcePoint\" />\n            <mxPoint x=\"490\" y=\"260\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"Ra6OazM8XzkDVHMEAll4-12\" value=\"\" style=\"shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;perimeterSpacing=3;strokeWidth=3;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"300\" y=\"215\" width=\"20\" height=\"20\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Ra6OazM8XzkDVHMEAll4-13\" value=\"\" style=\"shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;strokeWidth=3;perimeterSpacing=1;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"300\" y=\"250\" width=\"20\" height=\"20\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Ra6OazM8XzkDVHMEAll4-14\" value=\"\" style=\"shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;strokeWidth=3;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"300\" y=\"280\" width=\"20\" height=\"20\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Ra6OazM8XzkDVHMEAll4-16\" value=\"\" style=\"endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;\" parent=\"1\" target=\"PLbw0gD5GbnBkSZS6gT8-12\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"660\" y=\"260\" as=\"sourcePoint\" />\n            <mxPoint x=\"710\" y=\"210\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"Ra6OazM8XzkDVHMEAll4-17\" value=\"\" style=\"endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;entryX=0.007;entryY=0.623;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryPerimeter=0;\" parent=\"1\" source=\"PLbw0gD5GbnBkSZS6gT8-11\" target=\"PLbw0gD5GbnBkSZS6gT8-13\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"670\" y=\"310\" as=\"sourcePoint\" />\n            <mxPoint x=\"730\" y=\"260\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"Ra6OazM8XzkDVHMEAll4-18\" value=\"\" style=\"endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;\" parent=\"1\" target=\"PLbw0gD5GbnBkSZS6gT8-14\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"840\" y=\"310\" as=\"sourcePoint\" />\n            <mxPoint x=\"890\" y=\"260\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"Ra6OazM8XzkDVHMEAll4-19\" value=\"\" style=\"endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;\" parent=\"1\" target=\"PLbw0gD5GbnBkSZS6gT8-14\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"840\" y=\"210\" as=\"sourcePoint\" />\n            <mxPoint x=\"900\" y=\"240\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"1u25cFyS4AgIG_zcCW1W-1\" value=\"\" style=\"endArrow=none;html=1;rounded=0;\" edge=\"1\" parent=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"20\" y=\"400\" as=\"sourcePoint\" />\n            <mxPoint x=\"1080\" y=\"400\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"1u25cFyS4AgIG_zcCW1W-2\" value=\"\" style=\"endArrow=none;html=1;rounded=0;\" edge=\"1\" parent=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"20\" y=\"400\" as=\"sourcePoint\" />\n            <mxPoint x=\"20\" y=\"100\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"1u25cFyS4AgIG_zcCW1W-3\" value=\"\" style=\"endArrow=none;html=1;rounded=0;\" edge=\"1\" parent=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"20\" y=\"100\" as=\"sourcePoint\" />\n            <mxPoint x=\"1080\" y=\"100\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"1u25cFyS4AgIG_zcCW1W-4\" value=\"\" style=\"endArrow=none;html=1;rounded=0;\" edge=\"1\" parent=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"1080\" y=\"400\" as=\"sourcePoint\" />\n            <mxPoint x=\"1080\" y=\"100\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n      </root>\n    </mxGraphModel>\n  </diagram>\n</mxfile>\n"
  },
  {
    "path": "docs/resources.md",
    "content": "# Resources\n\n1. [Product page](https://www.keysight.com/us/en/products/network-test/protocol-load-test/keysight-elastic-network-generator.html)\n2. [Data Sheet](https://www.keysight.com/in/en/assets/3122-1455/data-sheets/Elastic-Network-Generator.pdf)\n3. [Documentation](https://ixia-c.dev)\n      * [Quick Start](https://ixia-c.dev/quick-start/introduction/)\n      * [User Guide](https://ixia-c.dev/user-guide-introduction/)\n      * [Developer Guide](https://ixia-c.dev/developer/snappi-constructs/)\n      * [Reference Guide](https://ixia-c.dev/reference/capabilities/)\n      * [Releases](https://ixia-c.dev/releases/)\n4. [Open Traffic Generator](https://otg.dev)\n      * [Model Browser](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/master/artifacts/openapi.yaml&nocors)\n      * [Clients](https://otg.dev/clients/)\n      * [Examples](https://otg.dev/examples/otg-examples/)\n5. [OpenConfig](https://openconfig.net/)\n      * [KNE IxiaTG Controller](https://github.com/openconfig/kne/blob/main/docs/create_topology.md#ixiatg-controller)\n      * [FeatureProfiles Test Suite](https://github.com/openconfig/featureprofiles)\n6. [Containerlab Ixia-c-one](https://containerlab.dev/manual/kinds/keysight_ixia-c-one/)\n"
  },
  {
    "path": "docs/roadmap.md",
    "content": "# Roadmap\n\nIxia-c is released periodically.  This page does NOT list all the minor/bug-fix releases that are planned.\n\n\n\n"
  },
  {
    "path": "docs/sample-scripts.md",
    "content": "\nThe following text was taken from the UHD400 topic.\n## Sample `gosnappi` scripts\n\nTwo sample `gosnappi` scripts can be found in the directory [`gosnappi/`](./gosnappi) of the following git repo: https://gitlab.it.keysight.com/p4isg/uhd-400g-docs. They are also located in the admin shell of the UHD. \n\nThe two sample scripts provided are `uhd_b2b.go` and `uhd_b2b_bgp.go`. \n\n- `uhd_b2b.go` sends a fixed packet count with incrementing MAC and IP addresses. The script then collects and verifies the flow statistics.\n- `uhd_b2b_bgp.go` configures 1 BGP session per  port and advertises 2 routes. The script then sends a fixed packet count across those routes. The script finally collects and verifies the flow statistics. \n\nThe scripts' topology assumes a back-to-back connection between odd- and even-numbered ports (for example, 1<-->2, 3<-->4, ..., 15<-->16).\n\nTo build `./build.sh` (Go must be installed):\n\n```shell\n# build\n./build.sh\n\n# Run uhd_b2b\n./gosnappi/uhd_b2b -host https://<ip of UHD>\n\n# Run uhd_b2b_bgp\n./gosnappi/uhd_b2b_bgp -host https://<ip of UHD>\n```\n\nFor information on gosnappi, see https://github.com/open-traffic-generator/snappi/tree/main/gosnappi.\n\n## Reference\n\n<details>\n\n<summary><b>Expand</b> this section for sample output of `uhd_b2b` test</summary>\n\n```shell\n./gosnappi/uhd_b2b -host https://10.36.79.196\n\n2022/02/28 20:17:04 Total ports is 2\n2022/02/28 20:17:04 Creating gosnappi client for gRPC server grpc-service.default.svc.cluster.local:40051 ...\n2022/02/28 20:17:04 Connecting to server at https://10.36.79.196\n2022/02/28 20:17:04 Creating port p1 at location uhd://nanite-bfs-v1.nanite-bfs:7531;1\n2022/02/28 20:17:04 Creating port p2 at location uhd://nanite-bfs-v1.nanite-bfs:7531;2\n2022/02/28 20:17:04 Creating flow p1->p2-IPv4\n2022/02/28 20:17:04 Flow p1->p2-IPv4 srcMac 00:11:22:33:44:00 dstMac 00:11:22:33:44:01\n2022/02/28 20:17:04 Flow p1->p2-IPv4 srcIp 10.1.1.1 dstIp 10.1.1.2\n2022/02/28 20:17:04 Creating flow p2->p1-IPv4\n2022/02/28 20:17:04 Flow p2->p1-IPv4 srcMac 00:11:22:33:44:01 dstMac 00:11:22:33:44:00\n2022/02/28 20:17:04 Flow p2->p1-IPv4 srcIp 10.1.1.2 dstIp 10.1.1.1\n2022/02/28 20:17:04 flows:\n- duration:\n    choice: fixed_packets\n    fixed_packets:\n      gap: 12\n      packets: 5000000\n  metrics:\n    enable: true\n    loss: false\n    timestamps: false\n  name: p1->p2-IPv4\n  packet:\n  - choice: ethernet\n    ethernet:\n      dst:\n        choice: increment\n        increment:\n          count: 10000\n          start: \"00:11:22:33:44:01\"\n          step: \"00:00:00:00:01:00\"\n      src:\n        choice: increment\n        increment:\n          count: 10000\n          start: \"00:11:22:33:44:00\"\n          step: \"00:00:00:00:01:00\"\n  - choice: ipv4\n    ipv4:\n      dst:\n        choice: increment\n        increment:\n          count: 10000\n          start: 10.1.1.2\n          step: 0.1.0.0\n      src:\n        choice: increment\n        increment:\n          count: 10000\n          start: 10.1.1.1\n          step: 0.1.0.0\n  rate:\n    choice: percentage\n    percentage: 10\n  size:\n    choice: fixed\n    fixed: 64\n  tx_rx:\n    choice: port\n    port:\n      rx_name: p2\n      tx_name: p1\n- duration:\n    choice: fixed_packets\n    fixed_packets:\n      gap: 12\n      packets: 5000000\n  metrics:\n    enable: true\n    loss: false\n    timestamps: false\n  name: p2->p1-IPv4\n  packet:\n  - choice: ethernet\n    ethernet:\n      dst:\n        choice: increment\n        increment:\n          count: 10000\n          start: \"00:11:22:33:44:00\"\n          step: \"00:00:00:00:01:00\"\n      src:\n        choice: increment\n        increment:\n          count: 10000\n          start: \"00:11:22:33:44:01\"\n          step: \"00:00:00:00:01:00\"\n  - choice: ipv4\n    ipv4:\n      dst:\n        choice: increment\n        increment:\n          count: 10000\n          start: 10.1.1.1\n          step: 0.1.0.0\n      src:\n        choice: increment\n        increment:\n          count: 10000\n          start: 10.1.1.2\n          step: 0.1.0.0\n  rate:\n    choice: percentage\n    percentage: 10\n  size:\n    choice: fixed\n    fixed: 64\n  tx_rx:\n    choice: port\n    port:\n      rx_name: p1\n      tx_name: p2\nlayer1:\n- mtu: 1500\n  name: l1\n  port_names:\n  - p1\n  - p2\n  promiscuous: true\n  speed: speed_400_gbps\nports:\n- location: uhd://nanite-bfs-v1.nanite-bfs:7531;1\n  name: p1\n- location: uhd://nanite-bfs-v1.nanite-bfs:7531;2\n  name: p2\n <nil>\n2022/02/28 20:17:04 Setting Config ...\n2022/02/28 20:17:05 api: SetConfig, choice:  - took 559 ms\n2022/02/28 20:17:05 Setting TransmitState ...\n2022/02/28 20:17:06 api: SetTransmitState, choice: start - took 1042 ms\n2022/02/28 20:17:06 Waiting for condition to be true ...\n2022/02/28 20:17:06 Getting Metrics ...\n2022/02/28 20:17:09 api: GetMetrics, choice: flow - took 2990 ms\n2022/02/28 20:17:09 api: GetFlowMetrics, choice:  - took 2990 ms\n2022/02/28 20:17:09 Getting Metrics ...\n2022/02/28 20:17:09 api: GetMetrics, choice: port - took 41 ms\n2022/02/28 20:17:09 api: GetPortMetrics, choice:  - took 41 ms\n2022/02/28 20:17:09 \n\nPort Metrics\n-----------------------------------------------------------------\nName           Frames Tx      Frames Rx      \np1             5000000        5000000        \np2             5000000        5000000        \n-----------------------------------------------------------------\n\n\nFlow Metrics\n--------------------------------------------------\nName           Frames Rx      \np1->p2-IPv4    5000000        \np2->p1-IPv4    5000000        \n--------------------------------------------------\n\n\n2022/02/28 20:17:09 Done waiting for condition to be true\n2022/02/28 20:17:09 api: WaitFor, choice: condition to be true - took 3031 ms\n2022/02/28 20:17:09 Total time is 4.647671319s\n2022/02/28 20:17:09 Closing gosnappi client ...\n```\n\n</details>\n\n<details>\n\n<summary><b>Expand</b> this section for sample output of `uhd_b2b_bgp` test</summary>\n\n```shell\n./gosnappi/uhd_b2b_bgp -host https://10.36.79.196\n2022/02/28 20:22:32 Total ports is 2\n2022/02/28 20:22:32 Creating gosnappi client for gRPC server grpc-service.default.svc.cluster.local:40051 ...\n2022/02/28 20:22:32 Connecting to server at https://10.36.79.196\n2022/02/28 20:22:32 Creating port p1 at location uhd://nanite-bfs-v1.nanite-bfs:7531;1+r0.rustic.svc.cluster.local:50071\n2022/02/28 20:22:32 Creating port p2 at location uhd://nanite-bfs-v1.nanite-bfs:7531;2+r1.rustic.svc.cluster.local:50071\n2022/02/28 20:22:32 Creating flow p1->p2-IPv4\n2022/02/28 20:22:32 Flow p1->p2-IPv4 srcMac 00:11:22:33:44:00 dstMac 00:11:22:33:44:01\n2022/02/28 20:22:32 Flow p1->p2-IPv4 srcIp 100.1.1.1 dstIp 100.1.1.2\n2022/02/28 20:22:32 Creating flow p2->p1-IPv4\n2022/02/28 20:22:32 Flow p2->p1-IPv4 srcMac 00:11:22:33:44:01 dstMac 00:11:22:33:44:00\n2022/02/28 20:22:32 Flow p2->p1-IPv4 srcIp 100.1.1.2 dstIp 100.1.1.1\n2022/02/28 20:22:32 devices:\n- bgp:\n    ipv4_interfaces:\n    - ipv4_name: d1ipv4\n      peers:\n      - as_number: 1111\n        as_number_width: four\n        as_type: ebgp\n        name: BGPv4 Peer p1\n        peer_address: 100.1.1.2\n        v4_routes:\n        - addresses:\n          - address: 11.1.11.0\n            count: 2\n            prefix: 24\n            step: 2\n          name: p1d1peer1rrv4\n          next_hop_address_type: ipv4\n          next_hop_ipv4_address: 0.0.0.0\n          next_hop_ipv6_address: ::0\n          next_hop_mode: local_ip\n    router_id: 100.1.1.1\n  ethernets:\n  - ipv4_addresses:\n    - address: 100.1.1.1\n      gateway: 100.1.1.2\n      name: d1ipv4\n      prefix: 24\n    mac: \"00:11:22:33:44:00\"\n    mtu: 1500\n    name: d1Eth\n    port_name: p1\n  name: d1\n- bgp:\n    ipv4_interfaces:\n    - ipv4_name: d2ipv4\n      peers:\n      - as_number: 2222\n        as_number_width: four\n        as_type: ebgp\n        name: BGPv4 Peer p2\n        peer_address: 100.1.1.1\n        v4_routes:\n        - addresses:\n          - address: 12.1.12.0\n            count: 2\n            prefix: 24\n            step: 2\n          name: p2d2peer1rrv4\n          next_hop_address_type: ipv4\n          next_hop_ipv4_address: 0.0.0.0\n          next_hop_ipv6_address: ::0\n          next_hop_mode: local_ip\n    router_id: 100.1.1.2\n  ethernets:\n  - ipv4_addresses:\n    - address: 100.1.1.2\n      gateway: 100.1.1.1\n      name: d2ipv4\n      prefix: 24\n    mac: \"00:11:22:33:44:01\"\n    mtu: 1500\n    name: d2Eth\n    port_name: p2\n  name: d2\nflows:\n- duration:\n    choice: fixed_packets\n    fixed_packets:\n      gap: 12\n      packets: 5000000\n  metrics:\n    enable: true\n    loss: false\n    timestamps: false\n  name: p1->p2-IPv4\n  packet:\n  - choice: ethernet\n    ethernet:\n      dst:\n        choice: value\n        value: \"00:11:22:33:44:01\"\n      src:\n        choice: value\n        value: \"00:11:22:33:44:00\"\n  - choice: ipv4\n    ipv4:\n      dst:\n        choice: value\n        value: 100.1.1.2\n      src:\n        choice: value\n        value: 100.1.1.1\n  rate:\n    choice: percentage\n    percentage: 10\n  size:\n    choice: fixed\n    fixed: 64\n  tx_rx:\n    choice: port\n    port:\n      rx_name: p2\n      tx_name: p1\n- duration:\n    choice: fixed_packets\n    fixed_packets:\n      gap: 12\n      packets: 5000000\n  metrics:\n    enable: true\n    loss: false\n    timestamps: false\n  name: p2->p1-IPv4\n  packet:\n  - choice: ethernet\n    ethernet:\n      dst:\n        choice: value\n        value: \"00:11:22:33:44:00\"\n      src:\n        choice: value\n        value: \"00:11:22:33:44:01\"\n  - choice: ipv4\n    ipv4:\n      dst:\n        choice: value\n        value: 100.1.1.1\n      src:\n        choice: value\n        value: 100.1.1.2\n  rate:\n    choice: percentage\n    percentage: 10\n  size:\n    choice: fixed\n    fixed: 64\n  tx_rx:\n    choice: port\n    port:\n      rx_name: p1\n      tx_name: p2\nlayer1:\n- mtu: 1500\n  name: l1\n  port_names:\n  - p1\n  - p2\n  promiscuous: true\n  speed: speed_400_gbps\nports:\n- location: uhd://nanite-bfs-v1.nanite-bfs:7531;1+r0.rustic.svc.cluster.local:50071\n  name: p1\n- location: uhd://nanite-bfs-v1.nanite-bfs:7531;2+r1.rustic.svc.cluster.local:50071\n  name: p2\n <nil>\n2022/02/28 20:22:32 Setting Config ...\n2022/02/28 20:22:33 api: SetConfig, choice:  - took 710 ms\n2022/02/28 20:22:33 Setting SetProtocolState ...\n2022/02/28 20:22:33 api: SetProtocolState, choice: start - took 835 ms\n2022/02/28 20:22:33 Waiting for condition to be true ...\n2022/02/28 20:22:33 Getting Metrics ...\n2022/02/28 20:22:34 api: GetMetrics, choice: bgpv4 - took 68 ms\n2022/02/28 20:22:34 api: GetBgpv4Metrics, choice:  - took 68 ms\n2022/02/28 20:22:34 \n\nBGPv4 Metrics\n-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\nName                        BGPv4 Peer p1  BGPv4 Peer p2  \nSession State               down           down           \nSession Flaps               0              0              \nRoutes Advertised           0              0              \nRoutes Received             0              0              \nRoute Withdraws Tx          0              0              \nRoute Withdraws Rx          0              0              \nKeepalives Tx               0              0              \nKeepalives Rx               0              0              \n-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\n\n2022/02/28 20:22:34 Getting Metrics ...\n2022/02/28 20:22:34 api: GetMetrics, choice: bgpv4 - took 40 ms\n2022/02/28 20:22:34 api: GetBgpv4Metrics, choice:  - took 40 ms\n2022/02/28 20:22:34 \n\nBGPv4 Metrics\n-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\nName                        BGPv4 Peer p1  BGPv4 Peer p2  \nSession State               down           down           \nSession Flaps               0              0              \nRoutes Advertised           0              0              \nRoutes Received             0              0              \nRoute Withdraws Tx          0              0              \nRoute Withdraws Rx          0              0              \nKeepalives Tx               0              0              \nKeepalives Rx               0              0              \n-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\n\n2022/02/28 20:22:35 Getting Metrics ...\n2022/02/28 20:22:35 api: GetMetrics, choice: bgpv4 - took 40 ms\n2022/02/28 20:22:35 api: GetBgpv4Metrics, choice:  - took 40 ms\n2022/02/28 20:22:35 \n\nBGPv4 Metrics\n-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\nName                        BGPv4 Peer p1  BGPv4 Peer p2  \nSession State               down           down           \nSession Flaps               0              0              \nRoutes Advertised           0              0              \nRoutes Received             0              0              \nRoute Withdraws Tx          0              0              \nRoute Withdraws Rx          0              0              \nKeepalives Tx               0              0              \nKeepalives Rx               0              0              \n-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\n\n2022/02/28 20:22:35 Getting Metrics ...\n2022/02/28 20:22:35 api: GetMetrics, choice: bgpv4 - took 43 ms\n2022/02/28 20:22:35 api: GetBgpv4Metrics, choice:  - took 43 ms\n2022/02/28 20:22:35 \n\nBGPv4 Metrics\n-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\nName                        BGPv4 Peer p1  BGPv4 Peer p2  \nSession State               down           down           \nSession Flaps               0              0              \nRoutes Advertised           0              0              \nRoutes Received             0              0              \nRoute Withdraws Tx          0              0              \nRoute Withdraws Rx          0              0              \nKeepalives Tx               0              0              \nKeepalives Rx               0              0              \n-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\n\n2022/02/28 20:22:36 Getting Metrics ...\n2022/02/28 20:22:36 api: GetMetrics, choice: bgpv4 - took 38 ms\n2022/02/28 20:22:36 api: GetBgpv4Metrics, choice:  - took 38 ms\n2022/02/28 20:22:36 \n\nBGPv4 Metrics\n-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\nName                        BGPv4 Peer p1  BGPv4 Peer p2  \nSession State               up             up             \nSession Flaps               0              0              \nRoutes Advertised           2              2              \nRoutes Received             2              2              \nRoute Withdraws Tx          0              0              \nRoute Withdraws Rx          0              0              \nKeepalives Tx               2              2              \nKeepalives Rx               2              2              \n-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\n\n2022/02/28 20:22:36 Done waiting for condition to be true\n2022/02/28 20:22:36 api: WaitFor, choice: condition to be true - took 2235 ms\n2022/02/28 20:22:36 Setting TransmitState ...\n2022/02/28 20:22:37 api: SetTransmitState, choice: start - took 953 ms\n2022/02/28 20:22:37 Waiting for condition to be true ...\n2022/02/28 20:22:37 Getting Metrics ...\n2022/02/28 20:22:39 api: GetMetrics, choice: flow - took 2646 ms\n2022/02/28 20:22:39 api: GetFlowMetrics, choice:  - took 2646 ms\n2022/02/28 20:22:39 Getting Metrics ...\n2022/02/28 20:22:39 api: GetMetrics, choice: port - took 66 ms\n2022/02/28 20:22:39 api: GetPortMetrics, choice:  - took 66 ms\n2022/02/28 20:22:39 \n\nPort Metrics\n-----------------------------------------------------------------\nName           Frames Tx      Frames Rx      \np1             5000000        5000000        \np2             5000000        5000000        \n-----------------------------------------------------------------\n\n\nFlow Metrics\n--------------------------------------------------\nName           Frames Rx      \np1->p2-IPv4    5000000        \np2->p1-IPv4    5000000        \n--------------------------------------------------\n\n\n2022/02/28 20:22:39 Done waiting for condition to be true\n2022/02/28 20:22:39 api: WaitFor, choice: condition to be true - took 2713 ms\n2022/02/28 20:22:39 Total time is 7.46707886s\n2022/02/28 20:22:39 Setting SetProtocolState ...\n2022/02/28 20:22:39 api: SetProtocolState, choice: stop - took 47 ms\n2022/02/28 20:22:39 Closing gosnappi client ...\n```\n\n</details>\n\n<details>\n\n<summary><b>Expand</b> this section for sample output of `test_iperf` test</summary>\n\n```shell\nThis script will,\n1. Load kubeconfig to access UHD cluster\n2. Deploy netshoot containers to run as custom service behind UHD Port 1 and 2\n3. Run iperf in those containers and use UHD ports for interface\nPress any key to continue...\n++ which kubectl\n+ '[' '!' -f /usr/local/bin/kubectl ']'\n+ export KUBECONFIG=/tmp/uhd400gconfig\n+ KUBECONFIG=/tmp/uhd400gconfig\n+ kubectl config set-cluster uhd400g --server=https://10.36.79.196:6443 --insecure-skip-tls-verify\nCluster \"uhd400g\" set.\n+ kubectl config set-credentials uhd400g-user --token=eyJhbGciOiJSUzI1NiIsImtpZCI6Ik9nNGFBZkVoU21hcjZuSUY4cEtiTjgxVjJqcm80OWxIU25fUVZ0anpwazQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJydXN0aWMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoici10b2tlbi04djRyNSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMjUyNWViYzYtOTBlMi00NWM2LWJhNzgtYTM1YmEwNjZkZmZjIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OnJ1c3RpYzpyIn0.Z3_U7c2tBWuWCdd8Wns98xZMRprJ0DO91XVlVVRgA5jS-Rcb8jVUej5pOXmvVc8FFj3ZOkggN2rdWDpNKSMDSLRuKeP47B76A0if1sUeci_sUve9ZcDuteS-t60kFOyBZG8YHPDDCArPaQedPoMpB96ekbmhJ5sprxwHKdYqT5Q_AxkoYd_8MWPESXjyxdyL-ogAtLP-KDT82_xxSW_ZMyu1CvjaqIQzNKivPk8BG72ByKjbSFBMV9ZYpFaumzOZUWZcuy_kfJ_k6TMyMCKg9FwUvSYMy39tRIY5rC3h-MTZCBSvlWpYCrlklHHsnR0pdMvtQbZMhXXO_7oMdYe9Eg\nUser \"uhd400g-user\" set.\n+ kubectl config set-context uhd400g --user=uhd400g-user --cluster=uhd400g --namespace=rustic\nContext \"uhd400g\" modified.\n+ kubectl config use-context uhd400g\nSwitched to context \"uhd400g\".\n+ ./uhdIfMgr -custom -image nicolaka/netshoot:v0.1 -cmd '[\"/bin/sh\"]' -args '[\"-cx\", \"sleep inf\"]' -port 2 -host 10.36.79.196\nINFO[0000] Trying to connect to gRPC server at 10.36.79.196:443 \nINFO[0000] OK!                                          \n+ ./uhdIfMgr -custom -image nicolaka/netshoot:v0.1 -cmd '[\"/bin/sh\"]' -args '[\"-cx\", \"sleep inf\"]' -port 1 -host 10.36.79.196\nINFO[0000] Trying to connect to gRPC server at 10.36.79.196:443 \nINFO[0000] OK!                                          \n+ sleep 10\n+ kubectl wait --for=condition=available deploy -l cpport.keysight.com=1.0 --timeout=100s\ndeployment.apps/c0 condition met\n+ kubectl wait --for=condition=available deploy -l cpport.keysight.com=2.0 --timeout=100s\ndeployment.apps/c1 condition met\n+ kubectl get pods -l cpport.keysight.com=1.0\nNAME                  READY   STATUS    RESTARTS   AGE\nc0-6fc56dbbbd-nvlsd   1/1     Running   0          11s\n+ kubectl get pods -l cpport.keysight.com=2.0\nNAME                 READY   STATUS    RESTARTS   AGE\nc1-dd9b4b99f-qlht2   1/1     Running   0          12s\n++ get_pod 1\n++ kubectl get pods -l cpport.keysight.com=1.0 -o 'jsonpath={.items[].metadata.name}'\n+ kubectl exec c0-6fc56dbbbd-nvlsd -- /bin/bash -cx 'ip link set eth1 up \\\n    && ip ad flush eth1 \\\n    && ip ad ad 5.6.7.8/24 dev eth1 \\\n    && kill `pidof iperf` || true \\\n    && iperf -s &'\n+ ip link set eth1 up\n+ ip ad flush eth1\n+ ip ad ad 5.6.7.8/24 dev eth1\n++ pidof iperf\n+ kill\nkill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]\n+ true\n+ iperf -s\n------------------------------------------------------------\nServer listening on TCP port 5001\nTCP window size:  128 KByte (default)\n------------------------------------------------------------\n++ get_pod 2\n++ kubectl get pods -l cpport.keysight.com=2.0 -o 'jsonpath={.items[].metadata.name}'\n+ kubectl exec c1-dd9b4b99f-qlht2 -- /bin/bash -cx 'ip link set eth1 up \\\n    && ip ad flush eth1 \\\n    && ip ad ad 5.6.7.9/24 dev eth1 \\\n    && iperf -c 5.6.7.8 -i1 -t30'\n+ ip link set eth1 up\n+ ip ad flush eth1\n+ ip ad ad 5.6.7.9/24 dev eth1\n+ iperf -c 5.6.7.8 -i1 -t30\n------------------------------------------------------------\nClient connecting to 5.6.7.8, TCP port 5001\nTCP window size: 85.0 KByte (default)\n------------------------------------------------------------\n[  1] local 5.6.7.9 port 38046 connected with 5.6.7.8 port 5001\n[ ID] Interval       Transfer     Bandwidth\n[  1] 0.00-1.00 sec   161 MBytes  1.35 Gbits/sec\n[  1] 1.00-2.00 sec   214 MBytes  1.80 Gbits/sec\n[  1] 2.00-3.00 sec   215 MBytes  1.80 Gbits/sec\n[  1] 3.00-4.00 sec   193 MBytes  1.62 Gbits/sec\n[  1] 4.00-5.00 sec   206 MBytes  1.72 Gbits/sec\n[  1] 5.00-6.00 sec   201 MBytes  1.69 Gbits/sec\n[  1] 6.00-7.00 sec   213 MBytes  1.78 Gbits/sec\n[  1] 7.00-8.00 sec   220 MBytes  1.84 Gbits/sec\n[  1] 8.00-9.00 sec   204 MBytes  1.71 Gbits/sec\n[  1] 9.00-10.00 sec   210 MBytes  1.76 Gbits/sec\n[  1] 10.00-11.00 sec   211 MBytes  1.77 Gbits/sec\n[  1] 11.00-12.00 sec   201 MBytes  1.69 Gbits/sec\n[  1] 12.00-13.00 sec   220 MBytes  1.85 Gbits/sec\n[  1] 13.00-14.00 sec   197 MBytes  1.65 Gbits/sec\n[  1] 14.00-15.00 sec   200 MBytes  1.68 Gbits/sec\n[  1] 15.00-16.00 sec   213 MBytes  1.79 Gbits/sec\n[  1] 16.00-17.00 sec   228 MBytes  1.92 Gbits/sec\n[  1] 17.00-18.00 sec   223 MBytes  1.87 Gbits/sec\n[  1] 18.00-19.00 sec   222 MBytes  1.86 Gbits/sec\n[  1] 19.00-20.00 sec   197 MBytes  1.65 Gbits/sec\n[  1] 20.00-21.00 sec   215 MBytes  1.80 Gbits/sec\n[  1] 21.00-22.00 sec   202 MBytes  1.69 Gbits/sec\n[  1] 22.00-23.00 sec   220 MBytes  1.84 Gbits/sec\n[  1] 23.00-24.00 sec   199 MBytes  1.67 Gbits/sec\n[  1] 24.00-25.00 sec   209 MBytes  1.75 Gbits/sec\n[  1] 25.00-26.00 sec   211 MBytes  1.77 Gbits/sec\n[  1] 26.00-27.00 sec   195 MBytes  1.64 Gbits/sec\n[  1] 27.00-28.00 sec   205 MBytes  1.72 Gbits/sec\n[  1] 28.00-29.00 sec   210 MBytes  1.76 Gbits/sec\n[  1] 29.00-30.00 sec   194 MBytes  1.63 Gbits/sec\n[  1] 0.00-30.02 sec  6.06 GBytes  1.74 Gbits/sec\n+ ./uhdIfMgr -host 10.36.79.196 -port 1\nINFO[0000] Trying to connect to gRPC server at 10.36.79.196:443 \nINFO[0000] OK!                                          \n+ ./uhdIfMgr -host 10.36.79.196 -port 2\nINFO[0000] Trying to connect to gRPC server at 10.36.79.196:443 \nINFO[0000] OK!                                          \n+ sleep 10\n+ kubectl wait --for=condition=available deploy -l cpport.keysight.com=1.0 --timeout=100s\ndeployment.apps/r0 condition met\n+ kubectl wait --for=condition=available deploy -l cpport.keysight.com=2.0 --timeout=100s\ndeployment.apps/r1 condition met\n```\n\n</details>\n\n\nThe following test was taken from the IXOS HW topic:\n\n**Sample Test**\n\nBefore attempting the sample test, the deployment must be bootstrapped and KENG services running as described in the deployment section above.\n\nThe sample test uses 2 back-to-back ports on a chassis and is named `otg-flows.py` in the example shown below.\n\n1. Use the following commands to set up `virtualenv` for Python:\n\n\t`python3 -m venv venv`\n\n\t`source venv/bin/activate`\n\n\t`pip install -r requirements.txt`\n\n2. To run flows using the `snappi` script and report port metrics, use:\n\n\t`otg-flows.py -m port`\n\n3. To run flows using the snappi script reporting port flow, use:\n\n\t`otg-flows.py -m flow`\n\n```\n# Sample Test ?otg-flows.py?\n#!/usr/bin/env python3\n# Copyright ? 2023 Open Traffic Generator\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to deal\n# in the Software without restriction, including without limitation the rights\n# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n# The above copyright notice and this permission notice shall be included in\n# all copies or substantial portions of the Software.\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n# THE SOFTWARE.\n\nimport sys, os\nimport argparse\nimport snappi\n\ndef port_metrics_ok(api, req, packets):\n    res = api.get_metrics(req)\n    print(res)\n    if packets == sum([m.frames_tx for m in res.port_metrics]) and packets == sum([m.frames_rx for m in res.port_metrics]):\n        return True\n\ndef flow_metrics_ok(api, req, packets):\n    res = api.get_metrics(req)\n    print(res)\n    if packets == sum([m.frames_tx for m in res.flow_metrics]) and packets == sum([m.frames_rx for m in res.flow_metrics]):\n        return True\n\ndef wait_for(func, timeout=15, interval=0.2):\n    \"\"\"\n    Keeps calling the `func` until it returns true or `timeout` occurs\n    every `interval` seconds.\n    \"\"\"\n    import time\n\n    start = time.time()\n\n    while time.time() - start <= timeout:\n        if func():\n            return True\n        time.sleep(interval)\n\n    print(\"Timeout occurred !\")\n    return False\n\ndef arg_metric_check(s):\n    allowed_values = ['port', 'flow']\n    if s in allowed_values:\n        return s\n    raise argparse.ArgumentTypeError(f\"metric has to be one of {allowed_values}\")\n\ndef parse_args():\n    # Argument parser\n    parser = argparse.ArgumentParser(description='Run OTG traffic flows')\n\n    # Add arguments to the parser\n    parser.add_argument('-m', '--metric',    required=False, help='metrics to monitor: port | flow',\n                                             default='port',\n                                             type=arg_metric_check)\n    # Parse the arguments\n    return parser.parse_args()\n\ndef main():\n    \"\"\"\n    Main function\n    \"\"\"\n    # Parameters\n    args = parse_args()\n\n    API = \"https://localhost:8443\"\n   #Replace with values matching your setup/equipment. For example, if IxOS management IP is 10.10.10.10 and you need to use ports 14 and 15 in the slot number 2:\n  # P1_LOCATION =\"10.10.10.10;2;14\"\n  # P2_LOCATION =\"10.10.10.10;2;15\"\n\n    api = snappi.api(location=API, verify=False)\n    cfg = api.config()\n\n    # config has an attribute called `ports` which holds an iterator of type\n    # `snappi.PortIter`, where each item is of type `snappi.Port` (p1 and p2)\n    p1, p2 = cfg.ports.port(name=\"p1\", location=P1_LOCATION).port(name=\"p2\", location=P2_LOCATION)\n\n    # config has an attribute called `flows` which holds an iterator of type\n    # `snappi.FlowIter`, where each item is of type `snappi.Flow` (f1, f2)\n    f1, f2 = cfg.flows.flow(name=\"flow p1->p2\").flow(name=\"flow p2->p1\")\n\n    # and assign source and destination ports for each\n    f1.tx_rx.port.tx_name, f1.tx_rx.port.rx_name = p1.name, p2.name\n    f2.tx_rx.port.tx_name, f2.tx_rx.port.rx_name = p2.name, p1.name\n\n    # configure packet size, rate and duration for both flows\n    f1.size.fixed, f2.size.fixed = 128, 256\n    for f in cfg.flows:\n        # send 1000 packets and stop\n        f.duration.fixed_packets.packets = 1000\n        # send 1000 packets per second\n        f.rate.pps = 1000\n        # allow fetching flow metrics\n        f.metrics.enable = True\n\n    # configure packet with Ethernet, IPv4 and UDP headers for both flows\n    eth1, ip1, udp1 = f1.packet.ethernet().ipv4().udp()\n    eth2, ip2, udp2 = f2.packet.ethernet().ipv4().udp()\n\n    # set source and destination MAC addresses\n    eth1.src.value, eth1.dst.value = \"00:AA:00:00:04:00\", \"00:AA:00:00:00:AA\"\n    eth2.src.value, eth2.dst.value = \"00:AA:00:00:00:AA\", \"00:AA:00:00:04:00\"\n\n    # set source and destination IPv4 addresses\n    ip1.src.value, ip1.dst.value = \"10.0.0.1\", \"10.0.0.2\"\n    ip2.src.value, ip2.dst.value = \"10.0.0.2\", \"10.0.0.1\"\n\n    # set incrementing port numbers as source UDP ports\n    udp1.src_port.increment.start = 5000\n    udp1.src_port.increment.step = 2\n    udp1.src_port.increment.count = 10\n\n    udp2.src_port.increment.start = 6000\n    udp2.src_port.increment.step = 4\n    udp2.src_port.increment.count = 10\n\n    # assign list of port numbers as destination UDP ports\n    udp1.dst_port.values = [4000, 4044, 4060, 4074]\n    udp2.dst_port.values = [8000, 8044, 8060, 8074, 8082, 8084]\n\n    # print resulting otg configuration\n    print(cfg)\n\n    # push configuration to controller\n    api.set_config(cfg)\n\n    # start transmitting configured flows\n    ts = api.control_state()\n    ts.traffic.flow_transmit.state = snappi.StateTrafficFlowTransmit.START\n    api.set_control_state(ts)\n\n    # Check if the file argument is provided\n    if args.metric == 'port':\n        # create a port metrics request and filter based on port names\n        req = api.metrics_request()\n        req.port.port_names = [p.name for p in cfg.ports]\n        # include only sent and received packet counts\n        req.port.column_names = [req.port.FRAMES_TX, req.port.FRAMES_RX]\n\n        # fetch port metrics\n        res = api.get_metrics(req)\n\n        # wait for port metrics to be as expected\n        expected = sum([f.duration.fixed_packets.packets for f in cfg.flows])\n        assert wait_for(lambda: port_metrics_ok(api, req, expected)), \"Metrics validation failed!\"\n\n    elif args.metric == 'flow':\n        # create a flow metrics request and filter based on port names\n        req = api.metrics_request()\n        req.flow.flow_names = [f.name for f in cfg.flows]\n\n        # fetch metrics\n        res = api.get_metrics(req)\n\n        # wait for flow metrics to be as expected\n        expected = sum([f.duration.fixed_packets.packets for f in cfg.flows])\n        assert wait_for(lambda: flow_metrics_ok(api, req, expected)), \"Metrics validation failed!\"\n\nif __name__ == '__main__':\n    sys.exit(main())\n```"
  },
  {
    "path": "docs/stylesheets/extra.css",
    "content": "[data-md-color-scheme=\"ks-light\"] {\n    --ks-color-black:                   #000000;\n    --ks-color-dark-red:                #871518;\n    --ks-color-red:                     #E90029;\n    --ks-color-dark-gray:               #373A36;\n    --ks-color-medium-gray:             #97999B;\n    --ks-color-gray:                    #D9D9D6;\n    --ks-color-light-gray:              #EBEBEB;\n    --ks-color-white:                   #FFFFFF;\n\n    --ks-color-dark-blue:               #071D49;\n    --ks-color-blue:                    #426DA9;\n    --ks-color-teal:                    #63B1BC;\n\n    --gh-color-code-bg-color:           rgb(246,248,250);\n    --gh-color-code-fg-color:           rgb(36,41,47);\n    --gh-color-code-comment-color:      rgb(110,119,129);\n    --gh-color-code-string-color:       rgb(10,48,105);\n    --gh-color-code-keyword-color:      rgb(207,34,46);\n    --gh-color-code-pretty-color:       rgb(130,80,223);\n\n    --md-primary-fg-color:        var(--ks-color-black);\n    --md-primary-fg-color--light: var(--ks-color-light-gray);\n    --md-primary-fg-color--dark:  var(--ks-color-dark-gray);\n    --md-primary-bg-color:        var(--ks-color-white);\n\n    --md-default-bg-color:        var(--ks-color-white);\n    --md-default-fg-color--light: var(--ks-color-dark-gray);\n    --md-default-fg-color:        var(--ks-color-black);\n    --md-default-fg-color--dark:  var(--ks-color-black);\n\n    --md-typeset-color:           var(--ks-color-dark-gray);\n    --md-typeset-a-color:         var(--ks-color-red);\n\n    --md-code-bg-color:                 var(--gh-color-code-bg-color);\n    --md-code-fg-color:                 var(--gh-color-code-fg-color);\n    --md-code-hl-comment-color:         var(--gh-color-code-comment-color);\n    --md-code-hl-variable-color:        var(--gh-color-code-pretty-color);\n    --md-code-hl-name-color:            var(--gh-color-code-pretty-color);\n    --md-code-hl-number-color:          var(--gh-color-code-string-color);\n    --md-code-hl-string-color:          var(--gh-color-code-string-color);\n    --md-code-hl-special-color:         var(--gh-color-code-fg-color);\n    --md-code-hl-operator-color:        var(--gh-color-code-string-color);\n    --md-code-hl-punctuation-color:     var(--gh-color-code-fg-color);\n    --md-code-hl-keyword-color:         var(--gh-color-code-keyword-color);\n    --md-code-hl-function-color:        var(--gh-color-code-pretty-color);\n    --md-code-hl-constant-color:        var(--gh-color-code-pretty-color);\n\n    --md-admonition-bg-color:     var(--gh-color-code-bg-color);\n    --md-admonition-fg-color:     var(--md-default-fg-color--light);\n}\n[data-md-color-scheme=\"ks-dark\"] {\n    --ks-color-black:                   #000000;\n    --ks-color-dark-red:                #871518;\n    --ks-color-red:                     #E90029;\n    --ks-color-dark-gray:               #373A36;\n    --ks-color-medium-gray:             #97999B;\n    --ks-color-gray:                    #D9D9D6;\n    --ks-color-light-gray:              #EBEBEB;\n    --ks-color-white:                   #FFFFFF;\n\n    --ks-color-dark-blue:               #071D49;\n    --ks-color-blue:                    #426DA9;\n    --ks-color-teal:                    #63B1BC;\n\n    --gh-color-code-bg-color:           rgb(22,27,24);\n    --gh-color-code-fg-color:           rgb(201,209,207);\n    --gh-color-code-comment-color:      rgb(139,148,158);\n    --gh-color-code-string-color:       rgb(165,214,255);\n    --gh-color-code-keyword-color:      rgb(255,123,114);\n    --gh-color-code-pretty-color:       rgb(210,168,255);\n\n    --md-primary-fg-color:              var(--ks-color-black);\n    --md-primary-fg-color--dark:        var(--ks-color-dark-gray);\n    --md-primary-fg-color--light:       var(--ks-color-medium-gray);\n    --md-primary-bg-color:              var(--ks-color-white);\n    --md-primary-bg-color--light:       var(--ks-color-light-gray);\n\n    --md-default-bg-color--light:       var(--ks-color-white);\n    --md-default-bg-color--lighter:     var(--ks-color-white);\n    --md-default-bg-color--lightest:    var(--ks-color-white);\n    --md-default-fg-color:              var(--ks-color-white);\n    --md-default-fg-color--lightest:    var(--ks-color-blue);\n    --md-default-fg-color--light:       var(--ks-color-light-gray);\n    --md-default-fg-color--lighter:     var(--ks-color-light-gray);\n    --md-default-fg-color--dark:        var(--ks-color-medium-gray);\n    --md-default-bg-color:              var(--ks-color-black);\n\n    --md-typeset-color:                 var(--ks-color-gray);\n    --md-typeset-a-color:               var(--ks-color-red);\n\n    --md-code-bg-color:                 var(--gh-color-code-bg-color);\n    --md-code-fg-color:                 var(--gh-color-code-fg-color);\n    --md-code-hl-comment-color:         var(--gh-color-code-comment-color);\n    --md-code-hl-variable-color:        var(--gh-color-code-pretty-color);\n    --md-code-hl-name-color:            var(--gh-color-code-pretty-color);\n    --md-code-hl-number-color:          var(--gh-color-code-string-color);\n    --md-code-hl-string-color:          var(--gh-color-code-string-color);\n    --md-code-hl-special-color:         var(--gh-color-code-fg-color);\n    --md-code-hl-operator-color:        var(--gh-color-code-string-color);\n    --md-code-hl-punctuation-color:     var(--gh-color-code-fg-color);\n    --md-code-hl-keyword-color:         var(--gh-color-code-keyword-color);\n    --md-code-hl-function-color:        var(--gh-color-code-pretty-color);\n    --md-code-hl-constant-color:        var(--gh-color-code-pretty-color);\n\n    --md-admonition-bg-color:           var(--md-default-bg-color);\n    --md-admonition-fg-color:           var(--md-default-fg-color--light);\n\n    --md-accent-fg-color:               var(--ks-color-light-gray);\n    --md-accent-fg-color--transparent:  var(--ks-color-dark-gray);\n}\n\n.md-grid {\n    max-width: 1440px;\n}\n\n.container {\n    display: flex;\n}\n\n.column {\n    flex: 1;\n    padding: 20px;\n}\n"
  },
  {
    "path": "docs/support.md",
    "content": "# Support\n\nCommercial customers of the Keysight Elastic Network Generator can obtain support through the [Keysight Support Center](https://www.keysight.com/us/en/support.html), using the link to Network Test (Layer 2/3) and Visibility Support (Ixia). Please be ready to provide the KENG License activation code and a clear problem description.\n\nSupport for the free version of Ixia-c can be obtained over Slack. You can join the Slack workspace ixia-c.slack.com using [this invite](https://join.slack.com/t/ixia-c/shared_invite/zt-1inkw2zr4-Jd6uynnxxhvhV6WC0MCtLQ). We also encourage you to open issues & enhancements in the [Ixia-c](https://github.com/open-traffic-generator/ixia-c/issues) repository.\n"
  },
  {
    "path": "docs/tests-chassis-app.md",
    "content": "# Ixia Chassis/Appliances\n This section describes how to use KENG with Keysight's Ixia hardware chassis.\n\n**Prerequisites**\n\nTo run KENG tests with Ixia hardware, the following pre-requisites must be satisfied:\n\n- You must have access to Keysight Elastic Network Generator (KENG) images and a valid KENG license.\n- For information on how to deploy and activate a KENG license, see the Licensing section of the User Guide.\n- The test hardware must be Keysight Ixia Novus or AresOne [Network Test Hardware](https://www.keysight.com/us/en/products/network-test/network-test-hardware.html) with [IxOS](https://support.ixiacom.com/ixos-software-downloads-documentation) 9.20 Patch 4 or higher.\n**NOTE:**  Currently, only Linux-based IxOS platforms are supported with KENG.\n- There must be physical link connectivity between the test ports on the Keysight Ixia Chassis and the devices under test (DUTs).\n- You must have a Linux host or virtual machine (VM) with sudo permissions and Docker support.\n\n\tBelow is an example of deploying an Ubuntu VM otg using [multipass](https://multipass.run/).  You can deploy using the means that you are most familiar with.\n\n\t`multipass launch 22.04 -n otg -c4 -m8G -d32G`\n\n\t`multipass shell otg`\n\n- [Docker](https://docs.docker.com/engine/install/ubuntu/). Depending on your Linux distribution, follow the steps outlined at one of the following URLs:\n  - [Ubuntu](https://docs.docker.com/engine/install/ubuntu/)\n  - [Debian](https://docs.docker.com/engine/install/debian/)\n  - [CentOS](https://docs.docker.com/engine/install/centos/)\n\n\tAfter docker is installed, add the current user to the docker group:\n\n\t`sudo usermod -aG docker $USER`\n\n- Python3 (version 3.9 or higher), pip and virtualenv\n\n\tUse the following command to install Python, pip, and virtualenv:\n\n\t`sudo apt install python3 python3-pip python3.10-venv -y`\n\n- [Go](https://go.dev/dl/) version 1.19 or later, if gRPC or gNMI API access is needed.\n\n\tUse the following command to install Go:\n\n\t`sudo snap install go --channel=1.19/stable --classic`\n\n- git and envsubst commands (typically installed by default)\n\n\tUse the following command to install git and envsubst if they are not already installed:\n\n\t`sudo apt install git gettext-base -y`\n\n**Deployment Layout**\n\nThe image below shows a complete topology of a KENG test environment.\n\nTo run tests with KENG, the tests must be written using the  OpenTrafficGenerator (OTG) API.\n\nTelemetry is also supported using gNMI APIs.\n\nIf KENG is deployed successfully, the services shown in the block labeled 'Keysight Elastic Network Generator' will be running.\n\nKENG services interact with the Keysight Ixia hardware chassis to configure protocols and data traffic.\n\n![ ](res/hw-server.drawio.svg)\n\n**Deploying KENG**\n\nThe Docker Compose tool provides a convenient way to deploy KENG services.\n\nTests cannot be run until KENG services are deployed and running.\n\nThe following procedure shows an example of how to deploy using Docker Compose.\n\n\n1. Copy the contents shown below into a `compose.yaml` file.\n\n\n\n```\nservices:\n  keng-controller:\n    image: ghcr.io/open-traffic-generator/keng-controller:1.53.0-1\n    restart: always\n    depends_on:\n      keng-layer23-hw-server:\n        condition: service_started\n    command:\n      - \"--accept-eula\"\n      - \"--debug\"\n      - \"--keng-layer23-hw-server\"\n      - \"keng-layer23-hw-server:5001\"\n    ports:\n      - \"40051:40051\"\nlogging:\n      driver: \"local\"\n      options:\n        max-size: \"100m\"\n        max-file: \"10\"\n        mode: \"non-blocking\"\n  keng-layer23-hw-server:\n    image: ghcr.io/open-traffic-generator/keng-layer23-hw-server:1.53.0-3\n    restart: always\n    command:\n      - \"dotnet\"\n      - \"otg-ixhw.dll\"\n      - \"--trace\"\n      - \"--log-level\"\n      - \"trace\"\n    logging:\n      driver: \"local\"\n      options:\n        max-size: \"100m\"\n        max-file: \"10\"\n        mode: \"non-blocking\"\n  otg-gnmi-server:\n    image: ghcr.io/open-traffic-generator/otg-gnmi-server:1.53.0\n    restart: always\n    depends_on:\n      keng-controller:\n        condition: service_started\n    command:\n      - \"-http-server\"\n      - \"https://keng-controller:8443\"\n      - \"--debug\"\n    ports:\n      - \"50051:50051\"\nlogging:\n      driver: \"local\"\n      options:\n        max-size: \"100m\"\n        max-file: \"10\"\n        mode: \"non-blocking\"\n```\n\n2. Start the Compose tool:\n\n\t`docker compose up -d`\n\n\n3. Use the `docker ps` command to verify that KENG services are running:\n\n\t`docker ps`\n\nThe list of containers should include:\n- `keng-controller`\n- `keng-layer23-hw-server`\n- `otg-gnmi-server`  (optional if gNMI access is needed)\n\nWhen the controller and ixhw-server services are running, the deployment is ready to run a test.\n\n**Test port references**\n\nKENG uses '/config.ports.locations' parameter to determine the test ports involved in the test.\n\nThe ‘/config.ports.locations’ parameter needs to be set to reference a test port.\n\nThis parameter is to be specified in a ‘chassis ip;card;port’ format.\n\n"
  },
  {
    "path": "docs/tests-ixia-c.md",
    "content": "# Ixia-c tests \n\nHow to run tests with Ixia-c \n"
  },
  {
    "path": "docs/tests-uhd400.md",
    "content": "# Introduction\n\nThe UHD400T is a high performance, ultra-high density, and highly flexible software defined Tester, for all your next\ngeneration testing needs. It works seamlessly with diverse testbeds like a single Device Under Test, or a network\nwith multiple devices.\n\nThe UHD400T comes as a 1U rack mount appliance with 16 400GE QSFP-DD ports that provide up to 6.4Tbps\ncomposite throughput.\n\nThe UHD400T is configurable via the Keysight Elastic Network Generator. During the setup phase, the physical ports\non the UHD400T can be configured through a REST API.\n\n![UHD](res/UHD400T_front_view.png \"UHD400T front view\")\n\n## VLAN-Port Mapping\n\nThe UHD400T fabric is preconfigured to route the traffic between the trunk port (port 32) and the traffic ports (1-16).\nPorts 17-31 are not available for use in the current release.\nWhen the packets arrive at a traffic port, they are encapsulated in a VLAN corresponding to the front panel (see mapping table below) and routed to the trunk port. The process is reversed, when the packets arrive at the trunk port.\n\nThe packets that are encapsulated in a VLAN, are routed to the front panel port corresponding to the VLAN.\nThe trunk packets that are not VLAN-encapsulated or have a VLAN that is not listed in the following mapping table, will be dropped.\n\n![UHD400T](res/system-with-UHD400T.drawio.svg \"Example System with UHD400T\")\n\n### Mapping Table\n\n| UHD Port | VLAN ID    | UHD Port   | VLAN ID    |\n|:---      |:---        |:---        |:---        |\n| 1        | 136        |   9        |   320      |\n| 2        |  144       |   10       |    312     |\n| 3        |  152       |   11       |   304      |\n| 4        |   160      |   12       |   296      |\n| 5        |   168      |   13       |   288      |\n| 6        |  176       |  14        |   280      |\n| 7        |   184      |   15       |   272      |\n| 8        |    192     |   16       |   264      |\n\n>Note:\nThe VLAN tagged interfaces can be created by using the following linux command:\n\n```bash\nip link add link <interface-name> name <interface-name>.<vid> type vlan id <vid>\n```\nFor more information, see [UHD400T Getting Started Guide](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400T/1.0/1.0.20/UHD400T%20Getting%20Started%20Guide.pdf).\n"
  },
  {
    "path": "docs/troubleshooting.md",
    "content": "# Troubleshooting\r\n\r\nThis section explains the troubleshooting scenarios for different environments.\r\n\r\n## OTG hardware environment\r\n\r\n**<ins>The test fails while it is configuring OTG ports</ins>**: This situation may arise for various reasons. For example, the port ownership is not cleared properly by the previous test, the OTG port went to a bad state, and etc. The course of action in such scenarios can be as follows:\r\n\r\n* Manually clear the ownership of the port.\r\n* Reboot the chassis ports.\r\n* Restart the docker containers.\r\n* Use `docker compose` or `docker-compose` to turn the containers down and up.\r\n* Execute the following commands from the directory where you have kept the docker-compose.yaml file.\r\n\r\n```sh\r\ndocker-compose down\r\n```\r\n\r\n```sh\r\ndocker-compose up -d\r\n```\r\n\r\n**<ins>Configuration is failing port-speed mismatch</ins>**: In this scenario, the OTG port configuration will also fail due to the speed mismatch between the DUT port and the chassis port.\r\nTo fix this error, do the following:\r\n\r\n* Adjust the DUT port speed to the default port speed of the chassis port.\r\n* Reboot the chassis ports.\r\n* Execute the test.\r\n\r\n**<ins>Test failed to take port ownership</ins>**: This error is often obvious from the message that is displayed on the console \"Failed to take ownership of the following ports\". This situation may occur if the previous test did not clear the ownership or someone else is already owning the port. You can go to the chassis UI and clear the port ownership manually by force.\r\n\r\n![clearOwnership](res/clearOwnership.PNG \"Clear port ownership\")\r\n\r\nExecute the actions in the following order:\r\n\r\n* Clear ownership\r\n* Reboot ports\r\n\r\n**<ins>Error while starting the protocols</ins>**: This error can occur if the ports are in a bad state or if you have ignored some errors that have occurred earlier, when you started the protocol engine.\r\nThe error messages may look like:\r\n\r\n* Error occurred while starting protocol on the protocol ports:\r\n  Unable to find type:  \r\n  `Ixia.Aptixia.Cpf.pcpu.IsisSRGBRangeSubObjectsPCPU`\r\n\r\n* Error occurred while starting protocol on the protocol ports: `GetPortSession()` is NULL.\r\n\r\nIn this situation, a quick solution is to reboot the ports and restart the docker containers, by following the steps that are described earlier.\r\n\r\n>Note:\r\nIn summary, clearing the ownership, rebooting the ports, and restarting the containers may resolve many of your problems regarding the ATE port configuration error.\r\n\r\n**<ins>OTG API call failed similarly like the start protocol, due to \"context deadline exceeded\" error</ins>**: You can increase the timeout deadline by changing the value of the **timeout** parameter of the ATE in the binding file. The default value is 30 (in seconds). You can increase it as per your setup.\r\n\r\n```sh\r\n  # This option specific to OTG over Ixia-HW.\r\n  otg {\r\n    target: \"127.0.0.1:40051\" # Change this to the Ixia-c-grpc server endpoint.\r\n    insecure: true\r\n    timeout: 120\r\n  }\r\n```\r\n\r\n>Note:\r\nAfter this change, do not forget to restart the containers and reboot the hardware ports.\r\n\r\n## KNE environment\r\n\r\n**<ins>Topology creation failures for Ixia-C pods</ins>**: This error can occur for multiple reasons:\r\n\r\n* A mismatch in the Ixia-c build versions and the older Operator that is in use. To deploy the correct versions as per the releases, see \"<https://github.com/open-traffic-generator/ixia-c/releases>\".\r\n* The minimum resource requirement is not met.\r\n* An older version of KNE is being used in the client. To update KNE to a newer release, see \"<https://github.com/openconfig/kne/releases/>\" and deploy the topology.\r\n\r\n**<ins>Test fails due to timeout</ins>**: This error occurs when the test has faced a timeout. By default, the timeout is 10m. You can increase this limit to \"-timeout 20m\" or can ensure that all the services are reachable for the test to connect and run.\r\n\r\n**<ins>Test fails at set config</ins>**: This error occurs if the configuration is not proper. For example, mistake in the flow configuration, BGP LI flag is not enabled but `GetStates` is called, and etc. You can correct the configuration and run the test again.\r\n\r\n## UHD environment\r\n\r\n**<ins>Test may not run</ins>**: This error can occur for multiple reasons:\r\n\r\n* A mismatch in the version of the rustic containers and the controller that is in use. Ensure that they are compatible.\r\n* The Rustic containers (that are deployed) may not be reachable. There are rare cases when you observe that even if the container is running, the exposed port may have gone corrupt. In such scenarios, the only solution is to redeploy the docker containers.\r\n* The UHD ports may not be responsive. When the rustic container is ready, ensure that the UHD ports are up. For this, refer to the port-api-service that is provided in the [UHD docs](tests-uhd400.md#vlan-port-mapping).\r\n"
  },
  {
    "path": "docs/usecases.md",
    "content": "# Use Cases\n\nThis page has a listing of all use-cases where Ixia-c is being used.\n\n- Chris Sommers' [demo](https://youtu.be/Db7Cx1hngVY) at [2021 P4 Workshop](https://opennetworking.org/2021-p4-workshop-3-0/) using snappi and Ixia-c to test a P4 application.  You can find Chris' repo [here](https://github.com/chrispsommers/p4-guide/tree/snappi-tests2).\n\n- [when Packets go BRRRRRRRRRRRRR](https://zero.bs/when-packets-go-brrrrrrrrrrrrr.html) Ixia-c used as a traffic generator to replace [scapy](https://scapy.readthedocs.io/en/latest/) under the hood for [DDoS Stresstest](https://zero.bs/ddos-stresstest.en.html), a DDoS Assessment tool.\n\nReach out to us on [Slack](support.md) to add your use-cases to this page.\n"
  },
  {
    "path": "docs/user-guide-introduction.md",
    "content": "# Introduction\n[Keysight Elastic Network Generator](https://www.keysight.com/us/en/products/network-test/protocol-load-test/keysight-elastic-network-generator.html) is an agile, lightweight, and composable network test software designed for Continuous Integration. It supports vendor neutral Open Traffic Generator models and APIs, integrates with several network emulation platforms, and drives a range of Keysight’s Network Infrastructure Test software products, hardware load modules and appliances.\n\nThe Elastic Network Generator software runs in Docker-based containerized environments and emulates key data center control plane protocols while also sending data plane traffic. It has a modern architecture based on micro-services and open-source interfaces and is designed for very fast automated test scenario execution. All of these characteristics enable robust validation of data center networks to deliver top quality of experience.\n\n## Components\n\nKeysight Elastic Network Generator provides an abstraction over various test port implementations –\nIxia-c software, UHD400T white-box and purpose-built IxOS hardware. A test program written in Open Traffic Generator API can be run using any of the supported test port types without modifications.\n\n![Test Port Abstraction via OTG](res/otg-keng-labels-on-white.drawio.svg)\n\nThe main components of KENG are:\n\n| Component                     | Description |\n| -------------                 | ------------- |\n| [Test program](https://otg.dev/clients/) | Script or other executable that contains the code that defines the test processes.  |\n| [OTG](https://otg.dev)        | Open Traffic Generator, an evolving API specification that defines the components of a traffic generator such as: test ports (virtual or physical), emulated devices, traffic flows, and statistics and capture capability.  |\n| [Elastic Network Generator](https://www.keysight.com/us/en/products/network-test/protocol-load-test/keysight-elastic-network-generator.html)     | Controller that manages the flow of commands from the test program to the traffic generation device (virtual or physical) and the flow of results from the device to the test program.  |\n| [Ixia-c](tests-ixia-c.md)             | Containerized software traffic generator.  |\n| [UHD400T](tests-uhd400.md)            | Composable test ports based on line-rate white-box switch hardware traffic generator and Ixia-c protocol emulation software. |\n| [IxOS Hardware](tests-chassis-app.md) | Keysight Novus or AresONE high-performance network test hardware running IxOS.  |\n\n## Clients\n\nTo successfully use an OTG-based Traffic Generator, you need to be able to execute the following tasks over the OTG API:\n\n* Prepare a Configuration and apply it to a Traffic Generator\n* Control states of the configured objects like Protocols or Traffic Flows\n* Collect and analyze Metrics reported by the Traffic Generator\n\nIt is a job of an OTG Client to perform these tasks by communicating with a Traffic Generator via the OTG API. There are different types of such clients, and the choice between them depends on how and where you want to use a Traffic Generator.\n\nThere are multiple ways to communicate with KENG through the OTG API:\n\n| Method | Description |\n| ------------- | ------------- |\n| otgen  | A command-line tool that is an easy way to get started  |\n| snappi  | A library that makes it easy create test programs in Python or Go  |\n| direct REST or gRPC calls  | An alternative to using snappi  |\n| custom OTG client  | Custom OTG client applications  |\n\n\n## OTG Examples\n\n[OTG examples](https://github.com/open-traffic-generator/otg-examples) repository is a great way to get started with [Open Traffic Generator API](https://otg.dev/). It features a collection of software-only network labs ranging from very simple to more complex. To setup the network labs in software, use the containerized or virtualized NOS images.\n\n"
  },
  {
    "path": "license",
    "content": "MIT License\n\nCopyright (c) 2020 Keysight Technologies, Inc. 2021, 2022, 2023\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "mkdocs.md",
    "content": "# MkDocs How To\n\nThis repo contains the content for the [Ixia-c.dev](https://ixia-c.dev/) web-site.  It is built using the [Material](https://squidfunk.github.io/mkdocs-material/getting-started/) theme for [MkDocs](https://www.mkdocs.org/).\n\n## Prerequisites\n\n* Python 3.10+. In the commands below we assume use have `python3` executable. If you have a different name, change accordingly.\n\n* PIP\n\n    ```Shell\n    curl -sL https://bootstrap.pypa.io/get-pip.py | python3 -\n    ```\n\n* Virtualenv (recommended)\n\n    ```Shell\n    pip install virtualenv\n    ```\n\n## How to install\n\n1. Clone this repository and create Python virtual environment\n\n    ```Shell\n    git clone https://github.com/open-traffic-generator/ixia-c.git --recursive\n    cd ixia-c\n    git checkout -b __NEW_BRANCH_NAME__\n    python3.10 -m venv venv\n    source venv/bin/activate\n    ```\n\n2. Install required modules\n\n    ```Shell\n    pip3 install -r requirements.txt\n    ```\n\nUpdate contents in the `docs` directory and verify locally prior to pushing to main branch of this repo on GitHub.  Site will automatically update.\n\n## How to verify contents locally\n\n1. Run the following command to render the content in real-time via a local web server:\n\n    ```sh\n    mkdocs serve\n    ```\n\n2. Alternatively, you can render all static html content in the `site` directory:\n\n    ```sh\n    mkdocs build\n    ```\n\n    You can point your browser to `index.html` in the `site` directory to view it.\n\n## Submodules\n\nParts of the `docs` hierarchy are coming from submodules. To update content of the submodules to the most recent one, use:\n\n```Shell\ngit submodule update --remote\n```"
  },
  {
    "path": "mkdocs.yml",
    "content": "site_name: Ixia-c & Elastic Network Generator Documentation\nrepo_url: https://github.com/open-traffic-generator/ixia-c\nrepo_name: ixia-c\nedit_uri: \"\"\ntheme:\n  name: material\n  logo: assets/logo.png\n  favicon: assets/favicon.png\n  font:\n    text: Arial\n  palette:\n    # Palette toggle for light mode\n    - scheme: ks-light\n      media: \"(prefers-color-scheme: light)\"\n      toggle:\n        icon: material/toggle-switch\n        name: Switch to dark mode\n\n    # Palette toggle for dark mode\n    - scheme: ks-dark\n      media: \"(prefers-color-scheme: dark)\"\n      toggle:\n        icon: material/toggle-switch-off-outline\n        name: Switch to light mode\n  features:\n    - navigation.tabs\n    - navigation.tabs.sticky\n    - navigation.instant\n    - navigation.tracking\n    - navigation.top\nextra_css:\n  - stylesheets/extra.css\nmarkdown_extensions:\n  - attr_list\n  - tables\n  - admonition\n  - pymdownx.details\n  - pymdownx.highlight:\n      anchor_linenums: true\n  - pymdownx.inlinehilite\n  - pymdownx.snippets\n  - pymdownx.superfences\nextra:\n  analytics:\n    provider: google\n    property: G-L42048L6R5\n  social:\n    - icon: fontawesome/brands/github\n      link: https://github.com/open-traffic-generator\n    - icon: fontawesome/brands/slack\n      link: https://ixia-c.slack.com\n# Page tree\nnav:\n  - Home:\n    - Overview: index.md # Needs re-writing as a landing page\n#    - FAQ: faq.md # Review if there are any valuable items left\n    - Resources: resources.md\n    - EULA: eula.md # Updated to use www.keysight.com/find/sweula\n  - Quick Start:\n    - Introduction: quick-start/introduction.md # Now goes as Ixia-c Quick Start. Add a paragraph why\n#    - Deployment: quick-start/deployment.md # Link to deployment dir is broken. Need a compose file in text. Need to move to docker compose later\n#    - Sample test: quick-start/sample-test.md # Empty - otgen example or hello snappi?. See \"clients\" in UG Intro\n    - First script: developer/hello-snappi.md # Took from Developer Guide\n  - User Guide:\n    - Introduction: user-guide-introduction.md # Update images. Ixia-c link leads to empty page\n    - Prerequisites: prerequisites.md # Make clear when you need Python. Network Int Prereqs - do we need this at all?\n    - Deployment:\n      - Ixia-c: deployments.md # All deployments are via links, easy to miss. Do we make this top-level for Ixia-c/UHD/HW?\n      - UHD400T: tests-uhd400.md # This is UHD400 intro. Not deployment, not scripts. Need to align with HW\n      - IxOS Hardware: tests-chassis-app.md # This this HW deployment, there is no scripts (and likely should not be)\n#    - Use cases: usecases.md # Remove for now, rethink what is this later\n    - Integrations: integrated-environments.md # A strange mix of otg-examples and clab/kne. Move Clab/KNE deployments here\n    - Limitations: limitations.md # Align with the DS, clarify if this is for Ixia-c/UHD/HW\n    - Troubleshooting: troubleshooting.md # Move how to see logs from Deployment here\n    - Licensing: licensing.md # Update from otg-examples\n  - Developer Guide: # This section is not ready yet for publishing\n#    - Introduction: developer/introduction.md # Take from otg.dev?\n    - Python with snappi: developer/snappi-constructs.md # Cleanup TBD at the end\n    - Go with gosnappi: developer/snappi-install.md # Split into python and go. Rename as sample scripts?\n    - Contributing: contribute.md # Move to Developer guide\n  - Reference Guide:\n    - Capabilities: reference/capabilities.md\n    - Resource requirements: reference/resource-requirements.md\n    - Licensing: reference/licensing.md\n  - Releases:\n    - Releases: releases.md\n    - Announcements: news.md # Check if autogenerated. If yes, see how to merge with releases\n  - Support: support.md\n"
  },
  {
    "path": "notes.md",
    "content": "### Build Details\n\n| Component                     | Version       |\n|-------------------------------|---------------|\n| Open Traffic Generator API    | [1.53.0](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.53.0/artifacts/openapi.yaml)         |\n| snappi                        | [1.53.0](https://pypi.org/project/snappi/1.53.0)        |\n| gosnappi                      | [1.53.0](https://pkg.go.dev/github.com/open-traffic-generator/snappi/gosnappi@v1.53.0)        |\n| keng-controller               | [1.53.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller)    |\n| ixia-c-traffic-engine         | [1.8.0.245](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine)       |\n| keng-app-usage-reporter       | [0.0.1-52](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-app-usage-reporter)      |\n| ixia-c-protocol-engine        | [1.00.0.522](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine)    | \n| keng-layer23-hw-server        | [1.53.0-3](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-layer23-hw-server)    |\n| keng-operator                 | [0.4.0](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-operator)        | \n| otg-gnmi-server               | [1.53.0](https://github.com/orgs/open-traffic-generator/packages/container/package/otg-gnmi-server)         |\n| ixia-c-one                    | [1.53.0-1](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-one/)         |\n| UHD400                        | [1.5.10](https://downloads.ixiacom.com/support/downloads_and_updates/public/UHD400/1.5/1.5.10/artifacts.tar)         |\n\n\n### Release Feature(s):\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for disabling/enabling ISIS Simulated Links on the fly. [details](https://github.com/open-traffic-generator/models/pull/465)\n    ```go\n        cs := gosnappi.NewControlState()\n        cs.Protocol().Isis().SimulatedLinks().\n            SetNames([]string{\"isisSimLink1\", \"isisSimLink2\"}).\n            SetState(gosnappi.StateProtocolIsisSimLinksState.DOWN/UP)\n    ```\n    Note: Links will be disconnected from both directions for supplied simulated links.\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added port speed in port metrics. [details](https://github.com/open-traffic-generator/models/pull/472)\n    - New attribute named `speed` is now available in port metrics response. This will contain the negotiated HW port speed in `KBps`. \n    - Examples are given below.\n        - 100 Gbps is 100 * 1000 * 1000 / 8 = 12500000 KBps,\n        - 1.6 Tbps (high performance devices) is 1.6 * 1000 * 1000 * 1000 / 8 = 200000000 KBps,\n        - 10 Mbps (legacy devices) is 10 * 1000 / 8 = 1250 KBps\n\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Support added for GTPv1 & GTPv2 packet headers in flows.\n    - To configure GTPv2 packet:\n        ```go\n            flow := config.Flows().Add()\n            ...\n            eth := flow.Packet().Add().Ethernet()\n            ...\n            ip := flow.Packet().Add().Ipv4()\n            ...\n\n            udp := flow.Packet().Add().Udp()\n            udp.SrcPort().SetValue(uint32(5000))\n            udp.DstPort().SetValue(uint32(2123)) // 2123 is GTPv2\n\n            gtp := flow.Packet().Add().Gtpv2()\n            gtp.PiggybackingFlag().SetValue(1)\n            gtp.TeidFlag().SetValue(1)\n            gtp.MessageType().SetValue(32)\n            gtp.Teid().SetValue(1)\n            gtp.SequenceNumber().SetValue(10)\n            gtp.Spare1().SetValue(1)\n            gtp.Spare2().SetValue(1)\n        ```\n    - To configure GTPv1 flow:\n        ```go\n            flow := config.Flows().Add()\n            ...\n            eth := flow.Packet().Add().Ethernet()\n            ...\n            ip := flow.Packet().Add().Ipv4()\n            ...\n\n            udp := flow.Packet().Add().Udp()\n            udp.SrcPort().SetValue(uint32(4000))\n            udp.DstPort().SetValue(uint32(2152)) // 2152 is GTPv1\n\n            gtp := flow.Packet().Add().Gtpv1()\n            gtp.MessageType().SetValue(255)\n            gtp.Teid().SetValue(10)\n\n            inner := flow.Packet().Add().Ipv4()\n            inner.Src().SetValue(\"11.0.0.1\")\n            inner.Dst().SetValue(\"12.0.0.1\")\n        ```\n    Note: GTPv1 & GTPv2 flows are already supported in `Ixia-C`.\n\n* <b><i>Keng-Operator</i></b>: Deprecated `gcr.io/kubebuilder/kube-rbac-proxy` is now removed.\n    Note: Users of the `keng-operator` should now use the `yaml` published corresponding to the release at [ixiatg-operator.yaml(v0.4.0)](https://github.com/open-traffic-generator/keng-operator/releases/download/v0.4.0/ixiatg-operator.yaml)\n\n    Example: The `yaml` at [openconfig/kne/manifests/keysight/ixiatg-operator.yaml](https://github.com/openconfig/kne/blob/main/manifests/keysight/ixiatg-operator.yaml) for usage in KNE environment.\n    \n### Bug Fix(s):\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Attempted fix is included for intermittent issue where a test initially fails with `\"context deadline exceeded\"` for `set_config` and subsequent API calls, returned the error `\"Processing of previous API in keng-layer23-hw-server still in progress. Cannot execute current API\"`. \n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: Issue is fixed where incorrect information was being returned for contents of `is_reachability_tlvs` and `extended_is_reachability_tlvs`.\n    - In `get_states` response for `isis_lsps.lsps[i].tlvs[j].is_reachability_tlvs[k]/extended_is_reachability_tlvs[k]`.\n    - In gNMI response for `isis-routers/isis-router[name=*]/state/link-state-database/lsp-states/lsps[lsp-id=*][pdu-type=*]/tlvs/is-reachability|extended-is-reachability`.\n* <b><i>Ixia-C & UHD400</i></b>: Issue is fixed where intermittent crash was seen for long duration run with multiple tests when starting `BGP/BGP+` with back trace containing `\"ix_set_ifindex, nsm_util_interface_address_add, bgp_nsm_recv_address\"` keywords.\n\n### Known Issues\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: If `keng-layer23-hw-server` version is upgraded/downgraded, the ports which will be used from this container must be rebooted once before running the tests.\n* <b><i>Ixia Chassis & Appliances(Novus, AresOne)</i></b>: `StartProtocols`/`set_control_state.protocol.all.start` can get stuck till the time all DHPCv4/v6 clients receive the leased IPv4/v6 addresses from the DHCPv4/v6 server/relay agent. This may result in getting `\"context deadline exceeded\"` error in the test program.\n* <b><i>UHD400</i></b>: Packets will not be transmitted if `flows[i].rate.pps` is less than 50.\n* <b><i>UHD400</i></b>: `values` for fields in flow packet headers can be created with maximum length of 1000 values. If larger set of values are required for a field which are random, please use `random` instead of `values`.\n* <b><i>Ixia-C</i></b>: Flow Tx is incremented for flow with tx endpoints as LAG, even if no packets are sent on the wire when all active links of the LAG are down.\n* <b><i>Ixia-C</i></b>: The metric `loss` in flow metrics is currently not supported.\n* <b><i>Ixia-C</i></b>: When flow transmit is started, transmission will be restarted on any existing flows already transmitting packets. "
  },
  {
    "path": "readme.md",
    "content": "<h1 align=\"center\">\n  <br>\n  Ixia-C\n  <br>\n</h1>\n\n<h4 align=\"center\">\n  Ixia-C - A powerful traffic generator based on <a href=\"https://github.com/open-traffic-generator/models\" target=\"_blank\">Open Traffic Generator API</a>\n</h4>\n\n<p align=\"center\">\n  <a href=\"https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller\"><img alt=\"Release v1.53.0-1\" src=\"https://img.shields.io/badge/release-v1.53.0--1-brightgreen\"></a>\n  <a href=\"https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.53.0/artifacts/openapi.yaml\"><img alt=\"Open Traffic Generator v1.53.0\" src=\"https://img.shields.io/badge/open--traffic--generator-v1.53.0-brightgreen\"></a>\n  <a href=\"https://pypi.org/project/snappi/1.53.0\"><img alt=\"snappi v1.53.0\" src=\"https://img.shields.io/badge/snappi-v1.53.0-brightgreen\"></a>\n  <a href=\"docs/news.md\"><img alt=\"news\" src=\"https://img.shields.io/badge/-news-blue?logo=github\"></a>\n  <a href=\"docs/contribute.md\"><img alt=\"news\" src=\"https://img.shields.io/badge/-contribute-blue?logo=github\"></a>\n  <a href=\"docs/support.md\"><img alt=\"Slack Status\" src=\"https://img.shields.io/badge/slack-support-blue?logo=slack\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"#quick-start\">Quick Start</a> &nbsp;•&nbsp;\n  <a href=\"#key-features\">Key Features</a> &nbsp;•&nbsp;\n  <a href=\"docs/user-guide-introduction.md\">Documentation</a> &nbsp;•&nbsp;\n  <a href=\"docs/usecases.md\">Use Cases</a> &nbsp;•&nbsp;\n  <a href=\"docs/roadmap.md\">Roadmap</a> &nbsp;•&nbsp;\n  <a href=\"docs/faq.md\">FAQ</a>\n  <br>\n</p>\n\n### What is Ixia-C ?\n\n- A modern, powerful and **API-driven** traffic generator designed to cater to the needs of hyper-scalers, network hardware vendors and hobbyists alike.\n\n- **Free for basic use-cases** and distributed / deployed as a multi-container application consisting primarily of a [controller](https://github.com/orgs/open-traffic-generator/packages/container/package/keng-controller), a [traffic-engine](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-traffic-engine) and a [protocol-engine](https://github.com/orgs/open-traffic-generator/packages/container/package/ixia-c-protocol-engine).\n\n- As a reference implementation of [Open Traffic Generator API](https://github.com/open-traffic-generator/models), supports client SDKs in various languages, most prevalent being [snappi](https://github.com/open-traffic-generator/snappi) (Python SDK) and [gosnappi](https://github.com/open-traffic-generator/snappi/tree/main/gosnappi).\n\n<p align=\"center\">\n<img src=\"docs/res/ixia-c.drawio.svg\" alt=\"Ixia-C deployment for two-arm test with DUT\">\n</p>\n\n> [Keysight](https://www.keysight.com) also offers a well supported commercial version, [Keysight Elastic Network Generator (KENG)](https://www.keysight.com/us/en/products/network-test/protocol-load-test/keysight-elastic-network-generator.html), with no restrictions on **performance and scalability**. Scripts written for the community version are **compatible** with this version.\n\n### Quick Start\n\nPlease ensure that following prerequisites are met by the setup:\n  - At least **2 x86_64 CPU cores** and **7GB RAM**, preferably running **Ubuntu 22.04 LTS** OS\n  - **Python 3.8+** (and **pip**) or **Go 1.19+**\n  - **Docker Engine** (Community Edition)\n\n\n#### 1. Deploy Ixia-C\n\n```bash\n# clone this repository\ngit clone --recurse-submodules https://github.com/open-traffic-generator/ixia-c.git && cd ixia-c\n\n# create a veth pair and deploy ixia-c containers where one traffic-engine is bound\n# to each interface in the pair, and controller is configured to figure out how to\n# talk to those traffic-engine containers\ncd conformance && ./do.sh topo new dp\n```\n\n#### 2. Setup and run standalone test using [snappi](https://github.com/open-traffic-generator/snappi) or [gosnappi](https://github.com/open-traffic-generator/snappi/tree/main/gosnappi)\n\n```bash\n# change dir to conformance if you haven't already\ncd conformance\n\n# setup python virtual environment and install dependencies\n./do.sh prepytest\n\n# run standalone snappi test that configures and sends UDP traffic\n# upon successful run, flow metrics shall be printed on console\n./do.sh pytest examples/test_quickstart.py\n\n# optionally, go equivalent of the test can be run like so\n./do.sh gotest examples/quickstart_test.go\n```\n\n> Checkout the contents of [test_quickstart.py](https://github.com/open-traffic-generator/conformance/blob/22563e20fe512ef13baf44c1bc69bc59f87f6c25/examples/test_quickstart.py) and equivalent [quickstart_test.go](https://github.com/open-traffic-generator/conformance/blob/22563e20fe512ef13baf44c1bc69bc59f87f6c25/examples/quickstart_test.go) for quick explanation on test steps.\n\n#### 3. Optionally, run test using [curl](https://curl.se/)\n\nWe can also pass equivalent **JSON configuration** directly to **controller**, just by using **curl**.\nThe description of each node in the configuration is detailed in self-updating  [online documentation](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/open-traffic-generator/models/v1.53.0/artifacts/openapi.yaml).\n\n\n```bash\n# push traffic configuration\ncurl -skL https://localhost:8443/config -H \"Content-Type: application/json\" -d @conformance/examples/quickstart_config.json\n\n# start transmitting configured flows\ncurl -skL https://localhost:8443/control/state -H \"Content-Type: application/json\" -d @conformance/examples/quickstart_control.json\n\n# fetch flow metrics\ncurl -skL https://localhost:8443/monitor/metrics -H \"Content-Type: application/json\" -d @conformance/examples/quickstart_metrics.json\n```\n\n### Key Features\n\n* High Performance\n  * Run on servers or Keysight hardware (commercial version only)\n  * Generate kbps to Tbps of traffic using same script\n  * 10Gbps @ 64 byte frame size using one Xeon class core (commercial version only)\n  * Built using [DPDK](https://www.dpdk.org)\n* Fast REST API for automation\n  * Easily integrate with test frameworks like [pytest](https://www.pytest.org)\n  * Easily integrate into CI/CD pipelines with Jenkins, GitHub, GitLab\n* Up to 256 flows per port.  Each Flow supports:\n  * Packet Templates for Ethernet, VLAN, VXLAN, GTPv1, GTPv2, IPv4, IPv6, ICMP, ICMPv6, GRE, UDP, & TCP.  More protocols are on the way.\n  * Ability to use tools like Scapy to add headers for unsupported protocols.\n  * Manipulation of any field in the packet headers\n  * Patterns to modify common packet header fields to generate millions of unique packets\n  * Ability to track flows based on common packet header fields\n  * Configurable frame size\n  * Rate specification in pps (packets per second) or % line-rate\n  * Ability to send bursts\n* Statistics\n  * Per-port and per-flow\n  * One way latency measurements (min, max, average) on a per flow basis\n* Capture\n  * Packets with filters\n  * Write to PCAP or redirect to tcpdump\n\n## Copyright notice\n\n© Copyright Keysight Technologies, Inc. 2021, 2022, 2023\n\n"
  },
  {
    "path": "requirements.txt",
    "content": "mkdocs-material"
  }
]