merge tom's tree with trunk

This commit is contained in:
Mathieu Lacage
2007-02-18 11:16:08 +01:00
61 changed files with 654 additions and 703 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;
}
}

View File

@@ -20,7 +20,7 @@
*/
#include "header.h"
#include <cassert>
#include "ns3/assert.h"
namespace ns3 {

View File

@@ -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 ();

View File

@@ -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)
{

View File

@@ -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)
{

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -20,7 +20,7 @@
*/
#include "trailer.h"
#include <cassert>
#include "ns3/assert.h"
namespace ns3 {

41
src/core/assert.cc Normal file
View 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
View 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 */

View File

@@ -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

View File

@@ -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
View 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 */

View File

@@ -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;

View File

@@ -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 ();
}

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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 */

View File

@@ -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

View File

@@ -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);

View File

@@ -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;

View File

@@ -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));
}

View File

@@ -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

View File

@@ -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)
{

View File

@@ -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

View File

@@ -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 */

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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 ()

View File

@@ -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])

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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 */

View File

@@ -30,7 +30,7 @@ UdpSocket::UdpSocket (Node *node)
: m_endPoint (0),
m_node (node)
{
assert (GetUdp () != 0);
NS_ASSERT (GetUdp () != 0);
}
UdpSocket::~UdpSocket ()
{

View File

@@ -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);
}
}

View File

@@ -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;
};

View File

@@ -21,7 +21,7 @@
#include "high-precision-double.h"
#include <cmath>
#include <cassert>
#include "ns3/assert.h"
namespace ns3 {

View File

@@ -21,7 +21,7 @@
#include "high-precision.h"
#include <cmath>
#include <cassert>
#include "ns3/assert.h"
namespace ns3 {

View File

@@ -22,7 +22,7 @@
#define TIME_H
#include <stdint.h>
#include <cassert>
#include "ns3/assert.h"
#include <ostream>
#include "high-precision.h"

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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);