Skip to content
doriguzzi edited this page Feb 28, 2013 · 30 revisions

Introduction

VeRTIGO is a Network Virtualization architecture that extends FlowVisor by introducing additional intelligence. The main purpose of VeRTIGO is to enable the instantiation of generalized Virtual Topologies (VT) including virtual links and virtual ports. In particular, VeRTIGO is able to expose different virtual views of the network to different controllers. This is achieved by remapping some fields of messages coming from the network and directed to the controllers (and vice-versa) and by directly replying to those switches that are intermediate points of virtual links and that must be hidden to the controller of the VT.
The two processes both depend on the VT configuration and in particular on the configuration of Virtual Links instantiated within the VT. Beside Virtual Links, we have also introduced the concept of Virtual Ports with purpose of supporting the instantiation of multiple Virtual Links on each physical link. Virtual Ports are simply Physical Ports with virtual port numbers and are needed when a single physical port is the termination of multiple virtual links. In this situation, each OpenFlow message related to this physical port must be modified with virtual port numbers consistent with the instantiated virtual links before being forwarded to the controller.

Installation and configuration

VeRTIGO can be installed:

  1. as Network Virtualization Layer of an Ofelia island i.e., as a replacement of FlowVisor.
  2. as controller of a FlowVisor slice to recursively partition the flowspace assigned to the slice (useful to test VeRTIGO without interfering with the island operations).

Installation procedure

  1. Requirements:

    ant

    java 1.6 (currently works with both Sun's JDK; and OpenJDK)

  2. Download VeRTIGO sources from the git repository

    git clone git://github.com/fp7-ofelia/VeRTIGO.git

  3. Build:

     `run `make` (or `ant` : Makefile is just a wrapper)`
    
  4. Install:

     `make install`
    

Initial Configuration

As for FlowVisor, the VeRTIGO configuration process starts with the generation of the base configuration file through the command:

/usr/local/sbin/fvconfig generate config.xml

The initial config file contains some sample VTs and flow definitions. These must be removed before VeRTIGO can be used. In order to make the required changes, VeRTIGO must be running. Example invocation is:

vertigo config.xml

Then, give the following commands (deleting VTs implicitly deletes the rules associated with them):

vectl deleteSlice alice

vectl deleteSlice bob

where vectl is the VeRTIGO's configuration tool, a modified version of the original FlowVisor's fvctl script with some additional options that can be used to define and instantiate Virtual Links.

You can now define a new VT called charlie that will catch all flows from all switches with commands:

vectl createSlice charlie tcp:yourhost.com:10001 [email protected]

vectl addFlowSpace any 10 any "Slice:charlie=4"

Virtual links can be instantiated by using the addLink command as follows:

vectl addLink charlie 00:00:00:00:00:00:00:01/1-00:00:00:00:00:00:00:02/1, 00:00:00:00:00:00:00:02/2-00:00:00:00:00:00:00:03/1

Where charlie is the name of the VT and the couple 00:00:…:0X/Y represents the datapath_id of a switch plus a physical port number. This command above creates a direct connection (Virtual Link) between switches with datapath_id 00:00:00:00:00:00:00:01 and 00:00:00:00:00:00:00:03 passing through 00:00:00:00:00:00:00:02.

Statistic collection module configuration

From version 0.2.0, VeRTIGO includes an internal module which collects statistics of traffic crossing the network. Statistics samples are collected for each enabled physical port and are not divided per slice. Statistics are stored to an internal database and can be retrieved through the vectl command. Follows the list of available operations:

vectl enableVTPlannerStats <enable>

Enable/disable the stats collection process. "0" means disabled, "1" or above means enabled.

vectl setVTPlannerTimers <timer> <exp_time>

Sets timers for the stats collection process. timer is the time between two stats requests, exp_time is the history size in time units. The default time unit is "seconds", but also minutes, hours, days and weeks can be used (s=seconds, m=minutes, h=hours, d=days, w=weeks).

example: vectl setVTPlannerTimers 5s 1w

vectl getVTPlannerTimers

Retrieves and prints timer and exp_timer (see command above).

vectl getVTPlannerSwitchInfo <switchid>

Retrieves the switch info. is the switch datapath_id with format 02:08:02:08:00:00:00:01. Value "all" is also allowed (without quotes) and returns the info of all the switches in the network. Refer to the OpenFlow Specification manual v1.0.0 in order to interpret some of the returned values.

vectl getVTPlannerPortInfo <switchid> <port>

Retrieves the info of one or all ports of a switch. Available ports and switches can be obtained from the output of command getVTPlannerSwitchInfo described above. can be a single port number or the string "all". The meaning of returned values CONFIG,FEATURES e STATE can be found at pages 17,18 and 19 of OpenFlow Specification v1.0.0.

vectl getVTPlannerPortStats <switchid> <port> <datetime1> <datetime2>

Retrieves the collected stats of one port collected between datetime1 and datetime2. Value of datetime1 and datetime2 must be inserted in the format YYYY.MM.DD.hh.mm.ss, for instance:

vectl getVTPlannerPortStats 02:08:02:08:00:00:00:01 4 2012.10.15.00.00.00 2012.10.15.23.59.59

Authorship

VeRTIGO is under development within activities of WP8 of OFELIA FP7 project and is based on source code gracefully provided by Stanford University.

Contact

Contact { roberto.doriguzzi | matteo.gerola } @ create-net.org for further information.

ChangeLog

2012-11-15 Thu Roberto Doriguzzi [email protected]

VeRTIGO version 0.2.1

  • Added support for Floodlight controller
  • Added the "Traffic Statistic Collection" module which is used by the VT-Planner to compute its best-path algorithm
  • Minor bug fixes

2012-05-30 Wed Roberto Doriguzzi [email protected]

VeRTIGO version 0.1

  • Initial release
Clone this wiki locally