From 261e5fb98eee554a857ecf92a6a1b2359d29bd94 Mon Sep 17 00:00:00 2001 From: Tom Henderson Date: Tue, 24 May 2011 22:48:51 -0700 Subject: [PATCH] Move openflow module description out of doxygen --- src/openflow/doc/openflow-switch.h | 157 ------------------ src/openflow/doc/openflow-switch.rst | 7 +- .../model/openflow-switch-net-device.h | 11 +- 3 files changed, 14 insertions(+), 161 deletions(-) delete mode 100644 src/openflow/doc/openflow-switch.h diff --git a/src/openflow/doc/openflow-switch.h b/src/openflow/doc/openflow-switch.h deleted file mode 100644 index 97dab7d27..000000000 --- a/src/openflow/doc/openflow-switch.h +++ /dev/null @@ -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 - */ - -/** - * \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. <> - * - * # 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 - * first, and consider posting to the ns-3 developers mailing list , - * but feel free to reach me at - */ diff --git a/src/openflow/doc/openflow-switch.rst b/src/openflow/doc/openflow-switch.rst index fec813fe9..18d4d1011 100644 --- a/src/openflow/doc/openflow-switch.rst +++ b/src/openflow/doc/openflow-switch.rst @@ -134,7 +134,12 @@ To do this: #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 -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 build diff --git a/src/openflow/model/openflow-switch-net-device.h b/src/openflow/model/openflow-switch-net-device.h index 63c2492bd..e89c2b83a 100644 --- a/src/openflow/model/openflow-switch-net-device.h +++ b/src/openflow/model/openflow-switch-net-device.h @@ -15,6 +15,12 @@ * * Author: Blake Hurd */ + +/** + * \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 #ifndef OPENFLOW_SWITCH_NET_DEVICE_H @@ -47,8 +53,7 @@ namespace ns3 { /** - * \defgroup openflow OpenFlow - * + * \ingroup openflow * \brief A net device that switches multiple LAN segments via an OpenFlow-compatible flow table * * 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 */ class OpenFlowSwitchNetDevice : public NetDevice