-
Notifications
You must be signed in to change notification settings - Fork 3
Advanced Network Virtualisation Layer for OpenFlow Networks
License
Unknown, Unknown licenses found
Licenses found
Unknown
LICENSE.flowvisor
Unknown
LICENSE.vertigo
fp7-ofelia/VeRTIGO
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
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.
This document gives a short introduction of the VeRTIGO's internals and
provides a detailed description of the installation and configuration
procedures.
CODE LAYOUT:
Most of the VeRTIGO's source code is grouped in separated packages added to the
FlowVisor source code tree. The base package is
org.flowvisor.vtopology
Most of functions of VeRTIGO are invoked from the FVSlicer as Virtual Topology
configurations differ for each slice.
Other classes can be found within package org.flowvisor.events (VTEvent,
VTLLDPEvent and VTStoreStatisticsEvent)
The code added for VeRTIGO is usually comprised within lines:
// VERTIGO
...
// END VERTIGO
Most significant classes are:
VTConfigInterface: is the class which manages the configuration of the VTs
and is used by the other modules (like PortMapper and
LinkBroker) to correctly manage the virtual elements
included in the VT. I represents a unified interface to
access both VTHashMap and VTSqlDb
VTSqlDb: stores the configuration of virtual elements for each
virtual topology such as virtual links and virtual
ports.
VTHashMap It is used to keep track of flows crossing
virtual links, i.e. it stores the association between
flow_matches and virtual link IDs.
These entries are used to identify the virtual link
crossed by a flow when the flow arrives at the next hop.
This class also install static entries on middlepoints
switches of virtual links. In this way, those switches
are hidden to the controller.
VTPortMapper: intercepts both messages from switches to controllers
(e.g. packet_in) and from controllers to switches (e.g.
stats requests, packet_out, flow_mod) and rewrites the
port numbers values.
VTEvent Handles the changes of status (up/down) of physical
ports when virtual links are involved
VTLLDPEvent Event handler that manages LLDP messages through virtual
links
VTStoreStatisticsEvent Event handler that periodically sends requests to the
switches and stores the traffic statistics into a
database
VTHop, VTLink Structure of virtual links. A virtual link is described
as a sequence of hops.
VTStatsDb, VTStatsUtils Methods to store and manage the traffic statistics
COMPILATION AND INSTALLATION
Requirements:
- ant (no version requirements?)
- java 1.6 (currently works with both Sun's JDK;
and OpenJDK)
Build:
- run `make` (or `ant` : Makefile is just a wrapper)
Install:
- make install
See also file INSTALL in the root directory for further build options.
NOTES ON INSTALLATION
1. Some of Scripts in scripts/ have been modified from the
original FlowVisor version in order to support the additional
libraries required by VeRTIGO, i.e. mysql-connector-java-5.1.15-bin.jar and
hsqldb.jar (both in /lib/). These modified scripts are also responsible of the
installation of vertigo, vectl and veconfig scripts.
2. VeRTIGO needs a patched version of openflow.jar which has been added in
/lib/ (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:
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.
STATISTICS 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 <dpid>
Retrieves the switch info. dpid 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 <dpid> <port_nr>
Prints 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. port_nr 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 <dpid> <port_nr> <datetime1> <datetime2>
Prints 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
QUESTIONS
[email protected]
About
Advanced Network Virtualisation Layer for OpenFlow Networks
Resources
License
Unknown, Unknown licenses found
Licenses found
Unknown
LICENSE.flowvisor
Unknown
LICENSE.vertigo
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published