--- a/src/helper/application-container.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/application-container.h Sun Oct 04 20:52:24 2009 -0700
@@ -28,7 +28,15 @@
namespace ns3 {
/**
- * \brief holds a vector of ns3::Application pointers
+ * \brief holds a vector of ns3::Application pointers.
+ *
+ * Typically ns-3 Applications are installed on nodes using an Application
+ * helper. The helper Install method takes a NodeContainer which holds
+ * some number of Ptr<Node>. For each of the Nodes in the NodeContainer
+ * the helper will instantiate an application, install it in a node and
+ * add a Ptr<Application> to that application into a Container for use
+ * by the caller. This is that container used to hold the Ptr<Application>
+ * which are instantiated by the Application helper.
*
*/
class ApplicationContainer
@@ -40,60 +48,165 @@
ApplicationContainer ();
/**
- * Create an ApplicationContainer with exactly one application
+ * Create an ApplicationContainer with exactly one application which has
+ * been previously instantiated. The single application is specified
+ * by a smart pointer.
*
- * \param application The application to add to the container
+ * \param application The application to add to the container.
*/
ApplicationContainer (Ptr<Application> application);
/**
- * Create an ApplicationContainer with exactly one application
+ * Create an ApplicationContainer with exactly one application which has
+ * been previously instantiated and assigned a name using the Object name
+ * service. This Application is specified by its assigned name.
*
- * \param name The name of the application object to add to the container
+ * \param name The name of the application object to add to the container.
*/
ApplicationContainer (std::string name);
typedef std::vector<Ptr<Application> >::const_iterator Iterator;
/**
- * \returns an iterator which points to the start of the array of pointers.
+ * \brief Get an iterator which refers to the first Application in the
+ * container.
+ *
+ * Applications can be retrieved from the container in two ways. First,
+ * directly by an index into the container, and second, using an iterator.
+ * This method is used in the iterator method and is typically used in a
+ * for-loop to run through the Applications
+ *
+ * \code
+ * ApplicationContainer::Iterator i;
+ * for (i = container.Begin (); i != container.End (); ++i)
+ * {
+ * (*i)->method (); // some Application method
+ * }
+ * \endcode
+ *
+ * \returns an iterator which refers to the first Application in the container.
*/
Iterator Begin (void) const;
+
/**
- * \returns an iterator which points to the end of the array of pointers.
+ * \brief Get an iterator which indicates to the last Application in the
+ * container.
+ *
+ * Applications can be retrieved from the container in two ways. First,
+ * directly by an index into the container, and second, using an iterator.
+ * This method is used in the iterator method and is typically used in a
+ * for-loop to run through the Applications
+ *
+ * \code
+ * ApplicationContainer::Iterator i;
+ * for (i = container.Begin (); i != container.End (); ++i)
+ * {
+ * (*i)->method (); // some Application method
+ * }
+ * \endcode
+ *
+ * \returns an iterator which indicates an ending condition for a loop.
*/
Iterator End (void) const;
/**
- * \returns the number of application pointers stored in this container.
+ * \brief Get the number of Ptr<Application> stored in this container.
+ *
+ * Applications can be retrieved from the container in two ways. First,
+ * directly by an index into the container, and second, using an iterator.
+ * This method is used in the direct method and is typically used to
+ * define an ending condition in a for-loop that runs through the stored
+ * Applications
+ *
+ * \code
+ * uint32_t nApplications = continer.GetN ();
+ * for (uint32_t i = 0 i < nApplications; ++i)
+ * {
+ * Ptr<Application> p = continer.Get (i)
+ * i->method (); // some Application method
+ * }
+ * \endcode
+ *
+ * \returns the number of Ptr<Application> stored in this container.
*/
uint32_t GetN (void) const;
+
/**
+ * \brief Get the Ptr<Application> stored in this container at a given
+ * index.
+ *
+ * Applications can be retrieved from the container in two ways. First,
+ * directly by an index into the container, and second, using an iterator.
+ * This method is used in the direct method and is used to retrieve the
+ * indexed Ptr<Appliation>.
+ *
+ * \code
+ * uint32_t nApplications = continer.GetN ();
+ * for (uint32_t i = 0 i < nApplications; ++i)
+ * {
+ * Ptr<Application> p = continer.Get (i)
+ * i->method (); // some Application method
+ * }
+ * \endcode
+ *
* \param i the index of the requested application pointer.
* \returns the requested application pointer.
*/
Ptr<Application> Get (uint32_t i) const;
/**
- * Append to the end of this container the other input container.
+ * \brief Append the contents of another ApplicationContainer to the end of
+ * this container.
*
- * \param other another application container
+ * \param The ApplicationContainer to append.
*/
void Add (ApplicationContainer other);
+
/**
- * Append to the end of this container the input application pointer.
+ * \brief Append the single Ptr<Application> to this container.
*
- * \param application another netdevice pointer.
+ * \param application The Ptr<Application> to append.
*/
void Add (Ptr<Application> application);
+
/**
- * Append to the end of this container the application specified by the name.
+ * \brief Append to this container the single Ptr<Application> referred to
+ * via its object name service registered name.
*
* \param name The name of the application object to add to the container.
*/
void Add (std::string name);
+ /**
+ * \brief Arrange for all of the Applications in this containter to Start()
+ * at the Time given as a parameter.
+ *
+ * All Applications need to be provided with a starting simulation time and
+ * a stopping simulation time. The ApplicationContainer is a convenient
+ * place for allowing all of the contained Applications to be told to wake
+ * up and start doing their thing (Start) at a common time.
+ *
+ * This method simply iterates through the contained Applications and calls
+ * their Start() methods with the provided Time.
+ *
+ * \param start The Time at which each of the applications should start.
+ */
void Start (Time start);
+
+ /**
+ * \brief Arrange for all of the Applications in this containter to Stop()
+ * at the Time given as a parameter.
+ *
+ * All Applications need to be provided with a starting simulation time and
+ * a stopping simulation time. The ApplicationContainer is a convenient
+ * place for allowing all of the contained Applications to be told to shut
+ * down and stop doing their thing (Stop) at a common time.
+ *
+ * This method simply iterates through the contained Applications and calls
+ * their Start() methods with the provided Time.
+ *
+ * \param start The Time at which each of the applications should start.
+ */
void Stop (Time stop);
private:
--- a/src/helper/athstats-helper.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/athstats-helper.h Sun Oct 04 20:52:24 2009 -0700
@@ -88,7 +88,7 @@
/**
- * function to be called when the net device transmittes a packet
+ * function to be called when the net device transmits a packet
*
* @param context
* @param p the packet being transmitted
@@ -139,7 +139,6 @@
*/
void TxFinalDataFailedTrace (std::string context, Mac48Address address);
-
/**
* Function to be called when the PHY layer of the considered
* device receives a frame
@@ -195,10 +194,16 @@
private:
+ /**
+ * @internal
+ */
void WriteStats ();
+
+ /**
+ * @internal
+ */
void ResetCounters ();
-
uint32_t m_txCount;
uint32_t m_rxCount;
uint32_t m_shortRetryCount;
@@ -212,7 +217,6 @@
Time m_interval;
-
}; // class AthstatsWifiTraceSink
--- a/src/helper/bridge-helper.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/bridge-helper.h Sun Oct 04 20:52:24 2009 -0700
@@ -36,13 +36,16 @@
class BridgeHelper
{
public:
+ /*
+ * Construct a BridgeHelper
+ */
BridgeHelper ();
/**
+ * Set an attribute on each ns3::BridgeNetDevice created by
+ * BridgeHelper::Install
+ *
* \param n1 the name of the attribute to set
* \param v1 the value of the attribute to set
- *
- * Set an attribute on each ns3::BridgeNetDevice created by
- * BridgeHelper::Install
*/
void SetDeviceAttribute (std::string n1, const AttributeValue &v1);
/**
--- a/src/helper/csma-helper.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/csma-helper.h Sun Oct 04 20:52:24 2009 -0700
@@ -40,6 +40,9 @@
class CsmaHelper
{
public:
+ /**
+ * Construct a CsmaHelper.
+ */
CsmaHelper ();
/**
@@ -349,13 +352,30 @@
NetDeviceContainer& hubDevices, NetDeviceContainer& spokeDevices);
private:
+ /*
+ * \internal
+ */
Ptr<NetDevice> InstallPriv (Ptr<Node> node, Ptr<CsmaChannel> channel) const;
+ /*
+ * \internal
+ */
static void SniffEvent (Ptr<PcapWriter> writer, Ptr<const Packet> packet);
static void AsciiRxEvent (Ptr<AsciiWriter> writer, std::string path, Ptr<const Packet> packet);
+ /*
+ * \internal
+ */
static void AsciiEnqueueEvent (Ptr<AsciiWriter> writer, std::string path, Ptr<const Packet> packet);
+
+ /*
+ * \internal
+ */
static void AsciiDequeueEvent (Ptr<AsciiWriter> writer, std::string path, Ptr<const Packet> packet);
+
+ /*
+ * \internal
+ */
static void AsciiDropEvent (Ptr<AsciiWriter> writer, std::string path, Ptr<const Packet> packet);
ObjectFactory m_queueFactory;
--- a/src/helper/dot11s-installer.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/dot11s-installer.h Sun Oct 04 20:52:24 2009 -0700
@@ -18,26 +18,61 @@
* Authors: Kirill Andreev <andreev@iitp.ru>
*/
-
#ifndef DOT11S_STACK_INSTALLER_H
#define DOT11S_STACK_INSTALLER_H
+
#include "ns3/mesh-stack-installer.h"
+
namespace ns3 {
+
+/**
+ * \brief Helper class to allow easy installation of 802.11s stack.
+ */
class Dot11sStack : public MeshStack
{
- public:
- static TypeId GetTypeId ();
- Dot11sStack ();
- ~Dot11sStack ();
- void DoDispose ();
+public:
+ /**
+ * \internal
+ */
+ static TypeId GetTypeId ();
+
+ /**
+ * Create a Dot11sStack() installer helper.
+ */
+ Dot11sStack ();
+
+ /**
+ * Destroy a Dot11sStack() installer helper.
+ */
+ ~Dot11sStack ();
+
+ /**
+ * Break any reference cycles in the installer helper. Required for ns-3
+ * Object support.
+ */
+ void DoDispose ();
- ///\brief Installs 802.11s stack. needed by helper only
- bool InstallStack (Ptr<MeshPointDevice> mp);
- void Report (const Ptr<MeshPointDevice> mp, std::ostream&);
- void ResetStats (const Ptr<MeshPointDevice> mp);
- private:
- Mac48Address m_root;
+ /**
+ * \brief Install an 802.11s stack.
+ * \param The Ptr<MeshPointDevice> to use when setting up the PMP.
+ */
+ bool InstallStack (Ptr<MeshPointDevice> mp);
+
+ /**
+ * \brief Iterate through the referenced devices and protocols and print
+ * their statistics
+ */
+ void Report (const Ptr<MeshPointDevice> mp, std::ostream&);
+
+ /**
+ * \brief Reset the statistics on the referenced devices and protocols.
+ */
+ void ResetStats (const Ptr<MeshPointDevice> mp);
+private:
+ Mac48Address m_root;
};
+
} //namespace ns3
+
#endif
--- a/src/helper/emu-helper.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/emu-helper.h Sun Oct 04 20:52:24 2009 -0700
@@ -39,6 +39,10 @@
class EmuHelper
{
public:
+ /*
+ * Construct an EmuHelper() which is used to make installing and configuring
+ * Emulated Net Devices easier.
+ */
EmuHelper ();
/**
@@ -206,12 +210,34 @@
NetDeviceContainer Install (const NodeContainer &c) const;
private:
+ /*
+ * \internal
+ */
Ptr<NetDevice> InstallPriv (Ptr<Node> node) const;
+
+ /*
+ * \internal
+ */
static void SniffEvent (Ptr<PcapWriter> writer, Ptr<const Packet> packet);
+ /*
+ * \internal
+ */
static void AsciiRxEvent (Ptr<AsciiWriter> writer, std::string path, Ptr<const Packet> packet);
+
+ /*
+ * \internal
+ */
static void AsciiEnqueueEvent (Ptr<AsciiWriter> writer, std::string path, Ptr<const Packet> packet);
+
+ /*
+ * \internal
+ */
static void AsciiDequeueEvent (Ptr<AsciiWriter> writer, std::string path, Ptr<const Packet> packet);
+
+ /*
+ * \internal
+ */
static void AsciiDropEvent (Ptr<AsciiWriter> writer, std::string path, Ptr<const Packet> packet);
ObjectFactory m_queueFactory;
--- a/src/helper/flame-installer.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/flame-installer.h Sun Oct 04 20:52:24 2009 -0700
@@ -20,26 +20,60 @@
#ifndef FLAME_STACK_INSTALLER_H
#define FLAME_STACK_INSTALLER_H
+
#include "ns3/mesh-stack-installer.h"
+
namespace ns3 {
+
/**
* \ingroup flame
*
- * \brief FLAME mesh stack (actually single protocol in this stack)
+ * \brief Helper class used to install FLAME mesh stack (actually single
+ * protocol in this stack)
*/
class FlameStack : public MeshStack
{
- public:
- static TypeId GetTypeId ();
- FlameStack ();
- ~FlameStack ();
- void DoDispose ();
+public:
+ /*
+ * \internal
+ */
+ static TypeId GetTypeId ();
+
+ /**
+ * Construct a FlameStack helper class.
+ */
+ FlameStack ();
+
+ /**
+ * Destroy a FlameStack helper class.
+ */
+ ~FlameStack ();
- /// Installs flame stack on given mesh point device.
- bool InstallStack (Ptr<MeshPointDevice> mp);
- void Report (const Ptr<MeshPointDevice> mp, std::ostream&);
- void ResetStats (const Ptr<MeshPointDevice> mp);
+ /**
+ * \internal
+ * Break any reference cycles in the installer helper. Required for ns-3
+ * Object support.
+ */
+ void DoDispose ();
+
+ /**
+ * \brief Install a flame stack on the given MeshPointDevice
+ * \param The Ptr<MeshPointDevice> to use.
+ */
+ bool InstallStack (Ptr<MeshPointDevice> mp);
+
+ /**
+ * \brief Print flame protocol statistics.
+ */
+ void Report (const Ptr<MeshPointDevice> mp, std::ostream&);
+
+ /**
+ * \brief Reset the statistics.
+ */
+ void ResetStats (const Ptr<MeshPointDevice> mp);
};
+
} //namespace ns3
-#endif
+#endif // FLAME_STACK_INSTALLER_H
+
--- a/src/helper/flow-monitor-helper.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/flow-monitor-helper.h Sun Oct 04 20:52:24 2009 -0700
@@ -35,15 +35,18 @@
class FlowMonitorHelper
{
public:
+ /// \brief Construct a FlowMonitorHelper class which makes it easier to
+ /// configure and use the FlowMonitor
FlowMonitorHelper ();
-
/// \brief Set an attribute for the to-be-created FlowMonitor object
void SetMonitorAttribute (std::string n1, const AttributeValue &v1);
/// \brief Enable flow monitoring on a set of nodes
+ /// \param nodes A NodeContainer holding the set of nodes to work with.
Ptr<FlowMonitor> Install (NodeContainer nodes);
/// \brief Enable flow monitoring on a single node
+ /// \param nodes A Ptr<Node> to the node on which to enable flow monitoring.
Ptr<FlowMonitor> Install (Ptr<Node> node);
/// \brief Enable flow monitoring on all nodes
Ptr<FlowMonitor> InstallAll ();
--- a/src/helper/internet-stack-helper.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/internet-stack-helper.h Sun Oct 04 20:52:24 2009 -0700
@@ -53,6 +53,10 @@
* such as ns3::OlsrHelper
*/
InternetStackHelper(void);
+
+ /**
+ * Destroy the InternetStackHelper
+ */
virtual ~InternetStackHelper(void);
InternetStackHelper (const InternetStackHelper &);
InternetStackHelper &operator = (const InternetStackHelper &o);
@@ -195,30 +199,67 @@
const Ipv4RoutingHelper *m_routing;
/**
+ * \internal
* \brief IPv6 routing helper.
*/
const Ipv6RoutingHelper *m_routingv6;
+ /**
+ * \internal
+ */
static void CreateAndAggregateObjectFromTypeId (Ptr<Node> node, const std::string typeId);
+
+ /**
+ * \internal
+ */
static void Cleanup (void);
+
+ /**
+ * \internal
+ */
static void LogRxIp (std::string context, Ptr<const Packet> packet, uint32_t deviceId);
+
+ /**
+ * \internal
+ */
static void LogTxIp (std::string context, Ptr<const Packet> packet, uint32_t deviceId);
+
+ /**
+ * \internal
+ */
static Ptr<PcapWriter> GetStream (uint32_t nodeId, uint32_t interfaceId);
+
struct Trace {
uint32_t nodeId;
uint32_t interfaceId;
Ptr<PcapWriter> writer;
};
+ /**
+ * \internal
+ */
static void AsciiDropEventIpv4 (Ptr<AsciiWriter> writer, std::string path,
Ipv4Header const &header, Ptr<const Packet> packet,
Ipv4L3Protocol::DropReason reason, uint32_t interface);
+ /**
+ * \internal
+ */
static void AsciiDropEventArp (Ptr<AsciiWriter> writer, std::string path, Ptr<const Packet> packet);
+
+ /**
+ * \internal
+ */
static void AsciiDropEventIpv6 (Ptr<AsciiWriter> writer, std::string path,
Ipv6Header const &header, Ptr<const Packet> packet,
Ipv6L3Protocol::DropReason reason, uint32_t interface);
+
static std::string m_pcapBaseFilename;
+
+ /**
+ * \internal
+ */
static uint32_t GetNodeIndex (std::string context);
+
static std::vector<Trace> m_traces;
/**
--- a/src/helper/ipv4-address-helper.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/ipv4-address-helper.h Sun Oct 04 20:52:24 2009 -0700
@@ -176,6 +176,9 @@
Ipv4InterfaceContainer Assign (const NetDeviceContainer &c);
private:
+ /**
+ * @internal
+ */
uint32_t NumAddressBits (uint32_t maskbits) const;
uint32_t m_network;
--- a/src/helper/ipv4-global-routing-helper.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/ipv4-global-routing-helper.h Sun Oct 04 20:52:24 2009 -0700
@@ -31,9 +31,20 @@
class Ipv4GlobalRoutingHelper : public Ipv4RoutingHelper
{
public:
+ /**
+ * \brief Construct a GlobalRoutingHelper to make life easier for managing
+ * global routing tasks.
+ */
Ipv4GlobalRoutingHelper ();
+
+ /**
+ * \brief Construct a GlobalRoutingHelper from another previously initialized
+ * instance (Copy Constructor).
+ */
Ipv4GlobalRoutingHelper (const Ipv4GlobalRoutingHelper &);
+
/**
+ * \internal
* \returns pointer to clone of this Ipv4GlobalRoutingHelper
*
* This method is mainly for internal use by the other helpers;
@@ -50,7 +61,7 @@
virtual Ptr<Ipv4RoutingProtocol> Create (Ptr<Node> node) const;
/**
- * @brief Build a routing database and initialize the routing tables of
+ * \brief Build a routing database and initialize the routing tables of
* the nodes in the simulation. Makes all nodes in the simulation into
* routers.
*
@@ -60,7 +71,7 @@
*/
static void PopulateRoutingTables (void);
/**
- *@brief Remove all routes that were previously installed in a prior call
+ * \brief Remove all routes that were previously installed in a prior call
* to either PopulateRoutingTables() or RecomputeRoutingTables(), and
* add a new set of routes.
*
@@ -73,6 +84,11 @@
*/
static void RecomputeRoutingTables (void);
private:
+ /**
+ * \internal
+ * \brief Assignment operator declared private and not implemented to disallow
+ * assignment and prevent the compiler from happily inserting its own.
+ */
Ipv4GlobalRoutingHelper &operator = (const Ipv4GlobalRoutingHelper &o);
};
--- a/src/helper/ipv4-interface-container.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/ipv4-interface-container.h Sun Oct 04 20:52:24 2009 -0700
@@ -9,8 +9,25 @@
namespace ns3 {
/**
- * \brief keep track of a set of ipv4 interfaces.
+ * \brief holds a vector of std::pair of Ptr<Ipv4> and interface index.
*
+ * Typically ns-3 Ipv4Interfaces are installed on devices using an Ipv4 address
+ * helper. The helper's Assign() method takes a NetDeviceContainer which holds
+ * some number of Ptr<NetDevice>. For each of the NetDevices in the
+ * NetDeviceContainer the helper will find the associated Ptr<Node> and
+ * Ptr<Ipv4>. It makes sure that an interface exists on the node for the
+ * device and then adds an Ipv4Address according to the address helper settings
+ * (incrementing the Ipv4Address somehow as it goes). The helper then converts
+ * the Ptr<Ipv4> and the interface index to a std::pair and adds them to a
+ * container -- a container of this type.
+ *
+ * The point is then to be able to implicitly associate an index into the
+ * original NetDeviceContainer (that identifies a particular net device) with
+ * an identical index into the Ipv4InterfaceContainer that has a std::pair with
+ * the Ptr<Ipv4> and interface index you need to play with the interface.
+ *
+ * @see Ipv4AddressHelper
+ * @see Ipv4
*/
class Ipv4InterfaceContainer
{
@@ -27,7 +44,8 @@
void Add (Ipv4InterfaceContainer other);
/**
- * \returns the number of interfaces stored in this Ipv4InterfaceContainer.
+ * \returns the number of Ptr<Ipv4> and interface pairs stored in this
+ * Ipv4InterfaceContainer.
*/
uint32_t GetN (void) const;
@@ -43,16 +61,52 @@
*/
Ipv4Address GetAddress (uint32_t i, uint32_t j = 0) const;
+
void SetMetric (uint32_t i, uint16_t metric);
+
/**
+ * Manually add an entry to the container consisting of the individual parts
+ * of an entry std::pair.
+ *
+ * \param ipv4 pointer to Ipv4 object
+ * \param interface interface index of the Ipv4Interface to add to the container
+ *
+ * @see Ipv4InterfaceContainer
+ */
+ void Add (Ptr<Ipv4> ipv4, uint32_t interface);
+
+ /**
+ * Manually add an entry to the container consisting of a previously composed
+ * entry std::pair.
+ *
* \param ipv4 pointer to Ipv4 object
* \param interface interface index of the Ipv4Interface to add to the container
+ *
+ * @see Ipv4InterfaceContainer
*/
- void Add (Ptr<Ipv4> ipv4, uint32_t interface);
void Add (std::pair<Ptr<Ipv4>, uint32_t>);
+
+ /**
+ * Manually add an entry to the container consisting of the individual parts
+ * of an entry std::pair.
+ *
+ * \param ipv4Name std:string referring to the saved name of an Ipv4 Object that
+ * has been previously named using the Object Name Service.
+ * \param interface interface index of the Ipv4Interface to add to the container
+ *
+ * @see Ipv4InterfaceContainer
+ */
void Add (std::string ipv4Name, uint32_t interface);
- std::pair<Ptr<Ipv4>, uint32_t> Get (uint32_t) const;
+ /**
+ * Get the std::pair of an Ptr<Ipv4> and interface stored at the location
+ * specified by the index.
+ *
+ * \param i the index of the entery to retrieve.
+ *
+ * @see Ipv4InterfaceContainer
+ */
+ std::pair<Ptr<Ipv4>, uint32_t> Get (uint32_t i) const;
private:
--- a/src/helper/ipv4-list-routing-helper.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/ipv4-list-routing-helper.h Sun Oct 04 20:52:24 2009 -0700
@@ -35,10 +35,26 @@
class Ipv4ListRoutingHelper : public Ipv4RoutingHelper
{
public:
+ /*
+ * Construct an Ipv4ListRoutingHelper used to make installing routing
+ * protocols easier.
+ */
Ipv4ListRoutingHelper ();
+
+ /*
+ * Construct an Ipv4ListRoutingHelper used to make installing routing
+ * protocols easier.
+ */
virtual ~Ipv4ListRoutingHelper ();
+
+ /**
+ * \brief Construct an Ipv4ListRoutingHelper from another previously
+ * initialized instance (Copy Constructor).
+ */
Ipv4ListRoutingHelper (const Ipv4ListRoutingHelper &);
+
/**
+ * \internal
* \returns pointer to clone of this Ipv4ListRoutingHelper
*
* This method is mainly for internal use by the other helpers;
@@ -65,6 +81,11 @@
*/
virtual Ptr<Ipv4RoutingProtocol> Create (Ptr<Node> node) const;
private:
+ /**
+ * \internal
+ * \brief Assignment operator declared private and not implemented to disallow
+ * assignment and prevent the compiler from happily inserting its own.
+ */
Ipv4ListRoutingHelper &operator = (const Ipv4ListRoutingHelper &o);
std::list<std::pair<const Ipv4RoutingHelper *,int16_t> > m_list;
--- a/src/helper/ipv4-nix-vector-helper.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/ipv4-nix-vector-helper.h Sun Oct 04 20:52:24 2009 -0700
@@ -33,13 +33,23 @@
* ns3::InternetStackHelper::SetRoutingHelper
*
*/
-
class Ipv4NixVectorHelper : public Ipv4RoutingHelper
{
public:
+ /*
+ * Construct an Ipv4NixVectorHelper to make life easier while adding Nix-vector
+ * routing to nodes.
+ */
Ipv4NixVectorHelper ();
+
+ /**
+ * \brief Construct an Ipv4NixVectorHelper from another previously
+ * initialized instance (Copy Constructor).
+ */
Ipv4NixVectorHelper (const Ipv4NixVectorHelper &);
+
/**
+ * \internal
* \returns pointer to clone of this Ipv4NixVectorHelper
*
* This method is mainly for internal use by the other helpers;
@@ -56,6 +66,11 @@
virtual Ptr<Ipv4RoutingProtocol> Create (Ptr<Node> node) const;
private:
+ /**
+ * \internal
+ * \brief Assignment operator declared private and not implemented to disallow
+ * assignment and prevent the compiler from happily inserting its own.
+ */
Ipv4NixVectorHelper &operator = (const Ipv4NixVectorHelper &o);
ObjectFactory m_agentFactory;
--- a/src/helper/ipv4-routing-helper.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/ipv4-routing-helper.h Sun Oct 04 20:52:24 2009 -0700
@@ -39,6 +39,9 @@
class Ipv4RoutingHelper
{
public:
+ /*
+ * Destroy an instance of an Ipv4RoutingHelper
+ */
virtual ~Ipv4RoutingHelper ();
/**
--- a/src/helper/ipv4-static-routing-helper.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/ipv4-static-routing-helper.h Sun Oct 04 20:52:24 2009 -0700
@@ -40,9 +40,20 @@
class Ipv4StaticRoutingHelper : public Ipv4RoutingHelper
{
public:
+ /*
+ * Construct an Ipv4StaticRoutingHelper object, used to make configuration
+ * of static routing easier.
+ */
Ipv4StaticRoutingHelper ();
+
+ /**
+ * \brief Construct an Ipv4StaticRoutingHelper from another previously
+ * initialized instance (Copy Constructor).
+ */
Ipv4StaticRoutingHelper (const Ipv4StaticRoutingHelper &);
+
/**
+ * \internal
* \returns pointer to clone of this Ipv4StaticRoutingHelper
*
* This method is mainly for internal use by the other helpers;
@@ -58,14 +69,42 @@
*/
virtual Ptr<Ipv4RoutingProtocol> Create (Ptr<Node> node) const;
+ /**
+ * Try and find the static routing protocol as either the main routing
+ * protocol or in the list of routing protocols associated with the
+ * Ipv4 provided.
+ *
+ * \param ipv4 the Ptr<Ipv4> to search for the static routing protocol
+ */
Ptr<Ipv4StaticRouting> GetStaticRouting (Ptr<Ipv4> ipv4) const;
+ /**
+ * \brief Add a multicast route to a node and net device using explicit
+ * Ptr<Node> and Ptr<NetDevice>
+ */
void AddMulticastRoute (Ptr<Node> n, Ipv4Address source, Ipv4Address group,
Ptr<NetDevice> input, NetDeviceContainer output);
+
+ /**
+ * \brief Add a multicast route to a node and device using a name string
+ * previously associated to the node using the Object Name Service and a
+ * Ptr<NetDevice>
+ */
void AddMulticastRoute (std::string n, Ipv4Address source, Ipv4Address group,
Ptr<NetDevice> input, NetDeviceContainer output);
+
+ /**
+ * \brief Add a multicast route to a node and device using a Ptr<Node> and a
+ * name string previously associated to the device using the Object Name Service.
+ */
void AddMulticastRoute (Ptr<Node> n, Ipv4Address source, Ipv4Address group,
std::string inputName, NetDeviceContainer output);
+
+ /**
+ * \brief Add a multicast route to a node and device using name strings
+ * previously associated to both the node and device using the Object Name
+ * Service.
+ */
void AddMulticastRoute (std::string nName, Ipv4Address source, Ipv4Address group,
std::string inputName, NetDeviceContainer output);
@@ -79,10 +118,49 @@
* \param nd device of the node to add default route
*/
void SetDefaultMulticastRoute (Ptr<Node> n, Ptr<NetDevice> nd);
+
+ /**
+ * \brief Add a default route to the static routing protocol to forward
+ * packets out a particular interface
+ *
+ * Functionally equivalent to:
+ * route add 224.0.0.0 netmask 240.0.0.0 dev nd
+ * \param n node
+ * \param ndName string with name previously associated to device using the
+ * Object Name Service
+ */
void SetDefaultMulticastRoute (Ptr<Node> n, std::string ndName);
+
+ /**
+ * \brief Add a default route to the static routing protocol to forward
+ * packets out a particular interface
+ *
+ * Functionally equivalent to:
+ * route add 224.0.0.0 netmask 240.0.0.0 dev nd
+ * \param nName string with name previously associated to node using the
+ * Object Name Service
+ * \param nd device of the node to add default route
+ */
void SetDefaultMulticastRoute (std::string nName, Ptr<NetDevice> nd);
+
+ /**
+ * \brief Add a default route to the static routing protocol to forward
+ * packets out a particular interface
+ *
+ * Functionally equivalent to:
+ * route add 224.0.0.0 netmask 240.0.0.0 dev nd
+ * \param nName string with name previously associated to node using the
+ * Object Name Service
+ * \param ndName string with name previously associated to device using the
+ * Object Name Service
+ */
void SetDefaultMulticastRoute (std::string nName, std::string ndName);
private:
+ /**
+ * \internal
+ * \brief Assignment operator declared private and not implemented to disallow
+ * assignment and prevent the compiler from happily inserting its own.
+ */
Ipv4StaticRoutingHelper &operator = (const Ipv4StaticRoutingHelper &o);
};
--- a/src/helper/ipv6-address-helper.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/ipv6-address-helper.h Sun Oct 04 20:52:24 2009 -0700
@@ -81,11 +81,13 @@
private:
/**
+ * \internal
* \brief The IPv6 network.
*/
Ipv6Address m_network;
/**
+ * \internal
* \brief IPv6 The prefix (mask).
*/
Ipv6Prefix m_prefix;
--- a/src/helper/ipv6-interface-container.h Sat Oct 03 16:21:58 2009 -0700
+++ b/src/helper/ipv6-interface-container.h Sun Oct 04 20:52:24 2009 -0700
@@ -102,6 +102,7 @@
typedef std::vector<std::pair<Ptr<Ipv6>, uint32_t> > InterfaceVector;
/**
+ * \internal
* \brief List of IPv6 stack and interfaces index.
*/
InterfaceVector m_interfaces;
--- a/src/wscript Sat Oct 03 16:21:58 2009 -0700
+++ b/src/wscript Sun Oct 04 20:52:24 2009 -0700
@@ -76,7 +76,7 @@
if Options.options.enable_rpath:
conf.env.append_value('RPATH', '-Wl,-rpath=%s' % (os.path.join(blddir),))
- ## Used to link the 'run-tests' program with all of ns-3 code
+ ## Used to link the 'test-runner' program with all of ns-3 code
conf.env['NS3_MODULES'] = ['ns3-' + module.split('/')[-1] for module in all_modules]
--- a/wscript Sat Oct 03 16:21:58 2009 -0700
+++ b/wscript Sun Oct 04 20:52:24 2009 -0700
@@ -177,6 +177,7 @@
help=("Enable regression testing; only used for the 'check' target"),
default=False, dest='regression', action="store_true")
opt.add_option('--check',
+ help=('DEPRECATED (run ./test.py)'),
help=("Enable unit testing"),
default=False, dest='check', action="store_true")
opt.add_option('--regression-generate',
@@ -566,11 +567,11 @@
" (--with-regression-traces configure option)")
regression.run_regression(bld, regression_traces)
- if Options.options.check:
- Options.options.compile_targets += ',run-tests'
- if env['ENABLE_PYTHON_BINDINGS']:
- Options.options.compile_targets += ',ns3module,pybindgen-command'
- _run_check(bld)
+# if Options.options.check:
+# Options.options.compile_targets += ',run-tests'
+# if env['ENABLE_PYTHON_BINDINGS']:
+# Options.options.compile_targets += ',ns3module,pybindgen-command'
+# _run_check(bld)
if Options.options.doxygen_no_build:
doxygen()
@@ -597,7 +598,10 @@
raise SystemExit(0)
if Options.options.shell:
- raise Utils.WafError("Run `./waf shell' now, instead of `./waf shell'")
+ raise Utils.WafError("Please run `./waf shell' now, instead of `./waf --shell'")
+
+ if Options.options.check:
+ raise Utils.WafError("Please run `./test.py' now, instead of `./waf --check'")
if Options.options.doxygen:
doxygen()
@@ -611,9 +615,10 @@
check_context = Build.BuildContext
+
def check(bld):
- """run the NS-3 unit tests (deprecated in favour of --check option)"""
- raise Utils.WafError("Please run `./waf --check' instead.")
+ """run the NS-3 unit tests (deprecated in favour of test.py)"""
+ raise Utils.WafError("Please run `./test.py' now, instead of './waf check'")
class print_introspected_doxygen_task(Task.TaskBase):
@@ -666,112 +671,110 @@
wutils.run_argv([self.bld.env['PYTHON'], os.path.join("..", "utils", "python-unit-tests.py")],
self.bld.env, proc_env, force_no_valgrind=True)
-
-class run_a_unit_test_task(Task.TaskBase):
- after = 'cc cxx cc_link cxx_link'
- color = 'BLUE'
-
- def __init__(self, bld, name_of_test):
- self.bld = bld
- super(run_a_unit_test_task, self).__init__(generator=self)
- self.name_of_test = name_of_test
- try:
- program_obj = wutils.find_program("run-tests", self.bld.env)
- except ValueError, ex:
- raise Utils.WafError(str(ex))
- program_node = program_obj.path.find_or_declare(ccroot.get_target_name(program_obj))
- self.program_path = program_node.abspath(self.bld.env)
-
- def __str__(self):
- return 'run-unit-test(%s)\n' % self.name_of_test
-
- def runnable_status(self):
- return Task.RUN_ME
-
- def run(self):
- #print repr([self.program_path, self.name_of_test])
- try:
- self.retval = wutils.run_argv([self.program_path, self.name_of_test], self.bld.env)
- except Utils.WafError:
- self.retval = 1
- #print "running test %s: exit with %i" % (self.name_of_test, retval)
- return 0
-
-class get_list_of_unit_tests_task(Task.TaskBase):
- after = 'cc cxx cc_link cxx_link'
- color = 'BLUE'
-
- def __init__(self, bld):
- self.bld = bld
- super(get_list_of_unit_tests_task, self).__init__(generator=self)
- self.tests = []
-
- def __str__(self):
- return 'get-unit-tests-list\n'
-
- def runnable_status(self):
- return Task.RUN_ME
-
- def run(self):
- try:
- program_obj = wutils.find_program("run-tests", self.bld.env)
- except ValueError, ex:
- raise Utils.WafError(str(ex))
- program_node = program_obj.path.find_or_declare(ccroot.get_target_name(program_obj))
- program_path = program_node.abspath(self.bld.env)
- proc = subprocess.Popen([program_path, "--ListTests"], stdout=subprocess.PIPE,
- env=wutils.get_proc_env())
- self.tests = [l.rstrip() for l in proc.stdout.readlines()]
- retval = proc.wait()
- if retval:
- return retval
- test_tasks = []
- for name_of_test in self.tests:
- test_tasks.append(run_a_unit_test_task(self.bld, name_of_test))
- collector = collect_unit_test_results_task(self.bld, list(test_tasks))
- collector.run_after = list(test_tasks)
- self.more_tasks = [collector] + test_tasks
-
-
-class collect_unit_test_results_task(Task.TaskBase):
- after = 'run_a_unit_test_task'
- color = 'BLUE'
-
- def __init__(self, bld, test_tasks):
- self.bld = bld
- super(collect_unit_test_results_task, self).__init__(generator=self)
- self.test_tasks = test_tasks
-
- def __str__(self):
- return 'collect-unit-tests-results\n'
-
- def runnable_status(self):
- for t in self.run_after:
- if not t.hasrun:
- return Task.ASK_LATER
- return Task.RUN_ME
-
- def run(self):
- failed_tasks = []
- for task in self.test_tasks:
- if task.retval:
- failed_tasks.append(task)
- if failed_tasks:
- print "C++ UNIT TESTS: %i tests passed, %i failed (%s)." % \
- (len(self.test_tasks) - len(failed_tasks), len(failed_tasks),
- ', '.join(t.name_of_test for t in failed_tasks))
- return 1
- else:
- print "C++ UNIT TESTS: all %i tests passed." % (len(self.test_tasks),)
- return 0
-
-
-def _run_check(bld):
- task = get_list_of_unit_tests_task(bld)
- print_introspected_doxygen_task(bld)
- if bld.env['ENABLE_PYTHON_BINDINGS']:
- run_python_unit_tests_task(bld)
-
+#class run_a_unit_test_task(Task.TaskBase):
+# after = 'cc cxx cc_link cxx_link'
+# color = 'BLUE'
+#
+# def __init__(self, bld, name_of_test):
+# self.bld = bld
+# super(run_a_unit_test_task, self).__init__(generator=self)
+# self.name_of_test = name_of_test
+# try:
+# program_obj = wutils.find_program("run-tests", self.bld.env)
+# except ValueError, ex:
+# raise Utils.WafError(str(ex))
+# program_node = program_obj.path.find_or_declare(ccroot.get_target_name(program_obj))
+# self.program_path = program_node.abspath(self.bld.env)
+#
+# def __str__(self):
+# return 'run-unit-test(%s)\n' % self.name_of_test
+#
+# def runnable_status(self):
+# return Task.RUN_ME
+#
+# def run(self):
+# #print repr([self.program_path, self.name_of_test])
+# try:
+# self.retval = wutils.run_argv([self.program_path, self.name_of_test], self.bld.env)
+# except Utils.WafError:
+# self.retval = 1
+# #print "running test %s: exit with %i" % (self.name_of_test, retval)
+# return 0
+#
+#class get_list_of_unit_tests_task(Task.TaskBase):
+# after = 'cc cxx cc_link cxx_link'
+# color = 'BLUE'
+#
+# def __init__(self, bld):
+# self.bld = bld
+# super(get_list_of_unit_tests_task, self).__init__(generator=self)
+# self.tests = []
+#
+# def __str__(self):
+# return 'get-unit-tests-list\n'
+#
+# def runnable_status(self):
+# return Task.RUN_ME
+#
+# def run(self):
+# try:
+# program_obj = wutils.find_program("run-tests", self.bld.env)
+# except ValueError, ex:
+# raise Utils.WafError(str(ex))
+# program_node = program_obj.path.find_or_declare(ccroot.get_target_name(program_obj))
+# program_path = program_node.abspath(self.bld.env)
+# proc = subprocess.Popen([program_path, "--ListTests"], stdout=subprocess.PIPE,
+# env=wutils.get_proc_env())
+# self.tests = [l.rstrip() for l in proc.stdout.readlines()]
+# retval = proc.wait()
+# if retval:
+# return retval
+# test_tasks = []
+# for name_of_test in self.tests:
+# test_tasks.append(run_a_unit_test_task(self.bld, name_of_test))
+# collector = collect_unit_test_results_task(self.bld, list(test_tasks))
+# collector.run_after = list(test_tasks)
+# self.more_tasks = [collector] + test_tasks
+#
+#
+#class collect_unit_test_results_task(Task.TaskBase):
+# after = 'run_a_unit_test_task'
+# color = 'BLUE'
+#
+# def __init__(self, bld, test_tasks):
+# self.bld = bld
+# super(collect_unit_test_results_task, self).__init__(generator=self)
+# self.test_tasks = test_tasks
+#
+# def __str__(self):
+# return 'collect-unit-tests-results\n'
+#
+# def runnable_status(self):
+# for t in self.run_after:
+# if not t.hasrun:
+# return Task.ASK_LATER
+# return Task.RUN_ME
+#
+# def run(self):
+# failed_tasks = []
+# for task in self.test_tasks:
+# if task.retval:
+# failed_tasks.append(task)
+# if failed_tasks:
+# print "C++ UNIT TESTS: %i tests passed, %i failed (%s)." % \
+# (len(self.test_tasks) - len(failed_tasks), len(failed_tasks),
+# ', '.join(t.name_of_test for t in failed_tasks))
+# return 1
+# else:
+# print "C++ UNIT TESTS: all %i tests passed." % (len(self.test_tasks),)
+# return 0
+#
+#
+#def _run_check(bld):
+# task = get_list_of_unit_tests_task(bld)
+# print_introspected_doxygen_task(bld)
+# if bld.env['ENABLE_PYTHON_BINDINGS']:
+# run_python_unit_tests_task(bld)
def check_shell(bld):
if 'NS3_MODULE_PATH' not in os.environ: