From 18c4ed4f1020cfbb223b66485d0214a18582d15e Mon Sep 17 00:00:00 2001 From: Tom Henderson Date: Sat, 22 Aug 2009 15:32:30 -0700 Subject: [PATCH] allow Ipv4Mask constructor to accept a string /32, /24 etc. in constructor --- examples/static-routing-slash32.cc | 4 ++-- src/node/ipv4-address.cc | 12 +++++++++++- src/node/ipv4-address.h | 15 +++++++++++++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/examples/static-routing-slash32.cc b/examples/static-routing-slash32.cc index dc6d62499..e2978d1cb 100644 --- a/examples/static-routing-slash32.cc +++ b/examples/static-routing-slash32.cc @@ -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); diff --git a/src/node/ipv4-address.cc b/src/node/ipv4-address.cc index d55e187f8..7424369f8 100644 --- a/src/node/ipv4-address.cc +++ b/src/node/ipv4-address.cc @@ -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 (atoi (++mask)); + NS_ASSERT (m_mask <= 32); + } + else + { + m_mask = AsciiToIpv4Host (mask); + } } bool diff --git a/src/node/ipv4-address.h b/src/node/ipv4-address.h index 1f3a9cfb7..5ce91964f 100644 --- a/src/node/ipv4-address.h +++ b/src/node/ipv4-address.h @@ -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