class IPNet

A template class for subnets. More...

 
LOGO
 Annotated List  Files  Globals  Hierarchy  Index  Top

Public Methods

Public Static Methods


Detailed Description

A "subnet" is specified by a base "address" and a "prefix length".

 IPNet ()

IPNet

Default constructor taking no parameters.

Default value has INADDR_ANY/0.

 IPNet (const A& a, uint32_t prefix_len)
throw (InvalidNetmaskLength)

IPNet

Constructor from a given base address and a prefix length.

Parameters:

abase address for the subnet.
prefix_lenlength of subnet mask (e.g., class C nets would have prefix_len=24).
 IPNet (const char *from_cstring)
throw (InvalidString, InvalidNetmaskLength)

IPNet

Constructor from a string.

Parameters:

from_cstringC-style string with slash separated address and prefix length.
 IPNet (const IPNet& n)

IPNet

Copy constructor

Parameters:

nthe subnet to copy from.
IPNet&  operator= (const IPNet& n)

operator=

Assignment operator

Parameters:

nthe subnet to assign from.

Returns: the subnet after the assignment.

bool  operator== (const IPNet& other)

operator==

[const]

Equality Operator

Parameters:

otherthe right-hand operand to compare against.

Returns: true if the left-hand operand is numerically same as the right-hand operand.

inline bool  operator< (const IPNet& other)

operator<

[const]

Less-than comparison for subnets (see body for description).

Parameters:

otherthe right-hand side of the comparison.

Returns: true if the left-hand side is "smaller" than the right-hand side according to the chosen order.

IPNet&  operator-- ()

operator--

Decrement Operator

The numerical value of the prefix address is decrement by one. Example: decrementing 128.2.0.0/16 results in 128.1.0.0/16.

Returns: a reference to this subnet after the decrement

IPNet&  operator++ ()

operator++

Increment Operator

The numerical value of the prefix address is incremented by one. Example: incrementing 128.2.0.0/16 results in 128.3.0.0/16.

Returns: a reference to this subnet after the increment

inline bool  operator== (const U32Range& range)

operator==

[const]

Equality Operator for U32Range operand.

Parameters:

rangethe right-hand operand to compare against.

Returns: true if the prefix length falls inside the range defined by the right-hand operand.

inline bool  operator!= (const U32Range& range)

operator!=

[const]

Non-equality Operator for U32Range operand.

Parameters:

rangethe right-hand operand to compare against.

Returns: true if the prefix length falls outside the range defined by the right-hand operand.

inline bool  operator< (const U32Range& range)

operator<

[const]

Less-than comparison for prefix lengths for U32Range operand.

Parameters:

rangethe right-hand side of the comparison.

Returns: true if the prefix length is bellow the range defined by the right-hand operand.

inline bool  operator<= (const U32Range& range)

operator<=

[const]

Less-than or equal comparison for prefix lengths for U32Range operand.

Parameters:

rangethe right-hand side of the comparison.

Returns: true if the prefix length is bellow or within the range defined by the right-hand operand.

inline bool  operator> (const U32Range& range)

operator>

[const]

Greater-than comparison for prefix lengths for U32Range operand.

Parameters:

rangethe right-hand side of the comparison.

Returns: true if the prefix length is above the range defined by the right-hand operand.

inline bool  operator>= (const U32Range& range)

operator>=

[const]

Greater-than or equal comparison for prefix lengths for U32Range operand.

Parameters:

rangethe right-hand side of the comparison.

Returns: true if the prefix length is above or within the range defined by the right-hand operand.

inline string  str ()

str

[const]

Convert this address from binary form to presentation format.

Returns: C++ string with the human-readable ASCII representation of the address.

bool  is_valid ()

is_valid

[const]

Test if the object contains a real (non-default) value.

Returns: true if the object stores a real (non-default) value.

inline bool  is_overlap (const IPNet& other)

is_overlap

[const]

Test if subnets overlap.

Parameters:

otherthe subnet to compare against.

Returns: true if there is some overlap between the two subnets.

inline bool  contains (const IPNet& other)

contains

[const]

Test if a subnet contains (or is equal to) another subnet.

in LaTeX, x.contains(y) would be $x \superseteq y$

Parameters:

otherthe subnet to test against.

Returns: true if this subnet contains or is equal to other.

inline bool  contains (const A& addr)

contains

[const]

Test if an address is within a subnet.

Parameters:

addrthe address to test against.

Returns: true if addr is within this subnet.

inline uint32_t  overlap (const IPNet& other)

overlap

[const]

Determine the number of the most significant bits overlapping with another subnet.

Parameters:

otherthe subnet to test against.

Returns: the number of bits overlapping between other and this subnet.

