From 85657324c297a783db9290252e75a3ab696a7a2f Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sat, 12 Nov 2022 11:16:56 -0800 Subject: [PATCH 01/18] readme plus topo with graphite --- .gitmodules | 3 ++ clab/ixp-openbgpd/README.md | 95 +++++++++++++++++++++++++++++++++ clab/ixp-openbgpd/openbgpd-lab | 1 + clab/ixp-openbgpd/topo.clab.yml | 51 ++++++++++++++++++ 4 files changed, 150 insertions(+) create mode 100644 clab/ixp-openbgpd/README.md create mode 160000 clab/ixp-openbgpd/openbgpd-lab create mode 100644 clab/ixp-openbgpd/topo.clab.yml diff --git a/.gitmodules b/.gitmodules index bf16610e..e0262a93 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "submodules/otgen"] path = submodules/otgen url = https://github.com/open-traffic-generator/otgen.git +[submodule "clab/ixp-openbgpd/openbgpd-lab"] + path = clab/ixp-openbgpd/openbgpd-lab + url = https://github.com/hellt/openbgpd-lab.git diff --git a/clab/ixp-openbgpd/README.md b/clab/ixp-openbgpd/README.md new file mode 100644 index 00000000..01bff775 --- /dev/null +++ b/clab/ixp-openbgpd/README.md @@ -0,0 +1,95 @@ +# Guest lab: IXP with OpenBGPd Route Server + +## Overview + +## Lab configuration + +### Diagram + +![Diagram](./diagram.png) + +### Layer 3 topology and generated traffic flows + +![IP Diagram](./ip-diagram.png) + +### OTG + +![OTG Diagram](./otg-diagram.png) + +## Prerequisites + +* Licensed [Keysight Elastic Network Generator](https://www.keysight.com/us/en/products/network-test/protocol-load-test/keysight-elastic-network-generator.html) images. Read more in [KENG.md](/KENG.md) +* Linux host or VM with sudo permissions and Docker support +* [Docker](https://docs.docker.com/engine/install/) +* Clone of this repository + + ```Shell + git clone https://github.com/open-traffic-generator/otg-examples.git + ``` + +## Quick start + +To run all the steps at once, execute: + +```Shell +cd otg-examples/clab/ixp-openbgpd +make all +make clean +``` + +Otherwise, follow step-by-step instructions below: + +## Install components + +1. Install the latest release of Containerlab. For more installation options see [here](https://containerlab.dev/install/). + + ```Shell + bash -c "$(curl -sL https://get.containerlab.dev)" + ``` + +2. Install `otgen` tool, version `0.4.0-rc1` or later. + + ```Shell + curl -L "https://github.com/open-traffic-generator/otgen/releases/download/v0.4.0-rc1/otgen_0.4.0-rc1_$(uname -s)_$(uname -m).tar.gz" | tar xzv otgen + sudo mv otgen /usr/local/bin/otgen + sudo chmod +x /usr/local/bin/otgen + ``` + +3. Make sure `/usr/local/bin` is in your `$PATH` variable (by default this is not the case on CentOS 7) + + ```Shell + cmd=otgen + dir=/usr/local/bin + if ! command -v ${cmd} &> /dev/null && [ -x ${dir}/${cmd} ]; then + echo "${cmd} exists in ${dir} but not in the PATH, updating PATH to:" + PATH="/usr/local/bin:${PATH}" + echo $PATH + fi + ``` + +## Deploy the lab + +1. Create a bridge `ixp` to represent an IXP LAN segment + + ```Shell + sudo bash -c 'ip link add name ixp type bridge && ip link set dev ixp up' + ``` + +2. Launch the deployment using Containerlab + + ```Shell + cd otg-examples/clab/ixp-openbgpd + sudo -E containerlab deploy + ``` + +## Run tests + +## Destroy the lab + +```Shell +sudo containerlab destroy -c +``` + +## Credits + +* Original [`Basic IXP Lab with OpenBGPd Route Server`](https://github.com/hellt/openbgpd-lab) lab copyright of [Roman Dodin](https://github.com/hellt) diff --git a/clab/ixp-openbgpd/openbgpd-lab b/clab/ixp-openbgpd/openbgpd-lab new file mode 160000 index 00000000..35a88268 --- /dev/null +++ b/clab/ixp-openbgpd/openbgpd-lab @@ -0,0 +1 @@ +Subproject commit 35a88268454dcb15ff59709153e6427c44def307 diff --git a/clab/ixp-openbgpd/topo.clab.yml b/clab/ixp-openbgpd/topo.clab.yml new file mode 100644 index 00000000..25c88472 --- /dev/null +++ b/clab/ixp-openbgpd/topo.clab.yml @@ -0,0 +1,51 @@ +name: obgpd + +topology: + nodes: + ixp: + kind: bridge + labels: + graph-level: 2 + graph-icon: switch + srlinux: + kind: srl + image: ghcr.io/nokia/srlinux:22.6.4 + startup-config: srlinux.cfg + labels: + graph-level: 3 + ceos: + kind: ceos + image: ceos:latest + startup-config: ceos.cfg + labels: + graph-level: 3 + openbgpd: + kind: linux + image: quay.io/openbgpd/openbgpd:7.7 + binds: + - openbgpd.conf:/etc/bgpd/bgpd.conf + exec: + - "ip address add dev eth1 192.168.0.3/24" + labels: + graph-level: 1 + graph-icon: server + + graphite: + kind: linux + image: netreplica/graphite:nanog86 + env: + CLAB_SSH_CONNECTION: ${SSH_CONNECTION} + binds: + - __clabDir__/topology-data.json:/htdocs/lab/default/topology-data.json:ro + - __clabDir__/ansible-inventory.yml:/htdocs/lab/default/ansible-inventory.yml:ro + ports: + - 8080:80 + exec: + - sh -c 'graphite_motd.sh 8080' + labels: + graph-hide: yes + + links: + - endpoints: ["srlinux:e1-1", "ixp:srl1"] + - endpoints: ["ceos:eth1", "ixp:ceos1"] + - endpoints: ["openbgpd:eth1", "ixp:obgp1"] From e793ed9ca4d4381404185e48e72c51f9cd60a198 Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sat, 12 Nov 2022 12:12:20 -0800 Subject: [PATCH 02/18] updates to topo.clab.yml --- clab/ixp-openbgpd/README.md | 1 + clab/ixp-openbgpd/topo.clab.yml | 17 ++++++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/clab/ixp-openbgpd/README.md b/clab/ixp-openbgpd/README.md index 01bff775..ed32da2f 100644 --- a/clab/ixp-openbgpd/README.md +++ b/clab/ixp-openbgpd/README.md @@ -88,6 +88,7 @@ Otherwise, follow step-by-step instructions below: ```Shell sudo containerlab destroy -c +sudo ip link delete dev ixp ``` ## Credits diff --git a/clab/ixp-openbgpd/topo.clab.yml b/clab/ixp-openbgpd/topo.clab.yml index 25c88472..f1e5f824 100644 --- a/clab/ixp-openbgpd/topo.clab.yml +++ b/clab/ixp-openbgpd/topo.clab.yml @@ -10,20 +10,20 @@ topology: srlinux: kind: srl image: ghcr.io/nokia/srlinux:22.6.4 - startup-config: srlinux.cfg + startup-config: openbgpd-lab/srlinux.cfg labels: graph-level: 3 ceos: kind: ceos image: ceos:latest - startup-config: ceos.cfg + startup-config: openbgpd-lab/ceos.cfg labels: graph-level: 3 openbgpd: kind: linux image: quay.io/openbgpd/openbgpd:7.7 binds: - - openbgpd.conf:/etc/bgpd/bgpd.conf + - openbgpd-lab/openbgpd.conf:/etc/bgpd/bgpd.conf exec: - "ip address add dev eth1 192.168.0.3/24" labels: @@ -32,12 +32,11 @@ topology: graphite: kind: linux - image: netreplica/graphite:nanog86 + image: netreplica/graphite:latest env: CLAB_SSH_CONNECTION: ${SSH_CONNECTION} binds: - - __clabDir__/topology-data.json:/htdocs/lab/default/topology-data.json:ro - - __clabDir__/ansible-inventory.yml:/htdocs/lab/default/ansible-inventory.yml:ro + - __clabDir__/topology-data.json:/htdocs/default/default.json:ro ports: - 8080:80 exec: @@ -46,6 +45,6 @@ topology: graph-hide: yes links: - - endpoints: ["srlinux:e1-1", "ixp:srl1"] - - endpoints: ["ceos:eth1", "ixp:ceos1"] - - endpoints: ["openbgpd:eth1", "ixp:obgp1"] + - endpoints: ["openbgpd:eth1", "ixp:veth1"] + - endpoints: ["ceos:eth1", "ixp:veth2"] + - endpoints: ["srlinux:e1-1", "ixp:veth3"] From 8171de2999a747151bae2f7527d53379dad6dced Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sat, 12 Nov 2022 12:21:47 -0800 Subject: [PATCH 03/18] makefile with deploy --- clab/ixp-openbgpd/Makefile | 50 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 clab/ixp-openbgpd/Makefile diff --git a/clab/ixp-openbgpd/Makefile b/clab/ixp-openbgpd/Makefile new file mode 100644 index 00000000..35cff588 --- /dev/null +++ b/clab/ixp-openbgpd/Makefile @@ -0,0 +1,50 @@ +SHELL = /bin/bash + +.PHONY: all +all: install deploy + +.PHONY: clean +clean: remove-clab remove-net + +.PHONY: clean-all +clean-all: clean install-clean + +############################### +# Install components +############################### + +.PHONY: install +install: install-clab install-otgen + +install-clab: /usr/bin/containerlab +/usr/bin/containerlab: + bash -c "$$(curl -sL https://get.containerlab.dev)" + +install-otgen: /usr/local/bin/otgen +/usr/local/bin/otgen: + curl -L "https://github.com/open-traffic-generator/otgen/releases/download/v0.4.0-rc1/otgen_0.4.0-rc1_$$(uname -s)_$$(uname -m).tar.gz" | tar xzv otgen + sudo mv otgen /usr/local/bin/otgen + sudo chmod +x /usr/local/bin/otgen + +install-clean: + -sudo rm -f `command -v otgen` + -sudo apt remove containerlab -y + +############################### +# Deploy lab +############################### + +.PHONY: deploy +deploy: deploy-net deploy-clab + +deploy-net: + sudo bash -c 'ip link add name ixp type bridge && ip link set dev ixp up' + +deploy-clab: + sudo -E containerlab deploy --reconfigure + +remove-clab: + sudo containerlab destroy --cleanup + +remove-net: + -sudo ip link delete dev ixp From 772ca94b9eb83c31570f00b89eac5786a1af221a Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sat, 12 Nov 2022 12:27:19 -0800 Subject: [PATCH 04/18] ceos image --- clab/ixp-openbgpd/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/clab/ixp-openbgpd/README.md b/clab/ixp-openbgpd/README.md index ed32da2f..fb413c1b 100644 --- a/clab/ixp-openbgpd/README.md +++ b/clab/ixp-openbgpd/README.md @@ -21,6 +21,12 @@ * Licensed [Keysight Elastic Network Generator](https://www.keysight.com/us/en/products/network-test/protocol-load-test/keysight-elastic-network-generator.html) images. Read more in [KENG.md](/KENG.md) * Linux host or VM with sudo permissions and Docker support * [Docker](https://docs.docker.com/engine/install/) +* Arista cEOSLab image. Arista EOS containerized version is called cEOSLab and can be obtained by registering on Arista website and downloading an archive with container image. Follow the [instructions](https://containerlab.dev/manual/kinds/ceos/#getting-ceos-image) provided on Containerlab website to get it. Once the image is installed, tag it as `ceos:latest`: + + ```Shell + docker tag ceos:latest + ``` + * Clone of this repository ```Shell From 48a6b2488ee6896565df27a8001064902f5e4bce Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sat, 12 Nov 2022 12:58:10 -0800 Subject: [PATCH 05/18] make pull --- clab/ixp-openbgpd/Makefile | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/clab/ixp-openbgpd/Makefile b/clab/ixp-openbgpd/Makefile index 35cff588..a85d5831 100644 --- a/clab/ixp-openbgpd/Makefile +++ b/clab/ixp-openbgpd/Makefile @@ -1,13 +1,13 @@ SHELL = /bin/bash .PHONY: all -all: install deploy +all: install pull deploy .PHONY: clean clean: remove-clab remove-net .PHONY: clean-all -clean-all: clean install-clean +clean-all: clean pull-clean install-clean ############################### # Install components @@ -30,6 +30,28 @@ install-clean: -sudo rm -f `command -v otgen` -sudo apt remove containerlab -y +############################### +# Pull images +############################### + +.PHONY: pull + +pull: pull-ceos + +pull-clean: remove-ceos + +pull-ceos: +ifeq ($(shell docker images -q ceos:latest 2> /dev/null),) + docker pull ghcr.io/open-traffic-generator/ceos:4.28.0F + docker tag ghcr.io/open-traffic-generator/ceos:4.28.0F ceos:latest +endif + +remove-ceos: +ifneq ($(shell docker images -q ceos:latest 2> /dev/null),) + docker rmi `docker images -q ceos:latest 2> /dev/null` --force +endif + + ############################### # Deploy lab ############################### From d443b5d2b93dd5829306f062f8912cded393c3ec Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sat, 12 Nov 2022 13:02:40 -0800 Subject: [PATCH 06/18] ci for ixp-openbgpd --- .github/workflows/ci.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7beb6f79..9dc9392b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,9 @@ on: - 'docker-compose/cpdp-frr/**' - '!docker-compose/cpdp-frr/**.md' - '!docker-compose/cpdp-frr/**.png' + - 'clab/ixp-openbgpd/**' + - '!clab/ixp-openbgpd/**.md' + - '!clab/ixp-openbgpd/**.png' - 'clab/rtbh/**' - '!clab/rtbh/**.md' - '!clab/rtbh/**.png' @@ -34,6 +37,9 @@ on: - 'docker-compose/cpdp-frr/**' - '!docker-compose/cpdp-frr/**.md' - '!docker-compose/cpdp-frr/**.png' + - 'clab/ixp-openbgpd/**' + - '!clab/ixp-openbgpd/**.md' + - '!clab/ixp-openbgpd/**.png' - 'clab/rtbh/**' - '!clab/rtbh/**.md' - '!clab/rtbh/**.png' @@ -49,6 +55,7 @@ jobs: docker-compose-cpdp-b2b: ${{ steps.changes.outputs.docker-compose-cpdp-b2b }} docker-compose-cpdp-frr: ${{ steps.changes.outputs.docker-compose-cpdp-frr }} clab-cpdp-frr: ${{ steps.changes.outputs.clab-cpdp-frr }} + clab-ixp-openbgpd: ${{ steps.changes.outputs.ixp-openbgpd }} clab-rtbh: ${{ steps.changes.outputs.clab-rtbh }} steps: - uses: actions/checkout@v3 @@ -68,6 +75,8 @@ jobs: - 'docker-compose/cpdp-frr/**' clab-cpdp-frr: - 'docker-compose/cpdp-frr/**' + clab-ixp-openbgpd: + - 'clab/ixp-openbgpd/**' clab-rtbh: - 'clab/rtbh/**' - name: docker-compose b2b @@ -88,6 +97,9 @@ jobs: - name: clab rtbh if: steps.changes.outputs.clab-rtbh == 'true' run: echo "Run Clab RTBH CI" + - name: clab ixp-openbgpd + if: steps.changes.outputs.ixp-openbgpd == 'true' + run: echo "Run Clab ixp-openbgpd CI" docker-compose-b2b: name: Run docker-compose b2b CI runs-on: ubuntu-20.04 @@ -182,6 +194,26 @@ jobs: password: ${{ secrets.ENV_GITHUB_PAT }} - name: Run all-clab run: make all-clab + clab-ixp-openbgpd: + name: Run Clab ixp-openbgpd CI + runs-on: ubuntu-20.04 + needs: paths-filter + defaults: + run: + working-directory: ./clab/ixp-openbgpd + if: needs.paths-filter.outputs.ixp-openbgpd == 'true' + steps: + - uses: actions/checkout@v3 + with: + submodules: 'true' + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ secrets.ENV_GITHUB_USER }} + password: ${{ secrets.ENV_GITHUB_PAT }} + - name: Run all and clean + run: make all clean-all clab-rtbh: name: Run Clab RTBH CI runs-on: ubuntu-20.04 From 862a85adfbe899ae145c6283b9fea7af050be91d Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sat, 12 Nov 2022 15:25:25 -0800 Subject: [PATCH 07/18] ci filter fix --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9dc9392b..ae396142 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,7 +55,7 @@ jobs: docker-compose-cpdp-b2b: ${{ steps.changes.outputs.docker-compose-cpdp-b2b }} docker-compose-cpdp-frr: ${{ steps.changes.outputs.docker-compose-cpdp-frr }} clab-cpdp-frr: ${{ steps.changes.outputs.clab-cpdp-frr }} - clab-ixp-openbgpd: ${{ steps.changes.outputs.ixp-openbgpd }} + clab-ixp-openbgpd: ${{ steps.changes.outputs.clab-ixp-openbgpd }} clab-rtbh: ${{ steps.changes.outputs.clab-rtbh }} steps: - uses: actions/checkout@v3 @@ -94,12 +94,12 @@ jobs: - name: clab cpdp-frr if: steps.changes.outputs.clab-cpdp-frr == 'true' run: echo "Run clab cpdp-frr CI" - - name: clab rtbh - if: steps.changes.outputs.clab-rtbh == 'true' - run: echo "Run Clab RTBH CI" - name: clab ixp-openbgpd if: steps.changes.outputs.ixp-openbgpd == 'true' run: echo "Run Clab ixp-openbgpd CI" + - name: clab rtbh + if: steps.changes.outputs.clab-rtbh == 'true' + run: echo "Run Clab RTBH CI" docker-compose-b2b: name: Run docker-compose b2b CI runs-on: ubuntu-20.04 From 0f55e04170a8594eae031b28f6f9345fb66fd4be Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sat, 12 Nov 2022 15:27:59 -0800 Subject: [PATCH 08/18] more ci fixes --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ae396142..5c28f28f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -95,7 +95,7 @@ jobs: if: steps.changes.outputs.clab-cpdp-frr == 'true' run: echo "Run clab cpdp-frr CI" - name: clab ixp-openbgpd - if: steps.changes.outputs.ixp-openbgpd == 'true' + if: steps.changes.outputs.clab-ixp-openbgpd == 'true' run: echo "Run Clab ixp-openbgpd CI" - name: clab rtbh if: steps.changes.outputs.clab-rtbh == 'true' @@ -201,7 +201,7 @@ jobs: defaults: run: working-directory: ./clab/ixp-openbgpd - if: needs.paths-filter.outputs.ixp-openbgpd == 'true' + if: needs.paths-filter.outputs.clab-ixp-openbgpd == 'true' steps: - uses: actions/checkout@v3 with: From 0b33a46556e27de4dc5159a83b53b446c5058c65 Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sat, 12 Nov 2022 15:35:23 -0800 Subject: [PATCH 09/18] rollback kind renaming --- .github/workflows/ci.yml | 2 +- clab/ixp-openbgpd/topo.clab.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5c28f28f..80068ff1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -213,7 +213,7 @@ jobs: username: ${{ secrets.ENV_GITHUB_USER }} password: ${{ secrets.ENV_GITHUB_PAT }} - name: Run all and clean - run: make all clean-all + run: make all clean pull-clean clab-rtbh: name: Run Clab RTBH CI runs-on: ubuntu-20.04 diff --git a/clab/ixp-openbgpd/topo.clab.yml b/clab/ixp-openbgpd/topo.clab.yml index f1e5f824..7f632567 100644 --- a/clab/ixp-openbgpd/topo.clab.yml +++ b/clab/ixp-openbgpd/topo.clab.yml @@ -8,13 +8,13 @@ topology: graph-level: 2 graph-icon: switch srlinux: - kind: srl + kind: nokia_srlinux image: ghcr.io/nokia/srlinux:22.6.4 startup-config: openbgpd-lab/srlinux.cfg labels: graph-level: 3 ceos: - kind: ceos + kind: arista_ceos image: ceos:latest startup-config: openbgpd-lab/ceos.cfg labels: From a6095ccad0d4b1feb600d97fac19effb771b099e Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sat, 12 Nov 2022 15:56:59 -0800 Subject: [PATCH 10/18] added ixia-c --- clab/ixp-openbgpd/topo.clab.yml | 67 ++++++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/clab/ixp-openbgpd/topo.clab.yml b/clab/ixp-openbgpd/topo.clab.yml index 7f632567..5b977d8a 100644 --- a/clab/ixp-openbgpd/topo.clab.yml +++ b/clab/ixp-openbgpd/topo.clab.yml @@ -7,13 +7,13 @@ topology: labels: graph-level: 2 graph-icon: switch - srlinux: + r1: kind: nokia_srlinux image: ghcr.io/nokia/srlinux:22.6.4 startup-config: openbgpd-lab/srlinux.cfg labels: graph-level: 3 - ceos: + r2: kind: arista_ceos image: ceos:latest startup-config: openbgpd-lab/ceos.cfg @@ -29,6 +29,61 @@ topology: labels: graph-level: 1 graph-icon: server + otg: + kind: linux + image: ghcr.io/open-traffic-generator/licensed/ixia-c-controller:0.0.1-3587 + network-mode: host + cmd: --accept-eula --http-port 443 + ports: + - 443:443 + labels: + graph-hide: yes + te1: + kind: linux + image: ghcr.io/open-traffic-generator/ixia-c-traffic-engine:1.6.0.19 + ports: + - 5555:5555 + - 50071:50071 + env: + OPT_LISTEN_PORT: 5555 + ARG_IFACE_LIST: virtual@af_packet,eth1 + OPT_NO_HUGEPAGES: Yes + OPT_NO_PINNING: Yes + WAIT_FOR_IFACE: Yes + labels: + graph-level: 4 + pe1: + kind: linux + image: ghcr.io/open-traffic-generator/licensed/ixia-c-protocol-engine:1.00.0.236 + network-mode: container:te1 + startup-delay: 5 + env: + INTF_LIST: eth1 + labels: + graph-hide: yes + te2: + kind: linux + image: ghcr.io/open-traffic-generator/ixia-c-traffic-engine:1.6.0.19 + ports: + - 5556:5556 + - 50072:50071 + env: + OPT_LISTEN_PORT: 5556 + ARG_IFACE_LIST: virtual@af_packet,eth1 + OPT_NO_HUGEPAGES: Yes + OPT_NO_PINNING: Yes + WAIT_FOR_IFACE: Yes + labels: + graph-level: 4 + pe2: + kind: linux + image: ghcr.io/open-traffic-generator/licensed/ixia-c-protocol-engine:1.00.0.236 + network-mode: container:te2 + startup-delay: 5 + env: + INTF_LIST: eth1 + labels: + graph-hide: yes graphite: kind: linux @@ -45,6 +100,8 @@ topology: graph-hide: yes links: - - endpoints: ["openbgpd:eth1", "ixp:veth1"] - - endpoints: ["ceos:eth1", "ixp:veth2"] - - endpoints: ["srlinux:e1-1", "ixp:veth3"] + - endpoints: ["openbgpd:eth1", "ixp:eth3"] + - endpoints: ["r1:e1-1", "ixp:eth1"] + - endpoints: ["r1:e1-2", "te1:eth1"] + - endpoints: ["r2:eth1", "ixp:eth2"] + - endpoints: ["r2:eth2", "te2:eth1"] From 616fda5c37a5b5d350a01d6ad87333d4354563c0 Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sat, 12 Nov 2022 16:00:16 -0800 Subject: [PATCH 11/18] temp disabled ci autorun --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 80068ff1..270ee5f4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ on: - 'docker-compose/cpdp-frr/**' - '!docker-compose/cpdp-frr/**.md' - '!docker-compose/cpdp-frr/**.png' - - 'clab/ixp-openbgpd/**' + - '!clab/ixp-openbgpd/**' - '!clab/ixp-openbgpd/**.md' - '!clab/ixp-openbgpd/**.png' - 'clab/rtbh/**' @@ -37,7 +37,7 @@ on: - 'docker-compose/cpdp-frr/**' - '!docker-compose/cpdp-frr/**.md' - '!docker-compose/cpdp-frr/**.png' - - 'clab/ixp-openbgpd/**' + - '!clab/ixp-openbgpd/**' - '!clab/ixp-openbgpd/**.md' - '!clab/ixp-openbgpd/**.png' - 'clab/rtbh/**' From f14dbedbfc73d5a3ef41b820e27023935851160d Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sat, 12 Nov 2022 16:15:27 -0800 Subject: [PATCH 12/18] ip-diagram --- clab/ixp-openbgpd/README.md | 8 -------- clab/ixp-openbgpd/ip-diagram.png | Bin 0 -> 29479 bytes 2 files changed, 8 deletions(-) create mode 100644 clab/ixp-openbgpd/ip-diagram.png diff --git a/clab/ixp-openbgpd/README.md b/clab/ixp-openbgpd/README.md index fb413c1b..14ab55a8 100644 --- a/clab/ixp-openbgpd/README.md +++ b/clab/ixp-openbgpd/README.md @@ -4,18 +4,10 @@ ## Lab configuration -### Diagram - -![Diagram](./diagram.png) - ### Layer 3 topology and generated traffic flows ![IP Diagram](./ip-diagram.png) -### OTG - -![OTG Diagram](./otg-diagram.png) - ## Prerequisites * Licensed [Keysight Elastic Network Generator](https://www.keysight.com/us/en/products/network-test/protocol-load-test/keysight-elastic-network-generator.html) images. Read more in [KENG.md](/KENG.md) diff --git a/clab/ixp-openbgpd/ip-diagram.png b/clab/ixp-openbgpd/ip-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..510f4f292370e1e591d4f594bdb77fdcacc24fbf GIT binary patch literal 29479 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

