-
Notifications
You must be signed in to change notification settings - Fork 3
HOME
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.
VeRTIGO can be installed:
- as Network Virtualization Layer of an Ofelia island i.e., as a replacement of FlowVisor.
- 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).
-
Requirements:
- ant
- java 1.6 (currently works with both Sun's JDK; and OpenJDK)
-
Download VeRTIGO sources from the git repository
git clone git://github.com/fp7-ofelia/VeRTIGO.git
-
Build:
- run
make
(orant
: Makefile is just a wrapper)
- run
-
Install:
- make install
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 slice-email@yourhost.com
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.
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
VeRTIGO is under development within activities of WP8 of OFELIA FP7 project and is based on source code gracefully provided by Stanford University.
Contact { roberto.doriguzzi | matteo.gerola } @ create-net.org for further information.
2012-11-15 Thu Roberto Doriguzzi roberto.doriguzzi@create-net.org
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 roberto.doriguzzi@create-net.org
VeRTIGO version 0.1
- Initial release