src/internet/model/ipv4-address-generator.cc
author Vedran Miletić <rivanvx@gmail.com>
Tue, 02 Aug 2011 17:42:33 -0400
changeset 7385 10beb0e53130
parent 7256 b04ba6772f8c
child 9710 df21b904fce3
permissions -rw-r--r--
standardize emacs c++ mode comments
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
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7176
diff changeset
    26
NS_LOG_COMPONENT_DEFINE ("Ipv4AddressGenerator");
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    27
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    28
namespace ns3 {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    29
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    30
class Ipv4AddressGeneratorImpl
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    31
{
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    32
public:
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    33
  Ipv4AddressGeneratorImpl ();
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    34
  virtual ~Ipv4AddressGeneratorImpl ();
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    35
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    36
  void Init (const Ipv4Address net, const Ipv4Mask mask, 
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
    37
             const Ipv4Address addr);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    38
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    39
  Ipv4Address GetNetwork (const Ipv4Mask mask) const;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    40
  Ipv4Address NextNetwork (const Ipv4Mask mask);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    41
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    42
  void InitAddress (const Ipv4Address addr, const Ipv4Mask mask);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    43
  Ipv4Address GetAddress (const Ipv4Mask mask) const;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    44
  Ipv4Address NextAddress (const Ipv4Mask mask);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    45
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    46
  void Reset (void);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    47
  bool AddAllocated (const Ipv4Address addr);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    48
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    49
  void TestMode (void);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    50
private:
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    51
  static const uint32_t N_BITS = 32;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    52
  static const uint32_t MOST_SIGNIFICANT_BIT = 0x80000000;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    53
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    54
  uint32_t MaskToIndex (Ipv4Mask mask) const;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    55
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    56
  class NetworkState
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    57
  {
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
    58
public:
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    59
    uint32_t mask;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    60
    uint32_t shift;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    61
    uint32_t network;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    62
    uint32_t addr;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    63
    uint32_t addrMax;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    64
  };
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    65
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    66
  NetworkState m_netTable[N_BITS];
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    67
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    68
  class Entry
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    69
  {
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
    70
public:
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    71
    uint32_t addrLow;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    72
    uint32_t addrHigh;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    73
  };
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    74
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    75
  std::list<Entry> m_entries;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    76
  bool m_test;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    77
};
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    78
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    79
Ipv4AddressGeneratorImpl::Ipv4AddressGeneratorImpl () 
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    80
  : m_entries (), m_test (false)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    81
{
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
    82
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    83
  Reset ();
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    84
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    85
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
    86
void
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    87
Ipv4AddressGeneratorImpl::Reset (void)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    88
{
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
    89
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    90
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    91
  uint32_t mask = 0;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    92
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    93
// 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
    94
// 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
    95
// 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
    96
// 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
    97
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    98
// 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
    99
// 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
   100
// incrementing this number.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   101
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   102
// 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
   103
// 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
   104
// 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
   105
// 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
   106
// 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
   107
// 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
   108
// 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
   109
// just the inverse of the mask (~mask).
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   110
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   111
  for (uint32_t i = 0; i < N_BITS; ++i)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   112
    {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   113
      m_netTable[i].mask = mask;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   114
      mask >>= 1;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   115
      mask |= MOST_SIGNIFICANT_BIT;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   116
      m_netTable[i].network = 1;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   117
      m_netTable[i].addr = 1;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   118
      m_netTable[i].addrMax = ~mask;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   119
      m_netTable[i].shift = N_BITS - i;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   120
    }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   121
  m_entries.clear ();
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   122
  m_test = false;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   123
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   124
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   125
Ipv4AddressGeneratorImpl::~Ipv4AddressGeneratorImpl ()
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   126
{
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
   127
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   128
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   129
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   130
void
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   131
Ipv4AddressGeneratorImpl::Init (
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   132
  const Ipv4Address net,
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   133
  const Ipv4Mask mask,
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   134
  const Ipv4Address addr)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   135
{
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
   136
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   137
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   138
// 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
   139
// pull them out into ints.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   140
//
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   141
  uint32_t maskBits = mask.Get ();
3179
1763f7ac8e80 bug 146: s/HostOrder//
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3007
diff changeset
   142
  uint32_t netBits = net.Get ();
1763f7ac8e80 bug 146: s/HostOrder//
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3007
diff changeset
   143
  uint32_t addrBits = addr.Get ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   144
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   145
// Some quick reasonableness testing.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   146
//
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   147
  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
   148
  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
   149
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   150
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   151
// 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
   152
// 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
   153
// 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
   154
// 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
   155
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   156
  uint32_t index = MaskToIndex (mask);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   157
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   158
  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
   159
  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
   160
  m_netTable[index].addr = addrBits;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   161
  return;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   162
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   163
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   164
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   165
Ipv4AddressGeneratorImpl::GetNetwork (
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   166
  const Ipv4Mask mask) const
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   167
{
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
   168
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   169
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   170
  uint32_t index = MaskToIndex (mask);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   171
  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
   172
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   173
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   174
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   175
Ipv4AddressGeneratorImpl::NextNetwork (
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   176
  const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   177
{
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
   178
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   179
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   180
// 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
   181
// 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
   182
// 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
   183
// 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
   184
// 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
   185
// 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
   186
// operation is a pre-increment.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   187
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   188
  uint32_t index = MaskToIndex (mask);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   189
  ++m_netTable[index].network;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   190
  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
   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::InitAddress (
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   195
  const Ipv4Address addr,
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   196
  const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   197
{
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
   198
  NS_LOG_FUNCTION_NOARGS ();
2722
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
  uint32_t index = MaskToIndex (mask);
3179
1763f7ac8e80 bug 146: s/HostOrder//
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3007
diff changeset
   201
  uint32_t addrBits = addr.Get ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   202
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   203
  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
   204
  m_netTable[index].addr = addrBits;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   205
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   206
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   207
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   208
Ipv4AddressGeneratorImpl::GetAddress (
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   209
  const Ipv4Mask mask) const
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   210
{
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
   211
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   212
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   213
  uint32_t index = MaskToIndex (mask);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   214
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   215
  return Ipv4Address (
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   216
           (m_netTable[index].network << m_netTable[index].shift) |
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   217
           m_netTable[index].addr);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   218
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   219
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   220
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   221
Ipv4AddressGeneratorImpl::NextAddress (const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   222
{
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
   223
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   224
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   225
// 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
   226
// 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
   227
// 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
   228
// 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
   229
// implies that this operation is a post-increment.
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
  uint32_t index = MaskToIndex (mask);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   232
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   233
  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
   234
                       "Ipv4AddressGeneratorImpl::NextAddress(): Address overflow");
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
  Ipv4Address addr = Ipv4Address (
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   237
      (m_netTable[index].network << m_netTable[index].shift) |
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   238
      m_netTable[index].addr);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   239
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   240
  ++m_netTable[index].addr;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   241
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   242
// 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
   243
// detection.
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
  AddAllocated (addr);
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   246
  return addr;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   247
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   248
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   249
bool
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   250
Ipv4AddressGeneratorImpl::AddAllocated (const Ipv4Address address)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   251
{
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
   252
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   253
3179
1763f7ac8e80 bug 146: s/HostOrder//
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3007
diff changeset
   254
  uint32_t addr = address.Get ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   255
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   256
  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
   257
 
364e3943c8f0 fix optimized build, bug 169
Craig Dowell <craigdo@ee.washington.edu>
parents: 2983
diff changeset
   258
  std::list<Entry>::iterator i;
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   259
3007
364e3943c8f0 fix optimized build, bug 169
Craig Dowell <craigdo@ee.washington.edu>
parents: 2983
diff changeset
   260
  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
   261
    {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   262
      NS_LOG_LOGIC ("examine entry: " << Ipv4Address ((*i).addrLow) << 
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   263
                    " to " << Ipv4Address ((*i).addrHigh));
2722
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
// 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
   266
// 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
   267
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   268
      if (addr >= (*i).addrLow && addr <= (*i).addrHigh)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   269
        {
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   270
          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
   271
          if (!m_test) 
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   272
            {
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   273
              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
   274
            }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   275
          return false;
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   276
        }
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   277
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   278
// 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
   279
// 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
   280
// block before the current block.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   281
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   282
      if (addr < (*i).addrLow - 1)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   283
        {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   284
          break;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   285
        }
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
// 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
   288
// 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
   289
// 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
   290
// 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
   291
// about collapsing address range blocks.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   292
// 
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   293
      if (addr == (*i).addrHigh + 1)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   294
        {
3007
364e3943c8f0 fix optimized build, bug 169
Craig Dowell <craigdo@ee.washington.edu>
parents: 2983
diff changeset
   295
          std::list<Entry>::iterator j = i;
364e3943c8f0 fix optimized build, bug 169
Craig Dowell <craigdo@ee.washington.edu>
parents: 2983
diff changeset
   296
          ++j;
364e3943c8f0 fix optimized build, bug 169
Craig Dowell <craigdo@ee.washington.edu>
parents: 2983
diff changeset
   297
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   298
          if (j != m_entries.end ())
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   299
            {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   300
              if (addr == (*j).addrLow)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   301
                {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   302
                  NS_LOG_LOGIC ("Ipv4AddressGeneratorImpl::Add(): "
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   303
                                "Address Collision: " << Ipv4Address (addr));
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   304
                  if (!m_test)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   305
                    {
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   306
                      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
   307
                    }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   308
                  return false;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   309
                }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   310
            }
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   311
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   312
          NS_LOG_LOGIC ("New addrHigh = " << Ipv4Address (addr));
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   313
          (*i).addrHigh = addr;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   314
          return true;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   315
        }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   316
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   317
// 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
   318
// 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
   319
// 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
   320
// 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
   321
// address.
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   322
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   323
      if (addr == (*i).addrLow - 1)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   324
        {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   325
          NS_LOG_LOGIC ("New addrLow = " << Ipv4Address (addr));
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   326
          (*i).addrLow = addr;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   327
          return true;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   328
        }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   329
    }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   330
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   331
  Entry entry;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   332
  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
   333
  m_entries.insert (i, entry);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   334
  return true;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   335
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   336
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   337
void
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   338
Ipv4AddressGeneratorImpl::TestMode (void)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   339
{
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
   340
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   341
  m_test = true;
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
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   344
uint32_t
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   345
Ipv4AddressGeneratorImpl::MaskToIndex (Ipv4Mask mask) const
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
//
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   348
// 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
   349
// 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
   350
// 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
   351
// 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
   352
// 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
   353
// which is the number of bits in the mask.
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
// 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
   356
// 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
   357
//
3179
1763f7ac8e80 bug 146: s/HostOrder//
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3007
diff changeset
   358
  uint32_t maskBits = mask.Get ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   359
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   360
  for (uint32_t i = 0; i < N_BITS; ++i)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   361
    {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   362
      if (maskBits & 1)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   363
        {
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   364
          uint32_t index = N_BITS - i;
4184
e7a525be7dc2 remove misguided __attribute__ ((unused))s
Craig Dowell <craigdo@ee.washington.edu>
parents: 3179
diff changeset
   365
          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
   366
          return index;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   367
        }
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   368
      maskBits >>= 1;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   369
    }
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7176
diff changeset
   370
  NS_ASSERT_MSG (false, "Ipv4AddressGenerator::MaskToIndex(): Impossible");
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   371
  return 0;
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   372
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   373
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   374
void
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   375
Ipv4AddressGenerator::Init (
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   376
  const Ipv4Address net,
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   377
  const Ipv4Mask mask,
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   378
  const Ipv4Address addr)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   379
{
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
   380
  NS_LOG_FUNCTION_NOARGS ();
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
  SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   383
  ->Init (net, mask, addr);
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
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   386
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   387
Ipv4AddressGenerator::NextNetwork (const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   388
{
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
   389
  NS_LOG_FUNCTION_NOARGS ();
2722
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
  return SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   392
         ->NextNetwork (mask);
2722
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
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   395
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   396
Ipv4AddressGenerator::GetNetwork (const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   397
{
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
   398
  NS_LOG_FUNCTION_NOARGS ();
2722
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
  return SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   401
         ->GetNetwork (mask);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   402
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   403
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   404
void
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   405
Ipv4AddressGenerator::InitAddress (
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   406
  const Ipv4Address addr,
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   407
  const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   408
{
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
   409
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   410
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   411
  SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   412
  ->InitAddress (addr, mask);
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   413
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   414
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   415
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   416
Ipv4AddressGenerator::GetAddress (const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   417
{
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
   418
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   419
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   420
  return SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   421
         ->GetAddress (mask);
2722
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
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   424
Ipv4Address
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   425
Ipv4AddressGenerator::NextAddress (const Ipv4Mask mask)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   426
{
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
   427
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   428
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   429
  return SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   430
         ->NextAddress (mask);
2722
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
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   433
void
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   434
Ipv4AddressGenerator::Reset (void)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   435
{
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
   436
  NS_LOG_FUNCTION_NOARGS ();
2722
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
  return SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   439
         ->Reset ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   440
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   441
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   442
bool
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   443
Ipv4AddressGenerator::AddAllocated (const Ipv4Address addr)
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   444
{
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
   445
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   446
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   447
  return SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   448
         ->AddAllocated (addr);
2722
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
void
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   452
Ipv4AddressGenerator::TestMode (void)
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   453
{
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
   454
  NS_LOG_FUNCTION_NOARGS ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   455
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   456
  SimulationSingleton<Ipv4AddressGeneratorImpl>::Get ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7005
diff changeset
   457
  ->TestMode ();
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   458
}
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   459
5312
c0ea2fce5bcc bug 675: convert unit tests to new test framework
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4184
diff changeset
   460
} // namespace ns3
2722
f59635c9c679 address generator, address collision checker
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   461