Skip to content
doriguzzi edited this page Nov 16, 2012 · 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 a 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

The current installation procedure of VeRTIGO requires the installation of FlowVisor through the Stanford's git repository and the libraries/tools needed to compile FlowVisor (basically ant and Java Development Kit 6). During the procedure, all the libraries and environment variables needed by both FlowVisor and VeRTIGO will be installed on the operating system:

  1. Install FlowVisor sources from the git repository

    git clone git://gitosis.stanford.edu/flowvisor.git

    In the directory flowvisor execute "make" and "make install" as root user (leave Installation prefix = /usr/local and set FlowVisor user/group = root/root)

  2. Download and unzip the latest VeRTIGO tarball from the Download section.

  3. From within VeRTIGO folder, launch install.sh as follows: ./install.sh /usr/local/libexec/flowvisor /usr/local/etc/flowvisor

The last step installs VeRTIGO and some additional libraries and scripts within the original FlowVisor folders without overwriting any FlowVisor script or library (except openflow.jar as the original contains a bug. See post at https://mailman.stanford.edu/pipermail/openflow-discuss/2012-February/002997.html)

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:

flowvisor 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 commands:

vectl enableVTPlannerStats

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

vectl setVTPlannerTimers <exp_time>

Sets timers for the stats collection process. 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 and <exp_timer> (see command above).

vectl getVTPlannerSwitchInfo

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

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

Retrieves the collected stats of one port collected between and . Value of and 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

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

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.

Clone this wiki locally