1.1 --- a/.hgtags Mon Jun 02 09:42:29 2008 -0700
1.2 +++ b/.hgtags Tue Jun 03 12:46:37 2008 -0700
1.3 @@ -12,3 +12,4 @@
1.4 b5bf2588cde2f1273b1095cc5c83a0c272e55370 release ns-3.0.10
1.5 ee5e1da76ecc52337f097cd90ebb50a3d49ec541 release-3.0.11
1.6 b17f2928291eec5bf5b1c59a4a5fd583f704ac40 release ns-3.0.12
1.7 +79dba133b5f8a2d6f6f678a22e8519bc155e6a4e release ns-3.0.13
2.1 --- a/RELEASE_NOTES Mon Jun 02 09:42:29 2008 -0700
2.2 +++ b/RELEASE_NOTES Tue Jun 03 12:46:37 2008 -0700
2.3 @@ -3,6 +3,26 @@
2.4
2.5 This file contains ns-3 release notes (most recent releases first).
2.6
2.7 +Release 3.0.13 (2008/06/02)
2.8 +========================
2.9 +- point to point links generate ppp pcap traces
2.10 +- point to point links support asymmetrical data rates.
2.11 +- generate doxygen documentation for all attributes and trace sources
2.12 +- add ConfigStore and GtkConfigStore to contrib module
2.13 +- socket API now support tx and rx buffers: implemented for UDP and TCP
2.14 +- ARP cache now supports per-entry pending queues
2.15 +- lots of bugfixes and implementation and API cleanups
2.16 +
2.17 +Warning: among API changes in this release, Application::Start and
2.18 +Application::Stop now interprets the time argument as a relative
2.19 +instead of absolute simulation time, to align with how Simulator::Schedule
2.20 +behaves. Any code that calls these APIs in the middle of the simulation
2.21 +will need to be adapted.
2.22 +
2.23 +The API of Simulator::StopAt (time) has also changed. Now it is
2.24 +called Simulator::Stop (time), and takes a relative time, instead of
2.25 +absolute.
2.26 +
2.27 Release 3.0.12 (2008/04/07)
2.28 ========================
2.29 - Add Attribute support to the TypeId metadata system and add
3.1 --- a/VERSION Mon Jun 02 09:42:29 2008 -0700
3.2 +++ b/VERSION Tue Jun 03 12:46:37 2008 -0700
3.3 @@ -1,1 +1,1 @@
3.4 -3.0.12
3.5 +3.0.13
4.1 --- a/doc/modules Mon Jun 02 09:42:29 2008 -0700
4.2 +++ b/doc/modules Tue Jun 03 12:46:37 2008 -0700
4.3 @@ -13,7 +13,7 @@
4.4 * - a Functor class: ns3::Callback
4.5 * - an os-independent interface to get access to the elapsed wall clock time: ns3::SystemWallClockMs
4.6 * - a class to register regression tests with the test manager: ns3::Test and ns3::TestManager
4.7 - * - debugging facilities: \ref logging, \ref assert, \ref error
4.8 + * - debugging facilities: \ref logging, \ref assert
4.9 * - \ref randomvariable
4.10 * - a base class for objects which need to support per-instance "attributes" and
4.11 * trace sources: ns3::ObjectBase
5.1 --- a/doc/release_steps.txt Mon Jun 02 09:42:29 2008 -0700
5.2 +++ b/doc/release_steps.txt Tue Jun 03 12:46:37 2008 -0700
5.3 @@ -6,7 +6,7 @@
5.4 - revise and check in RELEASE_NOTES
5.5 - update and check in VERSION to the latest release number
5.6 - confirm that Doxygen builds cleanly and without warnings
5.7 - (./waf --doxygen), and check in any necessary changes
5.8 + (./waf check; ./waf --doxygen), and check in any necessary changes
5.9 2. ./waf configure; ./waf dist
5.10 - this will create a ns-3.0.x.tar.bz2 tarball
5.11 - this will also create a ns-3.0.x-ref-traces.tar.bz2 tarball
5.12 @@ -23,7 +23,7 @@
5.13 6. Run the regression tests on the new release and update the reference traces
5.14 - ./waf --regression
5.15 - ./waf --valgrind --regression (for valgrind version)
5.16 - - There should be no regressions at this time
5.17 + - There should be no regression errors at this time
5.18 - tag ns-3-dev-ref-traces with "release ns-3.0.X"
5.19 hg tag "release ns-3.0.x"
5.20 hg push
6.1 --- a/src/common/data-writer.cc Mon Jun 02 09:42:29 2008 -0700
6.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
6.3 @@ -1,120 +0,0 @@
6.4 -/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
6.5 -/*
6.6 - * Copyright (c) 2005 INRIA
6.7 - *
6.8 - * This program is free software; you can redistribute it and/or modify
6.9 - * it under the terms of the GNU General Public License version 2 as
6.10 - * published by the Free Software Foundation;
6.11 - *
6.12 - * This program is distributed in the hope that it will be useful,
6.13 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
6.14 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6.15 - * GNU General Public License for more details.
6.16 - *
6.17 - * You should have received a copy of the GNU General Public License
6.18 - * along with this program; if not, write to the Free Software
6.19 - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6.20 - *
6.21 - * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
6.22 - */
6.23 -#include "data-writer.h"
6.24 -
6.25 -#include <sys/types.h>
6.26 -#include <sys/stat.h>
6.27 -#include <sys/poll.h>
6.28 -#include <fcntl.h>
6.29 -#include <unistd.h>
6.30 -#include "ns3/assert.h"
6.31 -#include <string.h>
6.32 -#include <list>
6.33 -
6.34 -#define noTRACE_DATA_WRITER 1
6.35 -
6.36 -#ifdef TRACE_DATA_WRITER
6.37 -#include <iostream>
6.38 -# define TRACE(x) \
6.39 -std::cout << "DATA WRITER TRACE " << this << " " << x << std::endl;
6.40 -#else /* TRACE_DATA_WRITER */
6.41 -# define TRACE(format,...)
6.42 -#endif /* TRACE_DATA_WRITER */
6.43 -
6.44 -#define BUFFER_SIZE (4096)
6.45 -
6.46 -
6.47 -namespace ns3 {
6.48 -
6.49 -class DataWriterPrivate {
6.50 -public:
6.51 - DataWriterPrivate ();
6.52 - ~DataWriterPrivate ();
6.53 -
6.54 - void open (char const *filename);
6.55 - void write (uint8_t *buffer, uint32_t size);
6.56 -private:
6.57 - uint8_t m_data[BUFFER_SIZE];
6.58 - uint32_t m_current;
6.59 - int m_fd;
6.60 -};
6.61 -
6.62 -DataWriterPrivate::DataWriterPrivate ()
6.63 - : m_current (0)
6.64 -{}
6.65 -DataWriterPrivate::~DataWriterPrivate ()
6.66 -{
6.67 - ::Write (m_fd, m_data, m_current);
6.68 - ::Close (m_fd);
6.69 -}
6.70 -
6.71 -
6.72 -void
6.73 -DataWriterPrivate::Open (char const *filename)
6.74 -{
6.75 - m_fd = ::Open (filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
6.76 - NS_ASSERT (m_fd != -1);
6.77 -}
6.78 -
6.79 -#ifndef min
6.80 -#define min(a,b) ((a)<(b)?(a):(b))
6.81 -#endif /* min */
6.82 -
6.83 -void
6.84 -DataWriterPrivate::Write (uint8_t *buffer, uint32_t size)
6.85 -{
6.86 - while (size > 0)
6.87 - {
6.88 - uint32_t toCopy = min (BUFFER_SIZE - m_current, size);
6.89 - memcpy (m_data + m_current, buffer, toCopy);
6.90 - size -= toCopy;
6.91 - m_current += toCopy;
6.92 - buffer += toCopy;
6.93 - if (m_current == BUFFER_SIZE)
6.94 - {
6.95 - ssize_t written = 0;
6.96 - written = ::Write (m_fd, m_data, BUFFER_SIZE);
6.97 - NS_ASSERT (written == BUFFER_SIZE);
6.98 - m_current = 0;
6.99 - }
6.100 - }
6.101 -}
6.102 -
6.103 -DataWriter::DataWriter ()
6.104 - : m_priv (new DataWriterPrivate ())
6.105 -{}
6.106 -DataWriter::~DataWriter ()
6.107 -{
6.108 - delete m_priv;
6.109 - m_priv = 0;
6.110 -}
6.111 -
6.112 -void
6.113 -DataWriter::Open (char const *filename)
6.114 -{
6.115 - m_priv->Open (filename);
6.116 -}
6.117 -void
6.118 -DataWriter::Write (uint8_t *buffer, uint32_t size)
6.119 -{
6.120 - m_priv->Write (buffer, size);
6.121 -}
6.122 -
6.123 -}; // namespace
7.1 --- a/src/common/data-writer.h Mon Jun 02 09:42:29 2008 -0700
7.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
7.3 @@ -1,43 +0,0 @@
7.4 -/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
7.5 -/*
7.6 - * Copyright (c) 2005 INRIA
7.7 - *
7.8 - * This program is free software; you can redistribute it and/or modify
7.9 - * it under the terms of the GNU General Public License version 2 as
7.10 - * published by the Free Software Foundation;
7.11 - *
7.12 - * This program is distributed in the hope that it will be useful,
7.13 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
7.14 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7.15 - * GNU General Public License for more details.
7.16 - *
7.17 - * You should have received a copy of the GNU General Public License
7.18 - * along with this program; if not, write to the Free Software
7.19 - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
7.20 - *
7.21 - * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
7.22 - */
7.23 -
7.24 -#ifndef DATA_WRITER_H
7.25 -#define DATA_WRITER_H
7.26 -
7.27 -#include <stdint.h>
7.28 -
7.29 -namespace ns3 {
7.30 -
7.31 -class DataWriterPrivate;
7.32 -
7.33 -class DataWriter {
7.34 -public:
7.35 - DataWriter ();
7.36 - ~DataWriter ();
7.37 -
7.38 - void open (char const *filename);
7.39 - void write (uint8_t *buffer, uint32_t size);
7.40 -private:
7.41 - DataWriterPrivate *m_priv;
7.42 -};
7.43 -
7.44 -}; //namespace ns3
7.45 -
7.46 -#endif /* DATA_WRITER_H */
8.1 --- a/src/common/header.h Mon Jun 02 09:42:29 2008 -0700
8.2 +++ b/src/common/header.h Tue Jun 03 12:46:37 2008 -0700
8.3 @@ -34,9 +34,7 @@
8.4 *
8.5 * Every Protocol header which needs to be inserted or removed
8.6 * from a Packet instance must derive from this base class and
8.7 - * implement the following public methods:
8.8 - * - a default constructor: is used by the internal implementation
8.9 - * if the Packet class.
8.10 + * implement the pure virtual methods defined here.
8.11 *
8.12 * Sample code which shows how to create a new type of Header, and how to use it,
8.13 * is shown in the sample file samples/main-packet-header.cc
9.1 --- a/src/common/packet.h Mon Jun 02 09:42:29 2008 -0700
9.2 +++ b/src/common/packet.h Tue Jun 03 12:46:37 2008 -0700
9.3 @@ -42,7 +42,7 @@
9.4 {
9.5 public:
9.6 /**
9.7 - * Identifies a set tag and a set of bytes within a packet
9.8 + * Identifies a tag and a set of bytes within a packet
9.9 * to which the tag applies.
9.10 */
9.11 class Item
10.1 --- a/src/common/pcap-writer.h Mon Jun 02 09:42:29 2008 -0700
10.2 +++ b/src/common/pcap-writer.h Tue Jun 03 12:46:37 2008 -0700
10.3 @@ -51,17 +51,35 @@
10.4
10.5 /**
10.6 * Write a pcap header in the output file which specifies
10.7 - * that the content of the file will Packets with
10.8 + * that the content of the file will be Packets with
10.9 * Ethernet/LLC/SNAP encapsulation. This method should
10.10 * be invoked before ns3::PcapWriter::writePacket and after
10.11 * ns3::PcapWriter::open.
10.12 */
10.13 void WriteEthernetHeader (void);
10.14
10.15 + /**
10.16 + * Write a pcap header in the output file which specifies
10.17 + * that the content of the file will be IPv4 Packets. This
10.18 + * method should be invoked before ns3::PcapWriter::WritePacket
10.19 + * and after ns3::PcapWriter::Open.
10.20 + */
10.21 void WriteIpHeader (void);
10.22
10.23 + /**
10.24 + * Write a pcap header in the output file which specifies
10.25 + * that the content of the file will be 802.11 Packets. This
10.26 + * method should be invoked before ns3::PcapWriter::WritePacket
10.27 + * and after ns3::PcapWriter::Open.
10.28 + */
10.29 void WriteWifiHeader (void);
10.30
10.31 + /**
10.32 + * Write a pcap header in the output file which specifies
10.33 + * that the content of the file will be ppp Packets. This
10.34 + * method should be invoked before ns3::PcapWriter::WritePacket
10.35 + * and after ns3::PcapWriter::Open.
10.36 + */
10.37 void WritePppHeader (void);
10.38
10.39 /**
11.1 --- a/src/common/tag-buffer.h Mon Jun 02 09:42:29 2008 -0700
11.2 +++ b/src/common/tag-buffer.h Tue Jun 03 12:46:37 2008 -0700
11.3 @@ -38,28 +38,106 @@
11.4 * \brief read and write tag data
11.5 *
11.6 * This class allows subclasses of the ns3::Tag base class
11.7 - * to serialize and deserialize their data.
11.8 + * to serialize and deserialize their data through a stream-like
11.9 + * API. This class keeps track of the "current" point in the
11.10 + * buffer and advances that "current" point everytime data is
11.11 + * written. The in-memory format of the data written by
11.12 + * this class is unspecified.
11.13 + *
11.14 + * If the user attempts to write more data in the buffer than
11.15 + * he allocated with Tag::GetSerializedSize, he will trigger
11.16 + * an NS_ASSERT error.
11.17 */
11.18 class TagBuffer
11.19 {
11.20 public:
11.21 TagBuffer (uint8_t *start, uint8_t *end);
11.22 void TrimAtEnd (uint32_t trim);
11.23 + void CopyFrom (TagBuffer o);
11.24
11.25 + /**
11.26 + * \param v the value to write
11.27 + *
11.28 + * Write one byte and advance the "current" point by one.
11.29 + */
11.30 TAG_BUFFER_INLINE void WriteU8 (uint8_t v);
11.31 + /**
11.32 + * \param v the value to write
11.33 + *
11.34 + * Write two bytes and advance the "current" point by two.
11.35 + */
11.36 TAG_BUFFER_INLINE void WriteU16 (uint16_t v);
11.37 + /**
11.38 + * \param v the value to write
11.39 + *
11.40 + * Write four bytes and advance the "current" point by four.
11.41 + */
11.42 TAG_BUFFER_INLINE void WriteU32 (uint32_t v);
11.43 + /**
11.44 + * \param v the value to write
11.45 + *
11.46 + * Write eight bytes and advance the "current" point by eight.
11.47 + */
11.48 void WriteU64 (uint64_t v);
11.49 + /**
11.50 + * \param v the value to write
11.51 + *
11.52 + * Write a double and advance the "current" point by the size of the
11.53 + * data written.
11.54 + */
11.55 void WriteDouble (double v);
11.56 + /**
11.57 + * \param buffer a pointer to data to write
11.58 + * \param size the size of the data to write
11.59 + *
11.60 + * Write all the input data and advance the "current" point by the size of the
11.61 + * data written.
11.62 + */
11.63 void Write (const uint8_t *buffer, uint32_t size);
11.64 + /**
11.65 + * \returns the value read
11.66 + *
11.67 + * Read one byte, advance the "current" point by one,
11.68 + * and return the value read.
11.69 + */
11.70 TAG_BUFFER_INLINE uint8_t ReadU8 (void);
11.71 + /**
11.72 + * \returns the value read
11.73 + *
11.74 + * Read two bytes, advance the "current" point by two,
11.75 + * and return the value read.
11.76 + */
11.77 TAG_BUFFER_INLINE uint16_t ReadU16 (void);
11.78 + /**
11.79 + * \returns the value read
11.80 + *
11.81 + * Read four bytes, advance the "current" point by four,
11.82 + * and return the value read.
11.83 + */
11.84 TAG_BUFFER_INLINE uint32_t ReadU32 (void);
11.85 + /**
11.86 + * \returns the value read
11.87 + *
11.88 + * Read eight bytes, advance the "current" point by eight,
11.89 + * and return the value read.
11.90 + */
11.91 uint64_t ReadU64 (void);
11.92 + /**
11.93 + * \returns the value read
11.94 + *
11.95 + * Read a double, advance the "current" point by the size
11.96 + * of the data read, and, return the value read.
11.97 + */
11.98 double ReadDouble (void);
11.99 + /**
11.100 + * \param buffer a pointer to the buffer where data should be
11.101 + * written.
11.102 + * \param size the number of bytes to read.
11.103 + *
11.104 + * Read the number of bytes requested, advance the "current"
11.105 + * point by the number of bytes read, return.
11.106 + */
11.107 void Read (uint8_t *buffer, uint32_t size);
11.108 -
11.109 - void CopyFrom (TagBuffer o);
11.110 private:
11.111
11.112 uint8_t *m_current;
12.1 --- a/src/common/tag.h Mon Jun 02 09:42:29 2008 -0700
12.2 +++ b/src/common/tag.h Tue Jun 03 12:46:37 2008 -0700
12.3 @@ -49,12 +49,16 @@
12.4 * \param i the buffer to write data into.
12.5 *
12.6 * Write the content of the tag in the provided tag buffer.
12.7 + * DO NOT attempt to write more bytes than you requested
12.8 + * with Tag::GetSerializedSize.
12.9 */
12.10 virtual void Serialize (TagBuffer i) const = 0;
12.11 /**
12.12 * \param i the buffer to read data from.
12.13 *
12.14 * Read the content of the tag from the provided tag buffer.
12.15 + * DO NOT attempt to read more bytes than you wrote with
12.16 + * Tag::Serialize.
12.17 */
12.18 virtual void Deserialize (TagBuffer i) = 0;
12.19 };
13.1 --- a/src/common/trailer.h Mon Jun 02 09:42:29 2008 -0700
13.2 +++ b/src/common/trailer.h Tue Jun 03 12:46:37 2008 -0700
13.3 @@ -35,9 +35,7 @@
13.4 *
13.5 * Every Protocol trailer which needs to be inserted or removed
13.6 * from a Packet instance must derive from this base class and
13.7 - * implement the following public methods:
13.8 - * - a default constructor: is used by the internal implementation
13.9 - * if the Packet class.
13.10 + * implement the pure virtual methods defined here.
13.11 */
13.12 class Trailer : public Chunk
13.13 {
14.1 --- a/src/core/attribute-list.cc Mon Jun 02 09:42:29 2008 -0700
14.2 +++ b/src/core/attribute-list.cc Tue Jun 03 12:46:37 2008 -0700
14.3 @@ -212,7 +212,7 @@
14.4 std::string::size_type equal = str.find ("=", cur);
14.5 if (equal == std::string::npos)
14.6 {
14.7 - // XXX: invalid attribute.
14.8 + NS_FATAL_ERROR ("Error while parsing serialized attribute: \"" << str << "\"");
14.9 break;
14.10 }
14.11 else
14.12 @@ -221,7 +221,7 @@
14.13 struct TypeId::AttributeInfo info;
14.14 if (!TypeId::LookupAttributeByFullName (name, &info))
14.15 {
14.16 - // XXX invalid name.
14.17 + NS_FATAL_ERROR ("Error while parsing serialized attribute: name does not exist: \"" << name << "\"");
14.18 break;
14.19 }
14.20 else
14.21 @@ -242,7 +242,7 @@
14.22 bool ok = val->DeserializeFromString (value, info.checker);
14.23 if (!ok)
14.24 {
14.25 - // XXX invalid value
14.26 + NS_FATAL_ERROR ("Error while parsing serialized attribute: value invalid: \"" << value << "\"");
14.27 break;
14.28 }
14.29 else
15.1 --- a/src/core/attribute-list.h Mon Jun 02 09:42:29 2008 -0700
15.2 +++ b/src/core/attribute-list.h Tue Jun 03 12:46:37 2008 -0700
15.3 @@ -87,7 +87,6 @@
15.4 */
15.5 static AttributeList *GetGlobal (void);
15.6
15.7 - // XXX: untested.
15.8 std::string SerializeToString (void) const;
15.9 bool DeserializeFromString (std::string value);
15.10 private:
16.1 --- a/src/core/attribute-test.cc Mon Jun 02 09:42:29 2008 -0700
16.2 +++ b/src/core/attribute-test.cc Tue Jun 03 12:46:37 2008 -0700
16.3 @@ -167,7 +167,7 @@
16.4 MakeTraceSourceAccessor (&AttributeObjectTest::m_cb))
16.5 .AddTraceSource ("ValueSource", "help text",
16.6 MakeTraceSourceAccessor (&AttributeObjectTest::m_valueSrc))
16.7 - .AddAttribute ("Pointer", "XXX",
16.8 + .AddAttribute ("Pointer", "help text",
16.9 PointerValue (),
16.10 MakePointerAccessor (&AttributeObjectTest::m_ptr),
16.11 MakePointerChecker<Derived> ())
17.1 --- a/src/core/attribute.h Mon Jun 02 09:42:29 2008 -0700
17.2 +++ b/src/core/attribute.h Tue Jun 03 12:46:37 2008 -0700
17.3 @@ -144,7 +144,7 @@
17.4 * to detect the type of the associated attribute.
17.5 *
17.6 * Most subclasses of this base class are implemented by the
17.7 - * ATTRIBUTE_HELPER_* macros.
17.8 + * \ref ATTRIBUTE_HELPER_HEADER and \ref ATTRIBUTE_HELPER_CPP macros.
17.9 */
17.10 class AttributeChecker : public RefCountBase
17.11 {
18.1 --- a/src/core/command-line.h Mon Jun 02 09:42:29 2008 -0700
18.2 +++ b/src/core/command-line.h Tue Jun 03 12:46:37 2008 -0700
18.3 @@ -28,6 +28,7 @@
18.4
18.5 /**
18.6 * \brief parse command-line arguments
18.7 + * \ingroup core
18.8 *
18.9 * Instances of this class can be used to parse command-line
18.10 * arguments: users can register new arguments with
19.1 --- a/src/core/config.h Mon Jun 02 09:42:29 2008 -0700
19.2 +++ b/src/core/config.h Tue Jun 03 12:46:37 2008 -0700
19.3 @@ -29,6 +29,10 @@
19.4 class Object;
19.5 class CallbackBase;
19.6
19.7 +/**
19.8 + * \brief Configuration of simulation parameters and tracing
19.9 + * \ingroup core
19.10 + */
19.11 namespace Config {
19.12
19.13 /**
20.1 --- a/src/core/object-vector.cc Mon Jun 02 09:42:29 2008 -0700
20.2 +++ b/src/core/object-vector.cc Tue Jun 03 12:46:37 2008 -0700
20.3 @@ -34,8 +34,16 @@
20.4 std::string
20.5 ObjectVectorValue::SerializeToString (Ptr<const AttributeChecker> checker) const
20.6 {
20.7 - // XXX
20.8 - return "";
20.9 + std::ostringstream oss;
20.10 + for (uint32_t i = 0; i < m_objects.size (); ++i)
20.11 + {
20.12 + oss << m_objects[i];
20.13 + if (i != m_objects.size () - 1)
20.14 + {
20.15 + oss << " ";
20.16 + }
20.17 + }
20.18 + return oss.str ();
20.19 }
20.20 bool
20.21 ObjectVectorValue::DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker)
21.1 --- a/src/core/object.h Mon Jun 02 09:42:29 2008 -0700
21.2 +++ b/src/core/object.h Tue Jun 03 12:46:37 2008 -0700
21.3 @@ -46,6 +46,14 @@
21.4 * \ingroup object
21.5 * \brief a base class which provides memory management and object aggregation
21.6 *
21.7 + * The memory management scheme is based on reference-counting with dispose-like
21.8 + * functionality to break the reference cycles. The reference count is increamented
21.9 + * and decremented with the methods Object::Ref and Object::Unref. If a reference cycle is
21.10 + * present, the user is responsible for breaking it by calling Object::Dispose in
21.11 + * a single location. This will eventually trigger the invocation of Object::DoDispose
21.12 + * on itself and all its aggregates. The Object::DoDispose method is always automatically
21.13 + * invoked from the Object::Unref method before destroying the object, even if the user
21.14 + * did not call Object::Dispose directly.
21.15 */
21.16 class Object : public ObjectBase
21.17 {
22.1 --- a/src/core/singleton.h Mon Jun 02 09:42:29 2008 -0700
22.2 +++ b/src/core/singleton.h Tue Jun 03 12:46:37 2008 -0700
22.3 @@ -22,6 +22,17 @@
22.4
22.5 namespace ns3 {
22.6
22.7 +/**
22.8 + * \brief a template singleton
22.9 + *
22.10 + * This template class can be used to implement the singleton pattern.
22.11 + * The underlying object will be destroyed automatically when the process
22.12 + * exits. Note that, if you call Singleton::Get again after the object has
22.13 + * been destroyed, the object will be re-created which will result in a
22.14 + * memory leak as reported by most memory leak checkers. It is up to the
22.15 + * user to ensure that Singleton::Get is never called from a static variable
22.16 + * finalizer.
22.17 + */
22.18 template <typename T>
22.19 class Singleton
22.20 {
23.1 --- a/src/core/trace-source-accessor.h Mon Jun 02 09:42:29 2008 -0700
23.2 +++ b/src/core/trace-source-accessor.h Tue Jun 03 12:46:37 2008 -0700
23.3 @@ -74,7 +74,10 @@
23.4 * \param a the trace source
23.5 *
23.6 * Create a TraceSourceAccessor which will control access to the underlying
23.7 - * trace source.
23.8 + * trace source. This helper template method assumes that the underlying
23.9 + * type implements a statically-polymorphic set of Connect and Disconnect
23.10 + * methods and creates a dynamic-polymorphic class to wrap the underlying
23.11 + * static-polymorphic class.
23.12 */
23.13 template <typename T>
23.14 Ptr<const TraceSourceAccessor> MakeTraceSourceAccessor (T a);
24.1 --- a/src/core/traced-value.h Mon Jun 02 09:42:29 2008 -0700
24.2 +++ b/src/core/traced-value.h Tue Jun 03 12:46:37 2008 -0700
24.3 @@ -47,7 +47,7 @@
24.4 * this template: this instance will behave just like
24.5 * the original class (if it did not export any special method),
24.6 * and will define Connect/DisconnectWithoutContext methods to work
24.7 - * with an ns3::TraceSourceAccessor.
24.8 + * with ns3::MakeTraceSourceAccessor.
24.9 */
24.10 template <typename T>
24.11 class TracedValue
25.1 --- a/src/devices/wifi/nqap-wifi-mac.cc Mon Jun 02 09:42:29 2008 -0700
25.2 +++ b/src/devices/wifi/nqap-wifi-mac.cc Tue Jun 03 12:46:37 2008 -0700
25.3 @@ -44,7 +44,7 @@
25.4 .SetParent<WifiMac> ()
25.5 .AddConstructor<NqapWifiMac> ()
25.6 .AddAttribute ("BeaconInterval", "Delay between two beacons",
25.7 - TimeValue (Seconds (1.0)),
25.8 + TimeValue (Seconds (0.1)),
25.9 MakeTimeAccessor (&NqapWifiMac::m_beaconInterval),
25.10 MakeTimeChecker ())
25.11 .AddAttribute ("BeaconGeneration", "Whether or not beacons are generated.",
26.1 --- a/src/node/application.h Mon Jun 02 09:42:29 2008 -0700
26.2 +++ b/src/node/application.h Tue Jun 03 12:46:37 2008 -0700
26.3 @@ -34,7 +34,7 @@
26.4
26.5 /**
26.6 * \ingroup node
26.7 - * \defgroup application
26.8 + * \defgroup application Application
26.9 *
26.10 * \brief The base class for all ns3 applicationes
26.11 *