20 #include "ns3/abort.h"
21 #include "ns3/assert.h"
23 #include "ns3/simulation-singleton.h"
187 : m_entries (), m_test (false)
218 for (uint32_t i = 0; i <
N_BITS; ++i)
248 uint32_t maskBits = mask.
Get ();
249 uint32_t netBits = net.
Get ();
250 uint32_t addrBits = addr.
Get ();
254 NS_ABORT_MSG_UNLESS ((netBits & ~maskBits) == 0,
"Ipv4AddressGeneratorImpl::Init (): Inconsistent network and mask");
255 NS_ABORT_MSG_UNLESS ((addrBits & maskBits) == 0,
"Ipv4AddressGeneratorImpl::Init (): Inconsistent address and mask");
308 uint32_t addrBits = addr.
Get ();
341 "Ipv4AddressGeneratorImpl::NextAddress(): Address overflow");
361 uint32_t addr = address.
Get ();
363 NS_ABORT_MSG_UNLESS (addr,
"Ipv4AddressGeneratorImpl::Add(): Allocating the broadcast address is not a good idea");
365 std::list<Entry>::iterator i;
375 if (addr >= (*i).addrLow && addr <= (*i).addrHigh)
389 if (addr < (*i).addrLow - 1)
400 if (addr == (*i).addrHigh + 1)
402 std::list<Entry>::iterator j = i;
407 if (addr == (*j).addrLow)
420 (*i).addrHigh = addr;
430 if (addr == (*i).addrLow - 1)
468 uint32_t maskBits = mask.
Get ();
470 for (uint32_t i = 0; i <
N_BITS; ++i)
474 uint32_t index = N_BITS - i;
475 NS_ABORT_MSG_UNLESS (index > 0 && index < N_BITS,
"Ipv4AddressGenerator::MaskToIndex(): Illegal Mask");
480 NS_ASSERT_MSG (
false,
"Ipv4AddressGenerator::MaskToIndex(): Impossible");
493 ->Init (net, mask, addr);
502 ->NextNetwork (mask);
522 ->InitAddress (addr, mask);
540 ->NextAddress (mask);
558 ->AddAllocated (addr);
void Init(const Ipv4Address net, const Ipv4Mask mask, const Ipv4Address addr)
Initialise the base network, mask and address for the generator.
uint32_t shift
/internal a shift
#define NS_LOG_FUNCTION(parameters)
This class holds the state for a given network.
a class to represent an Ipv4 address mask
static Ipv4Address NextAddress(const Ipv4Mask mask)
Allocate the next Ipv4Address for the configured network and mask.
This class holds the allocated addresses.
uint32_t addrMax
/internal the maximum address
static void InitAddress(const Ipv4Address addr, const Ipv4Mask mask)
Set the address for the given mask.
void TestMode(void)
Used to turn off fatal errors and assertions, for testing.
uint32_t addr
/internal the address
bool AddAllocated(const Ipv4Address addr)
Add the Ipv4Address to the list of IPv4 entries.
static void TestMode(void)
Used to turn off fatal errors and assertions, for testing.
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
Ipv4AddressGeneratorImpl()
#define NS_ABORT_MSG_UNLESS(cond, msg)
Abnormal program termination if cond is false.
#define NS_FATAL_ERROR(msg)
fatal error handling
static const uint32_t MOST_SIGNIFICANT_BIT
/internal MSB set to 1
static void Reset(void)
Reset the networks and Ipv4Address to zero.
NS_LOG_COMPONENT_DEFINE("Ipv4AddressGenerator")
void Reset(void)
Reset the networks and Ipv4Address to zero.
uint32_t MaskToIndex(Ipv4Mask mask) const
Create an index number for the network mask.
static Ipv4Address NextNetwork(const Ipv4Mask mask)
Get the next network according to the given Ipv4Mask.
uint32_t Get(void) const
Get the host-order 32-bit IP address.
Ipv4Address GetAddress(const Ipv4Mask mask) const
Get the Ipv4Address that will be allocated upon NextAddress ()
void InitAddress(const Ipv4Address addr, const Ipv4Mask mask)
Set the address for the given mask.
#define NS_LOG_LOGIC(msg)
std::list< Entry > m_entries
/internal contained of allocated addresses
static bool AddAllocated(const Ipv4Address addr)
Add the Ipv4Address to the list of IPv4 entries.
uint32_t network
/internal the network
static const uint32_t N_BITS
/internal the number of bits in the address
#define NS_ASSERT_MSG(condition, message)
virtual ~Ipv4AddressGeneratorImpl()
uint32_t addrLow
/internal the lowest allocated address
Implementation class of Ipv4AddressGenerator This generator assigns addresses sequentially from a pro...
static Ipv4Address GetNetwork(const Ipv4Mask mask)
Get the current network of the given Ipv4Mask.
Ipv4 addresses are stored in host order in this class.
Ipv4Address NextAddress(const Ipv4Mask mask)
Allocate the next Ipv4Address for the configured network and mask.
bool m_test
/internal test mode (if true)
uint32_t addrHigh
/internal the highest allocated address
Ipv4Address NextNetwork(const Ipv4Mask mask)
Get the next network according to the given Ipv4Mask.
Ipv4Address GetNetwork(const Ipv4Mask mask) const
Get the current network of the given Ipv4Mask.
uint32_t Get(void) const
Get the host-order 32-bit IP mask.
NetworkState m_netTable[N_BITS]
/internal the available networks
static Ipv4Address GetAddress(const Ipv4Mask mask)
Get the Ipv4Address that will be allocated upon NextAddress ()
static void Init(const Ipv4Address net, const Ipv4Mask mask, const Ipv4Address addr="0.0.0.1")
Initialise the base network, mask and address for the generator.
uint32_t mask
/internal the network mask