Move openflow module description out of doxygen

Tom Henderson 2011-05-24 22:48:51 -07:00
parent 2f5ac124f6
commit 261e5fb98e
3 changed files with 14 additions and 161 deletions

View File

@ -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>
*/

View File

@ -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

View File

@ -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