int  af ()

af

[static]

Get the address family.

Returns: the address family of this address.

inline const A&  masked_addr ()

masked_addr

[const]

Get the base address.

Returns: the base address for this subnet.

inline uint32_t  prefix_len ()

prefix_len

[const]

Get the prefix length.

Returns: the prefix length for this subnet.

inline A  netmask ()

netmask

[const]

Get the network mask.

Returns: the netmask associated with this subnet.

bool  is_unicast ()

is_unicast

[const]

Test if this subnet is a unicast prefix.

In case of IPv4 all prefixes that fall within the Class A, Class B or Class C address space are unicast. In case of IPv6 all prefixes that don't contain the multicast address space are unicast. Note that the default route (0.0.0.0/0 for IPv4 or ::/0 for IPv6) is also considered an unicast prefix.

Returns: true if this subnet is a unicast prefix.

const IPNet<A>  ip_multicast_base_prefix ()

ip_multicast_base_prefix

[static]

Return the subnet containing all multicast addresses.

Note that this is a static function and can be used without a particular object. Example: IPv4Net my_prefix = IPv4Net::ip_multicast_base_prefix(); IPv4Net my_prefix = ipv4net.ip_multicast_base_prefix();

Returns: the subnet containing multicast addresses.

const IPNet<A>  ip_class_a_base_prefix ()

ip_class_a_base_prefix

[static]

Return the subnet containing all IPv4 Class A addresses (0.0.0.0/1).

This method applies only for IPv4. Note that this is a static function and can be used without a particular object. Example: IPv4Net my_prefix = IPv4Net::ip_class_a_base_prefix(); IPv4Net my_prefix = ipv4net.ip_class_a_base_prefix();

Returns: the subnet containing Class A addresses.

const IPNet<A>  ip_class_b_base_prefix ()

ip_class_b_base_prefix

[static]

Return the subnet containing all IPv4 Class B addresses (128.0.0.0/2).

This method applies only for IPv4. Note that this is a static function and can be used without a particular object. Example: IPv4Net my_prefix = IPv4Net::ip_class_b_base_prefix(); IPv4Net my_prefix = ipv4net.ip_class_b_base_prefix();

Returns: the subnet containing Class B addresses.

const IPNet<A>  ip_class_c_base_prefix ()

ip_class_c_base_prefix

[static]

Return the subnet containing all IPv4 Class C addresses (192.0.0.0/3).

This method applies only for IPv4. Note that this is a static function and can be used without a particular object. Example: IPv4Net my_prefix = IPv4Net::ip_class_c_base_prefix(); IPv4Net my_prefix = ipv4net.ip_class_c_base_prefix();

Returns: the subnet containing Class C addresses.

const IPNet<A>  ip_experimental_base_prefix ()

ip_experimental_base_prefix

[static]

Return the subnet containing all IPv4 experimental Class E addresses (240.0.0.0/4).

This method applies only for IPv4. Note that this is a static function and can be used without a particular object. Example: IPv4Net my_prefix = IPv4Net::ip_experimental_base_prefix(); IPv4Net my_prefix = ipv4net.ip_experimental_base_prefix();

Returns: the subnet containing experimental addresses.

bool  is_multicast ()

is_multicast

[const]

Test if this subnet is within the multicast address range.

Returns: true if this subnet is within the multicast address range.

bool  is_class_a ()

is_class_a

[const]

Test if this subnet is within the IPv4 Class A address range (0.0.0.0/1).

This method applies only for IPv4.

Returns: true if this subnet is within the IPv4 Class A address range.

bool  is_class_b ()

is_class_b

[const]

Test if this subnet is within the IPv4 Class B address range (128.0.0.0/2).

This method applies only for IPv4.

Returns: true if this subnet is within the IPv4 Class B address range.

bool  is_class_c ()

is_class_c

[const]

Test if this subnet is within the IPv4 Class C address range (192.0.0.0/3).

This method applies only for IPv4.

Returns: true if this subnet is within the IPv4 Class C address range.

bool  is_experimental ()

is_experimental

[const]

Test if this subnet is within the IPv4 experimental Class E address range (240.0.0.0/4).

This method applies only for IPv4.

Returns: true if this subnet is within the IPv4 experimental address range.

inline A  top_addr ()

top_addr

[const]

Get the highest address within this subnet.

Returns: the highest address within this subnet.

IPNet<A>  common_subnet (const IPNet<A> x, const IPNet<A> y)

common_subnet

[static]

Get the smallest subnet containing both subnets.

Returns: the smallest subnet containing both subnets passed as arguments.


Generated by: pavlin on possum.icir.org on Wed Mar 21 11:22:16 2007, using kdoc $.