|
A Discrete-Event Network Simulator
|
API
|
Go to the documentation of this file.
20 #include "ns3/abort.h"
21 #include "ns3/assert.h"
23 #include "ns3/simulation-singleton.h"
191 : m_entries (), m_test (false)
222 for (uint32_t i = 0; i <
N_BITS; ++i)
252 uint32_t maskBits = mask.
Get ();
253 uint32_t netBits = net.
Get ();
254 uint32_t addrBits = addr.
Get ();
258 NS_ABORT_MSG_UNLESS ((netBits & ~maskBits) == 0,
"Ipv4AddressGeneratorImpl::Init (): Inconsistent network and mask");
259 NS_ABORT_MSG_UNLESS ((addrBits & maskBits) == 0,
"Ipv4AddressGeneratorImpl::Init (): Inconsistent address and mask");
313 uint32_t addrBits = addr.
Get ();
346 "Ipv4AddressGeneratorImpl::NextAddress(): Address overflow");
366 uint32_t addr =
address.Get ();
368 NS_ABORT_MSG_UNLESS (addr,
"Ipv4AddressGeneratorImpl::Add(): Allocating the broadcast address is not a good idea");
370 std::list<Entry>::iterator i;
380 if (addr >= (*i).addrLow && addr <= (*i).addrHigh)
394 if (addr < (*i).addrLow - 1)
405 if (addr == (*i).addrHigh + 1)
407 std::list<Entry>::iterator j = i;
412 if (addr == (*j).addrLow)
425 (*i).addrHigh = addr;
435 if (addr == (*i).addrLow - 1)
454 uint32_t addr =
address.Get ();
456 NS_ABORT_MSG_UNLESS (addr,
"Ipv4AddressGeneratorImpl::IsAddressAllocated(): Don't check for the broadcast address...");
458 std::list<Entry>::iterator i;
464 if (addr >= (*i).addrLow && addr <= (*i).addrHigh)
479 "Ipv4AddressGeneratorImpl::IsNetworkAllocated(): network address and mask don't match " <<
address <<
" " << mask);
481 std::list<Entry>::iterator i;
491 NS_LOG_LOGIC (
"Ipv4AddressGeneratorImpl::IsNetworkAllocated(): Network already allocated: " <<
492 address <<
" " << low <<
"-" << high);
525 uint32_t maskBits = mask.
Get ();
527 for (uint32_t i = 0; i <
N_BITS; ++i)
531 uint32_t index =
N_BITS - i;
537 NS_ASSERT_MSG (
false,
"Ipv4AddressGenerator::MaskToIndex(): Impossible");
550 ->Init (net, mask, addr);
559 ->NextNetwork (mask);
579 ->InitAddress (addr, mask);
597 ->NextAddress (mask);
615 ->AddAllocated (addr);
624 ->IsAddressAllocated (addr);
633 ->IsNetworkAllocated (addr, mask);
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
void Init(const Ipv4Address net, const Ipv4Mask mask, const Ipv4Address addr)
Initialise the base network, mask and address for the generator.
bool AddAllocated(const Ipv4Address addr)
Add the Ipv4Address to the list of IPv4 entries.
Ipv4AddressGeneratorImpl()
bool IsAddressAllocated(const Ipv4Address addr)
Check the Ipv4Address allocation in the list of IPv4 entries.
NetworkState m_netTable[N_BITS]
the available networks
static bool IsAddressAllocated(const Ipv4Address addr)
Check the Ipv4Address allocation in the list of IPv4 entries.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static T * Get(void)
Get a pointer to the singleton instance.
Ipv4Address NextNetwork(const Ipv4Mask mask)
Get the next network according to the given Ipv4Mask.
Ipv4Address NextAddress(const Ipv4Mask mask)
Allocate the next Ipv4Address for the configured network and mask.
uint32_t Get(void) const
Get the host-order 32-bit IP mask.
void Reset(void)
Reset the networks and Ipv4Address to zero.
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.
static Ipv4Address GetNetwork(const Ipv4Mask mask)
Get the current network of the given Ipv4Mask.
uint32_t Get(void) const
Get the host-order 32-bit IP address.
Ipv4 addresses are stored in host order in this class.
std::list< Entry > m_entries
contained of allocated addresses
Ipv4Address GetNetwork(const Ipv4Mask mask) const
Get the current network of the given Ipv4Mask.
static Ipv4Address GetAddress(const Ipv4Mask mask)
Get the Ipv4Address that will be allocated upon NextAddress ()
virtual ~Ipv4AddressGeneratorImpl()
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
uint32_t MaskToIndex(Ipv4Mask mask) const
Create an index number for the network mask.
static void InitAddress(const Ipv4Address addr, const Ipv4Mask mask)
Set the address for the given mask.
uint32_t mask
the network mask
uint32_t addrLow
the lowest allocated address
Ipv4Address GetAddress(const Ipv4Mask mask) const
Get the Ipv4Address that will be allocated upon NextAddress ()
static void TestMode(void)
Used to turn off fatal errors and assertions, for testing.
bool IsNetworkAllocated(const Ipv4Address addr, const Ipv4Mask mask)
Check if a network has already allocated addresses.
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
static bool IsNetworkAllocated(const Ipv4Address addr, const Ipv4Mask mask)
Check if a network has already allocated addresses.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
static bool AddAllocated(const Ipv4Address addr)
Add the Ipv4Address to the list of IPv4 entries.
#define NS_ABORT_MSG_UNLESS(cond, msg)
Abnormal program termination if a condition is false, with a message.
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
static void Reset(void)
Reset the networks and Ipv4Address to zero.
uint32_t addrMax
the maximum address
void TestMode(void)
Used to turn off fatal errors and assertions, for testing.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
a class to represent an Ipv4 address mask
Implementation class of Ipv4AddressGenerator This generator assigns addresses sequentially from a pro...
void InitAddress(const Ipv4Address addr, const Ipv4Mask mask)
Set the address for the given mask.
static Ipv4Address NextAddress(const Ipv4Mask mask)
Allocate the next Ipv4Address for the configured network and mask.
Ipv4Address CombineMask(Ipv4Mask const &mask) const
Combine this address with a network mask.
static const uint32_t MOST_SIGNIFICANT_BIT
MSB set to 1.
bool m_test
test mode (if true)
uint32_t network
the network
This class holds the state for a given network.
static const uint32_t N_BITS
the number of bits in the address
static Ipv4Address NextNetwork(const Ipv4Mask mask)
Get the next network according to the given Ipv4Mask.
uint32_t addrHigh
the highest allocated address
This class holds the allocated addresses.