--- a/src/common/packet-metadata.cc Mon Mar 17 13:31:08 2008 -0700
+++ b/src/common/packet-metadata.cc Mon Mar 17 14:01:55 2008 -0700
@@ -24,7 +24,8 @@
#include "ns3/log.h"
#include "packet-metadata.h"
#include "buffer.h"
-#include "chunk-registry.h"
+#include "header.h"
+#include "trailer.h"
NS_LOG_COMPONENT_DEFINE ("PacketMetadata");
@@ -696,6 +697,12 @@
}
void
+PacketMetadata::AddHeader (const Header &header, uint32_t size)
+{
+ uint32_t uid = header.GetInstanceTypeId ().GetUid () << 1;
+ DoAddHeader (uid, size);
+}
+void
PacketMetadata::DoAddHeader (uint32_t uid, uint32_t size)
{
if (!m_enable)
@@ -703,7 +710,7 @@
m_metadataSkipped = true;
return;
}
- NS_LOG_PARAMS ("(uid=" << uid << ", size=" << size << ")");
+ NS_LOG_PARAMS ("uid=" << uid << "size=" << size << "");
struct PacketMetadata::SmallItem item;
item.next = m_head;
@@ -716,8 +723,9 @@
UpdateHead (written);
}
void
-PacketMetadata::DoRemoveHeader (uint32_t uid, uint32_t size)
+PacketMetadata::RemoveHeader (const Header &header, uint32_t size)
{
+ uint32_t uid = header.GetInstanceTypeId ().GetUid () << 1;
if (!m_enable)
{
m_metadataSkipped = true;
@@ -753,13 +761,15 @@
}
}
void
-PacketMetadata::DoAddTrailer (uint32_t uid, uint32_t size)
+PacketMetadata::AddTrailer (const Trailer &trailer, uint32_t size)
{
+ uint32_t uid = trailer.GetInstanceTypeId ().GetUid () << 1;
if (!m_enable)
{
m_metadataSkipped = true;
return;
}
+ NS_LOG_PARAMS ("(uid=" << uid << ", size=" << size << ")");
struct PacketMetadata::SmallItem item;
item.next = 0xffff;
item.prev = m_tail;
@@ -771,13 +781,15 @@
UpdateTail (written);
}
void
-PacketMetadata::DoRemoveTrailer (uint32_t uid, uint32_t size)
+PacketMetadata::RemoveTrailer (const Trailer &trailer, uint32_t size)
{
+ uint32_t uid = trailer.GetInstanceTypeId ().GetUid () << 1;
if (!m_enable)
{
m_metadataSkipped = true;
return;
}
+ NS_LOG_PARAMS ("(uid=" << uid << ", size=" << size << ")");
struct PacketMetadata::SmallItem item;
struct PacketMetadata::ExtraItem extraItem;
uint32_t read = ReadItems (m_tail, &item, &extraItem);
@@ -1065,11 +1077,13 @@
{
item.isFragment = false;
}
+ TypeId tid;
+ tid.SetUid (uid);
if (uid == 0)
{
item.type = PacketMetadata::Item::PAYLOAD;
}
- else if (ChunkRegistry::IsHeader (uid))
+ else if (tid.IsChildOf (Header::GetTypeId ()))
{
item.type = PacketMetadata::Item::HEADER;
if (!item.isFragment)
@@ -1079,7 +1093,7 @@
item.current = j;
}
}
- else if (ChunkRegistry::IsTrailer (uid))
+ else if (tid.IsChildOf (Trailer::GetTypeId ()))
{
item.type = PacketMetadata::Item::TRAILER;
if (!item.isFragment)
@@ -1119,7 +1133,9 @@
}
else
{
- totalSize += 4 + ChunkRegistry::GetUidStringFromUid (uid).size ();
+ TypeId tid;
+ tid.SetUid (uid);
+ totalSize += 4 + tid.GetName ().size ();
}
totalSize += 1 + 4 + 2 + 4 + 4 + 4;
if (current == m_tail)
@@ -1150,7 +1166,9 @@
uint32_t uid = (item.typeUid & 0xfffffffe) >> 1;
if (uid != 0)
{
- std::string uidString = ChunkRegistry::GetUidStringFromUid (uid);
+ TypeId tid;
+ tid.SetUid (uid);
+ std::string uidString = tid.GetName ();
i.WriteU32 (uidString.size ());
bytesWritten += 4;
i.Write ((uint8_t *)uidString.c_str (), uidString.size ());
@@ -1210,7 +1228,8 @@
uidString.push_back (i.ReadU8 ());
size --;
}
- uid = ChunkRegistry::GetUidFromUidString (uidString);
+ TypeId tid = TypeId::LookupByName (uidString);
+ uid = tid.GetUid ();
}
uint8_t isBig = i.ReadU8 ();
size --;
--- a/src/common/packet-metadata.h Mon Mar 17 13:31:08 2008 -0700
+++ b/src/common/packet-metadata.h Mon Mar 17 14:01:55 2008 -0700
@@ -31,6 +31,8 @@
class Chunk;
class Buffer;
+class Header;
+class Trailer;
/**
* \internal
@@ -128,15 +130,11 @@
inline PacketMetadata &operator = (PacketMetadata const& o);
inline ~PacketMetadata ();
- template <typename T>
- void AddHeader (T const &header, uint32_t size);
- template <typename T>
- void RemoveHeader (T const &header, uint32_t size);
+ void AddHeader (Header const &header, uint32_t size);
+ void RemoveHeader (Header const &header, uint32_t size);
- template <typename T>
- void AddTrailer (T const &trailer, uint32_t size);
- template <typename T>
- void RemoveTrailer (T const &trailer, uint32_t size);
+ void AddTrailer (Trailer const &trailer, uint32_t size);
+ void RemoveTrailer (Trailer const &trailer, uint32_t size);
PacketMetadata CreateFragment (uint32_t start, uint32_t end) const;
void AddAtEnd (PacketMetadata const&o);
@@ -241,10 +239,6 @@
friend class ItemIterator;
PacketMetadata ();
- void DoAddHeader (uint32_t uid, uint32_t size);
- void DoRemoveHeader (uint32_t uid, uint32_t size);
- void DoAddTrailer (uint32_t uid, uint32_t size);
- void DoRemoveTrailer (uint32_t uid, uint32_t size);
inline uint16_t AddSmall (const PacketMetadata::SmallItem *item);
uint16_t AddBig (uint32_t head, uint32_t tail,
@@ -270,6 +264,7 @@
uint32_t ReadItems (uint16_t current,
struct PacketMetadata::SmallItem *item,
struct PacketMetadata::ExtraItem *extraItem) const;
+ void DoAddHeader (uint32_t uid, uint32_t size);
static struct PacketMetadata::Data *Create (uint32_t size);
@@ -304,33 +299,6 @@
namespace ns3 {
-template <typename T>
-void
-PacketMetadata::AddHeader (T const &header, uint32_t size)
-{
- DoAddHeader (T::GetUid () << 1, size);
-}
-
-template <typename T>
-void
-PacketMetadata::RemoveHeader (T const &header, uint32_t size)
-{
- DoRemoveHeader (T::GetUid () << 1, size);
-}
-template <typename T>
-void
-PacketMetadata::AddTrailer (T const &trailer, uint32_t size)
-{
- DoAddTrailer (T::GetUid () << 1, size);
-}
-template <typename T>
-void
-PacketMetadata::RemoveTrailer (T const &trailer, uint32_t size)
-{
- DoRemoveTrailer (T::GetUid () << 1, size);
-}
-
-
PacketMetadata::PacketMetadata (uint32_t uid, uint32_t size)
: m_data (m_data = PacketMetadata::Create (10)),
m_head (0xffff),
--- a/src/core/type-id.cc Mon Mar 17 13:31:08 2008 -0700
+++ b/src/core/type-id.cc Mon Mar 17 14:01:55 2008 -0700
@@ -479,7 +479,7 @@
TypeId::IsChildOf (TypeId other) const
{
TypeId tmp = *this;
- while (tmp != other && tmp != tmp)
+ while (tmp != other && tmp != tmp.GetParent ())
{
tmp = tmp.GetParent ();
}