This project was a part of my masters thesis at Hochschule Fulda, Germany. It showcases how a network digital twin can be implemented to be used in a learning environment. The IRTF NDT reference architecture and the already existing learn-sdn-hub were used as starting points.
Linux (Ubuntu 22.04.4) is tested, might work on Windows!
- Docker v26.0.0
- Node v20.16.0 with pnpm
- Arista cEOS 4.31.1F
- ContainerLab v0.52.0 (optional, linux only)
!!!The environment currently needs full access to the docker.sock. If the local deployment option is used (described in 'Usage' section) containerlab needs to be installed locally and it must be possible to run commands without sudo (e.g. clab deploy ... instead of sudo clab deploy ...!!!
- Install Docker
- Install Containerlab (optional)
- Install Node (e.g. via nvm)
- Use
nvm install --lts=iron(iron = v20) - Enable pnpm
corepack enable pnpm
- Use
- Clone this repository
- Download & copy Arista image (free account needed) to
docker-clab-imagefolder (filename must becEOS-lab-4.31.1F.tar.xz) - Install dependencies
- Use
pnpm installin project root folder
- Use
- Build packages and docker image
- Run
pnpm build:packagesin project root folder - Run
pnpm buildinclab-rest-apifolder (ignore the warnings regarding eval) - Run
bash docker-clab-image/setup_image.shin project root folder
- Run
With Docker-Instance: This is the intended way of running this application
- Run
pnpm devin frontend folder - Run
pnpm devin backend folder
Local deployment: Use this if the docker container does not work
If you don't want to use a docker container for isolation you can run the application in the local deployment mode. For this you need to install containerlab (see hint in the requirements section) locally. Topologies will not be deployed in a container and multiple concurrent users are not supported!
- Run
pnpm devin frontend folder - Start backend
- Set env variable:
export USE_LOCAL_MACHINE=true - Run
pnpm devin backend folder
- Set env variable:
- Run
pnpm devin clab-rest-api folder
Afterwards open the frontend in browser and use any username and password combination you like.
- Docker-in-Docker does not always work correctly (use local deployment)
- gNMI is stuck in an infinite
system not initializedloop after deploying a topology (no fix)