merge tom's tree with trunk
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
#include "buffer.h"
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
#include <iostream>
|
||||
//#define TRACE(x) std::cout << x << std::endl;
|
||||
@@ -38,7 +38,7 @@ Buffer::Allocate (uint32_t reqSize, uint32_t reqStart)
|
||||
{
|
||||
reqSize = 1;
|
||||
}
|
||||
assert (reqSize >= 1);
|
||||
NS_ASSERT (reqSize >= 1);
|
||||
uint32_t size = reqSize - 1 + sizeof (struct Buffer::BufferData);
|
||||
uint8_t *b = new uint8_t [size];
|
||||
struct BufferData *data = reinterpret_cast<struct Buffer::BufferData*>(b);
|
||||
@@ -60,7 +60,7 @@ Buffer::Deallocate (struct Buffer::BufferData *data)
|
||||
void
|
||||
Buffer::Recycle (struct Buffer::BufferData *data)
|
||||
{
|
||||
assert (data->m_count == 0);
|
||||
NS_ASSERT (data->m_count == 0);
|
||||
/* get rid of it if it is too small for later reuse. */
|
||||
if (data->m_size < (Buffer::m_maxTotalAddStart + Buffer::m_maxTotalAddEnd))
|
||||
{
|
||||
@@ -98,7 +98,7 @@ Buffer::Create (void)
|
||||
}
|
||||
struct Buffer::BufferData *data = Buffer::Allocate (m_maxTotalAddStart+m_maxTotalAddEnd,
|
||||
m_maxTotalAddStart);
|
||||
assert (data->m_count == 1);
|
||||
NS_ASSERT (data->m_count == 1);
|
||||
return data;
|
||||
}
|
||||
#else
|
||||
@@ -119,7 +119,7 @@ Buffer::Create (void)
|
||||
}; // namespace ns3
|
||||
|
||||
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -127,7 +127,7 @@ namespace ns3 {
|
||||
void
|
||||
Buffer::AddAtStart (uint32_t start)
|
||||
{
|
||||
assert (m_start <= m_data->m_initialStart);
|
||||
NS_ASSERT (m_start <= m_data->m_initialStart);
|
||||
bool isDirty = m_data->m_count > 1 && m_start > m_data->m_dirtyStart;
|
||||
if (m_start >= start && !isDirty)
|
||||
{
|
||||
@@ -139,7 +139,7 @@ Buffer::AddAtStart (uint32_t start)
|
||||
{
|
||||
/* enough space but need to move data around to fit new data */
|
||||
memmove (m_data->m_data + start, GetStart (), m_size);
|
||||
assert (start > m_start);
|
||||
NS_ASSERT (start > m_start);
|
||||
m_data->m_initialStart += start;
|
||||
m_start = 0;
|
||||
m_size += start;
|
||||
@@ -163,7 +163,7 @@ Buffer::AddAtStart (uint32_t start)
|
||||
else
|
||||
{
|
||||
/* enough space in the buffer but it is dirty ! */
|
||||
assert (isDirty);
|
||||
NS_ASSERT (isDirty);
|
||||
struct Buffer::BufferData *newData = Buffer::Create ();
|
||||
memcpy (newData->m_data + m_start, GetStart (), m_size);
|
||||
newData->m_initialStart = m_data->m_initialStart;
|
||||
@@ -200,7 +200,7 @@ Buffer::AddAtStart (uint32_t start)
|
||||
void
|
||||
Buffer::AddAtEnd (uint32_t end)
|
||||
{
|
||||
assert (m_start <= m_data->m_initialStart);
|
||||
NS_ASSERT (m_start <= m_data->m_initialStart);
|
||||
bool isDirty = m_data->m_count > 1 &&
|
||||
m_start + m_size < m_data->m_dirtyStart + m_data->m_dirtySize;
|
||||
if (m_start + m_size + end <= m_data->m_size && !isDirty)
|
||||
@@ -213,7 +213,7 @@ Buffer::AddAtEnd (uint32_t end)
|
||||
/* enough space but need to move data around to fit the extra data */
|
||||
uint32_t newStart = m_data->m_size - (m_size + end);
|
||||
memmove (m_data->m_data + newStart, GetStart (), m_size);
|
||||
assert (newStart < m_start);
|
||||
NS_ASSERT (newStart < m_start);
|
||||
m_data->m_initialStart -= m_start - newStart;
|
||||
m_start = newStart;
|
||||
m_size += end;
|
||||
@@ -237,7 +237,7 @@ Buffer::AddAtEnd (uint32_t end)
|
||||
else
|
||||
{
|
||||
/* enough space in the buffer but it is dirty ! */
|
||||
assert (isDirty);
|
||||
NS_ASSERT (isDirty);
|
||||
struct Buffer::BufferData *newData = Buffer::Create ();
|
||||
memcpy (newData->m_data + m_start, GetStart (), m_size);
|
||||
newData->m_initialStart = m_data->m_initialStart;
|
||||
@@ -290,7 +290,7 @@ Buffer::RemoveAtStart (uint32_t start)
|
||||
}
|
||||
else
|
||||
{
|
||||
assert (m_data->m_initialStart >= m_start);
|
||||
NS_ASSERT (m_data->m_initialStart >= m_start);
|
||||
uint32_t zeroStart = m_data->m_initialStart - m_start;
|
||||
uint32_t zeroEnd = zeroStart + m_zeroAreaSize;
|
||||
uint32_t dataEnd = m_size + m_zeroAreaSize;
|
||||
@@ -306,7 +306,7 @@ Buffer::RemoveAtStart (uint32_t start)
|
||||
m_start += zeroStart;
|
||||
uint32_t zeroDelta = start - zeroStart;
|
||||
m_zeroAreaSize -= zeroDelta;
|
||||
assert (zeroDelta <= start);
|
||||
NS_ASSERT (zeroDelta <= start);
|
||||
m_size -= zeroStart;
|
||||
}
|
||||
else if (start <= dataEnd)
|
||||
@@ -346,12 +346,12 @@ Buffer::RemoveAtEnd (uint32_t end)
|
||||
}
|
||||
else
|
||||
{
|
||||
assert (m_data->m_initialStart >= m_start);
|
||||
NS_ASSERT (m_data->m_initialStart >= m_start);
|
||||
uint32_t zeroStart = m_data->m_initialStart - m_start;
|
||||
uint32_t zeroEnd = zeroStart + m_zeroAreaSize;
|
||||
uint32_t dataEnd = m_size + m_zeroAreaSize;
|
||||
assert (zeroStart <= m_size);
|
||||
assert (zeroEnd <= m_size + m_zeroAreaSize);
|
||||
NS_ASSERT (zeroStart <= m_size);
|
||||
NS_ASSERT (zeroEnd <= m_size + m_zeroAreaSize);
|
||||
if (dataEnd <= end)
|
||||
{
|
||||
/* remove all buffer */
|
||||
@@ -362,7 +362,7 @@ Buffer::RemoveAtEnd (uint32_t end)
|
||||
else if (dataEnd - zeroStart <= end)
|
||||
{
|
||||
/* remove end of buffer, zero area, part of start of buffer */
|
||||
assert (end >= m_zeroAreaSize);
|
||||
NS_ASSERT (end >= m_zeroAreaSize);
|
||||
m_size -= end - m_zeroAreaSize;
|
||||
m_zeroAreaSize = 0;
|
||||
}
|
||||
@@ -406,8 +406,8 @@ Buffer::TransformIntoRealBuffer (void) const
|
||||
{
|
||||
if (m_zeroAreaSize != 0)
|
||||
{
|
||||
assert (m_data->m_initialStart >= m_start);
|
||||
assert (m_size >= (m_data->m_initialStart - m_start));
|
||||
NS_ASSERT (m_data->m_initialStart >= m_start);
|
||||
NS_ASSERT (m_size >= (m_data->m_initialStart - m_start));
|
||||
Buffer tmp;
|
||||
tmp.AddAtStart (m_zeroAreaSize);
|
||||
tmp.Begin ().WriteU8 (0, m_zeroAreaSize);
|
||||
|
||||
@@ -361,7 +361,7 @@ private:
|
||||
need to be inline for performance reasons.
|
||||
*************************************************/
|
||||
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -375,7 +375,7 @@ Buffer::Buffer ()
|
||||
{
|
||||
m_start = 0;
|
||||
}
|
||||
assert (m_start <= m_data->m_size);
|
||||
NS_ASSERT (m_start <= m_data->m_size);
|
||||
}
|
||||
|
||||
Buffer::Buffer (uint32_t dataSize)
|
||||
@@ -388,7 +388,7 @@ Buffer::Buffer (uint32_t dataSize)
|
||||
{
|
||||
m_start = 0;
|
||||
}
|
||||
assert (m_start <= m_data->m_size);
|
||||
NS_ASSERT (m_start <= m_data->m_size);
|
||||
}
|
||||
|
||||
|
||||
@@ -399,7 +399,7 @@ Buffer::Buffer (Buffer const&o)
|
||||
m_size (o.m_size)
|
||||
{
|
||||
m_data->m_count++;
|
||||
assert (m_start <= m_data->m_size);
|
||||
NS_ASSERT (m_start <= m_data->m_size);
|
||||
}
|
||||
|
||||
Buffer &
|
||||
@@ -419,7 +419,7 @@ Buffer::operator = (Buffer const&o)
|
||||
m_zeroAreaSize = o.m_zeroAreaSize;
|
||||
m_start = o.m_start;
|
||||
m_size = o.m_size;
|
||||
assert (m_start <= m_data->m_size);
|
||||
NS_ASSERT (m_start <= m_data->m_size);
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -475,31 +475,31 @@ Buffer::Iterator::Iterator (Buffer const*buffer, uint32_t current)
|
||||
void
|
||||
Buffer::Iterator::Next (void)
|
||||
{
|
||||
assert (m_current + 1 <= m_dataEnd);
|
||||
NS_ASSERT (m_current + 1 <= m_dataEnd);
|
||||
m_current++;
|
||||
}
|
||||
void
|
||||
Buffer::Iterator::Prev (void)
|
||||
{
|
||||
assert (m_current >= 1);
|
||||
NS_ASSERT (m_current >= 1);
|
||||
m_current--;
|
||||
}
|
||||
void
|
||||
Buffer::Iterator::Next (uint32_t delta)
|
||||
{
|
||||
assert (m_current + delta <= m_dataEnd);
|
||||
NS_ASSERT (m_current + delta <= m_dataEnd);
|
||||
m_current += delta;
|
||||
}
|
||||
void
|
||||
Buffer::Iterator::Prev (uint32_t delta)
|
||||
{
|
||||
assert (m_current >= delta);
|
||||
NS_ASSERT (m_current >= delta);
|
||||
m_current -= delta;
|
||||
}
|
||||
int32_t
|
||||
Buffer::Iterator::GetDistanceFrom (Iterator const &o) const
|
||||
{
|
||||
assert (m_data == o.m_data);
|
||||
NS_ASSERT (m_data == o.m_data);
|
||||
int32_t start = m_current;
|
||||
int32_t end = o.m_current;
|
||||
return end - start;
|
||||
@@ -519,7 +519,7 @@ Buffer::Iterator::IsStart (void) const
|
||||
uint32_t
|
||||
Buffer::Iterator::GetIndex (uint32_t n)
|
||||
{
|
||||
assert (
|
||||
NS_ASSERT (
|
||||
(m_current + n <= m_dataEnd) &&
|
||||
((m_current + n <= m_zeroStart) ||
|
||||
(m_current >= m_zeroEnd))
|
||||
@@ -540,9 +540,9 @@ Buffer::Iterator::GetIndex (uint32_t n)
|
||||
void
|
||||
Buffer::Iterator::Write (Iterator start, Iterator end)
|
||||
{
|
||||
assert (start.m_data == end.m_data);
|
||||
assert (start.m_current <= end.m_current);
|
||||
assert (m_data != start.m_data);
|
||||
NS_ASSERT (start.m_data == end.m_data);
|
||||
NS_ASSERT (start.m_current <= end.m_current);
|
||||
NS_ASSERT (m_data != start.m_data);
|
||||
uint32_t size = end.m_current - start.m_current;
|
||||
uint8_t *src = start.m_data + start.GetIndex (size);
|
||||
uint8_t *dest = m_data + GetIndex (size);
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
#include <sys/poll.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
#include <string.h>
|
||||
#include <list>
|
||||
|
||||
@@ -71,7 +71,7 @@ void
|
||||
DataWriterPrivate::Open (char const *filename)
|
||||
{
|
||||
m_fd = ::Open (filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
|
||||
assert (m_fd != -1);
|
||||
NS_ASSERT (m_fd != -1);
|
||||
}
|
||||
|
||||
#ifndef min
|
||||
@@ -92,7 +92,7 @@ DataWriterPrivate::Write (uint8_t *buffer, uint32_t size)
|
||||
{
|
||||
ssize_t written = 0;
|
||||
written = ::Write (m_fd, m_data, BUFFER_SIZE);
|
||||
assert (written == BUFFER_SIZE);
|
||||
NS_ASSERT (written == BUFFER_SIZE);
|
||||
m_current = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
*/
|
||||
|
||||
#include "header.h"
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
#include "packet.h"
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -81,7 +81,7 @@ Packet::Peek (Header &header)
|
||||
void
|
||||
Packet::Remove (Header const &header)
|
||||
{
|
||||
assert (header.IsDeserialized ());
|
||||
NS_ASSERT (header.IsDeserialized ());
|
||||
m_buffer.RemoveAtStart (header.GetSize ());
|
||||
}
|
||||
void
|
||||
@@ -102,7 +102,7 @@ Packet::Peek (Trailer &trailer)
|
||||
void
|
||||
Packet::Remove (Trailer const &trailer)
|
||||
{
|
||||
assert (trailer.IsDeserialized ());
|
||||
NS_ASSERT (trailer.IsDeserialized ());
|
||||
m_buffer.RemoveAtEnd (trailer.GetSize ());
|
||||
}
|
||||
|
||||
@@ -123,7 +123,7 @@ Packet::AddAtEnd (Packet packet)
|
||||
void
|
||||
Packet::AddAtEnd (Packet packet, uint32_t start, uint32_t size)
|
||||
{
|
||||
assert (packet.GetSize () <= start + size);
|
||||
NS_ASSERT (packet.GetSize () <= start + size);
|
||||
Buffer src = packet.m_buffer;
|
||||
m_buffer.AddAtEnd (src.GetSize ());
|
||||
Buffer::Iterator destStart = m_buffer.End ();
|
||||
|
||||
@@ -30,7 +30,7 @@ TagRegistry::TagsData TagRegistry::m_registry;
|
||||
void
|
||||
TagRegistry::Record (std::string uuid, PrettyPrinter prettyPrinter)
|
||||
{
|
||||
assert (!m_sorted);
|
||||
NS_ASSERT (!m_sorted);
|
||||
m_registry.push_back (make_pair (uuid, prettyPrinter));
|
||||
}
|
||||
uint32_t
|
||||
@@ -41,7 +41,7 @@ TagRegistry::LookupUid (std::string uuid)
|
||||
std::sort (m_registry.begin (), m_registry.end ());
|
||||
m_sorted = true;
|
||||
}
|
||||
assert (m_sorted);
|
||||
NS_ASSERT (m_sorted);
|
||||
uint32_t uid = 1;
|
||||
for (TagsDataCI i = m_registry.begin (); i != m_registry.end (); i++)
|
||||
{
|
||||
@@ -52,14 +52,14 @@ TagRegistry::LookupUid (std::string uuid)
|
||||
uid++;
|
||||
}
|
||||
// someone asked for a uid for an unregistered uuid.
|
||||
assert (!"You tried to use unregistered tag: make sure you create an instance of type TagRegistration<YouTagType>.");
|
||||
NS_ASSERT (!"You tried to use unregistered tag: make sure you create an instance of type TagRegistration<YouTagType>.");
|
||||
// quiet compiler
|
||||
return 0;
|
||||
}
|
||||
void
|
||||
TagRegistry::PrettyPrint (uint32_t uid, uint8_t buf[Tags::SIZE], std::ostream &os)
|
||||
{
|
||||
assert (m_registry.size () > uid);
|
||||
NS_ASSERT (m_registry.size () > uid);
|
||||
PrettyPrinter prettyPrinter = m_registry[uid].second;
|
||||
if (prettyPrinter != 0)
|
||||
{
|
||||
|
||||
@@ -109,7 +109,7 @@ private:
|
||||
/**************************************************************
|
||||
An implementation of the templates defined above
|
||||
*************************************************************/
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
#include <string>
|
||||
|
||||
namespace ns3 {
|
||||
@@ -179,7 +179,7 @@ std::string *TypeUid<T>::GetUuid (void)
|
||||
template <typename T>
|
||||
TagRegistration<T>::TagRegistration (std::string uuid, void (*prettyPrinter) (T const*, std::ostream &))
|
||||
{
|
||||
assert (sizeof (T) <= Tags::SIZE);
|
||||
NS_ASSERT (sizeof (T) <= Tags::SIZE);
|
||||
m_prettyPrinter = prettyPrinter;
|
||||
TagRegistry::Record (uuid, &TagRegistration<T>::PrettyPrinterCb);
|
||||
TypeUid<T>::Record (uuid);
|
||||
@@ -188,7 +188,7 @@ template <typename T>
|
||||
void
|
||||
TagRegistration<T>::PrettyPrinterCb (uint8_t *buf, std::ostream &os)
|
||||
{
|
||||
assert (sizeof (T) <= Tags::SIZE);
|
||||
NS_ASSERT (sizeof (T) <= Tags::SIZE);
|
||||
T *tag = reinterpret_cast<T *> (buf);
|
||||
(*m_prettyPrinter) (tag, os);
|
||||
}
|
||||
@@ -203,12 +203,12 @@ template <typename T>
|
||||
void
|
||||
Tags::Add (T const&tag)
|
||||
{
|
||||
assert (sizeof (T) <= Tags::SIZE);
|
||||
NS_ASSERT (sizeof (T) <= Tags::SIZE);
|
||||
uint8_t const*buf = reinterpret_cast<uint8_t const*> (&tag);
|
||||
// ensure this id was not yet added
|
||||
for (struct TagData *cur = m_next; cur != 0; cur = cur->m_next)
|
||||
{
|
||||
assert (cur->m_id != TypeUid<T>::GetUid ());
|
||||
NS_ASSERT (cur->m_id != TypeUid<T>::GetUid ());
|
||||
}
|
||||
struct TagData *newStart = AllocData ();
|
||||
newStart->m_count = 1;
|
||||
@@ -223,7 +223,7 @@ template <typename T>
|
||||
bool
|
||||
Tags::Remove (T &tag)
|
||||
{
|
||||
assert (sizeof (T) <= Tags::SIZE);
|
||||
NS_ASSERT (sizeof (T) <= Tags::SIZE);
|
||||
return Remove (TypeUid<T>::GetUid ());
|
||||
}
|
||||
|
||||
@@ -231,7 +231,7 @@ template <typename T>
|
||||
bool
|
||||
Tags::Peek (T &tag) const
|
||||
{
|
||||
assert (sizeof (T) <= Tags::SIZE);
|
||||
NS_ASSERT (sizeof (T) <= Tags::SIZE);
|
||||
uint8_t *buf = reinterpret_cast<uint8_t *> (&tag);
|
||||
for (struct TagData *cur = m_next; cur != 0; cur = cur->m_next)
|
||||
{
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include "trace-container.h"
|
||||
#include "stream-tracer.h"
|
||||
#include <utility>
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -46,7 +46,7 @@ TraceContainer::SetUiVariableCallback (char const *name, Callback<void,uint64_t,
|
||||
return;
|
||||
}
|
||||
}
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
}
|
||||
void
|
||||
TraceContainer::SetSiVariableCallback (char const *name, Callback<void,int64_t, int64_t> callback)
|
||||
@@ -59,12 +59,12 @@ TraceContainer::SetSiVariableCallback (char const *name, Callback<void,int64_t,
|
||||
return;
|
||||
}
|
||||
}
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
}
|
||||
void
|
||||
TraceContainer::SetFVariableCallback (char const *name, Callback<void,double, double> callback)
|
||||
{
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
}
|
||||
void
|
||||
TraceContainer::SetStream (char const *name, std::ostream *os)
|
||||
@@ -77,7 +77,7 @@ TraceContainer::SetStream (char const *name, std::ostream *os)
|
||||
return;
|
||||
}
|
||||
}
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -111,7 +111,7 @@ TraceContainer::RegisterSiVariable (char const *name, SiVariableTracerBase *var)
|
||||
void
|
||||
TraceContainer::RegisterFVariable (char const *name, FVariableTracerBase *var)
|
||||
{
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -196,7 +196,7 @@ private:
|
||||
|
||||
}; // namespace ns3
|
||||
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -215,11 +215,11 @@ TraceContainer::SetCallback (char const *name, Callback<void,T1> callback)
|
||||
}
|
||||
else
|
||||
{
|
||||
assert (!"non-matching callback");
|
||||
NS_ASSERT (!"non-matching callback");
|
||||
}
|
||||
}
|
||||
}
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
}
|
||||
template <typename T1, typename T2>
|
||||
void
|
||||
@@ -236,11 +236,11 @@ TraceContainer::SetCallback (char const *name, Callback<void,T1,T2> callback)
|
||||
}
|
||||
else
|
||||
{
|
||||
assert (!"non-matching callback");
|
||||
NS_ASSERT (!"non-matching callback");
|
||||
}
|
||||
}
|
||||
}
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
}
|
||||
template <typename T1, typename T2, typename T3>
|
||||
void
|
||||
@@ -257,11 +257,11 @@ TraceContainer::SetCallback (char const *name, Callback<void,T1,T2,T3> callback)
|
||||
}
|
||||
else
|
||||
{
|
||||
assert (!"non-matching callback");
|
||||
NS_ASSERT (!"non-matching callback");
|
||||
}
|
||||
}
|
||||
}
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
}
|
||||
template <typename T1, typename T2, typename T3, typename T4>
|
||||
void
|
||||
@@ -278,11 +278,11 @@ TraceContainer::SetCallback (char const *name, Callback<void,T1,T2,T3,T4> callba
|
||||
}
|
||||
else
|
||||
{
|
||||
assert (!"non-matching callback");
|
||||
NS_ASSERT (!"non-matching callback");
|
||||
}
|
||||
}
|
||||
}
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
}
|
||||
template <typename T1, typename T2, typename T3, typename T4, typename T5>
|
||||
void
|
||||
@@ -299,11 +299,11 @@ TraceContainer::SetCallback (char const *name, Callback<void,T1,T2,T3,T4,T5> cal
|
||||
}
|
||||
else
|
||||
{
|
||||
assert (!"non-matching callback");
|
||||
NS_ASSERT (!"non-matching callback");
|
||||
}
|
||||
}
|
||||
}
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -24,65 +24,63 @@
|
||||
#include "ns3/debug.h"
|
||||
#include "trace-writer.h"
|
||||
|
||||
namespace ns3 {
|
||||
NS_DEBUG_COMPONENT_DEFINE ("TraceWriter");
|
||||
|
||||
namespace {
|
||||
int twDebug = 1;
|
||||
}
|
||||
namespace ns3 {
|
||||
|
||||
TraceWriter::TraceWriter () :
|
||||
m_filestr()
|
||||
{
|
||||
NS3_TRACE(twDebug, "TraceWriter()::TraceWriter()")
|
||||
NS_DEBUG ("TraceWriter()::TraceWriter()")
|
||||
|
||||
std::streambuf *sb = m_filestr.rdbuf();
|
||||
|
||||
NS3_TRACE(twDebug, "TraceWriter()::TraceWriter(): rdbuf ()")
|
||||
NS_DEBUG ("TraceWriter()::TraceWriter(): rdbuf ()")
|
||||
rdbuf(sb);
|
||||
|
||||
NS3_TRACE(twDebug, "TraceWriter()::TraceWriter(): done")
|
||||
NS_DEBUG ("TraceWriter()::TraceWriter(): done")
|
||||
}
|
||||
|
||||
TraceWriter::TraceWriter (std::string const &filename) :
|
||||
m_filestr()
|
||||
{
|
||||
NS3_TRACE(twDebug, "TraceWriter()::TraceWriter (\"" << filename << "\")")
|
||||
NS_DEBUG ("TraceWriter()::TraceWriter (\"" << filename << "\")")
|
||||
|
||||
m_filestr.open (filename.c_str(), std::ios::out | std::ios::app);
|
||||
|
||||
std::streambuf *sb = m_filestr.rdbuf();
|
||||
|
||||
NS3_TRACE(twDebug, "TraceWriter()::TraceWriter(): rdbuf ()")
|
||||
NS_DEBUG ("TraceWriter()::TraceWriter(): rdbuf ()")
|
||||
rdbuf(sb);
|
||||
|
||||
NS3_TRACE(twDebug, "TraceWriter()::TraceWriter(): done")
|
||||
NS_DEBUG ("TraceWriter()::TraceWriter(): done")
|
||||
}
|
||||
|
||||
TraceWriter::TraceWriter (char const *filename) :
|
||||
m_filestr()
|
||||
{
|
||||
NS3_TRACE(twDebug, "TraceWriter()::TraceWriter (\"" << filename << "\")")
|
||||
NS_DEBUG ("TraceWriter()::TraceWriter (\"" << filename << "\")")
|
||||
|
||||
m_filestr.open (filename, std::ios::out | std::ios::app);
|
||||
|
||||
std::streambuf *sb = m_filestr.rdbuf();
|
||||
|
||||
NS3_TRACE(twDebug, "TraceWriter()::TraceWriter(): rdbuf ()")
|
||||
NS_DEBUG ("TraceWriter()::TraceWriter(): rdbuf ()")
|
||||
rdbuf(sb);
|
||||
|
||||
NS3_TRACE(twDebug, "TraceWriter()::TraceWriter(): done")
|
||||
NS_DEBUG ("TraceWriter()::TraceWriter(): done")
|
||||
}
|
||||
|
||||
|
||||
TraceWriter::~TraceWriter ()
|
||||
{
|
||||
NS3_TRACE(twDebug, "TraceWriter()::~TraceWriter()")
|
||||
NS_DEBUG ("TraceWriter()::~TraceWriter()")
|
||||
}
|
||||
|
||||
void
|
||||
TraceWriter::Open (std::string const &filename)
|
||||
{
|
||||
NS3_TRACE(twDebug, "TraceWriter()::Open (\"" << filename << "\")")
|
||||
NS_DEBUG ("TraceWriter()::Open (\"" << filename << "\")")
|
||||
|
||||
m_filestr.open (filename.c_str(), std::ios::out | std::ios::app);
|
||||
}
|
||||
@@ -90,7 +88,7 @@ TraceWriter::Open (std::string const &filename)
|
||||
void
|
||||
TraceWriter::Open (char const *filename)
|
||||
{
|
||||
NS3_TRACE(twDebug, "TraceWriter()::Open (\"" << filename << "\")")
|
||||
NS_DEBUG ("TraceWriter()::Open (\"" << filename << "\")")
|
||||
|
||||
m_filestr.open (filename, std::ios::out | std::ios::app);
|
||||
}
|
||||
@@ -98,7 +96,7 @@ TraceWriter::Open (char const *filename)
|
||||
void
|
||||
TraceWriter::Close ()
|
||||
{
|
||||
NS3_TRACE(twDebug, "TraceWriter()::Close ()")
|
||||
NS_DEBUG ("TraceWriter()::Close ()")
|
||||
|
||||
m_filestr.close ();
|
||||
}
|
||||
@@ -106,7 +104,7 @@ TraceWriter::Close ()
|
||||
void
|
||||
TraceWriter::Write (std::string const &str)
|
||||
{
|
||||
NS3_TRACE(twDebug, "TraceWriter()::Write (\"" << str << "\")")
|
||||
NS_DEBUG ("TraceWriter()::Write (\"" << str << "\")")
|
||||
|
||||
m_filestr << str;
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
*/
|
||||
|
||||
#include "trailer.h"
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
|
||||
41
src/core/assert.cc
Normal file
41
src/core/assert.cc
Normal file
@@ -0,0 +1,41 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2006 INRIA
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
|
||||
#include "assert.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
void
|
||||
AssertBreakpoint (void)
|
||||
{
|
||||
int *a = 0;
|
||||
/**
|
||||
* we test here to allow a debugger to change the value of
|
||||
* the variable 'a' to allow the debugger to avoid the
|
||||
* subsequent segfault.
|
||||
*/
|
||||
if (a == 0)
|
||||
{
|
||||
*a = 0;
|
||||
}
|
||||
}
|
||||
|
||||
}//namespace ns3
|
||||
95
src/core/assert.h
Normal file
95
src/core/assert.h
Normal file
@@ -0,0 +1,95 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2006 INRIA
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
#ifndef ASSERT_H
|
||||
#define ASSERT_H
|
||||
|
||||
/**
|
||||
* \defgroup assert
|
||||
* \brief assert functions and macros
|
||||
*
|
||||
* The assert macros are used to verify
|
||||
* at runtime that a certain condition is true. If it is
|
||||
* not true, the program halts. These checks are built
|
||||
* into the program only in debugging builds. They are
|
||||
* removed in optimized builds.
|
||||
*/
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
/**
|
||||
* \ingroup debugging
|
||||
*
|
||||
* When an NS_ASSERT cannot verify its condition,
|
||||
* this function is called. This is where you should
|
||||
* be able to put a breakpoint with a debugger if
|
||||
* you want to catch assertions before the program
|
||||
* halts.
|
||||
*/
|
||||
void AssertBreakpoint (void);
|
||||
|
||||
}//namespace ns3
|
||||
|
||||
#ifdef NS3_ASSERT_ENABLE
|
||||
|
||||
#include <iostream>
|
||||
|
||||
/**
|
||||
* \ingroup assert
|
||||
* \param condition condition to verifiy.
|
||||
*
|
||||
* At runtime, in debugging builds, if this condition is not
|
||||
* true, the program prints the source file, line number and
|
||||
* unverified condition and halts in the ns3::AssertBreakpoint
|
||||
* function.
|
||||
*/
|
||||
#define NS_ASSERT(condition) \
|
||||
if (!(condition)) \
|
||||
{ \
|
||||
std::cout << "assert failed. file=" << __FILE__ << \
|
||||
", line=" << __LINE__ << ", cond=\""#condition << \
|
||||
"\"" << std::endl; \
|
||||
ns3::AssertBreakpoint (); \
|
||||
}
|
||||
|
||||
/**
|
||||
* \ingroup assert
|
||||
* \param condition condition to verifiy.
|
||||
* \param message message to output
|
||||
*
|
||||
* At runtime, in debugging builds, if this condition is not
|
||||
* true, the program prints the message to output and
|
||||
* halts in the ns3::AssertBreakpoint function.
|
||||
*/
|
||||
#define NS_ASSERT_MSG(condition, message) \
|
||||
if (!(condition)) \
|
||||
{ \
|
||||
std::cout << message << std::endl; \
|
||||
ns3::AssertBreakpoint (); \
|
||||
}
|
||||
|
||||
#else /* NS3_ASSERT_ENABLE */
|
||||
|
||||
#define NS_ASSERT(cond)
|
||||
#define NS_ASSERT_MSG(cond,msg)
|
||||
|
||||
#endif /* NS3_ASSERT_ENABLE */
|
||||
|
||||
#endif /* ASSERT_H */
|
||||
@@ -18,13 +18,12 @@
|
||||
*
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
#include <cassert>
|
||||
#include <list>
|
||||
#include <utility>
|
||||
#include <iostream>
|
||||
#include "debug.h"
|
||||
|
||||
// #include "ns3/core-config.h"
|
||||
#include "assert.h"
|
||||
#include "ns3/core-config.h"
|
||||
|
||||
#ifdef HAVE_STDLIB_H
|
||||
#include <stdlib.h>
|
||||
@@ -53,55 +52,73 @@ DebugComponentEnableEnvVar (void)
|
||||
while (true)
|
||||
{
|
||||
next = env.find_first_of (";", cur);
|
||||
if (next == std::string::npos)
|
||||
{
|
||||
std::string tmp = env.substr (cur, next);
|
||||
bool found = false;
|
||||
for (ComponentListI i = g_components.begin ();
|
||||
i != g_components.end ();
|
||||
i++)
|
||||
std::string tmp = std::string (env, cur, next);
|
||||
{
|
||||
/* The following code is a workaround for a bug in the g++
|
||||
* c++ string library. Its goal is to remove any trailing ';'
|
||||
* from the string even though there should not be any in
|
||||
* it. This code should be safe even if the bug is not there.
|
||||
*/
|
||||
std::string::size_type trailing = tmp.find_first_of (";");
|
||||
tmp = tmp.substr (0, trailing);
|
||||
}
|
||||
if (tmp.size () == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
bool found = false;
|
||||
for (ComponentListI i = g_components.begin ();
|
||||
i != g_components.end ();
|
||||
i++)
|
||||
{
|
||||
if (i->first.compare (tmp) == 0)
|
||||
{
|
||||
if (i->first.compare (tmp) == 0)
|
||||
{
|
||||
found = true;
|
||||
i->second->Enable ();
|
||||
break;
|
||||
}
|
||||
found = true;
|
||||
i->second->Enable ();
|
||||
break;
|
||||
}
|
||||
if (!found)
|
||||
{
|
||||
std::cout << "No debug component named=\"" << tmp << "\"" << std::endl;
|
||||
}
|
||||
}
|
||||
cur = next;
|
||||
}
|
||||
if (!found)
|
||||
{
|
||||
std::cout << "No debug component named=\"" << tmp << "\"" << std::endl;
|
||||
}
|
||||
if (next == std::string::npos)
|
||||
{
|
||||
break;
|
||||
}
|
||||
cur = next + 1;
|
||||
if (cur >= env.size ())
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
DebugComponent::DebugComponent (std::string name)
|
||||
DebugComponent::DebugComponent (char const * name)
|
||||
: m_isEnabled (false)
|
||||
{
|
||||
for (ComponentListI i = g_components.begin ();
|
||||
i != g_components.end ();
|
||||
i++)
|
||||
{
|
||||
assert (i->first.compare (name) != 0);
|
||||
NS_ASSERT (i->first.compare (name) != 0);
|
||||
}
|
||||
g_components.push_back (std::make_pair (name, this));
|
||||
}
|
||||
bool
|
||||
DebugComponent::IsEnabled (void)
|
||||
{
|
||||
if (g_firstDebug) {
|
||||
DebugComponentEnableEnvVar ();
|
||||
g_firstDebug = false;
|
||||
}
|
||||
return m_isEnabled;
|
||||
}
|
||||
void
|
||||
DebugComponent::Enable (void)
|
||||
{
|
||||
if (g_firstDebug) {
|
||||
DebugComponentEnableEnvVar ();
|
||||
g_firstDebug = false;
|
||||
}
|
||||
m_isEnabled = true;
|
||||
}
|
||||
void
|
||||
@@ -151,6 +168,6 @@ DebugComponentPrintList (void)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}; // namespace ns3
|
||||
|
||||
|
||||
|
||||
107
src/core/debug.h
107
src/core/debug.h
@@ -21,38 +21,49 @@
|
||||
#ifndef DEBUG_H
|
||||
#define DEBUG_H
|
||||
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
#ifndef NDEBUG
|
||||
#define NS3_DEBUG_ENABLE
|
||||
#endif
|
||||
|
||||
#ifdef NS3_DEBUG_ENABLE
|
||||
#define NS3_DEBUG(x) x
|
||||
#else
|
||||
#define NS3_DEBUG(x)
|
||||
#endif
|
||||
|
||||
#define NS3_TRACEALL(traceout) NS3_DEBUG(std::cerr << traceout << std::endl;)
|
||||
|
||||
#define NS3_TRACE(boolLevel, traceout) \
|
||||
NS3_DEBUG( \
|
||||
if (boolLevel) { \
|
||||
std::cerr << traceout << std::endl; \
|
||||
} \
|
||||
)
|
||||
|
||||
/**
|
||||
* \defgroup debugging
|
||||
* \brief Debugging functions and macros
|
||||
*
|
||||
* - DEBUG functionality: macros which allow developers to
|
||||
* send information out on screen only in debugging builds.
|
||||
* All debug messages are disabled by default. To enable
|
||||
* selected debug messages, use the ns3::DebugComponentEnable
|
||||
* function. Alternatively, you can use the NS_DEBUG
|
||||
* environment variable to define a ';'-separated list of
|
||||
* messages to enable. For example, NS_DEBUG=a;b;c;DAFD;GH
|
||||
* would enable the components 'a', 'b', 'c', 'DAFD', and, 'GH'.
|
||||
*/
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
/**
|
||||
* \param name a debug component name
|
||||
* \ingroup debugging
|
||||
*
|
||||
* Enable the debugging output associated with that debug component.
|
||||
* The debugging output can be later disabled with a call
|
||||
* to ns3::DebugComponentDisable.
|
||||
*/
|
||||
void DebugComponentEnable (char const *name);
|
||||
/**
|
||||
* \param name a debug component name
|
||||
* \ingroup debugging
|
||||
*
|
||||
* Disable the debugging output associated with that debug component.
|
||||
* The debugging output can be later re-enabled with a call
|
||||
* to ns3::DebugComponentEnable.
|
||||
*/
|
||||
void DebugComponentDisable (char const *name);
|
||||
/**
|
||||
* \ingroup debugging
|
||||
* Print the list of debugging messages available.
|
||||
*/
|
||||
void DebugComponentPrintList (void);
|
||||
|
||||
class DebugComponent {
|
||||
public:
|
||||
DebugComponent (std::string name);
|
||||
DebugComponent (char const *name);
|
||||
bool IsEnabled (void);
|
||||
void Enable (void);
|
||||
void Disable (void);
|
||||
@@ -65,18 +76,56 @@ private:
|
||||
|
||||
#ifdef NS3_DEBUG_ENABLE
|
||||
|
||||
#define DEBUG_COMPONENT_DEFINE(name) \
|
||||
static DebugComponent g_debug = DebugComponent (name);
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
#define DEBUG(x) \
|
||||
|
||||
/**
|
||||
* \ingroup debugging
|
||||
* \param name a string
|
||||
*
|
||||
* Define a Debug component with a specific name. This macro
|
||||
* should be used at the top of every file in which you want
|
||||
* to use the NS_DEBUG macro. This macro defines a new
|
||||
* "debug component" which can be later selectively enabled
|
||||
* or disabled with the ns3::DebugComponentEnable and
|
||||
* ns3::DebugComponentDisable functions or with the NS_DEBUG
|
||||
* environment variable.
|
||||
*/
|
||||
#define NS_DEBUG_COMPONENT_DEFINE(name) \
|
||||
static ns3::DebugComponent g_debug = ns3::DebugComponent (name);
|
||||
|
||||
/**
|
||||
* \ingroup debugging
|
||||
* \param msg message to output
|
||||
*
|
||||
* Generate debugging output in the "debug component" of the
|
||||
* current file. i.e., every call to NS_DEBUG from within
|
||||
* a file implicitely generates out within the component
|
||||
* defined with the NS_DEBUG_COMPONENT_DEFINE macro in the
|
||||
* same file.
|
||||
*/
|
||||
#define NS_DEBUG(msg) \
|
||||
if (g_debug.IsEnabled ()) \
|
||||
{ \
|
||||
std::cout << x << std::endl; \
|
||||
std::cout << msg << std::endl; \
|
||||
}
|
||||
|
||||
/**
|
||||
* \ingroup debugging
|
||||
* \param msg message to output
|
||||
*
|
||||
* Generate debugging output unconditionally in all
|
||||
* debug builds.
|
||||
*/
|
||||
#define NS_DEBUG_UNCOND(msg) \
|
||||
std::cout << msg << std::endl;
|
||||
|
||||
#else /* NS3_DEBUG_ENABLE */
|
||||
|
||||
#define DEBUG_COMPONENT_DEFINE(name)
|
||||
#define DEBUG(x)
|
||||
#define NS_DEBUG_COMPONENT_DEFINE(name)
|
||||
#define NS_DEBUG(x)
|
||||
#define NS_DEBUG_UNCOND(msg)
|
||||
|
||||
#endif /* NS3_DEBUG_ENABLE */
|
||||
|
||||
|
||||
43
src/core/fatal-error.h
Normal file
43
src/core/fatal-error.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2006 INRIA
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
#ifndef FATAL_ERROR_H
|
||||
#define FATAL_ERROR_H
|
||||
|
||||
#include "assert.h"
|
||||
|
||||
/**
|
||||
* \defgroup error
|
||||
* \brief fatal error handling
|
||||
*
|
||||
* \param msg message to output when this macro is hit.
|
||||
*
|
||||
* When this macro is hit at runtime, the user-specified
|
||||
* error message is output and the program is halted by calling
|
||||
* the ns3::AssertBreakpoint function. This macro is enabled
|
||||
* unconditionally in all builds, including debug and optimized
|
||||
* builds.
|
||||
*/
|
||||
#define NS_FATAL_ERROR(msg) \
|
||||
std::cout << msg << std::endl; \
|
||||
ns3::AssertBreakpoint ();
|
||||
|
||||
|
||||
#endif /* FATAL_ERROR_H */
|
||||
@@ -23,7 +23,7 @@
|
||||
#define PTR_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <cassert>
|
||||
#include "assert.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -246,7 +246,7 @@ template <typename T>
|
||||
T *
|
||||
Ptr<T>::Remove (void)
|
||||
{
|
||||
assert ((*m_count) == 1);
|
||||
NS_ASSERT ((*m_count) == 1);
|
||||
T *retval = m_ptr;
|
||||
m_ptr = 0;
|
||||
return retval;
|
||||
|
||||
@@ -101,7 +101,7 @@ private:
|
||||
void RemoveFromList (void) {
|
||||
if (m_prev == this)
|
||||
{
|
||||
//assert (m_next == this);
|
||||
//NS_ASSERT (m_next == this);
|
||||
delete m_objPtr;
|
||||
m_objPtr = OBJ_PTR ();
|
||||
}
|
||||
|
||||
@@ -25,10 +25,11 @@
|
||||
#include <sys/poll.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <cassert>
|
||||
#include <string.h>
|
||||
#include <list>
|
||||
|
||||
#include "assert.h"
|
||||
|
||||
#define noTRACE_SYS_FILE 1
|
||||
|
||||
#ifdef TRACE_SYS_FILE
|
||||
@@ -71,7 +72,7 @@ void
|
||||
SystemFilePrivate::Open (char const *filename)
|
||||
{
|
||||
m_fd = ::open (filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
|
||||
assert (m_fd != -1);
|
||||
NS_ASSERT (m_fd != -1);
|
||||
}
|
||||
|
||||
#ifndef min
|
||||
@@ -92,7 +93,7 @@ SystemFilePrivate::Write (uint8_t const*buffer, uint32_t size)
|
||||
{
|
||||
ssize_t written = 0;
|
||||
written = ::write (m_fd, m_data, BUFFER_SIZE);
|
||||
assert (written == BUFFER_SIZE);
|
||||
NS_ASSERT (written == BUFFER_SIZE);
|
||||
m_current = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
*
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
#include "ns3/packet.h"
|
||||
#include "ns3/simulator.h"
|
||||
@@ -26,17 +26,6 @@
|
||||
#include "arp-cache.h"
|
||||
#include "arp-header.h"
|
||||
|
||||
#ifdef TRACE_ARP
|
||||
#include <iostream>
|
||||
#include "simulator.h"
|
||||
# define TRACE(x) \
|
||||
std::cout << "ARP TRACE " << Simulator::Now () << " " \
|
||||
<< x << std::endl;
|
||||
#else /* TRACE_ARP */
|
||||
# define TRACE(format,...)
|
||||
#endif /* TRACE_ARP */
|
||||
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
ArpCache::ArpCache (NetDevice *device, Ipv4Interface *interface)
|
||||
@@ -153,14 +142,14 @@ void
|
||||
ArpCache::Entry::MarkDead (void)
|
||||
{
|
||||
m_state = DEAD;
|
||||
//assert (m_waiting != 0);
|
||||
//NS_ASSERT (m_waiting != 0);
|
||||
UpdateSeen ();
|
||||
}
|
||||
Packet
|
||||
ArpCache::Entry::MarkAlive (MacAddress macAddress)
|
||||
{
|
||||
assert (m_state == WAIT_REPLY);
|
||||
//assert (m_waiting != 0);
|
||||
NS_ASSERT (m_state == WAIT_REPLY);
|
||||
//NS_ASSERT (m_waiting != 0);
|
||||
m_macAddress = macAddress;
|
||||
m_state = ALIVE;
|
||||
UpdateSeen ();
|
||||
@@ -172,7 +161,7 @@ ArpCache::Entry::MarkAlive (MacAddress macAddress)
|
||||
Packet
|
||||
ArpCache::Entry::UpdateWaitReply (Packet waiting)
|
||||
{
|
||||
assert (m_state == WAIT_REPLY);
|
||||
NS_ASSERT (m_state == WAIT_REPLY);
|
||||
/* We are already waiting for an answer so
|
||||
* we dump the previously waiting packet and
|
||||
* replace it with this one.
|
||||
@@ -184,8 +173,8 @@ ArpCache::Entry::UpdateWaitReply (Packet waiting)
|
||||
void
|
||||
ArpCache::Entry::MarkWaitReply (Packet waiting)
|
||||
{
|
||||
assert (m_state == ALIVE || m_state == DEAD);
|
||||
//assert (m_waiting == 0);
|
||||
NS_ASSERT (m_state == ALIVE || m_state == DEAD);
|
||||
//NS_ASSERT (m_waiting == 0);
|
||||
m_state = WAIT_REPLY;
|
||||
m_waiting = waiting;
|
||||
UpdateSeen ();
|
||||
@@ -194,7 +183,7 @@ ArpCache::Entry::MarkWaitReply (Packet waiting)
|
||||
MacAddress
|
||||
ArpCache::Entry::GetMacAddress (void)
|
||||
{
|
||||
assert (m_state == ALIVE);
|
||||
NS_ASSERT (m_state == ALIVE);
|
||||
return m_macAddress;
|
||||
}
|
||||
bool
|
||||
@@ -212,7 +201,7 @@ ArpCache::Entry::IsExpired (void)
|
||||
timeout = m_arp->GetAliveTimeout ();
|
||||
break;
|
||||
default:
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
timeout = Seconds (0);
|
||||
/* NOTREACHED */
|
||||
break;
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
#include "arp-header.h"
|
||||
#include "header-utils.h"
|
||||
|
||||
@@ -96,7 +96,7 @@ ArpHeader::PrintTo (std::ostream &os) const
|
||||
}
|
||||
else
|
||||
{
|
||||
assert (IsReply ());
|
||||
NS_ASSERT (IsReply ());
|
||||
os << " source mac: " << m_macSource
|
||||
<< " source ipv4: " << m_ipv4Source
|
||||
<< " dest mac: " << m_macDest
|
||||
@@ -114,7 +114,7 @@ void
|
||||
ArpHeader::SerializeTo (Buffer::Iterator start) const
|
||||
{
|
||||
Buffer::Iterator i = start;
|
||||
assert (m_macSource.GetLength () == m_macDest.GetLength ());
|
||||
NS_ASSERT (m_macSource.GetLength () == m_macDest.GetLength ());
|
||||
|
||||
/* ethernet */
|
||||
i.WriteHtonU16 (0x0001);
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "arp.h"
|
||||
#include "node.h"
|
||||
#include "net-device.h"
|
||||
#include "ipv4.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -45,7 +46,7 @@ ArpIpv4Interface::SendTo (Packet p, Ipv4Address dest)
|
||||
bool found = arp->Lookup (p, dest, GetDevice (), &hardwareDestination);
|
||||
if (found)
|
||||
{
|
||||
GetDevice ()->Send (p, hardwareDestination, 0x0800 /* XXX */);
|
||||
GetDevice ()->Send (p, hardwareDestination, Ipv4::PROT_NUMBER);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
|
||||
//
|
||||
// Copyright (c) 2006 Georgia Tech Research Corporation
|
||||
// All rights reserved.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License version 2 as
|
||||
// published by the Free Software Foundation;
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// Author: George F. Riley<riley@ece.gatech.edu>
|
||||
//
|
||||
|
||||
// NS3 - Layer 3 Protocol base class
|
||||
// George F. Riley, Georgia Tech, Spring 2007
|
||||
|
||||
#include "arp-l3-protocol.h"
|
||||
#include "arp.h"
|
||||
#include "node.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
ArpL3Protocol::ArpL3Protocol (Node *node)
|
||||
: L3Protocol (0x0806, 0/* XXX: correct version number ? */ ),
|
||||
m_node (node)
|
||||
{}
|
||||
ArpL3Protocol::~ArpL3Protocol ()
|
||||
{}
|
||||
|
||||
ArpL3Protocol *
|
||||
ArpL3Protocol::Copy (Node *node) const
|
||||
{
|
||||
return new ArpL3Protocol (node);
|
||||
}
|
||||
void
|
||||
ArpL3Protocol::Receive(Packet& p, NetDevice &device)
|
||||
{
|
||||
Arp * arp = m_node->GetArp ();
|
||||
if (arp != 0)
|
||||
{
|
||||
arp->Receive (p, &device);
|
||||
}
|
||||
}
|
||||
|
||||
}//namespace ns3
|
||||
@@ -1,49 +0,0 @@
|
||||
// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
|
||||
//
|
||||
// Copyright (c) 2006 Georgia Tech Research Corporation
|
||||
// All rights reserved.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License version 2 as
|
||||
// published by the Free Software Foundation;
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// Author: George F. Riley<riley@ece.gatech.edu>
|
||||
//
|
||||
|
||||
// NS3 - Layer 3 Protocol base class
|
||||
// George F. Riley, Georgia Tech, Spring 2007
|
||||
#ifndef ARP_L3_PROTOCOL_H
|
||||
#define ARP_L3_PROTOCOL_H
|
||||
|
||||
#include "l3-protocol.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
class Node;
|
||||
class NetDevice;
|
||||
class Packet;
|
||||
|
||||
class ArpL3Protocol : public L3Protocol
|
||||
{
|
||||
public:
|
||||
ArpL3Protocol (Node *node);
|
||||
virtual ~ArpL3Protocol ();
|
||||
|
||||
virtual ArpL3Protocol *Copy (Node *node) const;
|
||||
virtual void Receive(Packet& p, NetDevice &device);
|
||||
private:
|
||||
Node *m_node;
|
||||
};
|
||||
|
||||
}//namespace ns3
|
||||
|
||||
#endif /* ARP_L3_PROTOCOL_H */
|
||||
@@ -19,6 +19,7 @@
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
#include "ns3/packet.h"
|
||||
#include "ns3/debug.h"
|
||||
#include "arp.h"
|
||||
#include "arp-header.h"
|
||||
#include "arp-cache.h"
|
||||
@@ -27,12 +28,15 @@
|
||||
#include "node.h"
|
||||
#include "ipv4.h"
|
||||
|
||||
#define TRACE(x)
|
||||
NS_DEBUG_COMPONENT_DEFINE ("Arp");
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
const uint16_t Arp::PROT_NUMBER = 0x0806;
|
||||
|
||||
Arp::Arp (Node *node)
|
||||
: m_node (node)
|
||||
: L3Protocol (PROT_NUMBER, 0/* XXX: correct version number ? */ ),
|
||||
m_node (node)
|
||||
{}
|
||||
|
||||
Arp::~Arp ()
|
||||
@@ -44,7 +48,7 @@ Arp::~Arp ()
|
||||
}
|
||||
|
||||
Arp *
|
||||
Arp::Copy (Node *node)
|
||||
Arp::Copy (Node *node) const
|
||||
{
|
||||
return new Arp (node);
|
||||
}
|
||||
@@ -61,29 +65,29 @@ Arp::FindCache (NetDevice *device)
|
||||
}
|
||||
Ipv4Interface *interface = m_node->GetIpv4 ()->FindInterfaceForDevice (device);
|
||||
ArpCache * cache = new ArpCache (device, interface);
|
||||
assert (device->IsBroadcast ());
|
||||
NS_ASSERT (device->IsBroadcast ());
|
||||
device->SetLinkChangeCallback (MakeCallback (&ArpCache::Flush, cache));
|
||||
m_cacheList.push_back (cache);
|
||||
return cache;
|
||||
}
|
||||
|
||||
void
|
||||
Arp::Receive(Packet& packet, NetDevice *device)
|
||||
Arp::Receive(Packet& packet, NetDevice &device)
|
||||
{
|
||||
ArpCache *cache = FindCache (device);
|
||||
ArpCache *cache = FindCache (&device);
|
||||
ArpHeader arp;
|
||||
packet.Peek (arp);
|
||||
packet.Remove (arp);
|
||||
if (arp.IsRequest () &&
|
||||
arp.GetDestinationIpv4Address () == cache->GetInterface ()->GetAddress ())
|
||||
{
|
||||
TRACE ("got request from " << arp.GetSourceIpv4Address () << " -- send reply");
|
||||
NS_DEBUG ("got request from " << arp.GetSourceIpv4Address () << " -- send reply");
|
||||
SendArpReply (cache, arp.GetSourceIpv4Address (),
|
||||
arp.GetSourceHardwareAddress ());
|
||||
}
|
||||
else if (arp.IsReply () &&
|
||||
arp.GetDestinationIpv4Address ().IsEqual (cache->GetInterface ()->GetAddress ()) &&
|
||||
arp.GetDestinationHardwareAddress ().IsEqual (device->GetAddress ()))
|
||||
arp.GetDestinationHardwareAddress ().IsEqual (device.GetAddress ()))
|
||||
{
|
||||
Ipv4Address from = arp.GetSourceIpv4Address ();
|
||||
ArpCache::Entry *entry = cache->Lookup (from);
|
||||
@@ -91,7 +95,7 @@ Arp::Receive(Packet& packet, NetDevice *device)
|
||||
{
|
||||
if (entry->IsWaitReply ())
|
||||
{
|
||||
TRACE ("got reply from " << arp.GetSourceIpv4Address ()
|
||||
NS_DEBUG ("got reply from " << arp.GetSourceIpv4Address ()
|
||||
<< " for waiting entry -- flush");
|
||||
MacAddress from_mac = arp.GetSourceHardwareAddress ();
|
||||
Packet waiting = entry->MarkAlive (from_mac);
|
||||
@@ -101,14 +105,14 @@ Arp::Receive(Packet& packet, NetDevice *device)
|
||||
{
|
||||
// ignore this reply which might well be an attempt
|
||||
// at poisening my arp cache.
|
||||
TRACE ("got reply from " << arp.GetSourceIpv4Address () <<
|
||||
NS_DEBUG ("got reply from " << arp.GetSourceIpv4Address () <<
|
||||
" for non-waiting entry -- drop");
|
||||
// XXX report packet as dropped.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TRACE ("got reply for unknown entry -- drop");
|
||||
NS_DEBUG ("got reply for unknown entry -- drop");
|
||||
// XXX report packet as dropped.
|
||||
}
|
||||
}
|
||||
@@ -126,19 +130,19 @@ Arp::Lookup (Packet &packet, Ipv4Address destination,
|
||||
{
|
||||
if (entry->IsDead ())
|
||||
{
|
||||
TRACE ("dead entry for " << destination << " expired -- send arp request");
|
||||
NS_DEBUG ("dead entry for " << destination << " expired -- send arp request");
|
||||
entry->MarkWaitReply (packet);
|
||||
SendArpRequest (cache, destination);
|
||||
}
|
||||
else if (entry->IsAlive ())
|
||||
{
|
||||
TRACE ("alive entry for " << destination << " expired -- send arp request");
|
||||
NS_DEBUG ("alive entry for " << destination << " expired -- send arp request");
|
||||
entry->MarkWaitReply (packet);
|
||||
SendArpRequest (cache, destination);
|
||||
}
|
||||
else if (entry->IsWaitReply ())
|
||||
{
|
||||
TRACE ("wait reply for " << destination << " expired -- drop");
|
||||
NS_DEBUG ("wait reply for " << destination << " expired -- drop");
|
||||
entry->MarkDead ();
|
||||
// XXX report packet as 'dropped'
|
||||
}
|
||||
@@ -147,18 +151,18 @@ Arp::Lookup (Packet &packet, Ipv4Address destination,
|
||||
{
|
||||
if (entry->IsDead ())
|
||||
{
|
||||
TRACE ("dead entry for " << destination << " valid -- drop");
|
||||
NS_DEBUG ("dead entry for " << destination << " valid -- drop");
|
||||
// XXX report packet as 'dropped'
|
||||
}
|
||||
else if (entry->IsAlive ())
|
||||
{
|
||||
TRACE ("alive entry for " << destination << " valid -- send");
|
||||
NS_DEBUG ("alive entry for " << destination << " valid -- send");
|
||||
*hardwareDestination = entry->GetMacAddress ();
|
||||
return true;
|
||||
}
|
||||
else if (entry->IsWaitReply ())
|
||||
{
|
||||
TRACE ("wait reply for " << destination << " valid -- drop previous");
|
||||
NS_DEBUG ("wait reply for " << destination << " valid -- drop previous");
|
||||
Packet old = entry->UpdateWaitReply (packet);
|
||||
// XXX report 'old' packet as 'dropped'
|
||||
}
|
||||
@@ -168,7 +172,7 @@ Arp::Lookup (Packet &packet, Ipv4Address destination,
|
||||
else
|
||||
{
|
||||
// This is our first attempt to transmit data to this destination.
|
||||
TRACE ("no entry for " << destination << " -- send arp request");
|
||||
NS_DEBUG ("no entry for " << destination << " -- send arp request");
|
||||
entry = cache->Add (destination);
|
||||
entry->MarkWaitReply (packet);
|
||||
SendArpRequest (cache, destination);
|
||||
@@ -187,7 +191,7 @@ Arp::SendArpRequest (ArpCache const *cache, Ipv4Address to)
|
||||
to);
|
||||
Packet packet;
|
||||
packet.Add (arp);
|
||||
cache->GetDevice ()->Send (packet, cache->GetDevice ()->GetBroadcast (), 0x0806);
|
||||
cache->GetDevice ()->Send (packet, cache->GetDevice ()->GetBroadcast (), PROT_NUMBER);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -199,7 +203,7 @@ Arp::SendArpReply (ArpCache const *cache, Ipv4Address toIp, MacAddress toMac)
|
||||
toMac, toIp);
|
||||
Packet packet;
|
||||
packet.Add (arp);
|
||||
cache->GetDevice ()->Send (packet, toMac, 0x0806);
|
||||
cache->GetDevice ()->Send (packet, toMac, PROT_NUMBER);
|
||||
}
|
||||
|
||||
}//namespace ns3
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <list>
|
||||
#include "ipv4-address.h"
|
||||
#include "mac-address.h"
|
||||
#include "l3-protocol.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -32,14 +33,16 @@ class NetDevice;
|
||||
class Node;
|
||||
class Packet;
|
||||
|
||||
class Arp
|
||||
class Arp : public L3Protocol
|
||||
{
|
||||
public:
|
||||
static const uint16_t PROT_NUMBER;
|
||||
|
||||
Arp (Node *node);
|
||||
~Arp ();
|
||||
Arp *Copy (Node *node);
|
||||
virtual Arp *Copy (Node *node) const;
|
||||
|
||||
void Receive(Packet& p, NetDevice *device);
|
||||
virtual void Receive(Packet& p, NetDevice &device);
|
||||
bool Lookup (Packet &p, Ipv4Address destination,
|
||||
NetDevice *device,
|
||||
MacAddress *hardwareDestination);
|
||||
|
||||
@@ -20,17 +20,15 @@
|
||||
#include "ns3/debug.h"
|
||||
#include "drop-tail.h"
|
||||
|
||||
namespace ns3 {
|
||||
NS_DEBUG_COMPONENT_DEFINE ("DropTailQueue");
|
||||
|
||||
namespace {
|
||||
int dtqDebug = 1;
|
||||
}
|
||||
namespace ns3 {
|
||||
|
||||
DropTailQueue::DropTailQueue () :
|
||||
m_packets (),
|
||||
m_maxPackets(DTQ_NPACKETS_MAX_DEFAULT)
|
||||
{
|
||||
NS3_TRACE(dtqDebug,
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::DropTailQueue ()")
|
||||
}
|
||||
|
||||
@@ -38,7 +36,7 @@ DropTailQueue::DropTailQueue (TraceContainer &traceContainer) :
|
||||
m_packets(),
|
||||
m_maxPackets(DTQ_NPACKETS_MAX_DEFAULT)
|
||||
{
|
||||
NS3_TRACE(dtqDebug,
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::DropTailQueue (" << &traceContainer << ")")
|
||||
|
||||
RegisterTraces(traceContainer);
|
||||
@@ -46,14 +44,14 @@ DropTailQueue::DropTailQueue (TraceContainer &traceContainer) :
|
||||
|
||||
DropTailQueue::~DropTailQueue ()
|
||||
{
|
||||
NS3_TRACE(dtqDebug,
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::~DropTailQueue ()")
|
||||
}
|
||||
|
||||
void
|
||||
DropTailQueue::SetMaxPackets (uint32_t npackets)
|
||||
{
|
||||
NS3_TRACE(dtqDebug,
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::SetMaxPackets (" << npackets << ")")
|
||||
|
||||
m_maxPackets = npackets;
|
||||
@@ -62,7 +60,7 @@ DropTailQueue::SetMaxPackets (uint32_t npackets)
|
||||
uint32_t
|
||||
DropTailQueue::GetMaxPackets (void)
|
||||
{
|
||||
NS3_TRACE(dtqDebug,
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::GetMaxPackets () <= " << m_maxPackets)
|
||||
|
||||
return m_maxPackets;
|
||||
@@ -71,12 +69,12 @@ DropTailQueue::GetMaxPackets (void)
|
||||
bool
|
||||
DropTailQueue::DoEnque (const Packet& p)
|
||||
{
|
||||
NS3_TRACE(dtqDebug,
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::DoEnque (" << &p << ")")
|
||||
|
||||
if (m_nPackets >= m_maxPackets)
|
||||
{
|
||||
NS3_TRACE(dtqDebug,
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::DoEnque (): Queue full -- droppping pkt")
|
||||
Drop (p);
|
||||
return false;
|
||||
@@ -89,12 +87,12 @@ DropTailQueue::DoEnque (const Packet& p)
|
||||
bool
|
||||
DropTailQueue::DoDeque (Packet& p)
|
||||
{
|
||||
NS3_TRACE(dtqDebug,
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::DoDeque (" << &p << ")")
|
||||
|
||||
if (m_packets.empty())
|
||||
{
|
||||
NS3_TRACE(dtqDebug,
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::DoDeque (): Queue empty")
|
||||
return false;
|
||||
}
|
||||
@@ -102,7 +100,7 @@ DropTailQueue::DoDeque (Packet& p)
|
||||
p = m_packets.front ();
|
||||
m_packets.pop ();
|
||||
|
||||
NS3_TRACE(dtqDebug,
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::DoDeque (): Popped " << &p << " <= true")
|
||||
|
||||
return true;
|
||||
|
||||
@@ -23,14 +23,11 @@
|
||||
|
||||
#include "net-device-list.h"
|
||||
#include "l3-demux.h"
|
||||
#include "ipv4-l3-protocol.h"
|
||||
#include "ipv4-l4-demux.h"
|
||||
#include "internet-node.h"
|
||||
#include "udp.h"
|
||||
#include "ipv4.h"
|
||||
#include "arp.h"
|
||||
#include "udp-ipv4-l4-protocol.h"
|
||||
#include "arp-l3-protocol.h"
|
||||
#include "ipv4-loopback-interface.h"
|
||||
|
||||
namespace ns3 {
|
||||
@@ -41,12 +38,9 @@ InternetNode::InternetNode()
|
||||
m_netDevices = new NetDeviceList();
|
||||
m_l3Demux = new L3Demux(this);
|
||||
m_ipv4L4Demux = new Ipv4L4Demux(this);
|
||||
m_udp = new Udp (this);
|
||||
m_ipv4 = new Ipv4 (this);
|
||||
m_arp = new Arp (this);
|
||||
m_l3Demux->Insert (Ipv4L3Protocol (this));
|
||||
m_l3Demux->Insert (ArpL3Protocol (this));
|
||||
m_ipv4L4Demux->Insert (UdpIpv4L4Protocol (this));
|
||||
m_l3Demux->Insert (Ipv4 (this));
|
||||
m_l3Demux->Insert (Arp (this));
|
||||
m_ipv4L4Demux->Insert (Udp (this));
|
||||
SetupLoopback ();
|
||||
}
|
||||
|
||||
@@ -55,9 +49,6 @@ InternetNode::InternetNode (InternetNode const &o)
|
||||
m_netDevices = new NetDeviceList ();
|
||||
m_l3Demux = o.m_l3Demux->Copy (this);
|
||||
m_ipv4L4Demux = o.m_ipv4L4Demux->Copy (this);
|
||||
m_udp = o.m_udp->Copy (this);
|
||||
m_ipv4 = o.m_ipv4->Copy (this);
|
||||
m_arp = o.m_arp->Copy (this);
|
||||
SetupLoopback ();
|
||||
}
|
||||
|
||||
@@ -66,9 +57,6 @@ InternetNode::~InternetNode ()
|
||||
delete m_netDevices;
|
||||
delete m_l3Demux;
|
||||
delete m_ipv4L4Demux;
|
||||
delete m_udp;
|
||||
delete m_ipv4;
|
||||
delete m_arp;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -77,8 +65,8 @@ InternetNode::SetupLoopback (void)
|
||||
Ipv4LoopbackInterface * interface = new Ipv4LoopbackInterface (this);
|
||||
interface->SetAddress (Ipv4Address::GetLoopback ());
|
||||
interface->SetNetworkMask (Ipv4Mask::GetLoopback ());
|
||||
uint32_t index = m_ipv4->AddInterface (interface);
|
||||
m_ipv4->AddHostRouteTo (Ipv4Address::GetLoopback (), index);
|
||||
uint32_t index = GetIpv4 ()->AddInterface (interface);
|
||||
GetIpv4 ()->AddHostRouteTo (Ipv4Address::GetLoopback (), index);
|
||||
interface->SetUp ();
|
||||
}
|
||||
|
||||
@@ -112,18 +100,18 @@ InternetNode::GetIpv4L4Demux() const
|
||||
Ipv4 *
|
||||
InternetNode::GetIpv4 (void) const
|
||||
{
|
||||
return m_ipv4;
|
||||
return static_cast<Ipv4*> (m_l3Demux->Lookup (Ipv4::PROT_NUMBER));
|
||||
}
|
||||
Udp *
|
||||
InternetNode::GetUdp (void) const
|
||||
{
|
||||
return m_udp;
|
||||
return static_cast<Udp*> (m_ipv4L4Demux->Lookup (Udp::PROT_NUMBER));
|
||||
}
|
||||
|
||||
Arp *
|
||||
InternetNode::GetArp (void) const
|
||||
{
|
||||
return m_arp;
|
||||
return static_cast<Arp*> (m_l3Demux->Lookup (Arp::PROT_NUMBER));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -52,9 +52,6 @@ private:
|
||||
NetDeviceList* m_netDevices;
|
||||
L3Demux* m_l3Demux;
|
||||
Ipv4L4Demux* m_ipv4L4Demux;
|
||||
Ipv4 * m_ipv4;
|
||||
Udp * m_udp;
|
||||
Arp * m_arp;
|
||||
};
|
||||
|
||||
}//namespace ns3
|
||||
|
||||
@@ -19,20 +19,12 @@
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
#include "ns3/debug.h"
|
||||
#include "ns3/header.h"
|
||||
#include "ipv4-header.h"
|
||||
|
||||
#define TRACE_CHUNK_IPV4 1
|
||||
|
||||
#ifdef TRACE_CHUNK_IPV4
|
||||
#include <iostream>
|
||||
#include "ns3/simulator.h"
|
||||
# define TRACE(x) \
|
||||
std::cout << "CHUNK IPV4 TRACE " << Simulator::Now () << " " << x << std::endl;
|
||||
#else /* TRACE_CHUNK_IPV4 */
|
||||
# define TRACE(format,...)
|
||||
#endif /* TRACE_CHUNK_IPV4 */
|
||||
NS_DEBUG_COMPONENT_DEFINE ("Ipv4Header");
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -137,13 +129,13 @@ Ipv4Header::IsDontFragment (void) const
|
||||
void
|
||||
Ipv4Header::SetFragmentOffset (uint16_t offset)
|
||||
{
|
||||
assert (!(offset & (~0x3fff)));
|
||||
NS_ASSERT (!(offset & (~0x3fff)));
|
||||
m_fragmentOffset = offset;
|
||||
}
|
||||
uint16_t
|
||||
Ipv4Header::GetFragmentOffset (void) const
|
||||
{
|
||||
assert (!(m_fragmentOffset & (~0x3fff)));
|
||||
NS_ASSERT (!(m_fragmentOffset & (~0x3fff)));
|
||||
return m_fragmentOffset;
|
||||
}
|
||||
|
||||
@@ -225,7 +217,6 @@ Ipv4Header::SerializeTo (Buffer::Iterator start) const
|
||||
{
|
||||
Buffer::Iterator i = start;
|
||||
|
||||
//TRACE ("init ipv4 current="<<buffer->GetCurrent ());
|
||||
uint8_t verIhl = (4 << 4) | (5);
|
||||
i.WriteU8 (verIhl);
|
||||
i.WriteU8 (m_tos);
|
||||
@@ -255,10 +246,9 @@ Ipv4Header::SerializeTo (Buffer::Iterator start) const
|
||||
#if 0
|
||||
// XXX we need to add Buffer::Iterator::PeekData method
|
||||
uint8_t *data = start.PeekData ();
|
||||
//TRACE ("fini ipv4 current="<<state->GetCurrent ());
|
||||
uint16_t checksum = UtilsChecksumCalculate (0, data, GetSize ());
|
||||
checksum = UtilsChecksumComplete (checksum);
|
||||
//TRACE ("checksum=" <<checksum);
|
||||
NS_DEBUG ("checksum=" <<checksum);
|
||||
i = start;
|
||||
i.Next (10);
|
||||
i.WriteU16 (checksum);
|
||||
@@ -272,7 +262,7 @@ Ipv4Header::DeserializeFrom (Buffer::Iterator start)
|
||||
uint8_t verIhl = i.ReadU8 ();
|
||||
uint8_t ihl = verIhl & 0x0f;
|
||||
uint16_t headerSize = ihl * 4;
|
||||
assert ((verIhl >> 4) == 4);
|
||||
NS_ASSERT ((verIhl >> 4) == 4);
|
||||
m_tos = i.ReadU8 ();
|
||||
uint16_t size = i.ReadNtohU16 ();
|
||||
m_payloadSize = size - headerSize;
|
||||
@@ -301,7 +291,6 @@ Ipv4Header::DeserializeFrom (Buffer::Iterator start)
|
||||
{
|
||||
#if 0
|
||||
uint8_t *data = start.PeekData ();
|
||||
//TRACE ("fini ipv4 current="<<state->GetCurrent ());
|
||||
uint16_t localChecksum = UtilsChecksumCalculate (0, data, headerSize);
|
||||
if (localChecksum == 0xffff)
|
||||
{
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
|
||||
//
|
||||
// Copyright (c) 2006 Georgia Tech Research Corporation
|
||||
// All rights reserved.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License version 2 as
|
||||
// published by the Free Software Foundation;
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// Author: George F. Riley <riley@ece.gatech.edu>
|
||||
//
|
||||
|
||||
// NS3 - Layer 3 Protocol base class
|
||||
// George F. Riley, Georgia Tech, Spring 2007
|
||||
|
||||
#include "ipv4-l3-protocol.h"
|
||||
#include "ipv4.h"
|
||||
#include "node.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
Ipv4L3Protocol::Ipv4L3Protocol (Node *node)
|
||||
: L3Protocol (0x0800, 4),
|
||||
m_node (node)
|
||||
{}
|
||||
Ipv4L3Protocol::~Ipv4L3Protocol ()
|
||||
{}
|
||||
|
||||
Ipv4L3Protocol *
|
||||
Ipv4L3Protocol::Copy (Node *node) const
|
||||
{
|
||||
Ipv4L3Protocol *copy = new Ipv4L3Protocol (node);
|
||||
return copy;
|
||||
}
|
||||
void
|
||||
Ipv4L3Protocol::Receive(Packet& p, NetDevice &device)
|
||||
{
|
||||
Ipv4 *ipv4 = m_node->GetIpv4 ();
|
||||
if (ipv4 != 0)
|
||||
{
|
||||
ipv4->Receive (p, device);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}//namespace ns3
|
||||
@@ -1,47 +0,0 @@
|
||||
// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
|
||||
//
|
||||
// Copyright (c) 2006 Georgia Tech Research Corporation
|
||||
// All rights reserved.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License version 2 as
|
||||
// published by the Free Software Foundation;
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// Author: George F. Riley <riley@ece.gatech.edu>
|
||||
//
|
||||
|
||||
// NS3 - Layer 3 Protocol base class
|
||||
// George F. Riley, Georgia Tech, Spring 2007
|
||||
|
||||
#ifndef IPV4_L3_PROTOCOL_H
|
||||
#define IPV4_L3_PROTOCOL_H
|
||||
|
||||
#include "l3-protocol.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
class Ipv4L3Protocol : public L3Protocol
|
||||
{
|
||||
public:
|
||||
Ipv4L3Protocol (Node *node);
|
||||
virtual ~Ipv4L3Protocol ();
|
||||
|
||||
virtual Ipv4L3Protocol *Copy (Node *node) const;
|
||||
virtual void Receive (Packet& p, NetDevice &device);
|
||||
private:
|
||||
Node *m_node;
|
||||
};
|
||||
|
||||
}//namespace ns3
|
||||
|
||||
|
||||
#endif /* IPV4_L3_PROTOCOL_H */
|
||||
@@ -20,7 +20,7 @@
|
||||
*/
|
||||
|
||||
#include "ipv4-route.h"
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -180,7 +180,7 @@ std::ostream& operator<< (std::ostream& os, Ipv4Route const& route)
|
||||
{
|
||||
if (route.IsDefault ())
|
||||
{
|
||||
assert (route.IsGateway ());
|
||||
NS_ASSERT (route.IsGateway ());
|
||||
os << "default out=" << route.GetInterface () << ", next hop=" << route.GetGateway ();
|
||||
}
|
||||
else if (route.IsHost ())
|
||||
@@ -215,7 +215,7 @@ std::ostream& operator<< (std::ostream& os, Ipv4Route const& route)
|
||||
}
|
||||
else
|
||||
{
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
}
|
||||
return os;
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
//
|
||||
|
||||
#include "ns3/packet.h"
|
||||
#include "ns3/debug.h"
|
||||
|
||||
#include "ipv4.h"
|
||||
#include "ipv4-l4-protocol.h"
|
||||
@@ -31,12 +32,15 @@
|
||||
#include "node.h"
|
||||
#include "ipv4-l4-demux.h"
|
||||
|
||||
#define TRACE(x)
|
||||
NS_DEBUG_COMPONENT_DEFINE ("Ipv4");
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
const uint16_t Ipv4::PROT_NUMBER = 0x0800;
|
||||
|
||||
Ipv4::Ipv4(Node *node)
|
||||
: m_nInterfaces (0),
|
||||
: L3Protocol (PROT_NUMBER, 4),
|
||||
m_nInterfaces (0),
|
||||
m_defaultTtl (64),
|
||||
m_identification (0),
|
||||
m_defaultRoute (0),
|
||||
@@ -129,7 +133,7 @@ Ipv4::Lookup (Ipv4Address dest)
|
||||
i != m_hostRoutes.end ();
|
||||
i++)
|
||||
{
|
||||
assert ((*i)->IsHost ());
|
||||
NS_ASSERT ((*i)->IsHost ());
|
||||
if ((*i)->GetDest ().IsEqual (dest))
|
||||
{
|
||||
return (*i);
|
||||
@@ -139,7 +143,7 @@ Ipv4::Lookup (Ipv4Address dest)
|
||||
j != m_networkRoutes.end ();
|
||||
j++)
|
||||
{
|
||||
assert ((*j)->IsNetwork ());
|
||||
NS_ASSERT ((*j)->IsNetwork ());
|
||||
Ipv4Mask mask = (*j)->GetDestNetworkMask ();
|
||||
Ipv4Address entry = (*j)->GetDestNetwork ();
|
||||
if (mask.IsMatch (dest, entry))
|
||||
@@ -149,7 +153,7 @@ Ipv4::Lookup (Ipv4Address dest)
|
||||
}
|
||||
if (m_defaultRoute != 0)
|
||||
{
|
||||
assert (m_defaultRoute->IsDefault ());
|
||||
NS_ASSERT (m_defaultRoute->IsDefault ());
|
||||
return m_defaultRoute;
|
||||
}
|
||||
return 0;
|
||||
@@ -204,7 +208,7 @@ Ipv4::GetRoute (uint32_t index)
|
||||
}
|
||||
tmp++;
|
||||
}
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
// quiet compiler.
|
||||
return 0;
|
||||
}
|
||||
@@ -250,7 +254,7 @@ Ipv4::RemoveRoute (uint32_t index)
|
||||
}
|
||||
tmp++;
|
||||
}
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
}
|
||||
|
||||
|
||||
@@ -352,7 +356,7 @@ Ipv4::Send (Packet const &packet,
|
||||
Ipv4Route *route = Lookup (ipHeader.GetDestination ());
|
||||
if (route == 0)
|
||||
{
|
||||
TRACE ("not for me -- forwarding but no route to host. drop.");
|
||||
NS_DEBUG ("not for me -- forwarding but no route to host. drop.");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -365,7 +369,7 @@ Ipv4::SendRealOut (Packet const &p, Ipv4Header const &ip, Ipv4Route const &route
|
||||
Packet packet = p;
|
||||
packet.Add (ip);
|
||||
Ipv4Interface *outInterface = GetInterface (route.GetInterface ());
|
||||
assert (packet.GetSize () <= outInterface->GetMtu ());
|
||||
NS_ASSERT (packet.GetSize () <= outInterface->GetMtu ());
|
||||
// XXX log trace here.
|
||||
if (route.IsGateway ())
|
||||
{
|
||||
@@ -386,7 +390,7 @@ Ipv4::Forwarding (Packet const &packet, Ipv4Header &ipHeader, NetDevice &device)
|
||||
{
|
||||
if ((*i)->GetAddress ().IsEqual (ipHeader.GetDestination ()))
|
||||
{
|
||||
TRACE ("for me 1");
|
||||
NS_DEBUG ("for me 1");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -399,7 +403,7 @@ Ipv4::Forwarding (Packet const &packet, Ipv4Header &ipHeader, NetDevice &device)
|
||||
{
|
||||
if (ipHeader.GetDestination ().IsEqual (interface->GetBroadcast ()))
|
||||
{
|
||||
TRACE ("for me 2");
|
||||
NS_DEBUG ("for me 2");
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
@@ -408,29 +412,29 @@ Ipv4::Forwarding (Packet const &packet, Ipv4Header &ipHeader, NetDevice &device)
|
||||
|
||||
if (ipHeader.GetDestination ().IsEqual (Ipv4Address::GetBroadcast ()))
|
||||
{
|
||||
TRACE ("for me 3");
|
||||
NS_DEBUG ("for me 3");
|
||||
return false;
|
||||
}
|
||||
if (ipHeader.GetDestination ().IsEqual (Ipv4Address::GetAny ()))
|
||||
{
|
||||
TRACE ("for me 4");
|
||||
NS_DEBUG ("for me 4");
|
||||
return false;
|
||||
}
|
||||
if (ipHeader.GetTtl () == 1)
|
||||
{
|
||||
// Should send ttl expired here
|
||||
// XXX
|
||||
TRACE ("not for me -- ttl expired. drop.");
|
||||
NS_DEBUG ("not for me -- ttl expired. drop.");
|
||||
return true;
|
||||
}
|
||||
ipHeader.SetTtl (ipHeader.GetTtl () - 1);
|
||||
Ipv4Route *route = Lookup (ipHeader.GetDestination ());
|
||||
if (route == 0)
|
||||
{
|
||||
TRACE ("not for me -- forwarding but no route to host. drop.");
|
||||
NS_DEBUG ("not for me -- forwarding but no route to host. drop.");
|
||||
return true;
|
||||
}
|
||||
TRACE ("not for me -- forwarding.");
|
||||
NS_DEBUG ("not for me -- forwarding.");
|
||||
SendRealOut (packet, ipHeader, *route);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <list>
|
||||
#include <stdint.h>
|
||||
#include "ipv4-address.h"
|
||||
#include "l3-protocol.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -40,8 +41,11 @@ class Node;
|
||||
/**
|
||||
* ::Send is always defined in subclasses.
|
||||
*/
|
||||
class Ipv4 {
|
||||
class Ipv4 : public L3Protocol
|
||||
{
|
||||
public:
|
||||
static const uint16_t PROT_NUMBER;
|
||||
|
||||
Ipv4(Node *node);
|
||||
virtual ~Ipv4 ();
|
||||
|
||||
@@ -88,7 +92,7 @@ public:
|
||||
Ipv4Interface *FindInterfaceForDevice (NetDevice const*device);
|
||||
|
||||
|
||||
Ipv4* Copy(Node *node) const;
|
||||
virtual Ipv4* Copy(Node *node) const;
|
||||
/**
|
||||
* Lower layer calls this method after calling L3Demux::Lookup
|
||||
* The ARP subclass needs to know from which NetDevice this
|
||||
@@ -96,7 +100,7 @@ public:
|
||||
* - implement a per-NetDevice ARP cache
|
||||
* - send back arp replies on the right device
|
||||
*/
|
||||
void Receive(Packet& p, NetDevice &device);
|
||||
virtual void Receive(Packet& p, NetDevice &device);
|
||||
|
||||
void Send (Packet const &packet, Ipv4Address source,
|
||||
Ipv4Address destination, uint8_t protocol);
|
||||
|
||||
@@ -19,22 +19,10 @@
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
#include "llc-snap-header.h"
|
||||
|
||||
#define noTRACE_LLC_SNAP_HEADER 1
|
||||
|
||||
#ifdef TRACE_LLC_SNAP_HEADER
|
||||
#include <iostream>
|
||||
#include "ns3/simulator.h"
|
||||
# define TRACE(x) \
|
||||
std::cout << "LLCSNAP HEAD TRACE " << Simulator::Now () << " " << x << std::endl;
|
||||
#else /* TRACE_LLC_SNAP_HEADER */
|
||||
# define TRACE(format,...)
|
||||
#endif /* TRACE_LLC_SNAP_HEADER */
|
||||
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
LlcSnapHeader::LlcSnapHeader ()
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
#include "mac-address.h"
|
||||
|
||||
#define ASCII_a (0x41)
|
||||
@@ -56,7 +56,7 @@ MacAddress::MacAddress () : m_len(0)
|
||||
|
||||
MacAddress::MacAddress (uint8_t const *address, uint8_t len)
|
||||
{
|
||||
assert(len <= MacAddress::MAX_LEN);
|
||||
NS_ASSERT (len <= MacAddress::MAX_LEN);
|
||||
for (int i=0; i < len; i++)
|
||||
{
|
||||
m_address[i] = address[i];
|
||||
@@ -164,7 +164,7 @@ bool operator < (MacAddress const&a, MacAddress const&b)
|
||||
uint8_t b_p[MacAddress::MAX_LEN];
|
||||
a.Peek (a_p);
|
||||
b.Peek (b_p);
|
||||
assert(a.GetLength() == b.GetLength());
|
||||
NS_ASSERT (a.GetLength() == b.GetLength());
|
||||
for (uint8_t i = 0; i < a.GetLength(); i++)
|
||||
{
|
||||
if (a_p[i] < b_p[i])
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
#include "net-device.h"
|
||||
#include "l3-demux.h"
|
||||
@@ -93,7 +93,7 @@ NetDevice::IsBroadcast (void) const
|
||||
MacAddress const &
|
||||
NetDevice::GetBroadcast (void) const
|
||||
{
|
||||
assert (m_isBroadcast);
|
||||
NS_ASSERT (m_isBroadcast);
|
||||
return m_broadcast;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,11 +20,9 @@
|
||||
#include "ns3/debug.h"
|
||||
#include "queue.h"
|
||||
|
||||
namespace ns3 {
|
||||
NS_DEBUG_COMPONENT_DEFINE ("Queue");
|
||||
|
||||
namespace {
|
||||
int qDebug = 1;
|
||||
}
|
||||
namespace ns3 {
|
||||
|
||||
Queue::Queue() :
|
||||
m_nBytes(0),
|
||||
@@ -34,20 +32,20 @@ Queue::Queue() :
|
||||
m_nTotalDroppedBytes(0),
|
||||
m_nTotalDroppedPackets(0)
|
||||
{
|
||||
NS3_TRACE(qDebug, "Queue::Queue ()")
|
||||
NS_DEBUG("Queue::Queue ()")
|
||||
}
|
||||
|
||||
Queue::~Queue()
|
||||
{
|
||||
NS3_TRACE(qDebug, "Queue::~Queue ()")
|
||||
NS_DEBUG("Queue::~Queue ()")
|
||||
}
|
||||
|
||||
bool
|
||||
Queue::Enque (const Packet& p)
|
||||
{
|
||||
NS3_TRACE(qDebug, "Queue::Enque (" << &p << ")")
|
||||
NS_DEBUG("Queue::Enque (" << &p << ")")
|
||||
|
||||
NS3_TRACE(qDebug, "Queue::Enque (): m_traceEnque (p)")
|
||||
NS_DEBUG("Queue::Enque (): m_traceEnque (p)")
|
||||
m_traceEnque ("+ <timestamp> ", p);
|
||||
|
||||
bool retval = DoEnque (p);
|
||||
@@ -62,7 +60,7 @@ Queue::Enque (const Packet& p)
|
||||
bool
|
||||
Queue::Deque (Packet &p)
|
||||
{
|
||||
NS3_TRACE(qDebug, "Queue::Deque (" << &p << ")")
|
||||
NS_DEBUG("Queue::Deque (" << &p << ")")
|
||||
|
||||
bool retval = DoDeque (p);
|
||||
|
||||
@@ -71,10 +69,10 @@ Queue::Deque (Packet &p)
|
||||
m_nBytes -= p.GetSize ();
|
||||
m_nPackets--;
|
||||
|
||||
assert(m_nBytes >= 0);
|
||||
assert(m_nPackets >= 0);
|
||||
NS_ASSERT (m_nBytes >= 0);
|
||||
NS_ASSERT (m_nPackets >= 0);
|
||||
|
||||
NS3_TRACE(qDebug, "Queue::Deque (): m_traceDeque (p)")
|
||||
NS_DEBUG("Queue::Deque (): m_traceDeque (p)")
|
||||
m_traceDeque ("+ <timestamp> ", static_cast<const Packet &>(p));
|
||||
}
|
||||
|
||||
@@ -84,15 +82,15 @@ Queue::Deque (Packet &p)
|
||||
void
|
||||
Queue::DequeAll (void)
|
||||
{
|
||||
NS3_TRACE(qDebug, "Queue::DequeAll ()")
|
||||
NS_DEBUG("Queue::DequeAll ()")
|
||||
|
||||
assert (!"Don't know what to do with dequeued packets!");
|
||||
NS_ASSERT (!"Don't know what to do with dequeued packets!");
|
||||
}
|
||||
|
||||
uint32_t
|
||||
Queue::GetNPackets (void)
|
||||
{
|
||||
NS3_TRACE(qDebug, "Queue::GetNPackets () <= " << m_nPackets)
|
||||
NS_DEBUG("Queue::GetNPackets () <= " << m_nPackets)
|
||||
|
||||
return m_nPackets;
|
||||
}
|
||||
@@ -100,7 +98,7 @@ Queue::GetNPackets (void)
|
||||
uint32_t
|
||||
Queue::GetNBytes (void)
|
||||
{
|
||||
NS3_TRACE(qDebug, "Queue::GetNBytes () <= " << m_nBytes)
|
||||
NS_DEBUG("Queue::GetNBytes () <= " << m_nBytes)
|
||||
|
||||
return m_nBytes;
|
||||
}
|
||||
@@ -109,14 +107,14 @@ Queue::GetNBytes (void)
|
||||
bool
|
||||
Queue::IsEmpty (void)
|
||||
{
|
||||
NS3_TRACE(qDebug, "Queue::IsEmpty () <= " << (m_nPackets == 0))
|
||||
NS_DEBUG("Queue::IsEmpty () <= " << (m_nPackets == 0))
|
||||
return m_nPackets == 0;
|
||||
}
|
||||
|
||||
void
|
||||
Queue::RegisterTraces (TraceContainer &container)
|
||||
{
|
||||
NS3_TRACE(qDebug, "Queue::RegisterTraces (" << &container << ")")
|
||||
NS_DEBUG("Queue::RegisterTraces (" << &container << ")")
|
||||
|
||||
container.RegisterCallback ("Queue::Enque", &m_traceEnque);
|
||||
container.RegisterCallback ("Queue::Deque", &m_traceDeque);
|
||||
@@ -126,7 +124,7 @@ Queue::RegisterTraces (TraceContainer &container)
|
||||
uint32_t
|
||||
Queue::GetTotalReceivedBytes (void)
|
||||
{
|
||||
NS3_TRACE(qDebug,
|
||||
NS_DEBUG(
|
||||
"Queue::GetTotalReceivedBytes () <= " << m_nTotalReceivedBytes)
|
||||
|
||||
return m_nTotalReceivedBytes;
|
||||
@@ -135,7 +133,7 @@ Queue::GetTotalReceivedBytes (void)
|
||||
uint32_t
|
||||
Queue::GetTotalReceivedPackets (void)
|
||||
{
|
||||
NS3_TRACE(qDebug,
|
||||
NS_DEBUG(
|
||||
"Queue::GetTotalReceivedPackets () <= " << m_nTotalReceivedPackets)
|
||||
|
||||
return m_nTotalReceivedPackets;
|
||||
@@ -144,7 +142,7 @@ Queue::GetTotalReceivedPackets (void)
|
||||
uint32_t
|
||||
Queue:: GetTotalDroppedBytes (void)
|
||||
{
|
||||
NS3_TRACE(qDebug,
|
||||
NS_DEBUG(
|
||||
"Queue::GetTotalDroppedBytes () <= " << m_nTotalDroppedBytes
|
||||
)
|
||||
return m_nTotalDroppedBytes;
|
||||
@@ -153,7 +151,7 @@ Queue:: GetTotalDroppedBytes (void)
|
||||
uint32_t
|
||||
Queue::GetTotalDroppedPackets (void)
|
||||
{
|
||||
NS3_TRACE(qDebug,
|
||||
NS_DEBUG(
|
||||
"Queue::GetTotalDroppedPackets () <= " << m_nTotalDroppedPackets)
|
||||
|
||||
return m_nTotalDroppedPackets;
|
||||
@@ -162,7 +160,7 @@ Queue::GetTotalDroppedPackets (void)
|
||||
void
|
||||
Queue::ResetStatistics (void)
|
||||
{
|
||||
NS3_TRACE(qDebug, "Queue::ResetStatistics ()")
|
||||
NS_DEBUG("Queue::ResetStatistics ()")
|
||||
|
||||
m_nTotalReceivedBytes = 0;
|
||||
m_nTotalReceivedPackets = 0;
|
||||
@@ -173,12 +171,12 @@ Queue::ResetStatistics (void)
|
||||
void
|
||||
Queue::Drop (const Packet& p)
|
||||
{
|
||||
NS3_TRACE(qDebug, "Queue::Drop (" << &p << ")")
|
||||
NS_DEBUG("Queue::Drop (" << &p << ")")
|
||||
|
||||
m_nTotalDroppedPackets++;
|
||||
m_nTotalDroppedBytes += p.GetSize ();
|
||||
|
||||
NS3_TRACE(qDebug, "Queue::Drop (): m_traceDrop (p)")
|
||||
NS_DEBUG("Queue::Drop (): m_traceDrop (p)")
|
||||
m_traceEnque ("d <timestamp> ", p);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
|
||||
//
|
||||
// Copyright (c) 2006 Georgia Tech Research Corporation
|
||||
// All rights reserved.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License version 2 as
|
||||
// published by the Free Software Foundation;
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// Author: George F. Riley<riley@ece.gatech.edu>
|
||||
//
|
||||
|
||||
// NS3 - Layer 4 Protocol base class
|
||||
// George F. Riley, Georgia Tech, Spring 2007
|
||||
|
||||
#include "udp-ipv4-l4-protocol.h"
|
||||
#include "node.h"
|
||||
#include "udp.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
/* see http://www.iana.org/assignments/protocol-numbers */
|
||||
const uint8_t UdpIpv4L4Protocol::UDP_PROTOCOL = 17;
|
||||
|
||||
|
||||
UdpIpv4L4Protocol::UdpIpv4L4Protocol(Node *node)
|
||||
: Ipv4L4Protocol (UDP_PROTOCOL, 2),
|
||||
m_node (node)
|
||||
{}
|
||||
UdpIpv4L4Protocol::~UdpIpv4L4Protocol ()
|
||||
{}
|
||||
|
||||
UdpIpv4L4Protocol*
|
||||
UdpIpv4L4Protocol::Copy(Node *node) const
|
||||
{
|
||||
return new UdpIpv4L4Protocol (node);
|
||||
}
|
||||
void
|
||||
UdpIpv4L4Protocol::Receive(Packet& p,
|
||||
Ipv4Address const &source,
|
||||
Ipv4Address const &destination)
|
||||
{
|
||||
if (m_node->GetUdp () != 0)
|
||||
{
|
||||
m_node->GetUdp ()->Receive (p, source, destination);
|
||||
}
|
||||
}
|
||||
|
||||
}//namespace ns3
|
||||
@@ -1,58 +0,0 @@
|
||||
// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
|
||||
//
|
||||
// Copyright (c) 2006 Georgia Tech Research Corporation
|
||||
// All rights reserved.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License version 2 as
|
||||
// published by the Free Software Foundation;
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// Author: George F. Riley<riley@ece.gatech.edu>
|
||||
//
|
||||
|
||||
// NS3 - Layer 4 Protocol base class
|
||||
// George F. Riley, Georgia Tech, Spring 2007
|
||||
|
||||
#ifndef UDP_IPV4_L4_PROTOCOL_H
|
||||
#define UDP_IPV4_L4_PROTOCOL_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "ipv4-l4-protocol.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
class Node;
|
||||
class Packet;
|
||||
class Ipv4Address;
|
||||
|
||||
class UdpIpv4L4Protocol : public Ipv4L4Protocol {
|
||||
public:
|
||||
UdpIpv4L4Protocol(Node *node);
|
||||
virtual ~UdpIpv4L4Protocol ();
|
||||
|
||||
virtual UdpIpv4L4Protocol* Copy(Node *node) const;
|
||||
/**
|
||||
* Called from lower-level layers to send the packet up
|
||||
* in the stack.
|
||||
*/
|
||||
virtual void Receive(Packet& p,
|
||||
Ipv4Address const &source,
|
||||
Ipv4Address const &destination);
|
||||
|
||||
private:
|
||||
Node *m_node;
|
||||
static const uint8_t UDP_PROTOCOL;
|
||||
};
|
||||
|
||||
} // Namespace ns3
|
||||
|
||||
#endif /* UDP_IPV4_L4_PROTOCOL */
|
||||
@@ -30,7 +30,7 @@ UdpSocket::UdpSocket (Node *node)
|
||||
: m_endPoint (0),
|
||||
m_node (node)
|
||||
{
|
||||
assert (GetUdp () != 0);
|
||||
NS_ASSERT (GetUdp () != 0);
|
||||
}
|
||||
UdpSocket::~UdpSocket ()
|
||||
{
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
#include "ns3/packet.h"
|
||||
#include "udp.h"
|
||||
#include "udp-header.h"
|
||||
@@ -33,10 +33,11 @@
|
||||
namespace ns3 {
|
||||
|
||||
/* see http://www.iana.org/assignments/protocol-numbers */
|
||||
const uint8_t Udp::UDP_PROTOCOL = 17;
|
||||
const uint8_t Udp::PROT_NUMBER = 17;
|
||||
|
||||
Udp::Udp (Node *node)
|
||||
: m_node (node),
|
||||
: Ipv4L4Protocol (PROT_NUMBER, 2),
|
||||
m_node (node),
|
||||
m_endPoints (new Ipv4EndPointDemux<UdpEndPoint> ())
|
||||
{}
|
||||
|
||||
@@ -95,7 +96,7 @@ Udp::Receive(Packet& packet,
|
||||
}
|
||||
UdpSocket *socket = endPoint->GetSocket ();
|
||||
socket->ForwardUp (packet, source, udpHeader.GetSource ());
|
||||
assert (socket != 0);
|
||||
NS_ASSERT (socket != 0);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -109,14 +110,14 @@ Udp::Send (Packet packet,
|
||||
udpHeader.SetPayloadSize (packet.GetSize ());
|
||||
udpHeader.InitializeChecksum (saddr,
|
||||
daddr,
|
||||
UDP_PROTOCOL);
|
||||
PROT_NUMBER);
|
||||
|
||||
packet.Add (udpHeader);
|
||||
|
||||
Ipv4 *ipv4 = m_node->GetIpv4 ();
|
||||
if (ipv4 != 0)
|
||||
{
|
||||
ipv4->Send (packet, saddr, daddr, UDP_PROTOCOL);
|
||||
ipv4->Send (packet, saddr, daddr, PROT_NUMBER);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -28,13 +28,16 @@
|
||||
#include "ipv4-address.h"
|
||||
#include "ipv4-end-point-demux.h"
|
||||
#include "udp-end-point.h"
|
||||
#include "ipv4-l4-protocol.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
class Node;
|
||||
|
||||
class Udp {
|
||||
class Udp : public Ipv4L4Protocol {
|
||||
public:
|
||||
static const uint8_t PROT_NUMBER;
|
||||
|
||||
Udp (Node *node);
|
||||
virtual ~Udp ();
|
||||
|
||||
@@ -50,12 +53,11 @@ public:
|
||||
Ipv4Address saddr, Ipv4Address daddr,
|
||||
uint16_t sport, uint16_t dport);
|
||||
// inherited from Ipv4L4Protocol
|
||||
Udp* Copy(Node *node) const;
|
||||
void Receive(Packet& p,
|
||||
Ipv4Address const &source,
|
||||
Ipv4Address const &destination);
|
||||
virtual Udp* Copy(Node *node) const;
|
||||
virtual void Receive(Packet& p,
|
||||
Ipv4Address const &source,
|
||||
Ipv4Address const &destination);
|
||||
private:
|
||||
static const uint8_t UDP_PROTOCOL;
|
||||
Node *m_node;
|
||||
Ipv4EndPointDemux<UdpEndPoint> *m_endPoints;
|
||||
};
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
#include "high-precision-double.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
#include "high-precision.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#define TIME_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
#include <ostream>
|
||||
#include "high-precision.h"
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
#include "scheduler-heap.h"
|
||||
#include "event-impl.h"
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
#define noTRACE_HEAP 1
|
||||
|
||||
@@ -112,7 +112,7 @@ SchedulerHeap::IsBottom (uint32_t id) const
|
||||
void
|
||||
SchedulerHeap::Exch (uint32_t a, uint32_t b)
|
||||
{
|
||||
assert (b < m_heap.size () && a < m_heap.size ());
|
||||
NS_ASSERT (b < m_heap.size () && a < m_heap.size ());
|
||||
TRACE ("Exch " << a << ", " << b);
|
||||
std::pair<EventImpl*, Scheduler::EventKey> tmp (m_heap[a]);
|
||||
m_heap[a] = m_heap[b];
|
||||
@@ -191,7 +191,7 @@ SchedulerHeap::TopDown (uint32_t start)
|
||||
{
|
||||
return;
|
||||
}
|
||||
assert (!IsBottom (index));
|
||||
NS_ASSERT (!IsBottom (index));
|
||||
uint32_t left = LeftChild (index);
|
||||
if (IsBottom (left))
|
||||
{
|
||||
@@ -248,7 +248,7 @@ SchedulerHeap::RealRemove (EventId id, Scheduler::EventKey *key)
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
// quiet compiler
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include "scheduler-list.h"
|
||||
#include "event-impl.h"
|
||||
#include <utility>
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -93,14 +93,14 @@ SchedulerList::RealRemove (EventId id, Scheduler::EventKey *key)
|
||||
if (i->second.m_uid == id.GetUid ())
|
||||
{
|
||||
EventImpl *retval = i->first;
|
||||
assert (id.GetEventImpl () == retval);
|
||||
NS_ASSERT (id.GetEventImpl () == retval);
|
||||
key->m_ns = id.GetNs ();
|
||||
key->m_uid = id.GetUid ();
|
||||
m_events.erase (i);
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
#include "scheduler-map.h"
|
||||
#include "event-impl.h"
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
#define noTRACE_MAP 1
|
||||
|
||||
@@ -76,7 +76,7 @@ SchedulerMap::RealInsert (EventImpl *event, Scheduler::EventKey key)
|
||||
{
|
||||
std::pair<EventMapI,bool> result;
|
||||
result = m_list.insert (std::make_pair (key, event));
|
||||
assert (result.second);
|
||||
NS_ASSERT (result.second);
|
||||
return EventId (event, key.m_ns, key.m_uid);
|
||||
}
|
||||
|
||||
@@ -90,14 +90,14 @@ EventImpl *
|
||||
SchedulerMap::RealPeekNext (void) const
|
||||
{
|
||||
EventMapCI i = m_list.begin ();
|
||||
assert (i != m_list.end ());
|
||||
NS_ASSERT (i != m_list.end ());
|
||||
return (*i).second;
|
||||
}
|
||||
Scheduler::EventKey
|
||||
SchedulerMap::RealPeekNextKey (void) const
|
||||
{
|
||||
EventMapCI i = m_list.begin ();
|
||||
assert (i != m_list.end ());
|
||||
NS_ASSERT (i != m_list.end ());
|
||||
return (*i).first;
|
||||
}
|
||||
void
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
*/
|
||||
|
||||
#include "scheduler.h"
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -40,25 +40,25 @@ Scheduler::IsEmpty (void) const
|
||||
EventImpl *
|
||||
Scheduler::PeekNext (void) const
|
||||
{
|
||||
assert (!RealIsEmpty ());
|
||||
NS_ASSERT (!RealIsEmpty ());
|
||||
return RealPeekNext ();
|
||||
}
|
||||
Scheduler::EventKey
|
||||
Scheduler::PeekNextKey (void) const
|
||||
{
|
||||
assert (!RealIsEmpty ());
|
||||
NS_ASSERT (!RealIsEmpty ());
|
||||
return RealPeekNextKey ();
|
||||
}
|
||||
void
|
||||
Scheduler::RemoveNext (void)
|
||||
{
|
||||
assert (!RealIsEmpty ());
|
||||
NS_ASSERT (!RealIsEmpty ());
|
||||
return RealRemoveNext ();
|
||||
}
|
||||
EventImpl *
|
||||
Scheduler::Remove (EventId id, EventKey *key)
|
||||
{
|
||||
assert (!RealIsEmpty ());
|
||||
NS_ASSERT (!RealIsEmpty ());
|
||||
return RealRemove (id, key);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
#include "event-impl.h"
|
||||
|
||||
#include <math.h>
|
||||
#include <cassert>
|
||||
#include "ns3/assert.h"
|
||||
#include <fstream>
|
||||
#include <list>
|
||||
#include <vector>
|
||||
@@ -147,7 +147,7 @@ SimulatorPrivate::IsFinished (void) const
|
||||
uint64_t
|
||||
SimulatorPrivate::NextNs (void) const
|
||||
{
|
||||
assert (!m_events->IsEmpty ());
|
||||
NS_ASSERT (!m_events->IsEmpty ());
|
||||
Scheduler::EventKey nextKey = m_events->PeekNextKey ();
|
||||
return nextKey.m_ns;
|
||||
}
|
||||
@@ -179,14 +179,14 @@ SimulatorPrivate::Stop (void)
|
||||
void
|
||||
SimulatorPrivate::StopAt (Time const &at)
|
||||
{
|
||||
assert (at.IsPositive ());
|
||||
NS_ASSERT (at.IsPositive ());
|
||||
m_stopAt = at.GetNanoSeconds ();
|
||||
}
|
||||
EventId
|
||||
SimulatorPrivate::Schedule (Time const &time, EventImpl *event)
|
||||
{
|
||||
assert (time.IsPositive ());
|
||||
assert (time >= NanoSeconds (m_currentNs));
|
||||
NS_ASSERT (time.IsPositive ());
|
||||
NS_ASSERT (time >= NanoSeconds (m_currentNs));
|
||||
uint64_t ns = (uint64_t) time.GetNanoSeconds ();
|
||||
Scheduler::EventKey key = {ns, m_uid};
|
||||
if (m_logEnable)
|
||||
@@ -296,7 +296,7 @@ void Simulator::SetStdMap (void)
|
||||
void
|
||||
Simulator::SetExternal (SchedulerFactory const*factory)
|
||||
{
|
||||
assert (factory != 0);
|
||||
NS_ASSERT (factory != 0);
|
||||
m_schedFactory = factory;
|
||||
m_listType = EXTERNAL;
|
||||
}
|
||||
@@ -326,7 +326,7 @@ Simulator::GetPriv (void)
|
||||
events = m_schedFactory->Create ();
|
||||
default: // not reached
|
||||
events = 0;
|
||||
assert (false);
|
||||
NS_ASSERT (false);
|
||||
break;
|
||||
}
|
||||
m_priv = new SimulatorPrivate (events);
|
||||
|
||||
Reference in New Issue
Block a user