Skip to content
Roberto Doriguzzi edited this page Nov 13, 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 Oracle's JDK; and OpenJDK)

  2. Download VeRTIGO sources from the git repository

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

  3. Build: 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:

veconfig 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 management

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

vectl addLink charlie <link_description>

Where charlie is the name of the VT and link_description is a sequence of pairs 00:00:00:00:00:00:00:0X/Y representing the datapath_id of a switch plus a physical port number. For instance:

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

The 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.

vectl changeLink charlie <link_id> <link_description>

Similar to addLink, but is used to change the description of a virtual link while maintaining the same identifier.

vectl getVirtualLinks charlie

Prints all the links instantiated for VT “charlie”. The output is something like:

Virtual Link 1: Hop 1: 00:00:00:00:00:00:00:06/1-00:00:00:00:00:00:00:01/2 Hop 2: 00:00:00:00:00:00:00:01/3-00:00:00:00:00:00:00:02/1 Hop 3: 00:00:00:00:00:00:00:02/2-00:00:00:00:00:00:00:08/1 Virtual Link 2: Hop 1: 00:00:00:00:00:00:00:06/1-00:00:00:00:00:00:00:01/2 Hop 2: 00:00:00:00:00:00:00:01/4-00:00:00:00:00:00:00:03/1 Hop 3: 00:00:00:00:00:00:00:03/2-00:00:00:00:00:00:00:04/1

vectl deleteLink charlie <link_id>

Deletes a link with identifier link_id on VT charlie. The identifier can be obtained through command getVirtualLinks.

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

2013-11-13 Wed Roberto Doriguzzi [email protected]

VeRTIGO version 0.3.8

  • Fixed bug that prevented the correct handling of FLOW_STATS replies
  • Password for vectl can now be passed from the standard input (credits to Johannes Grassler)
  • Improved installation instructions for Debian Wheezy/amd64 boxes (credits to Johannes Grassler)

2013-08-05 Mon Roberto Doriguzzi [email protected]

VeRTIGO version 0.3.7

  • Improved XMPRPC interface
  • Added man pages for vertigo, vectl and veconfig

2013-06-10 Mon Roberto Doriguzzi [email protected]

VeRTIGO version 0.3.6

  • Added support for the MODIFY flowMod command
  • Fixed bug that prevented the correct handling of LLDP packets.

2013-05-09 Thu Roberto Doriguzzi [email protected]

VeRTIGO version 0.3.5

  • Fixed bug that prevented the correct installation of the entries on middlepoint switches for virtual links composed of 3 or more hops
  • Added the VTLog class which enables the developer to selectively print on the stdout the debug messages from the vtopology classes (selection can be made from the command line with option -v)
  • Added a class that clones the OFPhysycalPort (only used to remap the FeaturesReply msgs)
  • Fixed the remapping of ports for FEATURES_REPLY messages
  • Other minor bug fixes
  • Improved documentation

2013-02-28 Thu Roberto Doriguzzi [email protected]

VeRTIGO version 0.3.0-beta

  • Improved mechanism that handles Virtual Links by using tagged MAC addresses
  • Improved management of LLDP messages

2013-01-08 Tue Roberto Doriguzzi [email protected]

VeRTIGO version 0.2.2

  • Minor bug fixes

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