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-image
folder (filename must becEOS-lab-4.31.1F.tar.xz
) - Install dependencies
- Use
pnpm install
in project root folder
- Use
- Build packages and docker image
- Run
pnpm build:packages
in project root folder - Run
pnpm build
inclab-rest-api
folder (ignore the warnings regarding eval) - Run
bash docker-clab-image/setup_image.sh
in project root folder
- Run
With Docker-Instance: This is the intended way of running this application
- Run
pnpm dev
in frontend folder - Run
pnpm dev
in 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 dev
in frontend folder - Start backend
- Set env variable:
export USE_LOCAL_MACHINE=true
- Run
pnpm dev
in backend folder
- Set env variable:
- Run
pnpm dev
in 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 initialized
loop after deploying a topology (no fix)