Move openflow module description out of doxygen
parent
2f5ac124f6
commit
261e5fb98e
|
@ -1,157 +0,0 @@
|
||||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2011 Blake Hurd
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation;
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public
|
|
||||||
* License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
* 02111-1307 USA
|
|
||||||
*
|
|
||||||
* Author: Blake Hurd <naimorai@gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \defgroup OpenFlowSwitchModel OpenFlow Switch Device
|
|
||||||
*
|
|
||||||
* \section OpenFlowSwitchModelOverview OpenFlow Switch Model Overview
|
|
||||||
*
|
|
||||||
* The ns-3 OpenFlowSwitch device models an OpenFlow-enabled switch. It is designed to
|
|
||||||
* express basic use of the OpenFlow protocol, with the maintaining of a virtual
|
|
||||||
* Flow Table and TCAM to provide OpenFlow-like results.
|
|
||||||
*
|
|
||||||
* The functionality comes down to the Controllers, which send messages to the
|
|
||||||
* switch that configure its flows, producing different effects. Controllers can
|
|
||||||
* be added by the user, under the ofi namespace extends ofi::Controller. To
|
|
||||||
* demonstrate this, a DropController, which creates flows for ignoring every single
|
|
||||||
* packet, and LearningController, which effectively makes the switch a more complicated
|
|
||||||
* BridgeNetDevice. A user versed in a standard OFSID, and/or OF protocol, can write
|
|
||||||
* virtual controllers to create switches of all kinds of types.
|
|
||||||
*
|
|
||||||
* \section OpenFlowSwitchModel OpenFlow Switch Model
|
|
||||||
*
|
|
||||||
* The OpenFlowSwitch device behaves somewhat according to the diagram setup as a classical OFSID
|
|
||||||
* switch, with a few modifications made for a proper simulation environment.
|
|
||||||
*
|
|
||||||
* Normal OF-enabled Switch
|
|
||||||
* -----------------------------------
|
|
||||||
* | Secure Channel | <--OF Protocol--> | Controller is external |
|
|
||||||
* | Hardware or Software Flow Table |
|
|
||||||
* -----------------------------------
|
|
||||||
*
|
|
||||||
* ns-3 OF-enabled Switch (module)
|
|
||||||
* -------------------------------------
|
|
||||||
* | m_controller->ReceiveFromSwitch() | <--OF Protocol--> | Controller is internal |
|
|
||||||
* | Software Flow Table, virtual TCAM |
|
|
||||||
* -------------------------------------
|
|
||||||
*
|
|
||||||
* In essence, there are two differences:
|
|
||||||
* # No SSL, Embedded Controller: Instead of a secure channel and connecting to an
|
|
||||||
* outside location for the Controller program/machine, we currently only allow a
|
|
||||||
* Controller extended from ofi::Controller, an extension of an ns3::Object. This
|
|
||||||
* means ns-3 programmers cannot model the SSL part of the interface or possibility
|
|
||||||
* of network failure. The connection to the OpenFlowSwitch is local and there aren't any
|
|
||||||
* reasons for the channel/connection to break down. <<This difference may be an
|
|
||||||
* option in the future. Using EmuNetDevices, it should be possible to engage an
|
|
||||||
* external Controller program/machine, and thus work with controllers designed
|
|
||||||
* outside of the ns-3 environment, that simply use the proper OF protocol when
|
|
||||||
* communicating messages to the switch through a tap device.>>
|
|
||||||
*
|
|
||||||
* # Virtual Flow Table, TCAM: Typical OF-enabled switches are implemented on a hardware
|
|
||||||
* TCAM. The OFSID we turn into a library includes a modelled software TCAM, that produces
|
|
||||||
* the same results as a hardware TCAM. We include an attribute FlowTableLookupDelay, which
|
|
||||||
* allows a simple delay of using the TCAM to be modelled. We don't endeavor to make this
|
|
||||||
* delay more complicated, based on the tasks we are running on the TCAM, that is a possible
|
|
||||||
* future improvement.
|
|
||||||
*
|
|
||||||
* \section OpenFlowSwitchNetDeviceModel OpenFlow Switch Net Device Model
|
|
||||||
*
|
|
||||||
* The OpenFlowSwitch network device is aimed to model an OpenFlow switch, with a TCAM and a connection
|
|
||||||
* to a controller program. With some tweaking, it can model every switch type, as per OpenFlow's
|
|
||||||
* extensibility. It outsources the complexity of the switch ports to NetDevices of the user's choosing.
|
|
||||||
* It should be noted that these NetDevices must behave like practical switch ports, i.e. a Mac Address
|
|
||||||
* is assigned, and nothing more. It also must support a SendFrom function so
|
|
||||||
* that the OpenFlowSwitch can forward across that port.
|
|
||||||
*
|
|
||||||
* The OpenFlowSwitchNetDevice provides following Attributes:
|
|
||||||
*
|
|
||||||
* - FlowTableLookUpDelay: This time gets run off the clock when making a lookup in our Flow Table.
|
|
||||||
* - Flags: OpenFlow specific configuration flags. They are defined in the ofp_config_flags enum. Choices include:
|
|
||||||
* OFPC_SEND_FLOW_EXP (OpenFlowSwitch notifies controller when a flow has expired),
|
|
||||||
* OFPC_FRAG_NORMAL (Match fragment against Flow table),
|
|
||||||
* OFPC_FRAG_DROP (Drop fragments),
|
|
||||||
* OFPC_FRAG_REASM (Reassemble only if OFPC_IP_REASM set, which is currently impossible,
|
|
||||||
* because switch implementation does not support IP reassembly)
|
|
||||||
* OFPC_FRAG_MASK (Mask Fragments)
|
|
||||||
* - FlowTableMissSendLength: When the packet doesn't match in our Flow Table, and we forward to the controller,
|
|
||||||
* this sets # of bytes forwarded (packet is not forwarded in its entirety, unless specified).
|
|
||||||
*
|
|
||||||
* \section OpenFlowSwitchModelSummary OpenFlow Switch Model Summary
|
|
||||||
*
|
|
||||||
* The ns-3 OpenFlowSwitch device models an OpenFlow-enabled switch. It is designed to
|
|
||||||
* express basic use of the OpenFlow protocol, with the maintaining of a virtual
|
|
||||||
* Flow Table and TCAM to provide OpenFlow-like results.
|
|
||||||
*
|
|
||||||
* The functionality comes down to the Controllers, which send messages to the
|
|
||||||
* switch that configure its flows, producing different effects. Controllers can
|
|
||||||
* be added by the user, under the ofi namespace extends ofi::Controller. To
|
|
||||||
* demonstrate this, a DropController, which creates flows for ignoring every single
|
|
||||||
* packet, and LearningController, which effectively makes the switch a more complicated
|
|
||||||
* BridgeNetDevice. A user versed in a standard OFSID, and/or OF protocol, can write
|
|
||||||
* virtual controllers to create switches of all kinds of types.
|
|
||||||
*
|
|
||||||
* In order to use the OpenFlowSwitch module, you must create and link the
|
|
||||||
* OFSID (OpenFlow Software Implementation Distribution) to ns-3.
|
|
||||||
* To do this:
|
|
||||||
*
|
|
||||||
* #1 Obtain the OFSID code. An ns-3 specific OFSID branch is provided
|
|
||||||
* to ensure operation with ns-3. The OFSID has several dependencies
|
|
||||||
* include libxml2, libdl, and the boost libraries. Use mercurial to
|
|
||||||
* download this branch and waf to build the library:
|
|
||||||
*
|
|
||||||
* $ hg clone http://code.nsnam.org/jpelkey3/openflow
|
|
||||||
* $ cd openflow
|
|
||||||
* $ ./waf configure
|
|
||||||
* $ ./waf build
|
|
||||||
*
|
|
||||||
* #2 Your OFSID is now built into a libopenflow.a library! To
|
|
||||||
* link to an ns-3 build with this switch module, run from the ns-3-dev
|
|
||||||
* (or whatever you have named your distribution):
|
|
||||||
*
|
|
||||||
* $ ./waf configure --with-openflow=path/to/openflow
|
|
||||||
*
|
|
||||||
* #3 Under "---- Summary of optional NS-3 features:", you should see
|
|
||||||
* "NS-3 OpenFlow Integration : enabled", indicating the library
|
|
||||||
* has been linked to ns-3. Run:
|
|
||||||
*
|
|
||||||
* $ ./waf build
|
|
||||||
*
|
|
||||||
* to build ns-3 and activate the OpenFlowSwitch module.
|
|
||||||
*
|
|
||||||
* Once set up, you have access to some tests:
|
|
||||||
*
|
|
||||||
* For a test suite for the switch module, run:
|
|
||||||
*
|
|
||||||
* $ ./test.py --suite=openflow
|
|
||||||
*
|
|
||||||
* For an example demonstrating its use in a simple learning controller/switch, run:
|
|
||||||
*
|
|
||||||
* $ ./waf --run openflow-switch
|
|
||||||
*
|
|
||||||
* To see it in detailed logging, run:
|
|
||||||
*
|
|
||||||
* $ ./waf --run "openflow-switch -v"
|
|
||||||
*
|
|
||||||
* If you have any questions, read the wiki <http://www.nsnam.org/wiki/index.php/GSOC2010OpenFlow>
|
|
||||||
* first, and consider posting to the ns-3 developers mailing list <http://www.isi.edu/nsnam/ns/ns-dev-list.html>,
|
|
||||||
* but feel free to reach me at <naimorai@gmail.com>
|
|
||||||
*/
|
|
|
@ -134,7 +134,12 @@ To do this:
|
||||||
|
|
||||||
#1 Obtain the OFSID code. An ns-3 specific OFSID branch is provided to ensure
|
#1 Obtain the OFSID code. An ns-3 specific OFSID branch is provided to ensure
|
||||||
operation with ns-3. Use mercurial to download this branch and waf to build
|
operation with ns-3. Use mercurial to download this branch and waf to build
|
||||||
the library. From the "openflow" directory, run:::
|
the library:::
|
||||||
|
|
||||||
|
$ hg clone http://code.nsnam.org/jpelkey3/openflow
|
||||||
|
$ cd openflow
|
||||||
|
|
||||||
|
From the "openflow" directory, run:::
|
||||||
|
|
||||||
$ ./waf configure
|
$ ./waf configure
|
||||||
$ ./waf build
|
$ ./waf build
|
||||||
|
|
|
@ -15,6 +15,12 @@
|
||||||
*
|
*
|
||||||
* Author: Blake Hurd <naimorai@gmail.com>
|
* Author: Blake Hurd <naimorai@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \defgroup openflow OpenFlow Switch Device
|
||||||
|
* This section documents the API of the ns-3 OpenFlow module. For a generic functional description, please refer to the ns-3 manual.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef NS3_OPENFLOW
|
#ifdef NS3_OPENFLOW
|
||||||
|
|
||||||
#ifndef OPENFLOW_SWITCH_NET_DEVICE_H
|
#ifndef OPENFLOW_SWITCH_NET_DEVICE_H
|
||||||
|
@ -47,8 +53,7 @@
|
||||||
namespace ns3 {
|
namespace ns3 {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \defgroup openflow OpenFlow
|
* \ingroup openflow
|
||||||
*
|
|
||||||
* \brief A net device that switches multiple LAN segments via an OpenFlow-compatible flow table
|
* \brief A net device that switches multiple LAN segments via an OpenFlow-compatible flow table
|
||||||
*
|
*
|
||||||
* The OpenFlowSwitchNetDevice object aggregates multiple netdevices as ports
|
* The OpenFlowSwitchNetDevice object aggregates multiple netdevices as ports
|
||||||
|
@ -77,7 +82,7 @@ namespace ns3 {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup switch
|
* \ingroup openflow
|
||||||
* \brief A net device that switches multiple LAN segments via an OpenFlow-compatible flow table
|
* \brief A net device that switches multiple LAN segments via an OpenFlow-compatible flow table
|
||||||
*/
|
*/
|
||||||
class OpenFlowSwitchNetDevice : public NetDevice
|
class OpenFlowSwitchNetDevice : public NetDevice
|
||||||
|
|
Loading…
Reference in New Issue