merge tracing overhaul in trunk

This commit is contained in:
Mathieu Lacage
2007-09-11 12:11:00 +02:00
90 changed files with 5536 additions and 2237 deletions

View File

@@ -23,6 +23,7 @@
#include "ns3/assert.h"
#include "ns3/object.h"
#include "ns3/debug.h"
#include "ns3/trace-resolver.h"
#include "channel.h"
@@ -183,12 +184,6 @@ NetDevice::Send(const Packet& p, const Address& dest, uint16_t protocolNumber)
}
}
TraceResolver *
NetDevice::CreateTraceResolver (TraceContext const &context)
{
return DoCreateTraceResolver (context);
}
Ptr<Channel>
NetDevice::GetChannel (void) const
{

View File

@@ -62,14 +62,6 @@ public:
static const InterfaceId iid;
virtual ~NetDevice();
/**
* \param context the trace context to use to construct the
* TraceResolver to return
* \returns a TraceResolver which can resolve all traces
* performed in this object. The caller must
* delete the returned object.
*/
TraceResolver *CreateTraceResolver (TraceContext const &context);
/**
* \return the channel this NetDevice is connected to. The value
@@ -282,15 +274,6 @@ public:
* Subclasses must implement this method.
*/
virtual bool DoNeedsArp (void) const = 0;
/**
* \param context the trace context to associated to the
* trace resolver.
* \returns a trace resolver associated to the input context.
* the caller takes ownership of the pointer returned.
*
* Subclasses must implement this method.
*/
virtual TraceResolver *DoCreateTraceResolver (TraceContext const &context) = 0;
/**
* \returns the channel associated to this NetDevice.
*

View File

@@ -20,24 +20,12 @@
* Mathieu Lacage <mathieu.lacage@sophia.inria.fr>,
*/
#include "ns3/array-trace-resolver.h"
#include "ns3/trace-root.h"
#include "ns3/composite-trace-resolver.h"
#include "ns3/simulator.h"
#include "ns3/simulation-singleton.h"
#include "node-list.h"
#include "node.h"
namespace {
static class Initialization
{
public:
Initialization ()
{
ns3::TraceRoot::Register ("nodes", ns3::MakeCallback (&ns3::NodeList::CreateTraceResolver));
}
} g_initialization;
}
namespace ns3 {
NodeListIndex::NodeListIndex ()
@@ -62,6 +50,11 @@ NodeListIndex::Get (void) const
{
return m_index;
}
std::string
NodeListIndex::GetTypeName (void) const
{
return "ns3::NodeListIndex";
}
/**
@@ -74,9 +67,9 @@ public:
~NodeListPriv ();
uint32_t Add (Ptr<Node> node);
NodeList::Iterator Begin (void);
NodeList::Iterator End (void);
TraceResolver *CreateTraceResolver (TraceContext const &context);
NodeList::Iterator Begin (void) const;
NodeList::Iterator End (void) const;
Ptr<TraceResolver> GetTraceResolver (void) const;
Ptr<Node> GetNode (uint32_t n);
uint32_t GetNNodes (void);
@@ -108,12 +101,12 @@ NodeListPriv::Add (Ptr<Node> node)
}
NodeList::Iterator
NodeListPriv::Begin (void)
NodeListPriv::Begin (void) const
{
return m_nodes.begin ();
}
NodeList::Iterator
NodeListPriv::End (void)
NodeListPriv::End (void) const
{
return m_nodes.end ();
}
@@ -130,14 +123,11 @@ NodeListPriv::GetNode (uint32_t n)
}
TraceResolver *
NodeListPriv::CreateTraceResolver (TraceContext const &context)
Ptr<TraceResolver>
NodeListPriv::GetTraceResolver (void) const
{
ArrayTraceResolver<Ptr<Node>, NodeListIndex> *resolver =
new ArrayTraceResolver<Ptr<Node>, NodeListIndex>
(context,
MakeCallback (&NodeListPriv::GetNNodes, this),
MakeCallback (&NodeListPriv::GetNode, this));
Ptr<CompositeTraceResolver> resolver = Create<CompositeTraceResolver> ();
resolver->AddArray ("nodes", Begin (), End (), NodeListIndex ());
return resolver;
}
@@ -165,17 +155,30 @@ NodeList::End (void)
{
return SimulationSingleton<NodeListPriv>::Get ()->End ();
}
TraceResolver *
NodeList::CreateTraceResolver (TraceContext const &context)
{
return SimulationSingleton<NodeListPriv>::Get ()->CreateTraceResolver (context);
}
Ptr<Node>
NodeList::GetNode (uint32_t n)
{
return SimulationSingleton<NodeListPriv>::Get ()->GetNode (n);
}
void
NodeList::Connect (std::string name, const CallbackBase &cb)
{
SimulationSingleton<NodeListPriv>::Get ()->GetTraceResolver ()->Connect (name, cb, TraceContext ());
}
void
NodeList::Disconnect (std::string name, const CallbackBase &cb)
{
SimulationSingleton<NodeListPriv>::Get ()->GetTraceResolver ()->Disconnect (name, cb);
}
void
NodeList::TraceAll (std::ostream &os)
{
SimulationSingleton<NodeListPriv>::Get ()->GetTraceResolver ()->TraceAll (os, TraceContext ());
}
Ptr<TraceResolver>
NodeList::GetTraceResolver (void)
{
return SimulationSingleton<NodeListPriv>::Get ()->GetTraceResolver ();
}
}//namespace ns3

View File

@@ -29,9 +29,12 @@
namespace ns3 {
class Node;
class CallbackBase;
class TraceResolver;
class TraceContext;
/**
* \brief hold in a TraceContext the index of a node within a NodeList.
*/
class NodeListIndex : public TraceContextElement
{
public:
@@ -39,7 +42,11 @@ public:
NodeListIndex (uint32_t index);
void Print (std::ostream &os);
static uint16_t GetUid (void);
/**
* \returns the index of the node within the NodeList
*/
uint32_t Get (void) const;
std::string GetTypeName (void) const;
private:
uint32_t m_index;
};
@@ -53,7 +60,7 @@ private:
class NodeList
{
public:
typedef std::vector< Ptr<Node> >::iterator Iterator;
typedef std::vector< Ptr<Node> >::const_iterator Iterator;
/**
* \param node node to add
@@ -73,19 +80,30 @@ public:
* list.
*/
static Iterator End (void);
/**
* \param context trace context to use for trace resolver
* to create.
* \returns the requested trace resolver. The caller
* takes ownership of the returned pointer.
*/
static TraceResolver *CreateTraceResolver (TraceContext const &context);
/**
* \param n index of requested node.
* \returns the Node associated to index n.
*/
static Ptr<Node> GetNode (uint32_t n);
/**
* \param name namespace regexp to match
* \param cb callback to connect
*
* Connect input callback to all trace sources which match
* the input namespace regexp.
*/
static void Connect (std::string name, const CallbackBase &cb);
/**
* \param name namespace regexp to match
* \param cb callback to connect
*
* Disconnect input callback from all trace sources which match
* the input namespace regexp.
*/
static void Disconnect (std::string name, const CallbackBase &cb);
static void TraceAll (std::ostream &os);
static Ptr<TraceResolver> GetTraceResolver (void);
private:
};
}//namespace ns3

View File

@@ -25,7 +25,6 @@
#include "packet-socket-factory.h"
#include "ns3/simulator.h"
#include "ns3/composite-trace-resolver.h"
#include "ns3/array-trace-resolver.h"
namespace ns3{
@@ -53,6 +52,11 @@ NodeNetDeviceIndex::GetUid (void)
static uint16_t uid = AllocateUid<NodeNetDeviceIndex> ("NodeNetDeviceIndex");
return uid;
}
std::string
NodeNetDeviceIndex::GetTypeName (void) const
{
return "ns3::NodeNetDeviceIndex";
}
@@ -82,11 +86,12 @@ Node::Construct (void)
Node::~Node ()
{}
TraceResolver *
Node::CreateTraceResolver (TraceContext const &context)
Ptr<TraceResolver>
Node::GetTraceResolver (void) const
{
CompositeTraceResolver *resolver = new CompositeTraceResolver (context);
DoFillTraceResolver (*resolver);
Ptr<CompositeTraceResolver> resolver = Create<CompositeTraceResolver> ();
resolver->AddArray ("devices", m_devices.begin (), m_devices.end (), NodeNetDeviceIndex ());
resolver->SetParentResolver (Object::GetTraceResolver ());
return resolver;
}
@@ -141,25 +146,6 @@ Node::GetNApplications (void) const
return m_applications.size ();
}
TraceResolver *
Node::CreateDevicesTraceResolver (const TraceContext &context)
{
ArrayTraceResolver<Ptr<NetDevice>,NodeNetDeviceIndex> *resolver =
new ArrayTraceResolver<Ptr<NetDevice>,NodeNetDeviceIndex>
(context,
MakeCallback (&Node::GetNDevices, this),
MakeCallback (&Node::GetDevice, this));
return resolver;
}
void
Node::DoFillTraceResolver (CompositeTraceResolver &resolver)
{
resolver.Add ("devices",
MakeCallback (&Node::CreateDevicesTraceResolver, this));
}
void
Node::DoDispose()
{

View File

@@ -37,13 +37,20 @@ class Packet;
class Address;
class CompositeTraceResolver;
/**
* \brief hold in a TraceContext the index of a NetDevice within a Node
*/
class NodeNetDeviceIndex : public TraceContextElement
{
public:
NodeNetDeviceIndex ();
NodeNetDeviceIndex (uint32_t index);
/**
* \returns the index of the NetDevice within its container Node.
*/
uint32_t Get (void) const;
void Print (std::ostream &os) const;
std::string GetTypeName (void) const;
static uint16_t GetUid (void);
private:
uint32_t m_index;
@@ -84,17 +91,6 @@ public:
virtual ~Node();
/**
* \param context the trace context for the TraceResolver to create
* \returns a newly-created TraceResolver. The caller takes
* ownership of the returned pointer.
*
* Request the Node to create a trace resolver. This method
* could be used directly by a user who needs access to very low-level
* trace configuration.
*/
TraceResolver *CreateTraceResolver (TraceContext const &context);
/**
* \returns the unique id of this node.
*
@@ -183,23 +179,15 @@ public:
void UnregisterProtocolHandler (ProtocolHandler handler);
protected:
virtual Ptr<TraceResolver> GetTraceResolver (void) const;
/**
* The dispose method. Subclasses must override this method
* and must chain up to it by calling Node::DoDispose at the
* end of their own DoDispose method.
*/
virtual void DoDispose (void);
/**
* \param resolver the resolver to store trace sources in.
*
* If a subclass wants to add new traces to a Node, it needs
* to override this method and record the new trace sources
* in the input resolver. Subclasses also _must_ chain up to
* their parent's DoFillTraceResolver method prior
* to recording they own trace sources.
*/
virtual void DoFillTraceResolver (CompositeTraceResolver &resolver);
private:
/**
* \param device the device added to this Node.
*
@@ -213,7 +201,6 @@ private:
bool ReceiveFromDevice (Ptr<NetDevice> device, const Packet &packet,
uint16_t protocol, const Address &from);
void Construct (void);
TraceResolver *CreateDevicesTraceResolver (const TraceContext &context);
struct ProtocolHandlerEntry {
ProtocolHandler handler;

View File

@@ -32,6 +32,11 @@ static ClassIdDefaultValue g_classIdDefaultValue ("Queue", "Packet Queue",
Queue::iid, "DropTailQueue");
std::string
QueueTraceType::GetTypeName (void) const
{
return "ns3::QueueTraceType";
}
uint16_t
QueueTraceType::GetUid (void)
{
@@ -94,13 +99,23 @@ Queue::~Queue()
NS_DEBUG("Queue::~Queue ()");
}
TraceResolver *
Queue::CreateTraceResolver (TraceContext const &context)
Ptr<TraceResolver>
Queue::GetTraceResolver (void) const
{
CompositeTraceResolver *resolver = new CompositeTraceResolver (context);
resolver->Add ("enqueue", m_traceEnqueue, QueueTraceType (QueueTraceType::ENQUEUE));
resolver->Add ("dequeue", m_traceDequeue, QueueTraceType (QueueTraceType::DEQUEUE));
resolver->Add ("drop", m_traceDrop, QueueTraceType (QueueTraceType::DROP));
Ptr<CompositeTraceResolver> resolver = Create<CompositeTraceResolver> ();
resolver->AddSource ("enqueue",
TraceDoc ("store packet in queue",
"const Packet &", "packet queued"),
m_traceEnqueue, QueueTraceType (QueueTraceType::ENQUEUE));
resolver->AddSource ("dequeue",
TraceDoc ("remove packet from queue",
"const Packet &", "packet dequeued"),
m_traceDequeue, QueueTraceType (QueueTraceType::DEQUEUE));
resolver->AddSource ("drop",
TraceDoc ("drop packet from queue",
"const Packet &", "packet dropped"),
m_traceDrop, QueueTraceType (QueueTraceType::DROP));
resolver->SetParentResolver (Object::GetTraceResolver ());
return resolver;
}

View File

@@ -37,6 +37,9 @@ namespace ns3 {
class StringEnumDefaultValue;
/**
* \brief hold in a TraceContext the type of a trace source
*/
class QueueTraceType : public TraceContextElement
{
public:
@@ -48,10 +51,20 @@ public:
static uint16_t GetUid (void);
QueueTraceType ();
QueueTraceType (enum Type type);
/**
* \returns true if this is an enqueue event, false otherwise.
*/
bool IsEnqueue (void) const;
/**
* \returns true if this is a dequeue event, false otherwise.
*/
bool IsDequeue (void) const;
/**
* \returns true if this is a drop event, false otherwise.
*/
bool IsDrop (void) const;
void Print (std::ostream &os) const;
std::string GetTypeName (void) const;
private:
enum Type m_type;
};
@@ -69,8 +82,6 @@ public:
Queue ();
virtual ~Queue ();
TraceResolver *CreateTraceResolver (TraceContext const &context);
/**
* \return true if the queue is empty; false otherwise
@@ -167,6 +178,7 @@ private:
virtual bool DoPeek (Packet &p) = 0;
protected:
Ptr<TraceResolver> GetTraceResolver (void) const;
// called by subclasses to notify parent of packet drops.
void Drop (const Packet& p);