src/internet/model/ipv4-address-generator.cc
author Pedro Silva <pmms@inesctec.pt>
Wed, 29 Oct 2014 10:12:53 -0700
changeset 11040 cd2eda848730
parent 10968 2d29fee2b7b8
child 11045 6024c150e4c8
permissions -rw-r--r--
bug 1791: TCP Endpoint never deallocates when closing
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7385
10beb0e53130 standardize emacs c++ mode comments
Vedran Miletić <rivanvx@gmail.com>
parents: 7256
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     2
/*
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     3
 * Copyright (c) 2008 University of Washington
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     4
 *
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     8
 *
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    12
 * GNU General Public License for more details.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    13
 *
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    17
 */
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    18
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    19
#include <list>
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
    20
#include "ns3/abort.h"
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    21
#include "ns3/assert.h"
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    22
#include "ns3/log.h"
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    23
#include "ns3/simulation-singleton.h"
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    24
#include "ipv4-address-generator.h"
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    25
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10440
diff changeset
    26
namespace ns3 {
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    27
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10440
diff changeset
    28
NS_LOG_COMPONENT_DEFINE ("Ipv4AddressGenerator");
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    29
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    30
/**
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    31
 * \internal
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    32
 * \ingroup address
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    33
 *
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    34
 * \brief Implementation class of Ipv4AddressGenerator
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    35
 * This generator assigns addresses sequentially from a provided
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    36
 * network address; used in topology code. It also keeps track of all
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    37
 * addresses assigned to perform duplicate detection.
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    38
 */
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    39
class Ipv4AddressGeneratorImpl
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    40
{
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    41
public:
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    42
  Ipv4AddressGeneratorImpl ();
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    43
  virtual ~Ipv4AddressGeneratorImpl ();
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    44
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    45
  /**
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    46
   * \internal
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    47
   * \brief Initialise the base network, mask and address for the generator
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    48
   *
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    49
   * The first call to NextAddress() or GetAddress() will return the
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    50
   * value passed in.
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    51
   *
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    52
   * \param net The network for the base Ipv4Address
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    53
   * \param mask The network mask of the base Ipv4Address
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    54
   * \param addr The base address used for initialization
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    55
   */
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    56
  void Init (const Ipv4Address net, const Ipv4Mask mask, 
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
    57
             const Ipv4Address addr);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    58
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    59
  /**
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    60
   * \internal
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    61
   * \brief Get the current network of the given Ipv4Mask
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    62
   *
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    63
   * Does not change the internal state; this just peeks at the current
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    64
   * network
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    65
   *
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    66
   * \param mask The Ipv4Mask for the current network
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    67
   * \returns the IPv4 address of the current network
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    68
   */
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    69
  Ipv4Address GetNetwork (const Ipv4Mask mask) const;
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    70
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    71
  /**
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    72
   * \internal
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    73
   * \brief Get the next network according to the given Ipv4Mask
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    74
   *
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    75
   * This operation is a pre-increment, meaning that the internal state
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    76
   * is changed before returning the new network address.
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    77
   *
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    78
   * This also resets the address to the base address that was
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    79
   * used for initialization.
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    80
   *
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    81
   * \param mask The Ipv4Mask used to set the next network
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    82
   * \returns the IPv4 address of the next network
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    83
   */
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    84
  Ipv4Address NextNetwork (const Ipv4Mask mask);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    85
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    86
  /**
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    87
   * \internal
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    88
   * \brief Set the address for the given mask
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    89
   *
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    90
   * \param addr The address to set for the current mask
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    91
   * \param mask The Ipv4Mask whose address is to be set
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    92
   */
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    93
  void InitAddress (const Ipv4Address addr, const Ipv4Mask mask);
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    94
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    95
  /**
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    96
   * \internal
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    97
   * \brief Allocate the next Ipv4Address for the configured network and mask
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    98
   *
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
    99
   * This operation is a post-increment, meaning that the first address
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   100
   * allocated will be the one that was initially configured.
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   101
   *
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   102
   * \param mask The Ipv4Mask for the current network
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   103
   * \returns the IPv4 address
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   104
   */
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   105
  Ipv4Address NextAddress (const Ipv4Mask mask);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   106
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   107
  /**
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   108
   * \internal
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   109
   * \brief Get the Ipv4Address that will be allocated upon NextAddress ()
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   110
   *
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   111
   * Does not change the internal state; just is used to peek the next
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   112
   * address that will be allocated upon NextAddress ()
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   113
   *
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   114
   * \param mask The Ipv4Mask for the current network
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   115
   * \returns the IPv4 address
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   116
   */
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   117
  Ipv4Address GetAddress (const Ipv4Mask mask) const;
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   118
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   119
  /**
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   120
   * \internal
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   121
   * \brief Reset the networks and Ipv4Address to zero
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   122
   */
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   123
  void Reset (void);
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   124
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   125
  /**
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   126
   * \internal
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   127
   * \brief Add the Ipv4Address to the list of IPv4 entries
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   128
   *
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   129
   * Typically, this is used by external address allocators that want
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   130
   * to make use of this class's ability to track duplicates.  AddAllocated
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   131
   * is always called internally for any address generated by NextAddress ()
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   132
   *
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   133
   * \param addr The Ipv4Address to be added to the list of Ipv4 entries
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   134
   * \returns true on success
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   135
   */
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   136
  bool AddAllocated (const Ipv4Address addr);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   137
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   138
  /**
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   139
   * \internal
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   140
   * \brief Used to turn off fatal errors and assertions, for testing
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   141
   */
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   142
  void TestMode (void);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   143
private:
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   144
  static const uint32_t N_BITS = 32;  //!< /internal the number of bits in the address
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   145
  static const uint32_t MOST_SIGNIFICANT_BIT = 0x80000000; //!< /internal MSB set to 1
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   146
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   147
  /**
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   148
   * \internal
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   149
   * \brief Create an index number for the network mask
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   150
   * \param mask the mask to index
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   151
   * \returns an index
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   152
   */
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   153
  uint32_t MaskToIndex (Ipv4Mask mask) const;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   154
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   155
  /**
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   156
   * \internal
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   157
   * \brief This class holds the state for a given network
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   158
   */
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   159
  class NetworkState
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   160
  {
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   161
public:
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   162
    uint32_t mask;      //!< /internal the network mask
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   163
    uint32_t shift;     //!< /internal a shift
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   164
    uint32_t network;   //!< /internal the network
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   165
    uint32_t addr;      //!< /internal the address
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   166
    uint32_t addrMax;   //!< /internal the maximum address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   167
  };
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   168
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   169
  NetworkState m_netTable[N_BITS]; //!< /internal the available networks
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   170
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   171
  /**
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   172
   * \internal
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   173
   * \brief This class holds the allocated addresses
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   174
   */
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   175
  class Entry
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   176
  {
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   177
public:
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   178
    uint32_t addrLow;  //!< /internal the lowest allocated address
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   179
    uint32_t addrHigh; //!< /internal the highest allocated address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   180
  };
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   181
10440
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   182
  std::list<Entry> m_entries; //!< /internal contained of allocated addresses
1e48ff9185f1 Bug 938 - missing Doxygen in ns-3 (internet model + helper)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9710
diff changeset
   183
  bool m_test; //!< /internal test mode (if true)
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   184
};
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   185
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   186
Ipv4AddressGeneratorImpl::Ipv4AddressGeneratorImpl () 
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   187
  : m_entries (), m_test (false)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   188
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 7385
diff changeset
   189
  NS_LOG_FUNCTION (this);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   190
  Reset ();
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   191
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   192
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   193
void
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   194
Ipv4AddressGeneratorImpl::Reset (void)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   195
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 7385
diff changeset
   196
  NS_LOG_FUNCTION (this);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   197
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   198
  uint32_t mask = 0;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   199
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   200
// There are 32 possible masks in a 32-bit integer.  Two of these are illegal
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   201
// for a network mask (0x00000000 and 0xffffffff).  Valid network masks
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   202
// correspond to some nonzero number of high order bits set to one followed by 
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   203
// some nonzero number of lower order bits set to zero.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   204
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   205
// We look at a network number as an n-bit number where n is defined as the 
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   206
// number of bits in each mask.  Allocating a new network number is simply 
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   207
// incrementing this number.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   208
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   209
// In order to combine an allocated network number with an IP address, we have
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   210
// to shift the network into the correct alignment with respect to its mask.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   211
// For example, a network mask of 0xff000000 admits the possibility of 256
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   212
// different network numbers since there are eight bits available.  To create
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   213
// IP addresses, we need to shift the network number counter left by 24 bits
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   214
// to put it in correct alignment.  This leaves 24 bits left for addresses.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   215
// We make sure we don't overflow by saving a maximum address number which is
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   216
// just the inverse of the mask (~mask).
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   217
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   218
  for (uint32_t i = 0; i < N_BITS; ++i)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   219
    {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   220
      m_netTable[i].mask = mask;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   221
      mask >>= 1;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   222
      mask |= MOST_SIGNIFICANT_BIT;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   223
      m_netTable[i].network = 1;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   224
      m_netTable[i].addr = 1;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   225
      m_netTable[i].addrMax = ~mask;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   226
      m_netTable[i].shift = N_BITS - i;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   227
    }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   228
  m_entries.clear ();
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   229
  m_test = false;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   230
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   231
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   232
Ipv4AddressGeneratorImpl::~Ipv4AddressGeneratorImpl ()
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   233
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 7385
diff changeset
   234
  NS_LOG_FUNCTION (this);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   235
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   236
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   237
void
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   238
Ipv4AddressGeneratorImpl::Init (
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   239
  const Ipv4Address net,
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   240
  const Ipv4Mask mask,
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   241
  const Ipv4Address addr)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   242
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 7385
diff changeset
   243
  NS_LOG_FUNCTION (this << net << mask << addr);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   244
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   245
// We're going to be playing with the actual bits in the network and mask so
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   246
// pull them out into ints.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   247
//
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   248
  uint32_t maskBits = mask.Get ();
3179
1763f7ac8e80 bug 146: s/HostOrder//
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3007
diff changeset
   249
  uint32_t netBits = net.Get ();
1763f7ac8e80 bug 146: s/HostOrder//
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3007
diff changeset
   250
  uint32_t addrBits = addr.Get ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   251
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   252
// Some quick reasonableness testing.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   253
//
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   254
  NS_ABORT_MSG_UNLESS ((netBits & ~maskBits) == 0, "Ipv4AddressGeneratorImpl::Init (): Inconsistent network and mask");
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   255
  NS_ABORT_MSG_UNLESS ((addrBits & maskBits) == 0, "Ipv4AddressGeneratorImpl::Init (): Inconsistent address and mask");
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   256
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   257
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   258
// Convert the network mask into an index into the network number table.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   259
// The network number comes in to us properly aligned for the mask and so
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   260
// needs to be shifted right into the normalized position (lowest bit of the
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   261
// network number at bit zero of the int that holds it).
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   262
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   263
  uint32_t index = MaskToIndex (mask);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   264
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   265
  m_netTable[index].network = netBits >> m_netTable[index].shift;
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   266
  NS_ABORT_MSG_UNLESS (addrBits <= m_netTable[index].addrMax, "Ipv4AddressGeneratorImpl::Init(): Address overflow");
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   267
  m_netTable[index].addr = addrBits;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   268
  return;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   269
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   270
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   271
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   272
Ipv4AddressGeneratorImpl::GetNetwork (
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   273
  const Ipv4Mask mask) const
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   274
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 7385
diff changeset
   275
  NS_LOG_FUNCTION (this << mask);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   276
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   277
  uint32_t index = MaskToIndex (mask);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   278
  return Ipv4Address (m_netTable[index].network << m_netTable[index].shift);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   279
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   280
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   281
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   282
Ipv4AddressGeneratorImpl::NextNetwork (
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   283
  const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   284
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 7385
diff changeset
   285
  NS_LOG_FUNCTION (this << mask);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   286
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   287
// The way this is expected to be used is that an address and network prefix
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   288
// are initialized, and then NextAddress() is called repeatedly to set the
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   289
// addresses on a given subnet.  The client will expect that the first 
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   290
// addresses will use the network prefix she used to initialize the generator
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   291
// with.  After a subnet is assigned, the client will call NextNetwork to 
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   292
// get the network number of the next subnet.  This implies that that this
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   293
// operation is a pre-increment.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   294
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   295
  uint32_t index = MaskToIndex (mask);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   296
  ++m_netTable[index].network;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   297
  return Ipv4Address (m_netTable[index].network << m_netTable[index].shift);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   298
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   299
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   300
void
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   301
Ipv4AddressGeneratorImpl::InitAddress (
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   302
  const Ipv4Address addr,
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   303
  const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   304
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 7385
diff changeset
   305
  NS_LOG_FUNCTION (this << addr << mask);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   306
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   307
  uint32_t index = MaskToIndex (mask);
3179
1763f7ac8e80 bug 146: s/HostOrder//
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3007
diff changeset
   308
  uint32_t addrBits = addr.Get ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   309
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   310
  NS_ABORT_MSG_UNLESS (addrBits <= m_netTable[index].addrMax, "Ipv4AddressGeneratorImpl::InitAddress(): Address overflow");
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   311
  m_netTable[index].addr = addrBits;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   312
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   313
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   314
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   315
Ipv4AddressGeneratorImpl::GetAddress (
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   316
  const Ipv4Mask mask) const
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   317
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 7385
diff changeset
   318
  NS_LOG_FUNCTION (this << mask);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   319
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   320
  uint32_t index = MaskToIndex (mask);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   321
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   322
  return Ipv4Address (
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   323
           (m_netTable[index].network << m_netTable[index].shift) |
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   324
           m_netTable[index].addr);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   325
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   326
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   327
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   328
Ipv4AddressGeneratorImpl::NextAddress (const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   329
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 7385
diff changeset
   330
  NS_LOG_FUNCTION (this << mask);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   331
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   332
// The way this is expected to be used is that an address and network prefix
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   333
// are initialized, and then NextAddress() is called repeatedly to set the
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   334
// addresses on a given subnet.  The client will expect that the first address
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   335
// she gets back is the one she used to initialize the generator with.  This
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   336
// implies that this operation is a post-increment.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   337
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   338
  uint32_t index = MaskToIndex (mask);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   339
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   340
  NS_ABORT_MSG_UNLESS (m_netTable[index].addr <= m_netTable[index].addrMax,
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   341
                       "Ipv4AddressGeneratorImpl::NextAddress(): Address overflow");
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   342
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   343
  Ipv4Address addr = Ipv4Address (
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   344
      (m_netTable[index].network << m_netTable[index].shift) |
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   345
      m_netTable[index].addr);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   346
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   347
  ++m_netTable[index].addr;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   348
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   349
// Make a note that we've allocated this address -- used for address collision
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   350
// detection.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   351
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   352
  AddAllocated (addr);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   353
  return addr;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   354
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   355
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   356
bool
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   357
Ipv4AddressGeneratorImpl::AddAllocated (const Ipv4Address address)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   358
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 7385
diff changeset
   359
  NS_LOG_FUNCTION (this << address);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   360
3179
1763f7ac8e80 bug 146: s/HostOrder//
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3007
diff changeset
   361
  uint32_t addr = address.Get ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   362
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   363
  NS_ABORT_MSG_UNLESS (addr, "Ipv4AddressGeneratorImpl::Add(): Allocating the broadcast address is not a good idea"); 
3007
364e3943c8f0 fix optimized build, bug 169
Craig Dowell <craigdo@ee.washington.edu>
parents: 2983
diff changeset
   364
 
364e3943c8f0 fix optimized build, bug 169
Craig Dowell <craigdo@ee.washington.edu>
parents: 2983
diff changeset
   365
  std::list<Entry>::iterator i;
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   366
3007
364e3943c8f0 fix optimized build, bug 169
Craig Dowell <craigdo@ee.washington.edu>
parents: 2983
diff changeset
   367
  for (i = m_entries.begin (); i != m_entries.end (); ++i)
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   368
    {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   369
      NS_LOG_LOGIC ("examine entry: " << Ipv4Address ((*i).addrLow) << 
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   370
                    " to " << Ipv4Address ((*i).addrHigh));
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   371
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   372
// First things first.  Is there an address collision -- that is, does the
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   373
// new address fall in a previously allocated block of addresses.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   374
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   375
      if (addr >= (*i).addrLow && addr <= (*i).addrHigh)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   376
        {
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   377
          NS_LOG_LOGIC ("Ipv4AddressGeneratorImpl::Add(): Address Collision: " << Ipv4Address (addr)); 
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   378
          if (!m_test) 
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   379
            {
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   380
              NS_FATAL_ERROR ("Ipv4AddressGeneratorImpl::Add(): Address Collision: " << Ipv4Address (addr));
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   381
            }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   382
          return false;
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   383
        }
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   384
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   385
// If the new address is less than the lowest address in the current block,
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   386
// and can't be merged into to the current block, then insert it as a new
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   387
// block before the current block.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   388
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   389
      if (addr < (*i).addrLow - 1)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   390
        {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   391
          break;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   392
        }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   393
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   394
// If the new address fits at the end of the block, look ahead to the next 
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   395
// block and make sure it's not a collision there.  If we won't overlap, then
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   396
// just extend the current block by one address.  We expect that completely
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   397
// filled network ranges will be a fairly rare occurrence, so we don't worry
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   398
// about collapsing address range blocks.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   399
// 
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   400
      if (addr == (*i).addrHigh + 1)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   401
        {
3007
364e3943c8f0 fix optimized build, bug 169
Craig Dowell <craigdo@ee.washington.edu>
parents: 2983
diff changeset
   402
          std::list<Entry>::iterator j = i;
364e3943c8f0 fix optimized build, bug 169
Craig Dowell <craigdo@ee.washington.edu>
parents: 2983
diff changeset
   403
          ++j;
364e3943c8f0 fix optimized build, bug 169
Craig Dowell <craigdo@ee.washington.edu>
parents: 2983
diff changeset
   404
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   405
          if (j != m_entries.end ())
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   406
            {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   407
              if (addr == (*j).addrLow)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   408
                {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   409
                  NS_LOG_LOGIC ("Ipv4AddressGeneratorImpl::Add(): "
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   410
                                "Address Collision: " << Ipv4Address (addr));
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   411
                  if (!m_test)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   412
                    {
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   413
                      NS_FATAL_ERROR ("Ipv4AddressGeneratorImpl::Add(): Address Collision: " << Ipv4Address (addr));
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   414
                    }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   415
                  return false;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   416
                }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   417
            }
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   418
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   419
          NS_LOG_LOGIC ("New addrHigh = " << Ipv4Address (addr));
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   420
          (*i).addrHigh = addr;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   421
          return true;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   422
        }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   423
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   424
// If we get here, we know that the next lower block of addresses couldn't 
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   425
// have been extended to include this new address since the code immediately 
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   426
// above would have been executed and that next lower block extended upward.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   427
// So we know it's safe to extend the current block down to includ the new
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   428
// address.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   429
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   430
      if (addr == (*i).addrLow - 1)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   431
        {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   432
          NS_LOG_LOGIC ("New addrLow = " << Ipv4Address (addr));
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   433
          (*i).addrLow = addr;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   434
          return true;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   435
        }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   436
    }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   437
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   438
  Entry entry;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   439
  entry.addrLow = entry.addrHigh = addr;
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7176
diff changeset
   440
  m_entries.insert (i, entry);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   441
  return true;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   442
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   443
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   444
void
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   445
Ipv4AddressGeneratorImpl::TestMode (void)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   446
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 7385
diff changeset
   447
  NS_LOG_FUNCTION (this);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   448
  m_test = true;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   449
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   450
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   451
uint32_t
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   452
Ipv4AddressGeneratorImpl::MaskToIndex (Ipv4Mask mask) const
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   453
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 7385
diff changeset
   454
  
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 7385
diff changeset
   455
  NS_LOG_FUNCTION (this << mask);
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 7385
diff changeset
   456
  
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   457
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   458
// We've been given a mask that has a higher order bit set for each bit of the
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   459
// network number.  In order to translate this mask into an index, we just need
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   460
// to count the number of zero bits in the mask.  We do this in a loop in which
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   461
// we shift the mask right until we find the first nonzero bit.  This tells us
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   462
// the number of zero bits, and from this we infer the number of nonzero bits
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   463
// which is the number of bits in the mask.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   464
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   465
// We use the number of bits in the mask as the number of bits in the network
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   466
// number and as the index into the network number state table.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   467
//
3179
1763f7ac8e80 bug 146: s/HostOrder//
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3007
diff changeset
   468
  uint32_t maskBits = mask.Get ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   469
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   470
  for (uint32_t i = 0; i < N_BITS; ++i)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   471
    {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   472
      if (maskBits & 1)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   473
        {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   474
          uint32_t index = N_BITS - i;
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   475
          NS_ABORT_MSG_UNLESS (index > 0 && index < N_BITS, "Ipv4AddressGenerator::MaskToIndex(): Illegal Mask");
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   476
          return index;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   477
        }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   478
      maskBits >>= 1;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   479
    }
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7176
diff changeset
   480
  NS_ASSERT_MSG (false, "Ipv4AddressGenerator::MaskToIndex(): Impossible");
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   481
  return 0;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   482
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   483
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   484
void
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   485
Ipv4AddressGenerator::Init (
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   486
  const Ipv4Address net,
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   487
  const Ipv4Mask mask,
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   488
  const Ipv4Address addr)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   489
{
2983
e3a416fe9dd5 NS_LOG_FUNCTION -> NS_LOG_FUNCTION_NOARGS and NS_LOG_PARAMS -> NS_LOG_FUNCTION
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2894
diff changeset
   490
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   491
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   492
  SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   493
  ->Init (net, mask, addr);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   494
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   495
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   496
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   497
Ipv4AddressGenerator::NextNetwork (const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   498
{
2983
e3a416fe9dd5 NS_LOG_FUNCTION -> NS_LOG_FUNCTION_NOARGS and NS_LOG_PARAMS -> NS_LOG_FUNCTION
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2894
diff changeset
   499
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   500
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   501
  return SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   502
         ->NextNetwork (mask);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   503
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   504
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   505
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   506
Ipv4AddressGenerator::GetNetwork (const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   507
{
2983
e3a416fe9dd5 NS_LOG_FUNCTION -> NS_LOG_FUNCTION_NOARGS and NS_LOG_PARAMS -> NS_LOG_FUNCTION
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2894
diff changeset
   508
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   509
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   510
  return SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   511
         ->GetNetwork (mask);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   512
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   513
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   514
void
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   515
Ipv4AddressGenerator::InitAddress (
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   516
  const Ipv4Address addr,
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   517
  const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   518
{
2983
e3a416fe9dd5 NS_LOG_FUNCTION -> NS_LOG_FUNCTION_NOARGS and NS_LOG_PARAMS -> NS_LOG_FUNCTION
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2894
diff changeset
   519
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   520
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   521
  SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   522
  ->InitAddress (addr, mask);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   523
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   524
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   525
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   526
Ipv4AddressGenerator::GetAddress (const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   527
{
2983
e3a416fe9dd5 NS_LOG_FUNCTION -> NS_LOG_FUNCTION_NOARGS and NS_LOG_PARAMS -> NS_LOG_FUNCTION
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2894
diff changeset
   528
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   529
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   530
  return SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   531
         ->GetAddress (mask);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   532
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   533
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   534
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   535
Ipv4AddressGenerator::NextAddress (const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   536
{
2983
e3a416fe9dd5 NS_LOG_FUNCTION -> NS_LOG_FUNCTION_NOARGS and NS_LOG_PARAMS -> NS_LOG_FUNCTION
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2894
diff changeset
   537
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   538
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   539
  return SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   540
         ->NextAddress (mask);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   541
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   542
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   543
void
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   544
Ipv4AddressGenerator::Reset (void)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   545
{
2983
e3a416fe9dd5 NS_LOG_FUNCTION -> NS_LOG_FUNCTION_NOARGS and NS_LOG_PARAMS -> NS_LOG_FUNCTION
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2894
diff changeset
   546
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   547
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   548
  return SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   549
         ->Reset ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   550
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   551
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   552
bool
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   553
Ipv4AddressGenerator::AddAllocated (const Ipv4Address addr)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   554
{
2983
e3a416fe9dd5 NS_LOG_FUNCTION -> NS_LOG_FUNCTION_NOARGS and NS_LOG_PARAMS -> NS_LOG_FUNCTION
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2894
diff changeset
   555
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   556
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   557
  return SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   558
         ->AddAllocated (addr);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   559
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   560
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   561
void
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   562
Ipv4AddressGenerator::TestMode (void)
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   563
{
2983
e3a416fe9dd5 NS_LOG_FUNCTION -> NS_LOG_FUNCTION_NOARGS and NS_LOG_PARAMS -> NS_LOG_FUNCTION
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2894
diff changeset
   564
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   565
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   566
  SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   567
  ->TestMode ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   568
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   569
5312
c0ea2fce5bcc bug 675: convert unit tests to new test framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4184
diff changeset
   570
} // namespace ns3
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   571