merge with HEAD
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Tue Jun 03 12:46:37 2008 -0700 (20 months ago)
changeset 32056fa145613c52
parent 3204 06ee3b7eb18d
parent 3197 362f1a144828
child 3207 5aa8fd647c24
merge with HEAD
src/common/data-writer.cc
src/common/data-writer.h
     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   *