This is an emulator built on top of Containernet to benchmark and evaluate solutions to the NFV-RA problem.
If you use OpenRASE in your research, please cite:
@INPROCEEDINGS{11197454,
author={Krishnamohan, Theviyanthan and Harvey, Paul},
booktitle={2025 International Conference on Software, Telecommunications and Computer Networks (SoftCOM)},
title={OpenRASE: Service Function Chain Emulation},
year={2025},
volume={},
number={},
pages={1-6},
keywords={Service function chaining;Heuristic algorithms;Software algorithms;Dynamic scheduling;Computer networks;Software;Telecommunications;Resource management;Optimization;Genetic algorithms;Emulator;Network Function Virtualisation (NFV);Network Function Virtualisation Resource Allocation (NFV-RA);Service Function Chaining (SFC);Autonomous Network},
doi={10.23919/SoftCOM66362.2025.11197454}
}- Python 3.9
- Ubuntu 20.04
- Docker
- Install the required packages.
sudo apt-get install -y build-essential zlib1g-dev libffi-dev libssl-dev liblzma-dev libbz2-dev libreadline-dev libsqlite3-dev curl git tk-dev gcc python-dev libxml2-dev libxslt1-dev zlib1g-dev python-setuptools python3-venv- Install pyenv.
curl https://pyenv.run | bashAdd the following lines to your .bashrc or .zshrc and .bash-profile or .profile file.
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"Source your .bashrc or .zshrc file.
source ~/.bashrcAdd pyenv to the root user. This is important because mininet has to be run as the root user. Run the following command.
which pyenvCopy the output, omitting the trailing /pyenv part.
Run the following command.
sudo visudoAppend the copied output to secure_path as shown below.
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/username/.pyenv/bin"- Install Python 3.9.
pyenv install 3.9
sudo pyenv install 3.9- Install ansible.
sudo apt-get install ansible- Clone containernet.
git clone https://github.com/Project-Kelvin/containernet- Install containernet.
sudo ansible-playbook -i "localhost," -c local containernet/ansible/install.yml- Add user to docker group.
sudo usermod -aG docker $USER
newgrp docker- Install pipx.
python3 -m pip install --user pipx
python3 -m pipx ensurepathSource your .bashrc or .zshrc file.
source ~/.bashrc- Install poetry.
pipx install poetryAdd poetry to the root user.
Run the following command.
which poetryCopy the output, omitting the trailing /poetry part.
Run the following command.
sudo visudoAppend the copied output to secure_path as shown below.
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/username/.pyenv/bin:/home/username/.local/bin"- Clone OpenRASE.
git clone https://github.com/Project-Kelvin/OpenRASE- Install OpenRASE. Move into the OpenRASE directory.
cd OpenRASEGet the path of the Python 3.9 executable.
pyenv which pythonCopy the output. Run the following command, replacing the placeholder with the copied output.
poetry env use <path to python 3.9 executable>Repeat for the root user. Get the path of the Python 3.9 executable.
sudo pyenv which pythonCopy the output. Run the following command, replacing the placeholder with the copied output.
sudo poetry env use <path to python 3.9 executable>Install the dependencies.
sudo poetry install- Install Ryu.
sudo poetry run python -m pip install ryuNote
If you get an error, then ensure pip is version 24.0 by running the following command:
sudo poetry run python -m pip install -U pip==24.0
Install eventlet.
sudo poetry run python -m pip install eventlet==0.30.2- Initialise OpenRASE
sudo poetry run initRestart the Docker service.
sudo service docker restartRe-initialize OpenRASE
sudo poetry run init- Run OpenRASE test.
sudo poetry run test