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:
ansible Install scriptsmisc Example packages and VNFssrcemuvim Emulator componentsapi API endpoint implementationsrest REST API for son-emu-clisonata SONATA dummy gatekeeper APIopenstack OpenStack-like APIs for MANO integrationcli Command line client to control the emulatordashboard A web-based dashboard to display the emulator's statedcemulator Emulator coreresourcemodel Resource limitation modelsexamples Example topology scriptstest Test scriptsutils Helper scripts for CI/CD setupcd ~/son-emusudo 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:
Contributing to the the emulator is really easy. You must:
There are two 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.
git clone https://github.com/sonata-nfv/son-emu.gitcd ~/son-emuvagrant upvagrant 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.
sudo apt-get install ansible git aptitudecdgit clone https://github.com/containernet/containernet.gitcd ~/containernet/ansiblesudo ansible-playbook -i "localhost," -c local install.ymlcdgit clone https://github.com/sonata-nfv/son-emu.gitcd ~/son-emu/ansiblesudo ansible-playbook -i "localhost," -c local install.ymlThis 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.
sudo python src/emuvim/examples/simple_topology.pyson-emu-cli compute start -d datacenter1 -n vnf1son-emu-cli compute start -d datacenter1 -n vnf2son-emu-cli compute listcontainernet> vnf1 ifconfigcontainernet> vnf1 ping -c 2 vnf2The 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.