allow Ipv4Mask constructor to accept a string /32, /24 etc. in constructor

This commit is contained in:
Tom Henderson
2009-08-22 15:32:30 -07:00
parent 6493da4fd5
commit 18c4ed4f10
3 changed files with 28 additions and 3 deletions

View File

@@ -87,12 +87,12 @@ main (int argc, char *argv[])
int32_t ifIndexA = ipv4A->AddInterface (deviceA);
int32_t ifIndexC = ipv4C->AddInterface (deviceC);
Ipv4InterfaceAddress ifInAddrA = Ipv4InterfaceAddress (Ipv4Address ("172.16.1.1"), Ipv4Mask ("255.255.255.255"));
Ipv4InterfaceAddress ifInAddrA = Ipv4InterfaceAddress (Ipv4Address ("172.16.1.1"), Ipv4Mask ("/32"));
ipv4A->AddAddress (ifIndexA, ifInAddrA);
ipv4A->SetMetric (ifIndexA, 1);
ipv4A->SetUp (ifIndexA);
Ipv4InterfaceAddress ifInAddrC = Ipv4InterfaceAddress (Ipv4Address ("192.168.1.1"), Ipv4Mask ("255.255.255.255"));
Ipv4InterfaceAddress ifInAddrC = Ipv4InterfaceAddress (Ipv4Address ("192.168.1.1"), Ipv4Mask ("/32"));
ipv4C->AddAddress (ifIndexC, ifInAddrC);
ipv4C->SetMetric (ifIndexC, 1);
ipv4C->SetUp (ifIndexC);

View File

@@ -28,6 +28,7 @@ namespace ns3 {
#define ASCII_DOT (0x2e)
#define ASCII_ZERO (0x30)
#define ASCII_SLASH (0x2f)
static uint32_t
AsciiToIpv4Host (char const *address)
@@ -63,9 +64,18 @@ Ipv4Mask::Ipv4Mask ()
Ipv4Mask::Ipv4Mask (uint32_t mask)
: m_mask (mask)
{}
Ipv4Mask::Ipv4Mask (char const *mask)
{
m_mask = AsciiToIpv4Host (mask);
if (*mask == ASCII_SLASH)
{
m_mask = static_cast<uint32_t> (atoi (++mask));
NS_ASSERT (m_mask <= 32);
}
else
{
m_mask = AsciiToIpv4Host (mask);
}
}
bool

View File

@@ -198,11 +198,26 @@ private:
* \ingroup address
*
* \brief a class to represent an Ipv4 address mask
*
* The constructor takes arguments according to a few formats.
* Ipv4Mask ("255.255.255.255"), Ipv4Mask ("/32"), and Ipv4Mask (0xffffffff)
* are all equivalent.
*/
class Ipv4Mask {
public:
/**
* Will initialize to a garbage value (0x66666666)
*/
Ipv4Mask ();
/**
* param mask bitwise integer representation of the mask
*
* For example, the integer input 0xffffff00 yields a 24-bit mask
*/
Ipv4Mask (uint32_t mask);
/**
* \param mask String constant either in "255.255.255.0" or "/24" format
*/
Ipv4Mask (char const *mask);
/**
* \param a first address to compare