From 391d4d2bf0417d7abf74c88689c49e56b766fe7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20T=C3=B3th?= Date: Thu, 1 Aug 2024 15:44:31 +0200 Subject: [PATCH] Improve containerlab topology - Use proper Nokia SROS version vr-sros:22.10.R7. - Move files to correct plane where it should be used. - Added documentation about demo topology: - How to start & destroy topology. - Logical topology representation. - IP addressing and ports table. - How to build docker images from qemu/vmdk disks. - Added sample locations and coordinates to devices configuration. --- containerlab/frinx_topo_1/README.md | 109 ++++++++++++++++++ containerlab/frinx_topo_1/assets/demo_lab.svg | 1 + .../frinx_topo_1/config_c1.partial.txt | 3 + .../frinx_topo_1/config_c2.partial.txt | 3 + .../frinx_topo_1/config_dc1_pe1.partial.txt | 3 + .../frinx_topo_1/config_ptp_gm.partial.txt | 3 + .../config_ptp_gm_backup.partial.txt | 3 + .../frinx_topo_1/config_r1_cpe1.partial.txt | 1 + .../frinx_topo_1/config_r1_cpe2.partial.txt | 1 + .../frinx_topo_1/config_r1_pe1.partial.txt | 3 + .../frinx_topo_1/config_r1_pe2.partial.txt | 3 + .../frinx_topo_1/config_r2_cpe1.partial.txt | 1 + .../frinx_topo_1/config_r2_cpe2.partial.txt | 1 + .../frinx_topo_1/config_r2_pe1.partial.txt | 3 + .../frinx_topo_1/config_r2_pe2.partial.txt | 3 + .../frinx_topo_1/frinx_topo_1.clab.yml | 2 +- .../{ => frinx_topo_1}/openswitch1.sh | 0 .../{ => frinx_topo_1}/openswitch2.sh | 0 .../{frinx_topo_1 => }/ran/Dockerfile | 0 containerlab/{frinx_topo_1 => }/ran/README.md | 0 20 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 containerlab/frinx_topo_1/README.md create mode 100644 containerlab/frinx_topo_1/assets/demo_lab.svg rename containerlab/{ => frinx_topo_1}/openswitch1.sh (100%) rename containerlab/{ => frinx_topo_1}/openswitch2.sh (100%) rename containerlab/{frinx_topo_1 => }/ran/Dockerfile (100%) rename containerlab/{frinx_topo_1 => }/ran/README.md (100%) diff --git a/containerlab/frinx_topo_1/README.md b/containerlab/frinx_topo_1/README.md new file mode 100644 index 0000000..51be2e6 --- /dev/null +++ b/containerlab/frinx_topo_1/README.md @@ -0,0 +1,109 @@ +# FRINX Demo Topology + +This is a simple topology for testing FRINX topology services. +It consists of MPLS core network, two regions with PE routers and connected CPE routers. + +Device types: +- Core, PE, and PTP GM routers: `vrnetlab/vr-sros:22.10.R7` +- CPE routers: `vrnetlab/vr-xrv:6.0.1` +- OLT and CMTS switches: `openvswitch` + +Configured protocols: +- LDP +- RSVP +- MPLS +- OSPF +- BGP +- PTP +- SyncE +- LLDP + +## Logical topology + +
+ Demo lab +
+ +## IP addressing + +The following table shows management IP addresses and supported management protocols +for each configurable device in the topology: + +| Device | IP address | CLI (SSH) | NETCONF (SSH) | gNMI | +|---------------|---------------|-----------|---------------|-------| +| C1 | 172.20.20.11 | 22 | 830 | 57400 | +| C2 | 172.20.20.12 | 22 | 830 | 57400 | +| R1_PE1 | 172.20.20.111 | 22 | 830 | 57400 | +| R1_PE2 | 172.20.20.112 | 22 | 830 | 57400 | +| R2_PE1 | 172.20.20.121 | 22 | 830 | 57400 | +| R2_PE2 | 172.20.20.122 | 22 | 830 | 57400 | +| DC1_PE1 | 172.20.20.93 | 22 | 830 | 57400 | +| R1_CPE1 | 172.20.20.202 | 22 | 830 | | +| R1_CPE2 | 172.20.20.203 | 22 | 830 | | +| R2_CPE1 | 172.20.20.204 | 22 | 830 | | +| R2_CPE2 | 172.20.20.205 | 22 | 830 | | +| PTP_GM | 172.20.20.9 | 22 | 830 | 57400 | +| PTP_GM_BACKUP | 172.20.20.8 | 22 | 830 | 57400 | + +## Building required docker images + +Scripts for building of the required docker images that are compatible with containerlab are provided +by the https://github.com/hellt/vrnetlab repository. +See https://containerlab.dev/manual/vrnetlab/#compatibility-matrix for details about compatibility between +containerlab and vrnetlab versions. + +The last tested versions of vrnetlab and containerlab: +- vrnetlab: 0.18.1 +- containerlab: 0.56.0 + +### vrnetlab/vr-sros:22.10.R7 + +Requirements: +- sros-vm-22.10.R7.qcow2 image: Ask Nokia support to provide you with the Qemu disk image. +- sros-vm-22.10.R7.qcow2.license file: Ask Nokia support to provide you with the valid license file. + +1. Append the date, when licence starts to be valid, to the end of the file into the comment section + (comment starts with the # character). + Format of the date is YYYY-MM-DD. + Example: # TEST(TiMOS-[BC]-22.*) 2024-01-01 + +2. Copy 'sros-vm-22.10.R7.qcow2' and 'sros-vm-22.10.R7.qcow2.license' files to the 'sros' directory + in the vrnetlab repository. + +3. Build the docker image using `make docker-image` command. + Built docker image should have 'vrnetlab/vr-sros:22.10.R7' tag. + +### vrnetlab/vr-xrv:6.0.1 + +Requirements: + +- iosxrv-k9-6.0.1.vmdk image: Download the image from the Cisco website with valid subscription model. + Image is also provided by the Cisco Modeling Labs (CML). + +1. Copy 'iosxrv-k9-6.0.1.vmdk' file to the 'xrv' directory in the vrnetlab repository. +2. Build the docker image using `make docker-image` command. + Built docker image should have 'vr-xrv:6.0.1' tag. + +## Startup process + +To start the topology, run the following commands: + +```bash +# create openvswitch bridges +sudo ./openswitch1.sh + +# deploy the containerlab topology +sudo containerlab deploy + +# wait for the topology to start ... +# configure openvswitch ports +sudo ./openswitch2.sh +``` + +## Stopping the topology + +To stop the topology, run the following command: + +```bash +sudo containerlab destroy +``` diff --git a/containerlab/frinx_topo_1/assets/demo_lab.svg b/containerlab/frinx_topo_1/assets/demo_lab.svg new file mode 100644 index 0000000..46eb198 --- /dev/null +++ b/containerlab/frinx_topo_1/assets/demo_lab.svg @@ -0,0 +1 @@ +BGPASN 65002BGPASN 65001eth1eth2.810.20.0.8/31eth2eth2.1010.20.0.10/31eth1eth5eth1eth5eth1.0eth110.10.0.0/31eth2eth3.010.20.0.0/31eth2eth3.210.20.0.2/31eth1.0eth110.30.0.0/31eth2eth4.410.20.0.4/31eth2eth4.610.20.0.6/31eth1.2eth110.30.0.2/31PTP_GMPTP_GM_BACKUPC11.1.1.1OSPFarea 0.0.0.0R1_PE24.4.4.4C22.2.2.2R2_PE26.6.6.6DC1_PE17.7.7.7R2_CMTSeth3.10.1eth3.20.1ovsp6TrunkR2_CPE1R2_CPE2eth1.10ovsp4VLAN 10eth1.10ovsp5VLAN 20R1_OLTR1_CPE1R1_CPE2eth3:10.1eth3.20.1ovsp3Trunketh1.10ovsp1VLAN 10eth1.10ovsp2VLAN20VLAN 10: 172.16.30.0/24VLAN 20: 172.16.40.0/24VLAN 10: 172.16.10.0/24VLAN 20: 172.16.20.0/24R1_PE13.3.3.3RRR2_PE15.5.5.5RRLo0: 192.168.10.1/25Lo1: 192.168.10.129/25Lo0: 192.168.20.1/25Lo1: 192.168.20.129/25Lo0: 192.168.30.1/25Lo1: 192.168.30.129/25Lo0: 192.168.40.1/25Lo1: 192.168.40.129/25 \ No newline at end of file diff --git a/containerlab/frinx_topo_1/config_c1.partial.txt b/containerlab/frinx_topo_1/config_c1.partial.txt index b67534a..1094a13 100644 --- a/containerlab/frinx_topo_1/config_c1.partial.txt +++ b/containerlab/frinx_topo_1/config_c1.partial.txt @@ -268,6 +268,9 @@ configure { } } system { + location "Bratislava Frinx Office" + coordinates "[48.14422, 17.14098]" + ptp { admin-state enable clock-type boundary diff --git a/containerlab/frinx_topo_1/config_c2.partial.txt b/containerlab/frinx_topo_1/config_c2.partial.txt index b2cf62b..5541b7d 100644 --- a/containerlab/frinx_topo_1/config_c2.partial.txt +++ b/containerlab/frinx_topo_1/config_c2.partial.txt @@ -270,6 +270,9 @@ configure { } system { + location "Bratislava Frinx Office" + coordinates "[48.14422, 17.14098]" + ptp { admin-state enable clock-type boundary diff --git a/containerlab/frinx_topo_1/config_dc1_pe1.partial.txt b/containerlab/frinx_topo_1/config_dc1_pe1.partial.txt index a2cd7c1..c9d64ab 100644 --- a/containerlab/frinx_topo_1/config_dc1_pe1.partial.txt +++ b/containerlab/frinx_topo_1/config_dc1_pe1.partial.txt @@ -236,6 +236,9 @@ configure { } system { + location "Rusovce Airport" + coordinates "[48.05254, 17.13692]" + ptp { admin-state enable clock-type boundary diff --git a/containerlab/frinx_topo_1/config_ptp_gm.partial.txt b/containerlab/frinx_topo_1/config_ptp_gm.partial.txt index e8e1e4a..f97958c 100644 --- a/containerlab/frinx_topo_1/config_ptp_gm.partial.txt +++ b/containerlab/frinx_topo_1/config_ptp_gm.partial.txt @@ -32,6 +32,9 @@ configure { } system { + location "The Slovak Internet eXchange (SIX)" + coordinates "[48.15145, 17.11359]" + ptp { admin-state enable clock-type master-only diff --git a/containerlab/frinx_topo_1/config_ptp_gm_backup.partial.txt b/containerlab/frinx_topo_1/config_ptp_gm_backup.partial.txt index 704043f..15255c0 100644 --- a/containerlab/frinx_topo_1/config_ptp_gm_backup.partial.txt +++ b/containerlab/frinx_topo_1/config_ptp_gm_backup.partial.txt @@ -32,6 +32,9 @@ configure { } system { + location "Slovak Telekom" + coordinates "[48.14839, 17.14924]" + ptp { admin-state enable clock-type master-only diff --git a/containerlab/frinx_topo_1/config_r1_cpe1.partial.txt b/containerlab/frinx_topo_1/config_r1_cpe1.partial.txt index c4c8be1..e47b2b7 100644 --- a/containerlab/frinx_topo_1/config_r1_cpe1.partial.txt +++ b/containerlab/frinx_topo_1/config_r1_cpe1.partial.txt @@ -1,3 +1,4 @@ +banner exec "Zahorska Bystrica Stadion [48.23961, 17.04140]" interface GigabitEthernet0/0/0/0 ipv4 address 172.16.10.10 255.255.255.0 no shutdown diff --git a/containerlab/frinx_topo_1/config_r1_cpe2.partial.txt b/containerlab/frinx_topo_1/config_r1_cpe2.partial.txt index c1faece..5b88b99 100644 --- a/containerlab/frinx_topo_1/config_r1_cpe2.partial.txt +++ b/containerlab/frinx_topo_1/config_r1_cpe2.partial.txt @@ -1,3 +1,4 @@ +banner exec "Boutique Hotel Pri Mlyne [48.32895, 17.05584]" interface GigabitEthernet0/0/0/0 ipv4 address 172.16.20.10 255.255.255.0 no shutdown diff --git a/containerlab/frinx_topo_1/config_r1_pe1.partial.txt b/containerlab/frinx_topo_1/config_r1_pe1.partial.txt index 7690d4d..84e7620 100644 --- a/containerlab/frinx_topo_1/config_r1_pe1.partial.txt +++ b/containerlab/frinx_topo_1/config_r1_pe1.partial.txt @@ -269,6 +269,9 @@ configure { } system { + location "Stupava Centrum" + coordinates "[48.27588, 17.03212]" + ptp { admin-state enable clock-type boundary diff --git a/containerlab/frinx_topo_1/config_r1_pe2.partial.txt b/containerlab/frinx_topo_1/config_r1_pe2.partial.txt index 8d3ba15..b20b18c 100644 --- a/containerlab/frinx_topo_1/config_r1_pe2.partial.txt +++ b/containerlab/frinx_topo_1/config_r1_pe2.partial.txt @@ -287,6 +287,9 @@ configure { } system { + location "Borinka Station" + coordinates "[48.25966, 17.09604]" + ptp { admin-state enable clock-type boundary diff --git a/containerlab/frinx_topo_1/config_r2_cpe1.partial.txt b/containerlab/frinx_topo_1/config_r2_cpe1.partial.txt index 545ff09..3b5f77f 100644 --- a/containerlab/frinx_topo_1/config_r2_cpe1.partial.txt +++ b/containerlab/frinx_topo_1/config_r2_cpe1.partial.txt @@ -1,3 +1,4 @@ +banner exec "Senkvice Primary School [48.29629, 17.34420]" interface GigabitEthernet0/0/0/0 ipv4 address 172.16.30.10 255.255.255.0 no shutdown diff --git a/containerlab/frinx_topo_1/config_r2_cpe2.partial.txt b/containerlab/frinx_topo_1/config_r2_cpe2.partial.txt index ef78ae7..f01210c 100644 --- a/containerlab/frinx_topo_1/config_r2_cpe2.partial.txt +++ b/containerlab/frinx_topo_1/config_r2_cpe2.partial.txt @@ -1,3 +1,4 @@ +banner exec "Trnava Railway Station [48.37032, 17.58445]" interface GigabitEthernet0/0/0/0 ipv4 address 172.16.40.10 255.255.255.0 no shutdown diff --git a/containerlab/frinx_topo_1/config_r2_pe1.partial.txt b/containerlab/frinx_topo_1/config_r2_pe1.partial.txt index 834b09d..58364b9 100644 --- a/containerlab/frinx_topo_1/config_r2_pe1.partial.txt +++ b/containerlab/frinx_topo_1/config_r2_pe1.partial.txt @@ -293,6 +293,9 @@ configure { } system { + location "Euronics Senec" + coordinates "[48.22102, 17.39742]" + ptp { admin-state enable clock-type boundary diff --git a/containerlab/frinx_topo_1/config_r2_pe2.partial.txt b/containerlab/frinx_topo_1/config_r2_pe2.partial.txt index f77d568..8d2cc72 100644 --- a/containerlab/frinx_topo_1/config_r2_pe2.partial.txt +++ b/containerlab/frinx_topo_1/config_r2_pe2.partial.txt @@ -264,6 +264,9 @@ configure { } system { + location "Euronics Senec" + coordinates "[48.22102, 17.39742]" + ptp { admin-state enable clock-type boundary diff --git a/containerlab/frinx_topo_1/frinx_topo_1.clab.yml b/containerlab/frinx_topo_1/frinx_topo_1.clab.yml index 76a4e87..3b9e4f1 100644 --- a/containerlab/frinx_topo_1/frinx_topo_1.clab.yml +++ b/containerlab/frinx_topo_1/frinx_topo_1.clab.yml @@ -3,7 +3,7 @@ name: frinx_topo_1 topology: defaults: kind: nokia_sros - image: vrnetlab/vr-sros:22.10.R1 + image: vrnetlab/vr-sros:22.10.R7 license: ../frinx_topo_1/sros.license config: vars: diff --git a/containerlab/openswitch1.sh b/containerlab/frinx_topo_1/openswitch1.sh similarity index 100% rename from containerlab/openswitch1.sh rename to containerlab/frinx_topo_1/openswitch1.sh diff --git a/containerlab/openswitch2.sh b/containerlab/frinx_topo_1/openswitch2.sh similarity index 100% rename from containerlab/openswitch2.sh rename to containerlab/frinx_topo_1/openswitch2.sh diff --git a/containerlab/frinx_topo_1/ran/Dockerfile b/containerlab/ran/Dockerfile similarity index 100% rename from containerlab/frinx_topo_1/ran/Dockerfile rename to containerlab/ran/Dockerfile diff --git a/containerlab/frinx_topo_1/ran/README.md b/containerlab/ran/README.md similarity index 100% rename from containerlab/frinx_topo_1/ran/README.md rename to containerlab/ran/README.md