Doxygen and wscript messages point to test.py
This commit is contained in:
@@ -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 @@ public:
|
||||
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:
|
||||
|
||||
@@ -88,7 +88,7 @@ public:
|
||||
|
||||
|
||||
/**
|
||||
* 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 @@ public:
|
||||
*/
|
||||
void TxFinalDataFailedTrace (std::string context, Mac48Address address);
|
||||
|
||||
|
||||
/**
|
||||
* Function to be called when the PHY layer of the considered
|
||||
* device receives a frame
|
||||
@@ -195,9 +194,15 @@ public:
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
void WriteStats ();
|
||||
void ResetCounters ();
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
void ResetCounters ();
|
||||
|
||||
uint32_t m_txCount;
|
||||
uint32_t m_rxCount;
|
||||
@@ -212,7 +217,6 @@ private:
|
||||
|
||||
Time m_interval;
|
||||
|
||||
|
||||
}; // class AthstatsWifiTraceSink
|
||||
|
||||
|
||||
|
||||
@@ -36,13 +36,16 @@ class AttributeValue;
|
||||
class BridgeHelper
|
||||
{
|
||||
public:
|
||||
/*
|
||||
* Construct a BridgeHelper
|
||||
*/
|
||||
BridgeHelper ();
|
||||
/**
|
||||
* \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
|
||||
*
|
||||
* \param n1 the name of the attribute to set
|
||||
* \param v1 the value of the attribute to set
|
||||
*/
|
||||
void SetDeviceAttribute (std::string n1, const AttributeValue &v1);
|
||||
/**
|
||||
|
||||
@@ -40,6 +40,9 @@ class AsciiWriter;
|
||||
class CsmaHelper
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Construct a CsmaHelper.
|
||||
*/
|
||||
CsmaHelper ();
|
||||
|
||||
/**
|
||||
@@ -349,13 +352,30 @@ public:
|
||||
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;
|
||||
|
||||
@@ -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 ();
|
||||
|
||||
///\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;
|
||||
/**
|
||||
* Destroy a Dot11sStack() installer helper.
|
||||
*/
|
||||
~Dot11sStack ();
|
||||
|
||||
/**
|
||||
* Break any reference cycles in the installer helper. Required for ns-3
|
||||
* Object support.
|
||||
*/
|
||||
void DoDispose ();
|
||||
|
||||
/**
|
||||
* \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
|
||||
|
||||
|
||||
@@ -39,6 +39,10 @@ class AsciiWriter;
|
||||
class EmuHelper
|
||||
{
|
||||
public:
|
||||
/*
|
||||
* Construct an EmuHelper() which is used to make installing and configuring
|
||||
* Emulated Net Devices easier.
|
||||
*/
|
||||
EmuHelper ();
|
||||
|
||||
/**
|
||||
@@ -206,12 +210,34 @@ public:
|
||||
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;
|
||||
|
||||
@@ -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 ();
|
||||
|
||||
/// 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);
|
||||
/**
|
||||
* Construct a FlameStack helper class.
|
||||
*/
|
||||
FlameStack ();
|
||||
|
||||
/**
|
||||
* Destroy a FlameStack helper class.
|
||||
*/
|
||||
~FlameStack ();
|
||||
|
||||
/**
|
||||
* \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
|
||||
|
||||
} //namespace ns3
|
||||
|
||||
#endif // FLAME_STACK_INSTALLER_H
|
||||
|
||||
|
||||
@@ -35,15 +35,18 @@ class Ipv4FlowClassifier;
|
||||
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 ();
|
||||
|
||||
@@ -53,6 +53,10 @@ public:
|
||||
* such as ns3::OlsrHelper
|
||||
*/
|
||||
InternetStackHelper(void);
|
||||
|
||||
/**
|
||||
* Destroy the InternetStackHelper
|
||||
*/
|
||||
virtual ~InternetStackHelper(void);
|
||||
InternetStackHelper (const InternetStackHelper &);
|
||||
InternetStackHelper &operator = (const InternetStackHelper &o);
|
||||
@@ -195,30 +199,67 @@ private:
|
||||
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;
|
||||
|
||||
/**
|
||||
|
||||
@@ -176,6 +176,9 @@ public:
|
||||
Ipv4InterfaceContainer Assign (const NetDeviceContainer &c);
|
||||
|
||||
private:
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
uint32_t NumAddressBits (uint32_t maskbits) const;
|
||||
|
||||
uint32_t m_network;
|
||||
|
||||
@@ -31,9 +31,20 @@ namespace ns3 {
|
||||
class Ipv4GlobalRoutingHelper : public Ipv4RoutingHelper
|
||||
{
|
||||
public:
|
||||
Ipv4GlobalRoutingHelper ();
|
||||
Ipv4GlobalRoutingHelper (const Ipv4GlobalRoutingHelper &);
|
||||
/**
|
||||
* \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 @@ public:
|
||||
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 @@ public:
|
||||
*/
|
||||
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 @@ public:
|
||||
*/
|
||||
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);
|
||||
};
|
||||
|
||||
|
||||
@@ -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 @@ public:
|
||||
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 @@ public:
|
||||
*/
|
||||
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 (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:
|
||||
|
||||
|
||||
@@ -35,10 +35,26 @@ namespace ns3 {
|
||||
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 ();
|
||||
Ipv4ListRoutingHelper (const 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 @@ public:
|
||||
*/
|
||||
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;
|
||||
|
||||
@@ -33,13 +33,23 @@ namespace ns3 {
|
||||
* ns3::InternetStackHelper::SetRoutingHelper
|
||||
*
|
||||
*/
|
||||
|
||||
class Ipv4NixVectorHelper : public Ipv4RoutingHelper
|
||||
{
|
||||
public:
|
||||
/*
|
||||
* Construct an Ipv4NixVectorHelper to make life easier while adding Nix-vector
|
||||
* routing to nodes.
|
||||
*/
|
||||
Ipv4NixVectorHelper ();
|
||||
Ipv4NixVectorHelper (const 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 @@ public:
|
||||
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;
|
||||
|
||||
@@ -39,6 +39,9 @@ class Node;
|
||||
class Ipv4RoutingHelper
|
||||
{
|
||||
public:
|
||||
/*
|
||||
* Destroy an instance of an Ipv4RoutingHelper
|
||||
*/
|
||||
virtual ~Ipv4RoutingHelper ();
|
||||
|
||||
/**
|
||||
|
||||
@@ -40,9 +40,20 @@ namespace ns3 {
|
||||
class Ipv4StaticRoutingHelper : public Ipv4RoutingHelper
|
||||
{
|
||||
public:
|
||||
/*
|
||||
* Construct an Ipv4StaticRoutingHelper object, used to make configuration
|
||||
* of static routing easier.
|
||||
*/
|
||||
Ipv4StaticRoutingHelper ();
|
||||
Ipv4StaticRoutingHelper (const 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 @@ public:
|
||||
*/
|
||||
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 @@ public:
|
||||
* \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);
|
||||
|
||||
};
|
||||
|
||||
@@ -81,11 +81,13 @@ class Ipv6AddressHelper
|
||||
|
||||
private:
|
||||
/**
|
||||
* \internal
|
||||
* \brief The IPv6 network.
|
||||
*/
|
||||
Ipv6Address m_network;
|
||||
|
||||
/**
|
||||
* \internal
|
||||
* \brief IPv6 The prefix (mask).
|
||||
*/
|
||||
Ipv6Prefix m_prefix;
|
||||
|
||||
@@ -102,6 +102,7 @@ class Ipv6InterfaceContainer
|
||||
typedef std::vector<std::pair<Ptr<Ipv6>, uint32_t> > InterfaceVector;
|
||||
|
||||
/**
|
||||
* \internal
|
||||
* \brief List of IPv6 stack and interfaces index.
|
||||
*/
|
||||
InterfaceVector m_interfaces;
|
||||
|
||||
@@ -76,7 +76,7 @@ def configure(conf):
|
||||
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]
|
||||
|
||||
|
||||
|
||||
231
wscript
231
wscript
@@ -177,6 +177,7 @@ def set_options(opt):
|
||||
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 @@ def build(bld):
|
||||
" (--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 @@ def shutdown(ctx):
|
||||
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 @@ def shutdown(ctx):
|
||||
|
||||
|
||||
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 @@ class run_python_unit_tests_task(Task.TaskBase):
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user