We are happy to announce that SONATA's emulation platform was adopted by ETSI's OSM project as part of their DevOps MDG under its new name vim-emu
(Sep. 2017). The developments of the core emulator components will now take place in the new project repository hosted by OSM. This GitHub repository will act as a mirror until the SONATA project has ended.
- Official OSM repository: https://osm.etsi.org/gitweb/?p=osm/vim-emu.git
- GitHub mirror of the OSM repository: https://github.com/sonata-nfv/son-emu/tree/osm/master (not always up to date)
- Old SONATA repository: https://github.com/sonata-nfv/son-emu (used for SONATA-specific developments)
As an external user or contributer, you should always use the official OSM repository.
This is the repository of SONATA's NFV multi-PoP emulation platform.
This emulation platform was created to support network service developers to locally prototype and test complete network service chains 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 network service developer's machine.
The emulation platform is based on Containernet.
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)
ansible
Install scriptsmisc
Example packages and VNFssrc
emuvim
Emulator componentsapi
API endpoint implementationsrest
REST API for son-emu-clisonata
SONATA dummy gatekeeper APIopenstack
OpenStack-like APIs for MANO integration
cli
Command line client to control the emulatordashboard
A web-based dashboard to display the emulator's statedcemulator
Emulator coreresourcemodel
Resource limitation models
examples
Example topology scriptstest
Test scripts
utils
Helper scripts for CI/CD setup
cd ~/son-emu
sudo py.test -v src/emuvim/test/unittests
(To force using Python2:python2 -m pytest -v src/emuvim/test/unittests
)
The emulation platform is entirely written in Python and does not require a special build process. Please check the Installation section for more details about the installation of the emulator.
The emulation platform requires the latest version of Containernet to be installed on the system.
Despite of this, the emulation platform has the following dependencies:
- argparse >= 1.4.0 (Python software foundation License)
- docker-py == 1.7.1(Apache 2.0)
- Flask >= 0.11 (BSD)
- flask_restful >= 0.3 (BSD)
- networkx >= 1.11 (BSD)
- oslo.config >= 3.9.0 (Apache 2.0)
- prometheus_client >= 0.0.13 (Apache 2.0)
- pyaml >=15.8.2 (WTFPL)
- pytest-runner >= 2.8 (MIT)
- pytest >= 2.9 (MIT)
- requests >= 2.10 (Apache 2.0)
- ryu >= 4.4 (Apache 2.0)
- six >=1.9 (MIT)
- tabulate >= 0.7.5 (public domain)
- urllib3 >= 1.15 (MIT)
Contributing to the the emulator is really easy. You must:
- Clone this repository;
- Work on your proposed changes, preferably through submitting issues;
- Submit a Pull Request;
- Follow/answer related issues (see Feedback-Chanel, below).
There are three ways to install and use the emulation platform. The simple one is to use Vagrant to create a VirtualBox-based VM on your machine that contains the pre-installed and configured emulator. The more complicated installation requires a freshly installed Ubuntu 16.04 LTS and is done by an ansible playbook. The third option is to use a nested Docker environment to run the emulator inside a Docker container.
- Request VirtualBox and Vagrant to be installed on the system.
git clone https://github.com/sonata-nfv/son-emu.git
cd ~/son-emu
vagrant up
vagrant ssh
to enter the new VM in which the emulator is installed.
Follow the MOTD in the VM to run the example topology and the dummy-gatekeeper. The dummy-gatekeeper's default port 5000 is forwarded to the host machine and can be accessed from it by using, e.g., curl http://127.0.0.1:5000/packages.
- Requires: Ubuntu 16.04 LTS
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.git
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.
- Option a) Build container manually:
git clone https://github.com/sonata-nfv/son-emu.git
cd ~/son-emu
- Build the container:
docker build -t son-emu-img .
- Run the (interactive) container:
docker run --name son-emu -it --rm --privileged --pid='host' -v /var/run/docker.sock:/var/run/docker.sock son-emu-img /bin/bash
- Option b) Use latest pre-build container from DockerHub:
- Pull the container:
docker pull sonatanfv/son-emu:dev
- Run the (interactive) container:
docker run --name son-emu -it --rm --privileged --pid='host' -v /var/run/docker.sock:/var/run/docker.sock sonatanfv/son-emu:dev /bin/bash
- Pull the container:
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 son-emu-cli.
- First terminal (start the emulation platform):
sudo python src/emuvim/examples/simple_topology.py
- Second terminal:
son-emu-cli compute start -d datacenter1 -n vnf1
son-emu-cli compute start -d datacenter1 -n vnf2
son-emu-cli compute list
- First terminal:
containernet> vnf1 ifconfig
containernet> vnf1 ping -c 2 vnf2
The emulation platform is published under Apache 2.0 license. Please see the LICENSE file for more details.
The following lead developers are responsible for this repository and have admin rights. They can, for example, merge pull requests.
- 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)
- You may use the mailing list sonata-dev@lists.atosresearch.eu
- GitHub issues