This is the repository of SONATA's 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.
If you use son-emu for your research and/or other publications, please cite the following paper to reference our work:
A short demo that showcases son-emu together with its dummy gatekeeper is available here.
To install the emulator package in development mode, do:
python setup.py developansible Install scriptsmisc Example packages and VNFssrcemuvim Emulator componentsapi API endpoint implementationsrest REST API for son-emu-clisonata 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 SONATA's CI/CD setupcd ~/son-emusudo py.test -v src/emuvim/test/unittestsSon-emu 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 son-emu.
Son-emu requires the latest version of Containernet to be installed on the system.
Despite of this son-emu has the following dependencies:
Contributing to the son-emu is really easy. You must:
There are two ways to install and use son-emu. 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 a 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 aptitudesudo vim /etc/ansible/hostslocalhost ansible_connection=localcdgit clone https://github.com/containernet/containernet.gitcd ~/containernet/ansiblesudo ansible-playbook install.ymlcdgit clone https://github.com/sonata-nfv/son-emu.gitcd ~/son-emu/ansiblesudo ansible-playbook 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 vnf2Son-emu 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.