1 [](http://jenkins.sonata-nfv.eu/job/son-emu)
4 This is the repository of [SONATA's](http://sonata-nfv.eu) emulation platform.
6 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.
10 If you use son-emu for your research and/or other publications, please cite the following paper to reference our work:
12 * M. Peuster, H. Karl and S. van Rossem, **"MeDICINE: Rapid prototyping of production-ready network services in multi-PoP environments,"** 2016 IEEE Conference on Network Function Virtualization and Software Defined Networks (NFV-SDN), Palo Alto, CA, USA, 2016, pp. 148-153.
13 doi: 10.1109/NFV-SDN.2016.7919490
14 * Link: http://ieeexplore.ieee.org/document/7919490/
15 * Pre-print: http://arxiv.org/abs/1606.05995
17 A short demo that showcases son-emu together with its dummy gatekeeper is available [here](https://www.youtube.com/watch?v=ZANz97pV9ao).
21 To install the emulator package in development mode, do:
23 * `python setup.py develop`
27 * `ansible` Install scripts
28 * `misc` Example packages and VNFs
30 * `emuvim` Emulator components
31 * `api` API endpoint implementations
32 * `rest` REST API for son-emu-cli
33 * `sonata` Dummy gatekeeper API
34 * `openstack` OpenStack-like APIs for MANO integration
35 * `cli` Command line client to control the emulator
36 * `dashboard` A web-based dashboard to display the emulator's state
37 * `dcemulator` Emulator core
38 * `resourcemodel` Resource limitation models
39 * `examples` Example topology scripts
41 * `utils` Helper scripts for SONATA's CI/CD setup
46 * `sudo py.test -v src/emuvim/test/unittests`
47 (To force using Python2: `python2 -m pytest -v src/emuvim/test/unittests`)
52 Son-emu is entirely written in Python and does not require a special build process. Please check the [Installation](https://github.com/sonata-nfv/son-emu#installation) section for more details about the installation of son-emu.
56 Son-emu requires the latest version of [Containernet](https://github.com/mpeuster/containernet) to be installed on the system.
58 Despite of this son-emu has the following dependencies:
60 * [argparse](https://pypi.python.org/pypi/argparse) >= 1.4.0 (Python software foundation License)
61 * [docker-py](https://pypi.python.org/pypi/docker-py) == 1.7.1(Apache 2.0)
62 * [Flask](https://pypi.python.org/pypi/Flask) >= 0.11 (BSD)
63 * [flask_restful](https://pypi.python.org/pypi/Flask-RESTful) >= 0.3 (BSD)
64 * [networkx](https://pypi.python.org/pypi/networkx/) >= 1.11 (BSD)
65 * [oslo.config](http://docs.openstack.org/developer/oslo.config/) >= 3.9.0 (Apache 2.0)
66 * [prometheus_client](https://pypi.python.org/pypi/prometheus_client) >= 0.0.13 (Apache 2.0)
67 * [pyaml](https://pypi.python.org/pypi/pyaml) >=15.8.2 (WTFPL)
68 * [pytest-runner](https://pypi.python.org/pypi/pytest-runner) >= 2.8 (MIT)
69 * [pytest](https://pypi.python.org/pypi/pytest) >= 2.9 (MIT)
70 * [requests](https://pypi.python.org/pypi/requests) >= 2.10 (Apache 2.0)
71 * [ryu](https://pypi.python.org/pypi/ryu/4.4) >= 4.4 (Apache 2.0)
72 * [six](https://pypi.python.org/pypi/six/) >=1.9 (MIT)
73 * [tabulate](https://pypi.python.org/pypi/tabulate) >= 0.7.5 (public domain)
74 * [urllib3](https://pypi.python.org/pypi/urllib3) >= 1.15 (MIT)
75 * [zerorpc](http://www.zerorpc.io) >= 0.5.2 (MIT)
78 Contributing to the son-emu is really easy. You must:
80 1. Clone [this repository](http://github.com/sonata-nfv/son-emu);
81 2. Work on your proposed changes, preferably through submiting [issues](https://github.com/sonata-nfv/son-emu/issues);
82 3. Submit a Pull Request;
83 4. Follow/answer related [issues](https://github.com/sonata-nfv/son-emu/issues) (see Feedback-Chanel, below).
86 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.
88 ### Vagrant Installation
90 * Request VirtualBox and Vagrant to be installed on the system.
91 * `git clone https://github.com/sonata-nfv/son-emu.git`
94 * `vagrant ssh` to enter the new VM in which the emulator is installed.
96 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.
98 ### Ansible Installation
100 * Requires: Ubuntu 16.04 LTS
101 * `sudo apt-get install ansible git aptitude`
102 * `sudo vim /etc/ansible/hosts`
103 * Add: `localhost ansible_connection=local`
108 * `git clone https://github.com/containernet/containernet.git`
109 * `cd ~/containernet/ansible`
110 * `sudo ansible-playbook install.yml`
111 * Wait (and have a coffee) ...
116 * `git clone https://github.com/sonata-nfv/son-emu.git`
117 * `cd ~/son-emu/ansible`
118 * `sudo ansible-playbook install.yml`
124 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.
126 * First terminal (start the emulation platform):
127 * `sudo python src/emuvim/examples/simple_topology.py`
129 * `son-emu-cli compute start -d datacenter1 -n vnf1`
130 * `son-emu-cli compute start -d datacenter1 -n vnf2`
131 * `son-emu-cli compute list`
133 * `containernet> vnf1 ifconfig`
134 * `containernet> vnf1 ping -c 2 vnf2`
137 ### Further Documentation
138 * [Full CLI command documentation](https://github.com/sonata-nfv/son-emu/wiki/CLI-Command-Overview)
139 * [Requirements for Docker containers executed by the emulator](https://github.com/sonata-nfv/son-emu/wiki/Container-Requirements)
140 * [REST API](https://github.com/sonata-nfv/son-emu/wiki/REST-API-command-overview)
144 Son-emu is published under Apache 2.0 license. Please see the LICENSE file for more details.
148 * [Mininet](http://mininet.org)
153 The following lead developers are responsible for this repository and have admin rights. They can, for example, merge pull requests.
155 * Manuel Peuster (https://github.com/mpeuster)
156 * Steven Van Rossem (https://github.com/stevenvanrossem)
160 * Hadi Razzaghi Kouchaksaraei (https://github.com/hadik3r)
161 * Wouter Tavernier (https://github.com/wtaverni)
162 * Geoffroy Chollon (https://github.com/cgeoffroy)
163 * Eduard Maas (https://github.com/edmaas)
167 * You may use the mailing list [sonata-dev@lists.atosresearch.eu](mailto:sonata-dev@lists.atosresearch.eu)
168 * [GitHub issues](https://github.com/sonata-nfv/son-emu/issues)