tKye>XYA6Oq= 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 Date: Sat, 12 Nov 2022 21:16:48 -0800 Subject: [PATCH 13/18] configs with interfaces for ixia-c --- clab/ixp-openbgpd/ceos.cfg | 52 +++++++++++++++ clab/ixp-openbgpd/srlinux.cfg | 110 ++++++++++++++++++++++++++++++++ clab/ixp-openbgpd/topo.clab.yml | 4 +- 3 files changed, 164 insertions(+), 2 deletions(-) create mode 100644 clab/ixp-openbgpd/ceos.cfg create mode 100644 clab/ixp-openbgpd/srlinux.cfg diff --git a/clab/ixp-openbgpd/ceos.cfg b/clab/ixp-openbgpd/ceos.cfg new file mode 100644 index 00000000..a4557883 --- /dev/null +++ b/clab/ixp-openbgpd/ceos.cfg @@ -0,0 +1,52 @@ +! +transceiver qsfp default-mode 4x10G +! +service routing protocols model multi-agent +! +spanning-tree mode mstp +! +no aaa root +! +username admin privilege 15 role network-admin secret sha512 $6$q7rxnFPBdUBokO6F$WTwfyP70x9.HnajAr/2D8facyvqqxecIAYeMxXOifjJqJ5WbMKWZzsWlkiUj4J975VY5vXsqXG7BLFDgA5jtR. +! +interface Ethernet1 + no switchport + ip address 192.168.0.2/24 +! +interface Ethernet2 + no switchport + ip address 203.0.113.1/30 +! +interface Loopback0 + ip address 10.0.0.2/32 +! +ip prefix-list loopback + seq 10 permit 10.0.0.2/32 +! +ip prefix-list CE + seq 10 permit 203.0.113.0/30 +! +route-map redis_connected permit 10 + match ip address prefix-list loopback +! +route-map redis_connected permit 20 + match ip address prefix-list CE +! +ip routing +! +router bgp 65002 + router-id 10.0.0.2 + no bgp enforce-first-as + neighbor 192.168.0.3 remote-as 65003 + redistribute connected route-map redis_connected +! +management api http-commands + no shutdown +! +management api gnmi + transport grpc default +! +management api netconf + transport ssh default +! +end \ No newline at end of file diff --git a/clab/ixp-openbgpd/srlinux.cfg b/clab/ixp-openbgpd/srlinux.cfg new file mode 100644 index 00000000..1d45ce92 --- /dev/null +++ b/clab/ixp-openbgpd/srlinux.cfg @@ -0,0 +1,110 @@ +#### +# this configuration is in CLI format and can be pasted in the terminal +#### + +interface ethernet-1/1 { + admin-state enable + subinterface 0 { + admin-state enable + ipv4 { + address 192.168.0.1/24 { + } + } + } +} + +interface ethernet-1/2 { + admin-state enable + subinterface 0 { + admin-state enable + ipv4 { + address 192.0.2.1/30 { + } + } + } +} + +interface lo0 { + admin-state enable + subinterface 0 { + admin-state enable + ipv4 { + address 10.0.0.1/32 { + } + } + } +} + +routing-policy { + prefix-set loopback { + prefix 10.0.0.0/24 mask-length-range 24..32 { + } + } + prefix-set CE { + prefix 192.0.2.0/24 mask-length-range 24..32 { + } + } + policy redis_connected { + default-action { + reject { + } + } + statement 10 { + match { + prefix-set loopback + } + action { + accept { + } + } + } + statement 20 { + match { + prefix-set CE + } + action { + accept { + } + } + } + } + policy ingress_all { + default-action { + accept { + } + } + } +} + +network-instance default { + interface ethernet-1/1.0 { + } + interface ethernet-1/2.0 { + } + interface lo0.0 { + } + protocols { + bgp { + admin-state enable + autonomous-system 65001 + router-id 10.0.0.1 + group rs { + export-policy redis_connected + import-policy ingress_all + peer-as 65003 + ipv4-unicast { + admin-state enable + } + timers { + connect-retry 1 + hold-time 9 + keepalive-interval 3 + minimum-advertisement-interval 1 + } + } + neighbor 192.168.0.3 { + peer-group rs + } + } + } +} \ No newline at end of file diff --git a/clab/ixp-openbgpd/topo.clab.yml b/clab/ixp-openbgpd/topo.clab.yml index 5b977d8a..aff67ab0 100644 --- a/clab/ixp-openbgpd/topo.clab.yml +++ b/clab/ixp-openbgpd/topo.clab.yml @@ -10,13 +10,13 @@ topology: r1: kind: nokia_srlinux image: ghcr.io/nokia/srlinux:22.6.4 - startup-config: openbgpd-lab/srlinux.cfg + startup-config: srlinux.cfg labels: graph-level: 3 r2: kind: arista_ceos image: ceos:latest - startup-config: openbgpd-lab/ceos.cfg + startup-config: ceos.cfg labels: graph-level: 3 openbgpd: From 909202efcb7c3ccd0d4e28e3c1ae7ae49f35e7c7 Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sat, 12 Nov 2022 21:33:57 -0800 Subject: [PATCH 14/18] otg test with arp and traffic --- clab/ixp-openbgpd/Makefile | 11 +- clab/ixp-openbgpd/README.md | 4 + clab/ixp-openbgpd/otg.json | 214 ++++++++++++++++++++++++++++++++++++ 3 files changed, 228 insertions(+), 1 deletion(-) create mode 100644 clab/ixp-openbgpd/otg.json diff --git a/clab/ixp-openbgpd/Makefile b/clab/ixp-openbgpd/Makefile index a85d5831..5137c362 100644 --- a/clab/ixp-openbgpd/Makefile +++ b/clab/ixp-openbgpd/Makefile @@ -1,7 +1,7 @@ SHELL = /bin/bash .PHONY: all -all: install pull deploy +all: install pull deploy run .PHONY: clean clean: remove-clab remove-net @@ -64,9 +64,18 @@ deploy-net: deploy-clab: sudo -E containerlab deploy --reconfigure + sleep 30 # pause for all components to initialize remove-clab: sudo containerlab destroy --cleanup remove-net: -sudo ip link delete dev ixp + +############################### +# Run tests +############################### + +.PHONY: run +run: + otgen --log debug run --insecure --file otg.json --json --metrics flow | otgen transform --metrics flow | otgen display -m table diff --git a/clab/ixp-openbgpd/README.md b/clab/ixp-openbgpd/README.md index 14ab55a8..4e53e67c 100644 --- a/clab/ixp-openbgpd/README.md +++ b/clab/ixp-openbgpd/README.md @@ -82,6 +82,10 @@ Otherwise, follow step-by-step instructions below: ## Run tests +```Shell +otgen --log debug run -k --file otg.json -m flow | otgen transform -m flow | otgen display -m table +``` + ## Destroy the lab ```Shell diff --git a/clab/ixp-openbgpd/otg.json b/clab/ixp-openbgpd/otg.json new file mode 100644 index 00000000..26a1404f --- /dev/null +++ b/clab/ixp-openbgpd/otg.json @@ -0,0 +1,214 @@ +{ + "ports": [ + { + "location": "localhost:5555+localhost:50071", + "name": "p1" + }, + { + "location": "localhost:5556+localhost:50072", + "name": "p2" + } + ], + "devices": [ + { + "ethernets": [ + { + "port_name": "p1", + "ipv4_addresses": [ + { + "gateway": "192.0.2.1", + "address": "192.0.2.2", + "prefix": 30, + "name": "otg1.eth[0].ipv4[0]" + } + ], + "mac": "02:00:00:00:01:aa", + "mtu": 1500, + "name": "otg1.eth[0]" + } + ], + "name": "otg1" + }, + { + "ethernets": [ + { + "port_name": "p2", + "ipv4_addresses": [ + { + "gateway": "203.0.113.1", + "address": "203.0.113.2", + "prefix": 30, + "name": "otg2.eth[0].ipv4[0]" + } + ], + "mac": "02:00:00:00:02:aa", + "mtu": 1500, + "name": "otg2.eth[0]" + } + ], + "name": "otg2" + } + ], + "flows": [ + { + "tx_rx": { + "choice": "device", + "device": { + "mode": "mesh", + "tx_names": [ + "otg1.eth[0].ipv4[0]" + ], + "rx_names": [ + "otg2.eth[0].ipv4[0]" + ] + } + }, + "packet": [ + { + "choice": "ethernet", + "ethernet": { + "src": { + "choice": "value", + "value": "02:00:00:00:01:aa" + } + } + }, + { + "choice": "ipv4", + "ipv4": { + "version": { + "choice": "value", + "value": 4 + }, + "src": { + "choice": "value", + "value": "192.0.2.2" + }, + "dst": { + "choice": "value", + "value": "203.0.113.2" + } + } + }, + { + "choice": "tcp", + "tcp": { + "src_port": { + "choice": "increment", + "increment": { + "start": 1024, + "step": 7, + "count": 64511 + } + }, + "dst_port": { + "choice": "value", + "value": 7 + } + } + } + ], + "size": { + "choice": "fixed", + "fixed": 256 + }, + "rate": { + "choice": "pps", + "pps": "100" + }, + "duration": { + "choice": "fixed_packets", + "fixed_packets": { + "packets": 1000, + "gap": 12 + } + }, + "metrics": { + "enable": true, + "loss": false, + "timestamps": false + }, + "name": "f1" + }, + { + "tx_rx": { + "choice": "device", + "device": { + "mode": "mesh", + "tx_names": [ + "otg2.eth[0].ipv4[0]" + ], + "rx_names": [ + "otg1.eth[0].ipv4[0]" + ] + } + }, + "packet": [ + { + "choice": "ethernet", + "ethernet": { + "src": { + "choice": "value", + "value": "02:00:00:00:02:aa" + } + } + }, + { + "choice": "ipv4", + "ipv4": { + "version": { + "choice": "value", + "value": 4 + }, + "dst": { + "choice": "value", + "value": "192.0.2.2" + }, + "src": { + "choice": "value", + "value": "203.0.113.2" + } + } + }, + { + "choice": "tcp", + "tcp": { + "src_port": { + "choice": "increment", + "increment": { + "start": 1024, + "step": 7, + "count": 64511 + } + }, + "dst_port": { + "choice": "value", + "value": 7 + } + } + } + ], + "size": { + "choice": "fixed", + "fixed": 256 + }, + "rate": { + "choice": "pps", + "pps": "100" + }, + "duration": { + "choice": "fixed_packets", + "fixed_packets": { + "packets": 1000, + "gap": 12 + } + }, + "metrics": { + "enable": true, + "loss": false, + "timestamps": false + }, + "name": "f2" + } + ] +} From 6b0f364bb07cd576e355e3dce3ec49dc59cd0094 Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Tue, 22 Nov 2022 22:59:09 -0800 Subject: [PATCH 15/18] git submodule update --remote --merge --- submodules/otgen | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/otgen b/submodules/otgen index 98177ab2..a25cdcb0 160000 --- a/submodules/otgen +++ b/submodules/otgen @@ -1 +1 @@ -Subproject commit 98177ab279fc8ac9dcc7b873da4ae583dc49f2bf +Subproject commit a25cdcb054b73e056c0417146ab37b1d9dfad873 From df0f6bb0d3e39499a6fa81a21e8a7a68a01d3e30 Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sun, 27 Nov 2022 15:41:33 -0800 Subject: [PATCH 16/18] added test with emulated downstream CE routers --- .gitmodules | 3 --- clab/ixp-openbgpd/Makefile | 19 ++++++++++++++++++- clab/ixp-openbgpd/README.md | 23 ++++++++++++++++++++--- clab/ixp-openbgpd/ceos.cfg | 1 + clab/ixp-openbgpd/openbgpd-lab | 1 - clab/ixp-openbgpd/openbgpd.conf | 20 ++++++++++++++++++++ clab/ixp-openbgpd/otgen.run-ce.sh | 12 ++++++++++++ clab/ixp-openbgpd/srlinux.cfg | 22 ++++++++++++++++++++-- clab/ixp-openbgpd/topo.clab.yml | 4 +++- 9 files changed, 94 insertions(+), 11 deletions(-) delete mode 160000 clab/ixp-openbgpd/openbgpd-lab create mode 100644 clab/ixp-openbgpd/openbgpd.conf create mode 100644 clab/ixp-openbgpd/otgen.run-ce.sh diff --git a/.gitmodules b/.gitmodules index e0262a93..bf16610e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ [submodule "submodules/otgen"] path = submodules/otgen url = https://github.com/open-traffic-generator/otgen.git -[submodule "clab/ixp-openbgpd/openbgpd-lab"] - path = clab/ixp-openbgpd/openbgpd-lab - url = https://github.com/hellt/openbgpd-lab.git diff --git a/clab/ixp-openbgpd/Makefile b/clab/ixp-openbgpd/Makefile index 5137c362..21060ec4 100644 --- a/clab/ixp-openbgpd/Makefile +++ b/clab/ixp-openbgpd/Makefile @@ -77,5 +77,22 @@ remove-net: ############################### .PHONY: run -run: +run: run-connected run-ce + +run-connected: + @echo "#################################################################" + @echo "# Run traffic between subnets directly connected to r1 and r2" + @echo "#################################################################" + otgen --log debug run --insecure --file otg.json --json --metrics flow | otgen transform --metrics flow | otgen display -m table + + @echo + +run-ce: + @echo "#################################################################" + @echo "# Run raffic from behind emulated CE routers downstream from r1 and r2" + @echo "#################################################################" + + cat otgen.run-ce.sh | sh + + @echo diff --git a/clab/ixp-openbgpd/README.md b/clab/ixp-openbgpd/README.md index 4e53e67c..98b6f4ab 100644 --- a/clab/ixp-openbgpd/README.md +++ b/clab/ixp-openbgpd/README.md @@ -82,9 +82,26 @@ Otherwise, follow step-by-step instructions below: ## Run tests -```Shell -otgen --log debug run -k --file otg.json -m flow | otgen transform -m flow | otgen display -m table -``` +1. Traffic between subnets directly connected to `r1` and `r2` + + ```Shell + otgen --log debug run -k --file otg.json -m flow | otgen transform -m flow | otgen display -m table + ``` + +2. Traffic from behind emulated CE routers downstream from `r1` and `r2`. These emulated routers are created by OTG Test Ports as `ce1111` and `ce2222`: + + ```Shell + export OTG_LOCATION_P1="localhost:5555+localhost:50071" + export OTG_LOCATION_P2="localhost:5556+localhost:50072" + + otgen create device -n ce1111 --ip 192.0.2.2 --gw 192.0.2.1 --prefix 30 -p p1 | \ + otgen add bgp -d ce1111 --asn 1111 --peer 192.0.2.1 --route 1.1.1.1/32 | \ + otgen add device -n ce2222 --ip 203.0.113.2 --gw 203.0.113.1 --prefix 30 -p p2 | \ + otgen add bgp -d ce2222 --asn 2222 --peer 203.0.113.1 --route 2.2.2.2/32 | \ + otgen add flow -n f1 --tx ce1111 --rx ce2222 --dmac auto --src 1.1.1.1 --dst 2.2.2.2 --rate 100 --count 1000 --size 512 | \ + otgen add flow -n f2 --tx ce2222 --rx ce1111 --dmac auto --dst 1.1.1.1 --src 2.2.2.2 --rate 100 --count 1000 --size 512 | \ + otgen --log debug run --insecure --metrics flow | otgen transform --metrics flow | otgen display -m table + ``` ## Destroy the lab diff --git a/clab/ixp-openbgpd/ceos.cfg b/clab/ixp-openbgpd/ceos.cfg index a4557883..955a6cdf 100644 --- a/clab/ixp-openbgpd/ceos.cfg +++ b/clab/ixp-openbgpd/ceos.cfg @@ -38,6 +38,7 @@ router bgp 65002 router-id 10.0.0.2 no bgp enforce-first-as neighbor 192.168.0.3 remote-as 65003 + neighbor 203.0.113.2 remote-as 2222 redistribute connected route-map redis_connected ! management api http-commands diff --git a/clab/ixp-openbgpd/openbgpd-lab b/clab/ixp-openbgpd/openbgpd-lab deleted file mode 160000 index 35a88268..00000000 --- a/clab/ixp-openbgpd/openbgpd-lab +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 35a88268454dcb15ff59709153e6427c44def307 diff --git a/clab/ixp-openbgpd/openbgpd.conf b/clab/ixp-openbgpd/openbgpd.conf new file mode 100644 index 00000000..9d197fd6 --- /dev/null +++ b/clab/ixp-openbgpd/openbgpd.conf @@ -0,0 +1,20 @@ +# example config for a test lab, DO NOT USE FOR PRODUCTION + +# global configuration +AS 65003 +router-id 10.0.0.3 + +# do not add our own AS (a route server behavior) in ASPATH +transparent-as yes + +group "route-server-clients" { + # IPv4 Peering LAN + neighbor 192.168.0.0/24 +} + +## in a lab we can as far as not doing any filtering +allow to ebgp +allow from ebgp + +# set's these communities to identify from where RS learned a route +match from any set large-community local-as:0:neighbor-as diff --git a/clab/ixp-openbgpd/otgen.run-ce.sh b/clab/ixp-openbgpd/otgen.run-ce.sh new file mode 100644 index 00000000..6ff80f18 --- /dev/null +++ b/clab/ixp-openbgpd/otgen.run-ce.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +export OTG_LOCATION_P1="localhost:5555+localhost:50071" +export OTG_LOCATION_P2="localhost:5556+localhost:50072" + +otgen create device -n ce1111 --ip 192.0.2.2 --gw 192.0.2.1 --prefix 30 -p p1 | \ +otgen add bgp -d ce1111 --asn 1111 --peer 192.0.2.1 --route 1.1.1.1/32 | \ +otgen add device -n ce2222 --ip 203.0.113.2 --gw 203.0.113.1 --prefix 30 -p p2 | \ +otgen add bgp -d ce2222 --asn 2222 --peer 203.0.113.1 --route 2.2.2.2/32 | \ +otgen add flow -n f1 --tx ce1111 --rx ce2222 --dmac auto --src 1.1.1.1 --dst 2.2.2.2 --rate 100 --count 1000 --size 512 | \ +otgen add flow -n f2 --tx ce2222 --rx ce1111 --dmac auto --dst 1.1.1.1 --src 2.2.2.2 --rate 100 --count 1000 --size 512 | \ +otgen --log debug run --insecure --metrics flow | otgen transform --metrics flow | otgen display -m table diff --git a/clab/ixp-openbgpd/srlinux.cfg b/clab/ixp-openbgpd/srlinux.cfg index 1d45ce92..7855061f 100644 --- a/clab/ixp-openbgpd/srlinux.cfg +++ b/clab/ixp-openbgpd/srlinux.cfg @@ -43,8 +43,10 @@ routing-policy { prefix-set CE { prefix 192.0.2.0/24 mask-length-range 24..32 { } + prefix 1.1.1.0/24 mask-length-range 24..32 { + } } - policy redis_connected { + policy ixp_egress { default-action { reject { } @@ -89,7 +91,7 @@ network-instance default { autonomous-system 65001 router-id 10.0.0.1 group rs { - export-policy redis_connected + export-policy ixp_egress import-policy ingress_all peer-as 65003 ipv4-unicast { @@ -102,9 +104,25 @@ network-instance default { minimum-advertisement-interval 1 } } + group otg { + import-policy ingress_all + peer-as 1111 + ipv4-unicast { + admin-state enable + } + timers { + connect-retry 1 + hold-time 9 + keepalive-interval 3 + minimum-advertisement-interval 1 + } + } neighbor 192.168.0.3 { peer-group rs } + neighbor 192.0.2.2 { + peer-group otg + } } } } \ No newline at end of file diff --git a/clab/ixp-openbgpd/topo.clab.yml b/clab/ixp-openbgpd/topo.clab.yml index aff67ab0..0058e3c5 100644 --- a/clab/ixp-openbgpd/topo.clab.yml +++ b/clab/ixp-openbgpd/topo.clab.yml @@ -23,7 +23,7 @@ topology: kind: linux image: quay.io/openbgpd/openbgpd:7.7 binds: - - openbgpd-lab/openbgpd.conf:/etc/bgpd/bgpd.conf + - ./openbgpd.conf:/etc/bgpd/bgpd.conf exec: - "ip address add dev eth1 192.168.0.3/24" labels: @@ -52,6 +52,7 @@ topology: WAIT_FOR_IFACE: Yes labels: graph-level: 4 + graph-icon: server pe1: kind: linux image: ghcr.io/open-traffic-generator/licensed/ixia-c-protocol-engine:1.00.0.236 @@ -75,6 +76,7 @@ topology: WAIT_FOR_IFACE: Yes labels: graph-level: 4 + graph-icon: server pe2: kind: linux image: ghcr.io/open-traffic-generator/licensed/ixia-c-protocol-engine:1.00.0.236 From dbbfc348254c2025c784f5045a9608d67990d50b Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sun, 27 Nov 2022 16:13:52 -0800 Subject: [PATCH 17/18] use defaults for bgp peers --- clab/ixp-openbgpd/README.md | 4 ++-- clab/ixp-openbgpd/otgen.run-ce.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/clab/ixp-openbgpd/README.md b/clab/ixp-openbgpd/README.md index 98b6f4ab..65486963 100644 --- a/clab/ixp-openbgpd/README.md +++ b/clab/ixp-openbgpd/README.md @@ -95,9 +95,9 @@ Otherwise, follow step-by-step instructions below: export OTG_LOCATION_P2="localhost:5556+localhost:50072" otgen create device -n ce1111 --ip 192.0.2.2 --gw 192.0.2.1 --prefix 30 -p p1 | \ - otgen add bgp -d ce1111 --asn 1111 --peer 192.0.2.1 --route 1.1.1.1/32 | \ + otgen add bgp -d ce1111 --asn 1111 --route 1.1.1.1/32 | \ otgen add device -n ce2222 --ip 203.0.113.2 --gw 203.0.113.1 --prefix 30 -p p2 | \ - otgen add bgp -d ce2222 --asn 2222 --peer 203.0.113.1 --route 2.2.2.2/32 | \ + otgen add bgp -d ce2222 --asn 2222 --route 2.2.2.2/32 | \ otgen add flow -n f1 --tx ce1111 --rx ce2222 --dmac auto --src 1.1.1.1 --dst 2.2.2.2 --rate 100 --count 1000 --size 512 | \ otgen add flow -n f2 --tx ce2222 --rx ce1111 --dmac auto --dst 1.1.1.1 --src 2.2.2.2 --rate 100 --count 1000 --size 512 | \ otgen --log debug run --insecure --metrics flow | otgen transform --metrics flow | otgen display -m table diff --git a/clab/ixp-openbgpd/otgen.run-ce.sh b/clab/ixp-openbgpd/otgen.run-ce.sh index 6ff80f18..3112d818 100644 --- a/clab/ixp-openbgpd/otgen.run-ce.sh +++ b/clab/ixp-openbgpd/otgen.run-ce.sh @@ -4,9 +4,9 @@ export OTG_LOCATION_P1="localhost:5555+localhost:50071" export OTG_LOCATION_P2="localhost:5556+localhost:50072" otgen create device -n ce1111 --ip 192.0.2.2 --gw 192.0.2.1 --prefix 30 -p p1 | \ -otgen add bgp -d ce1111 --asn 1111 --peer 192.0.2.1 --route 1.1.1.1/32 | \ +otgen add bgp -d ce1111 --asn 1111 --route 1.1.1.1/32 | \ otgen add device -n ce2222 --ip 203.0.113.2 --gw 203.0.113.1 --prefix 30 -p p2 | \ -otgen add bgp -d ce2222 --asn 2222 --peer 203.0.113.1 --route 2.2.2.2/32 | \ +otgen add bgp -d ce2222 --asn 2222 --route 2.2.2.2/32 | \ otgen add flow -n f1 --tx ce1111 --rx ce2222 --dmac auto --src 1.1.1.1 --dst 2.2.2.2 --rate 100 --count 1000 --size 512 | \ otgen add flow -n f2 --tx ce2222 --rx ce1111 --dmac auto --dst 1.1.1.1 --src 2.2.2.2 --rate 100 --count 1000 --size 512 | \ otgen --log debug run --insecure --metrics flow | otgen transform --metrics flow | otgen display -m table From a8914772bd313d978dcd54c2da2ebf9115cdbe4d Mon Sep 17 00:00:00 2001 From: Alex Bortok Date: Sun, 27 Nov 2022 16:36:00 -0800 Subject: [PATCH 18/18] make run-ce fail on intermediate otgen errors --- clab/ixp-openbgpd/Makefile | 12 +++++++++++- clab/ixp-openbgpd/otgen.run-ce.sh | 12 ------------ 2 files changed, 11 insertions(+), 13 deletions(-) delete mode 100644 clab/ixp-openbgpd/otgen.run-ce.sh diff --git a/clab/ixp-openbgpd/Makefile b/clab/ixp-openbgpd/Makefile index 21060ec4..af7cf7d5 100644 --- a/clab/ixp-openbgpd/Makefile +++ b/clab/ixp-openbgpd/Makefile @@ -88,11 +88,21 @@ run-connected: @echo +run-ce: export OTG_LOCATION_P1 = localhost:5555+localhost:50071 +run-ce: export OTG_LOCATION_P2 = localhost:5556+localhost:50072 run-ce: @echo "#################################################################" @echo "# Run raffic from behind emulated CE routers downstream from r1 and r2" @echo "#################################################################" - cat otgen.run-ce.sh | sh + otgen create device -n ce1111 --ip 192.0.2.2 --gw 192.0.2.1 --prefix 30 -p p1 > otgen.out + cat otgen.out | otgen add bgp -d ce1111 --asn 1111 --route 1.1.1.1/32 >> otgen.out + cat otgen.out | otgen add device -n ce2222 --ip 203.0.113.2 --gw 203.0.113.1 --prefix 30 -p p2 >> otgen.out + cat otgen.out | otgen add bgp -d ce2222 --asn 2222 --route 2.2.2.2/32 >> otgen.out + cat otgen.out | otgen add flow -n f1 --tx ce1111 --rx ce2222 --dmac auto --src 1.1.1.1 --dst 2.2.2.2 --rate 100 --count 1000 --size 512 >> otgen.out + cat otgen.out | otgen add flow -n f2 --tx ce2222 --rx ce1111 --dmac auto --dst 1.1.1.1 --src 2.2.2.2 --rate 100 --count 1000 --size 512 >> otgen.out + cat otgen.out | otgen --log debug run --insecure --metrics flow | otgen transform --metrics flow | otgen display -m table + -@rm otgen.out @echo + diff --git a/clab/ixp-openbgpd/otgen.run-ce.sh b/clab/ixp-openbgpd/otgen.run-ce.sh deleted file mode 100644 index 3112d818..00000000 --- a/clab/ixp-openbgpd/otgen.run-ce.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -export OTG_LOCATION_P1="localhost:5555+localhost:50071" -export OTG_LOCATION_P2="localhost:5556+localhost:50072" - -otgen create device -n ce1111 --ip 192.0.2.2 --gw 192.0.2.1 --prefix 30 -p p1 | \ -otgen add bgp -d ce1111 --asn 1111 --route 1.1.1.1/32 | \ -otgen add device -n ce2222 --ip 203.0.113.2 --gw 203.0.113.1 --prefix 30 -p p2 | \ -otgen add bgp -d ce2222 --asn 2222 --route 2.2.2.2/32 | \ -otgen add flow -n f1 --tx ce1111 --rx ce2222 --dmac auto --src 1.1.1.1 --dst 2.2.2.2 --rate 100 --count 1000 --size 512 | \ -otgen add flow -n f2 --tx ce2222 --rx ce1111 --dmac auto --dst 1.1.1.1 --src 2.2.2.2 --rate 100 --count 1000 --size 512 | \ -otgen --log debug run --insecure --metrics flow | otgen transform --metrics flow | otgen display -m table