diff --git a/src/core/composite-trace-resolver.cc b/src/core/composite-trace-resolver.cc index 308544868..edf1e9c26 100644 --- a/src/core/composite-trace-resolver.cc +++ b/src/core/composite-trace-resolver.cc @@ -273,6 +273,7 @@ public: else if (m_sources == DOUBLEB) {os << "doubleB";} else if (m_sources == UINT16_T) {os << "uint16_t";} } + std::string GetName (void) {return "TraceSourceTest";} TraceSourceTest () : m_sources (TraceSourceTest::DOUBLEA) {} TraceSourceTest (enum Sources sources) :m_sources (sources) {} bool IsDoubleA (void) const {return m_sources == TraceSourceTest::DOUBLEA;} @@ -292,6 +293,7 @@ public: {static uint16_t uid = AllocateUid ("SubTraceSourceTest"); return uid;} void Print (std::ostream &os) {os << "subtracesource=int";} + std::string GetName (void) const {return "SubTraceSourceTest";} SubTraceSourceTest () : m_sources (SubTraceSourceTest::INT) {} SubTraceSourceTest (enum Sources sources) : m_sources (sources) {} private: diff --git a/src/core/trace-context-element.cc b/src/core/trace-context-element.cc index 838250af8..24b02fd23 100644 --- a/src/core/trace-context-element.cc +++ b/src/core/trace-context-element.cc @@ -2,6 +2,13 @@ namespace ns3 { +std::string +ElementRegistry::GetName (uint16_t uid) +{ + InfoVector *vec = GetInfoVector (); + struct Info info = (*vec)[uid - 1]; + return info.getName (); +} uint32_t ElementRegistry::GetSize (uint16_t uid) { diff --git a/src/core/trace-context-element.h b/src/core/trace-context-element.h index e1c36c4d9..fa945294d 100644 --- a/src/core/trace-context-element.h +++ b/src/core/trace-context-element.h @@ -115,19 +115,24 @@ public: static uint32_t GetSize (uint16_t uid); static void Print (uint16_t uid, uint8_t *instance, std::ostream &os); + static std::string GetName (uint16_t uid); static void Destroy (uint16_t uid, uint8_t *instance); private: + typedef std::string (*GetNameCb) (void); typedef void (*PrintCb) (uint8_t *instance, std::ostream &os); typedef void (*DestroyCb) (uint8_t *instance); struct Info { uint32_t size; std::string uidString; + GetNameCb getName; PrintCb print; DestroyCb destroy; }; typedef std::vector InfoVector; static InfoVector *GetInfoVector (void); template + static std::string DoGetName (void); + template static void DoPrint (uint8_t *instance, std::ostream &os); template static void DoDestroy (uint8_t *instance); @@ -143,6 +148,13 @@ ElementRegistry::DoPrint (uint8_t *instance, std::ostream &os) obj.Print (os); } template +std::string +ElementRegistry::DoGetName (void) +{ + static T obj; + return obj.GetName (); +} +template void ElementRegistry::DoDestroy (uint8_t *instance) { @@ -169,6 +181,7 @@ ElementRegistry::AllocateUid (std::string name) struct Info info; info.size = sizeof (T); info.uidString = name; + info.getName = &ElementRegistry::DoGetName; info.print = &ElementRegistry::DoPrint; info.destroy = &ElementRegistry::DoDestroy; vec->push_back (info); diff --git a/src/devices/csma-cd/csma-cd-net-device.cc b/src/devices/csma-cd/csma-cd-net-device.cc index 82b6b7db6..6454ae724 100644 --- a/src/devices/csma-cd/csma-cd-net-device.cc +++ b/src/devices/csma-cd/csma-cd-net-device.cc @@ -59,6 +59,11 @@ CsmaCdTraceType::GetUid (void) static uint16_t uid = AllocateUid ("CsmaCdTraceType"); return uid; } +std::string +CsmaCdTraceType::GetName (void) const +{ + return "CsmaCdTraceType"; +} CsmaCdNetDevice::CsmaCdNetDevice (Ptr node) diff --git a/src/devices/csma-cd/csma-cd-net-device.h b/src/devices/csma-cd/csma-cd-net-device.h index 5de056109..9348674a2 100644 --- a/src/devices/csma-cd/csma-cd-net-device.h +++ b/src/devices/csma-cd/csma-cd-net-device.h @@ -52,6 +52,7 @@ public: CsmaCdTraceType (); void Print (std::ostream &os) const; static uint16_t GetUid (void); + std::string GetName (void) const; private: enum Type m_type; }; diff --git a/src/devices/point-to-point/point-to-point-net-device.cc b/src/devices/point-to-point/point-to-point-net-device.cc index 3b94b5bcf..4d7e89e7c 100644 --- a/src/devices/point-to-point/point-to-point-net-device.cc +++ b/src/devices/point-to-point/point-to-point-net-device.cc @@ -53,6 +53,11 @@ PointToPointTraceType::GetUid (void) static uint16_t uid = AllocateUid ("PointToPointTraceType"); return uid; } +std::string +PointToPointTraceType::GetName (void) const +{ + return "PointToPointTraceType"; +} PointToPointNetDevice::PointToPointNetDevice (Ptr node, diff --git a/src/devices/point-to-point/point-to-point-net-device.h b/src/devices/point-to-point/point-to-point-net-device.h index 5cee2cf70..9844699af 100644 --- a/src/devices/point-to-point/point-to-point-net-device.h +++ b/src/devices/point-to-point/point-to-point-net-device.h @@ -44,6 +44,7 @@ public: PointToPointTraceType (); void Print (std::ostream &os) const; static uint16_t GetUid (void); + std::string GetName (void) const; }; /** diff --git a/src/internet-node/ipv4-l3-protocol.cc b/src/internet-node/ipv4-l3-protocol.cc index 2e3f4a421..d01034ef2 100644 --- a/src/internet-node/ipv4-l3-protocol.cc +++ b/src/internet-node/ipv4-l3-protocol.cc @@ -87,6 +87,11 @@ Ipv4L3ProtocolTraceContextElement::GetUid (void) static uint16_t uid = AllocateUid ("Ipv4L3ProtocolTraceContextElement"); return uid; } +std::string +Ipv4L3ProtocolTraceContextElement::GetName (void) const +{ + return "Ipv4L3ProtocolTraceContextElement"; +} Ipv4L3ProtocolInterfaceIndex::Ipv4L3ProtocolInterfaceIndex () @@ -111,6 +116,11 @@ Ipv4L3ProtocolInterfaceIndex::GetUid (void) static uint16_t uid = AllocateUid ("Ipv4L3ProtocolInterfaceIndex"); return uid; } +std::string +Ipv4L3ProtocolInterfaceIndex::GetName (void) const +{ + return "Ipv4L3ProtocolInterfaceIndex"; +} Ipv4L3Protocol::Ipv4L3Protocol(Ptr node) diff --git a/src/internet-node/ipv4-l3-protocol.h b/src/internet-node/ipv4-l3-protocol.h index 0866861c0..ad9d482d2 100644 --- a/src/internet-node/ipv4-l3-protocol.h +++ b/src/internet-node/ipv4-l3-protocol.h @@ -59,6 +59,7 @@ public: bool IsDrop (void) const; void Print (std::ostream &os) const; static uint16_t GetUid (void); + std::string GetName (void) const; private: enum Type m_type; }; @@ -71,6 +72,7 @@ public: uint32_t Get (void) const; void Print (std::ostream &os) const; static uint16_t GetUid (void); + std::string GetName (void) const; private: uint32_t m_index; }; diff --git a/src/internet-node/ipv4-l4-demux.cc b/src/internet-node/ipv4-l4-demux.cc index 74ee536b5..120b3f47e 100644 --- a/src/internet-node/ipv4-l4-demux.cc +++ b/src/internet-node/ipv4-l4-demux.cc @@ -54,6 +54,11 @@ Ipv4L4ProtocolTraceContextElement::GetUid (void) static uint16_t uid = AllocateUid ("Ipv4L4ProtocolTraceContextElement"); return uid; } +std::string +Ipv4L4ProtocolTraceContextElement::GetName (void) const +{ + return "Ipv4L4ProtocolTraceContextElement"; +} Ipv4L4Demux::Ipv4L4Demux (Ptr node) diff --git a/src/internet-node/ipv4-l4-demux.h b/src/internet-node/ipv4-l4-demux.h index 4700ec697..efd91bd44 100644 --- a/src/internet-node/ipv4-l4-demux.h +++ b/src/internet-node/ipv4-l4-demux.h @@ -45,6 +45,7 @@ public: int Get (void) const; void Print (std::ostream &os) const; static uint16_t GetUid (void); + std::string GetName (void) const; private: int m_protocolNumber; }; diff --git a/src/node/node-list.cc b/src/node/node-list.cc index 4fd63ed81..2276c0da3 100644 --- a/src/node/node-list.cc +++ b/src/node/node-list.cc @@ -50,6 +50,11 @@ NodeListIndex::Get (void) const { return m_index; } +std::string +NodeListIndex::GetName (void) const +{ + return "NodeListIndex"; +} /** diff --git a/src/node/node-list.h b/src/node/node-list.h index d40587094..6774d8ce7 100644 --- a/src/node/node-list.h +++ b/src/node/node-list.h @@ -39,6 +39,7 @@ public: void Print (std::ostream &os); static uint16_t GetUid (void); uint32_t Get (void) const; + std::string GetName (void) const; private: uint32_t m_index; }; diff --git a/src/node/node.cc b/src/node/node.cc index 031ed34ab..52231fa1b 100644 --- a/src/node/node.cc +++ b/src/node/node.cc @@ -52,6 +52,11 @@ NodeNetDeviceIndex::GetUid (void) static uint16_t uid = AllocateUid ("NodeNetDeviceIndex"); return uid; } +std::string +NodeNetDeviceIndex::GetName (void) const +{ + return "NodeNetDeviceIndex"; +} diff --git a/src/node/node.h b/src/node/node.h index 0066bf319..062f259c6 100644 --- a/src/node/node.h +++ b/src/node/node.h @@ -44,6 +44,7 @@ public: NodeNetDeviceIndex (uint32_t index); uint32_t Get (void) const; void Print (std::ostream &os) const; + std::string GetName (void) const; static uint16_t GetUid (void); private: uint32_t m_index; diff --git a/src/node/queue.cc b/src/node/queue.cc index 00b6f5387..10bcc1c04 100644 --- a/src/node/queue.cc +++ b/src/node/queue.cc @@ -32,6 +32,11 @@ static ClassIdDefaultValue g_classIdDefaultValue ("Queue", "Packet Queue", Queue::iid, "DropTailQueue"); +std::string +QueueTraceType::GetName (void) const +{ + return "QueueTraceType"; +} uint16_t QueueTraceType::GetUid (void) { diff --git a/src/node/queue.h b/src/node/queue.h index c10795c67..f10191fad 100644 --- a/src/node/queue.h +++ b/src/node/queue.h @@ -52,6 +52,7 @@ public: bool IsDequeue (void) const; bool IsDrop (void) const; void Print (std::ostream &os) const; + std::string GetName (void) const; private: enum Type m_type; };