From dd3ca3aa63ba90e93d31fb3fa95bbb8e4be75f6e Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Wed, 1 Aug 2007 12:33:44 +0200 Subject: [PATCH] replace Node::DoCreateTraceResolver with Node::DoFillTraceResolver --- src/common/array-trace-resolver.h | 12 +++++----- src/internet-node/ascii-trace.cc | 4 ++-- src/internet-node/internet-node.cc | 14 +++++------- src/internet-node/internet-node.h | 2 +- src/internet-node/ipv4-l3-protocol.cc | 4 ++-- src/node/node-list.cc | 12 +++------- src/node/node.cc | 32 ++++++++++++++++++++------- src/node/node.h | 18 ++++++++++----- 8 files changed, 57 insertions(+), 41 deletions(-) diff --git a/src/common/array-trace-resolver.h b/src/common/array-trace-resolver.h index 572df6e57..2dc3409d6 100644 --- a/src/common/array-trace-resolver.h +++ b/src/common/array-trace-resolver.h @@ -81,11 +81,11 @@ public: */ ArrayTraceResolver (TraceContext const &context, Callback getSize, - Callback get); + Callback get); private: virtual TraceResolverList DoLookup (std::string id) const; Callback m_getSize; - Callback m_get; + Callback m_get; }; }//namespace ns3 @@ -108,7 +108,7 @@ ArrayTraceResolver::Index::operator uint32_t () template ArrayTraceResolver::ArrayTraceResolver (TraceContext const &context, Callback getSize, - Callback get) + Callback get) : TraceResolver (context), m_getSize (getSize), m_get (get) @@ -122,10 +122,10 @@ ArrayTraceResolver::DoLookup (std::string id) const { for (uint32_t i = 0; i < m_getSize (); i++) { - TraceContext context = GetContext (); + TraceContext context = GetContext (); typename ArrayTraceResolver::Index index = typename ArrayTraceResolver::Index (i); - context.Add (index); - list.push_back (m_get (i)->CreateTraceResolver (context)); + context.Add (index); + list.push_back (m_get (i)->CreateTraceResolver (context)); } } return list; diff --git a/src/internet-node/ascii-trace.cc b/src/internet-node/ascii-trace.cc index 1314f2150..33bcffc25 100644 --- a/src/internet-node/ascii-trace.cc +++ b/src/internet-node/ascii-trace.cc @@ -47,14 +47,14 @@ void AsciiTrace::TraceAllQueues (void) { Packet::EnableMetadata (); - TraceRoot::Connect ("/nodes/*/ipv4/interfaces/*/netdevice/queue/*", + TraceRoot::Connect ("/nodes/*/devices/*/queue/*", MakeCallback (&AsciiTrace::LogDevQueue, this)); } void AsciiTrace::TraceAllNetDeviceRx (void) { Packet::EnableMetadata (); - TraceRoot::Connect ("/nodes/*/ipv4/interfaces/*/netdevice/rx", + TraceRoot::Connect ("/nodes/*/devices/*/rx", MakeCallback (&AsciiTrace::LogDevRx, this)); } diff --git a/src/internet-node/internet-node.cc b/src/internet-node/internet-node.cc index fa0bb1471..ffb44b79b 100644 --- a/src/internet-node/internet-node.cc +++ b/src/internet-node/internet-node.cc @@ -76,16 +76,14 @@ InternetNode::Construct (void) } -TraceResolver * -InternetNode::DoCreateTraceResolver (TraceContext const &context) +void +InternetNode::DoFillTraceResolver (CompositeTraceResolver &resolver) { - CompositeTraceResolver *resolver = new CompositeTraceResolver (context); + Node::DoFillTraceResolver (resolver); Ptr ipv4 = QueryInterface (Ipv4L3Protocol::iid); - resolver->Add ("ipv4", - MakeCallback (&Ipv4L3Protocol::CreateTraceResolver, PeekPointer (ipv4)), - InternetNode::IPV4); - - return resolver; + resolver.Add ("ipv4", + MakeCallback (&Ipv4L3Protocol::CreateTraceResolver, PeekPointer (ipv4)), + InternetNode::IPV4); } void diff --git a/src/internet-node/internet-node.h b/src/internet-node/internet-node.h index 1d63edae5..6047a1717 100644 --- a/src/internet-node/internet-node.h +++ b/src/internet-node/internet-node.h @@ -46,7 +46,7 @@ public: protected: virtual void DoDispose(void); private: - virtual TraceResolver *DoCreateTraceResolver (TraceContext const &context); + virtual void DoFillTraceResolver (CompositeTraceResolver &resolver); bool ReceiveFromDevice (Ptr device, const Packet &p, uint16_t protocolNumber) const; void Construct (void); }; diff --git a/src/internet-node/ipv4-l3-protocol.cc b/src/internet-node/ipv4-l3-protocol.cc index 31c3935f5..a012d814c 100644 --- a/src/internet-node/ipv4-l3-protocol.cc +++ b/src/internet-node/ipv4-l3-protocol.cc @@ -99,8 +99,8 @@ Ipv4L3Protocol::CreateTraceResolver (TraceContext const &context) TraceResolver * Ipv4L3Protocol::InterfacesCreateTraceResolver (TraceContext const &context) const { - ArrayTraceResolver *resolver = - new ArrayTraceResolver + ArrayTraceResolver *resolver = + new ArrayTraceResolver (context, MakeCallback (&Ipv4L3Protocol::GetNInterfaces, this), MakeCallback (&Ipv4L3Protocol::GetInterface, this)); diff --git a/src/node/node-list.cc b/src/node/node-list.cc index 4fed7eb5e..118e19585 100644 --- a/src/node/node-list.cc +++ b/src/node/node-list.cc @@ -53,7 +53,6 @@ public: NodeList::Iterator Begin (void); NodeList::Iterator End (void); TraceResolver *CreateTraceResolver (TraceContext const &context); - Node *PeekNode (uint32_t n); Ptr GetNode (uint32_t n); uint32_t GetNNodes (void); @@ -99,11 +98,6 @@ NodeListPriv::GetNNodes (void) { return m_nodes.size (); } -Node * -NodeListPriv::PeekNode (uint32_t n) -{ - return PeekPointer (m_nodes[n]); -} Ptr NodeListPriv::GetNode (uint32_t n) @@ -115,11 +109,11 @@ NodeListPriv::GetNode (uint32_t n) TraceResolver * NodeListPriv::CreateTraceResolver (TraceContext const &context) { - ArrayTraceResolver *resolver = - new ArrayTraceResolver + ArrayTraceResolver > *resolver = + new ArrayTraceResolver > (context, MakeCallback (&NodeListPriv::GetNNodes, this), - MakeCallback (&NodeListPriv::PeekNode, this)); + MakeCallback (&NodeListPriv::GetNode, this)); return resolver; } diff --git a/src/node/node.cc b/src/node/node.cc index 7aaa0216a..caad3d9e1 100644 --- a/src/node/node.cc +++ b/src/node/node.cc @@ -24,7 +24,7 @@ #include "application.h" #include "packet-socket-factory.h" #include "ns3/simulator.h" -#include "ns3/empty-trace-resolver.h" +#include "ns3/composite-trace-resolver.h" namespace ns3{ @@ -59,7 +59,9 @@ Node::~Node () TraceResolver * Node::CreateTraceResolver (TraceContext const &context) { - return DoCreateTraceResolver (context); + CompositeTraceResolver *resolver = new CompositeTraceResolver (context); + DoFillTraceResolver (*resolver); + return resolver; } uint32_t @@ -120,8 +122,27 @@ Node::GetNApplications (void) const return m_applications.size (); } +TraceResolver * +Node::CreateDevicesTraceResolver (const TraceContext &context) +{ + ArrayTraceResolver > *resolver = + new ArrayTraceResolver > (context, + MakeCallback (&Node::GetNDevices, this), + MakeCallback (&Node::GetDevice, this)); + + return resolver; +} -void Node::DoDispose() +void +Node::DoFillTraceResolver (CompositeTraceResolver &resolver) +{ + resolver.Add ("devices", + MakeCallback (&Node::CreateDevicesTraceResolver, this), + Node::DEVICES); +} + +void +Node::DoDispose() { for (std::vector >::iterator i = m_devices.begin (); i != m_devices.end (); i++) @@ -142,11 +163,6 @@ void Node::DoDispose() Object::DoDispose (); } -TraceResolver * -Node::DoCreateTraceResolver (TraceContext const &context) -{ - return new EmptyTraceResolver (context); -} void Node::NotifyDeviceAdded (Ptr device) {} diff --git a/src/node/node.h b/src/node/node.h index eea8089a5..e7e34d2c2 100644 --- a/src/node/node.h +++ b/src/node/node.h @@ -34,6 +34,7 @@ class NetDevice; class Application; class Packet; class Address; +class CompositeTraceResolver; /** * \brief A network Node. @@ -175,14 +176,17 @@ protected: * end of their own DoDispose method. */ virtual void DoDispose (void); -private: /** - * \param context the trace context - * \returns a trace resolver to the user. The user must delete it. + * \param resolver the resolver to store trace sources in. * - * Subclasses must implement this method. + * 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 TraceResolver *DoCreateTraceResolver (TraceContext const &context); + virtual void DoFillTraceResolver (CompositeTraceResolver &resolver); +private: /** * \param device the device added to this Node. * @@ -196,7 +200,11 @@ private: bool ReceiveFromDevice (Ptr device, const Packet &packet, uint16_t protocol, const Address &from); void Construct (void); + TraceResolver *CreateDevicesTraceResolver (const TraceContext &context); + enum TraceSource { + DEVICES + }; struct ProtocolHandlerEntry { ProtocolHandler handler; uint16_t protocol;