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 direct execution of real network functions, packaged as Docker containers, in emulated network topologies running locally on the network service developer's machine.
More details about the the emulator's architecture and concepts can be found in the following publication(s):
- Manuel Peuster, Holger Karl, and Steven van Rossem. "MeDICINE: Rapid Prototyping of Production-Ready Network Services in Multi-PoP Environments." pre-print arXiv:1606.05995 (2016).
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 develop
ansible
Install scriptsmisc
Example packages and VNFssrc
emuvim
Emulator componentsapi
API endpoint implementationsrest
REST API for son-emu-clisonata
Dummy gatekeeper API
cli
Command line client to control the emulatordcemulator
Emulator coreresourcemodel
Resource limitation models
examples
Example topology scriptstest
Test scripts
utils
Helper scripts for SONATA's CI/CD setup
cd ~/son-emu
sudo py.test -v src/emuvim/test/unittests
Son-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:
- 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)
- zerorpc >= 0.5.2 (MIT)
Contributing to the son-emu is really easy. You must:
- Clone this repository;
- Work on your proposed changes, preferably through submiting issues;
- Submit a Pull Request;
- Follow/answer related issues (see Feedback-Chanel, below).
There are two ways to install and use son-emu. The simple one is to use Vagrant to create a VirtualBox-based VM on you machine that contains the pre-installed and configured emulator. The more complicated installation requires a freshly installed Ubuntu 14.04 LTS or 16.04 LTS and is done by a ansible playbook.
- 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 14.04 LTS or 16.04 LTS
sudo apt-get install ansible git
sudo vim /etc/ansible/hosts
- Add:
localhost ansible_connection=local
cd
git clone https://github.com/mpeuster/containernet.git
cd ~/containernet/ansible
sudo ansible-playbook install.yml
- Wait (and have a coffee) ...
cd
git clone https://github.com/sonata-nfv/son-emu.git
cd ~/son-emu/ansible
sudo ansible-playbook install.yml
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
This example shows how to deploy a SONATA example package in the emulator using the dummy gatekeeper.
- First terminal (start the emulation platform):
sudo python src/emuvim/examples/sonata_y1_demo_topology_1.py
- Second terminal (deploy the example package):
- Upload:
curl -i -X POST -F package=@sonata-demo-docker.son http://127.0.0.1:5000/packages
- Instantiate:
curl -X POST http://127.0.0.1:5000/instantiations -d "{}"
- Verify that service runs:
son-emu-cli compute list
Note: The son-push tool can be used instead of CURL.
Son-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.
- 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)
- You may use the mailing list sonata-dev@lists.atosresearch.eu
- GitHub issues