This emulation platform was created to support network service developers to locally prototype and test their network services in realistic end-to-end multi-PoP scenarios. It allows the execution of real network functions, packaged as Docker containers, in emulated network topologies running locally on the developer's machine. The emulation platform also offers OpenStack-like APIs for each emulated PoP so that it can integrate with MANO solutions, like OSM. The core of the emulation platform is based on Containernet.
The original project was called son-emu
and later renamed to vim-emu
when the emulator was adopted by the OSM project. We keep the repository name son-emu
to not break existing links in publications.
The emulation platform vim-emu
is developed as part of OSM's DevOps MDG.
This repository is a fork of the original vim-emu repository that is hosted by ETSI OSM. You can find the (deprecated) SONATA master branch in sonata/master.
This software was originally developed by the SONATA project, funded by the European Commission under grant number 671517 through the Horizon 2020 and 5G-PPP programs. The development of this software is now also supported by the 5GTANGO project, funded by the European Commission under grant number H2020-ICT-2016-2 761493 through the Horizon 2020 and 5G-PPP programs.
If you use the emulation platform for your research and/or other publications, please cite the following paper to reference our work:
- M. Peuster, H. Karl, and S. v. Rossem: MeDICINE: Rapid Prototyping of Production-Ready Network Services in Multi-PoP Environments. IEEE Conference on Network Function Virtualization and Software Defined Networks (NFV-SDN), Palo Alto, CA, USA, pp. 148-153. doi: 10.1109/NFV-SDN.2016.7919490. (2016)
There are multiple ways to install and use the emulation platform. The bare-metal installation requires a freshly installed Ubuntu 16.04 LTS and is done by an ansible playbook. Another option is to use a nested Docker environment to run the emulator inside a Docker container.
sudo apt-get install ansible git aptitude
cd
git clone https://github.com/containernet/containernet.git
cd ~/containernet/ansible
sudo ansible-playbook -i "localhost," -c local install.yml
cd
git clone https://github.com/sonata-nfv/son-emu
cd ~/son-emu/ansible
sudo ansible-playbook -i "localhost," -c local install.yml
This option requires a Docker installation on the host machine on which the emulator should be deployed.
git clone https://github.com/sonata-nfv/son-emu
cd ~/son-emu
# build the container:
docker build -t vim-emu-img .
# run the (interactive) container:
docker run --name vim-emu -it --rm --privileged --pid='host' -v /var/run/docker.sock:/var/run/docker.sock vim-emu-img /bin/bash
This simple example shows how to start the emulator with a simple topology (terminal 1) and how to start (terminal 2) some empty VNF containers in the emulated datacenters (PoPs) by using the vim-emu CLI.
- First terminal (start the emulation platform):
sudo python examples/default_single_dc_topology.py
- Second terminal (use
docker exec vim-emu <command>
for nested Docker deployment):vim-emu compute start -d dc1 -n vnf1
vim-emu compute start -d dc1 -n vnf2
vim-emu compute list
- First terminal:
containernet> vnf1 ifconfig
containernet> vnf1 ping -c 2 vnf2
A more advanced example that includes OSM can be found in the official vim-emu documentation in the OSM wiki.
- Official vim-emu documentation in the OSM wiki
- Full CLI command documentation
- Requirements for Docker containers executed by the emulator
- REST API
- Mininet
- Containernet
- Maxinet
Please check this OSM wiki page to learn how to contribute to a OSM module.
To run the unit tests do:
cd ~/son-emu
sudo pytest -v
- (To force Python2:
sudo python2 -m pytest -v
)
- Manuel Peuster (https://github.com/mpeuster)
- Steven Van Rossem (https://github.com/stevenvanrossem)
- Hadi Razzaghi Kouchaksaraei (https://github.com/hadik3r)
- Wouter Tavernier (https://github.com/wtaverni)
- Geoffroy Chollon (https://github.com/cgeoffroy)
- Eduard Maas (https://github.com/edmaas)
- Malte Splietker (https://github.com/splietker)
- Johannes Kampmeyer (https://github.com/xschlef)
The emulation platform is published under Apache 2.0 license. Please see the LICENSE file for more details.
Manuel Peuster (Paderborn University) manuel@peuster.de