11#include "ns3/assert.h"
20#include <sys/socket.h>
45 auto plen =
static_cast<uint32_t>(std::atoi(++mask));
49 m_mask = 0xffffffff << (32 - plen);
58 if (inet_pton(AF_INET, mask, &
m_mask) <= 0)
60 NS_ABORT_MSG(
"Error, can not build an IPv4 mask from an invalid string: " << mask);
98 os << ((
m_mask >> 24) & 0xff) <<
"." << ((
m_mask >> 16) & 0xff) <<
"." << ((
m_mask >> 8) & 0xff)
99 <<
"." << ((
m_mask >> 0) & 0xff);
106 static Ipv4Mask loopback(
"255.0.0.0");
122 static Ipv4Mask ones(
"255.255.255.255");
164 if (inet_pton(AF_INET, address, &
m_address) <= 0)
166 NS_LOG_LOGIC(
"Error, can not build an IPv4 address from an invalid string: " << address);
194 if (inet_pton(AF_INET, address, &
m_address) <= 0)
196 NS_LOG_LOGIC(
"Error, can not build an IPv4 address from an invalid string: " << address);
219 "Trying to get subnet-directed broadcast address with an all-ones netmask");
281 return (
m_address & 0xffffff00) == 0xe0000000;
289 return (
m_address & 0xffff0000) == 0xa9fe0000;
308 ipv4.m_address |= buf[0];
309 ipv4.m_address <<= 8;
310 ipv4.m_address |= buf[1];
311 ipv4.m_address <<= 8;
312 ipv4.m_address |= buf[2];
313 ipv4.m_address <<= 8;
314 ipv4.m_address |= buf[3];
315 ipv4.m_initialized =
true;
332 return address.CheckCompatible(
GetType(), 4);
402 return std::hash<uint32_t>()(x.Get());
a polymophic address class
static uint8_t Register()
Allocate a new type id for a new type of address.
size_t operator()(const Ipv4Address &x) const
Returns the hash of an IPv4 address.
Ipv4 addresses are stored in host order in this class.
void Print(std::ostream &os) const
Print this address to the given output stream.
static Ipv4Address GetLoopback()
Ipv4Address GetSubnetDirectedBroadcast(const Ipv4Mask &mask) const
Generate subnet-directed broadcast address corresponding to mask.
static Ipv4Address ConvertFrom(const Address &address)
static Ipv4Address GetZero()
static bool IsMatchingType(const Address &address)
void Set(uint32_t address)
input address is in host order.
bool IsSubnetDirectedBroadcast(const Ipv4Mask &mask) const
Generate subnet-directed broadcast address corresponding to mask.
static Ipv4Address GetBroadcast()
void Serialize(uint8_t buf[4]) const
Serialize this address to a 4-byte buffer.
Ipv4Address CombineMask(const Ipv4Mask &mask) const
Combine this address with a network mask.
uint32_t Get() const
Get the host-order 32-bit IP address.
static Ipv4Address Deserialize(const uint8_t buf[4])
static uint8_t GetType()
Get the underlying address type (automatically assigned).
bool m_initialized
IPv4 address has been explicitly initialized to a valid value.
uint32_t m_address
IPv4 address.
Address ConvertTo() const
Convert to an Address type.
static Ipv4Address GetAny()
bool IsInitialized() const
bool IsLocalMulticast() const
bool IsLinkLocal() const
If the IPv4 address is an APIPA address (169.254/16).
a class to represent an Ipv4 address mask
static Ipv4Mask GetOnes()
void Set(uint32_t mask)
input mask is in host order.
Ipv4Mask()
Will initialize to a garbage value (0x66666666)
uint16_t GetPrefixLength() const
uint32_t Get() const
Get the host-order 32-bit IP mask.
void Print(std::ostream &os) const
Print this mask to the given output stream.
uint32_t GetInverse() const
Return the inverse mask in host order.
bool IsMatch(Ipv4Address a, Ipv4Address b) const
static Ipv4Mask GetLoopback()
static Ipv4Mask GetZero()
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
#define ATTRIBUTE_HELPER_CPP(type)
Define the attribute value, accessor and checkers for class type
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::ostream & operator<<(std::ostream &os, const Angles &a)
std::istream & operator>>(std::istream &is, Angles &a)
static constexpr uint32_t UNINITIALIZED
Value of a not-yet-initialized IPv4 address, corresponding to 102.102.102.102.