Code Monkey home page Code Monkey logo

vim-emu's Introduction

vim-emu: A NFV multi-PoP emulation platform

This emulation platform was created to support network service developers to locally prototype and test their network services 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 developer's machine. The emulation platform also offers OpenStack-like APIs for each emulated PoP so that it can integrate with MANO solutions, like OSM. The core of the emulation platform is based on Containernet.

The emulation platform vim-emu is developed as part of OSM's DevOps MDG.


Acknowledgments

This software was originally developed by the SONATA project and the 5GTANGO project, funded by the European Commission under grant number 671517 and 761493 through the Horizon 2020 and 5G-PPP programs.

Cite this work

If you use the emulation platform for your research and/or other publications, please cite the following paper to reference our work:

Bibtex:

@inproceedings{peuster2016medicine, 
    author={M. Peuster and H. Karl and S. van Rossem}, 
    booktitle={2016 IEEE Conference on Network Function Virtualization and Software Defined Networks (NFV-SDN)}, 
    title={MeDICINE: Rapid prototyping of production-ready network services in multi-PoP environments}, 
    year={2016}, 
    volume={}, 
    number={}, 
    pages={148-153}, 
    doi={10.1109/NFV-SDN.2016.7919490},
    month={Nov}
}

Installation

There are multiple ways to install and use the emulation platform. The easiest way is the automated installation using the OSM installer. The bare-metal installation requires a freshly installed Ubuntu 18.04 LTS and is done by an Ansible playbook. Another option is to use a nested Docker environment to run the emulator inside a Docker container.

Automated OSM installation

This installation option applies if you want to use vim-emu in combination with OSM.

./install_osm.sh --vimemu

This command will install OSM as well as the emulator (as a Docker container) on a local machine. It is recommended to use a machine with Ubuntu 18.04 LTS. More details about this installation option can be found in the OSM wiki.

Standalone installation

Option 1: Bare-metal installation

sudo apt-get install ansible git aptitude
Step 1. Containernet installation
cd
git clone https://github.com/containernet/containernet.git
cd ~/containernet/ansible
sudo ansible-playbook -i "localhost," -c local install.yml
cd ..
sudo make develop
Step 2. vim-emu installation
cd
git clone https://osm.etsi.org/gerrit/osm/vim-emu.git
cd ~/vim-emu/ansible
sudo ansible-playbook -i "localhost," -c local install.yml
cd ..
sudo python3 setup.py develop

Option 2: Nested Docker Deployment

This option requires a Docker installation on the host machine on which the emulator should be deployed.

Build:

git clone https://osm.etsi.org/gerrit/osm/vim-emu.git
cd ~/vim-emu
# build the container:
docker build -t vim-emu-img .

Run:

# run the (interactive) container:
docker run --name vim-emu -it --rm --privileged --pid='host' -v /var/run/docker.sock:/var/run/docker.sock vim-emu-img /bin/bash

Usage

Example

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 vim-emu CLI.

First terminal:

# start the emulation platform with a single NFV data center
sudo python3 examples/default_single_dc_topology.py

Second terminal (use docker exec vim-emu <command> for nested Docker deployment):

# start two simple VNFs
vim-emu compute start -d dc1 -n vnf1
vim-emu compute start -d dc1 -n vnf2
vim-emu compute list

First terminal:

# check the connectivity between the two VNFs
# press <ENTER> <ENTER>
containernet> vnf1 ifconfig
containernet> vnf1 ping -c2 vnf2

A more advanced example that includes OSM can be found in the official vim-emu documentation in the OSM wiki.


Documentation


Development

How to contribute?

Please check this OSM wiki page to learn how to contribute to a OSM module.

Testing

sudo pytest -v

Contributors

License

The emulation platform is published under Apache 2.0 license. Please see the LICENSE file for more details.

Contact

Manuel Peuster

vim-emu's People

Contributors

gerardo-garcia avatar xschlef avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

vim-emu's Issues

is vim-emu still used by osm

i have installed osm version11.when boarding the example ping pong,osm returns some errors that the standard of the tar.gz file is not suited to the current version.should i try another version or find any other solutions?all i want is the sdn/nfv environment with some monitoring functions.thanks!

vim-emu incompatible with OSM Release 9

I was just trying to use vim-emu in the latest OSM release (Release NINE). When deploying a Network Service the emulator was returning a 500, checking the logs I found that it seemed to be caused by an invalid keyword argument being passed to the HostConfig constructor:

ERROR:api.openstack.nova:emuvim.api.openstack.openstack_dummies.nova_dummy_api: Could not create the server.
Traceback (most recent call last):
  File "/vim-emu/src/emuvim/api/openstack/openstack_dummies/nova_dummy_api.py", line 257, in post
    self.api.compute._start_compute(server)
  File "/vim-emu/src/emuvim/api/openstack/compute.py", line 481, in _start_compute
    properties=server.properties)
  File "/vim-emu/src/emuvim/dcemulator/node.py", line 275, in startCompute
    **params
  File "/vim-emu/src/emuvim/dcemulator/net.py", line 272, in addDocker
    self, label, cls=EmulatorCompute, **params)
  File "/containernet/mininet/net.py", line 1058, in addDocker
    return self.addHost( name, cls=cls, **params)
  File "/containernet/mininet/net.py", line 242, in addHost
    h = cls( name, **defaults )
  File "/vim-emu/src/emuvim/dcemulator/node.py", line 57, in __init__
    Docker.__init__(self, name, dimage, **kwargs)
  File "/containernet/mininet/node.py", line 825, in __init__
    storage_opt=self.storage_opt
  File "/usr/local/lib/python3.6/dist-packages/docker/api/container.py", line 587, in create_host_config
    return HostConfig(*args, **kwargs)

I had a quick look at the changelogs for the Docker pip package and noticed that the storage_opt kwarg is only supported from version >= 2.1.0.

I manually installed version 2.1.0 in the container:

pip install docker==2.1.0

and this resolved the issue. Is there any reason to not bump the Docker python package version to at least 2.1.0? The base containernet image installs the latest version of Docker (4.x.x).

There is a commit (619e6b3) mentioning that vim-emu requires 2.0.2 but doesn't go into detail as to why.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.