IPprefix Module

This Module (ipp) provides methods to store and use IPv4 and IPv6 addresses.

When you use python-libtrace (import plt),  IPprefix is automatically 
loaded - you don't need to import ipp as well.

Class IPprefix

Represents an IP adress or prefix.

Instance Variables
version 4 for IPv4, 6 for IPv6
addr 4- or 16-byte array containing actual address; the array bytes contain the actual bytes of the address
length Number of bits in prefix. If length is None the IPprefix represents just an IP address

Class Methods
from_s() ipp.from_s(aString)-> aNewIPprefix

Parses str to find version and address, e.g.
   p = ipp.from_s('192.168.1.1')
   p = ipp.from_s('fe80::20d:60ff:fe38:18b/64')
IPprefix -> aString

Returns a string containing a printable version of the IPprefix's address (and /width, if width is not None)
ipp will convert an IPprefix to a python string by calling its (built-in) str() function

Instance Methods
<, <=, ==, >=, >, !=
IPprefix op OtherIPprefix -> True or False

'Rich compare' operators: comparisions use the versions, addresses and lengths of two IPprefixes.  These can be used to sort IPprefixes into ascending or descending order, IPprefixes with the same addr compare based on their lengths.
IPprefix(v, a)
IPprefix(version,address) -> aNewIPprefix

Returns an IPprefix conatining an IP address, e.g. 192.168.0.3
   version  = 4 for IPv4, 6 for IPv6
   address = 4- or 16-byte array containing
                    actual address
IPprefix(v, a, len) IPprefix(version, address, length) -> aNewIPprefix

Returns an IPprefix containing a network prefix, e.g. 192.168.0.0/16.
   version, address - as above
   length = number of bits in prefix
version IPprefix.version -> anIinteger
addr IPprefix.addr -> aString
length IPprefix.length-> anIinteger

Read values of the instance variables.
length= IPprefix.length = anInteger -> anIinteger

Sets value for an IPprefix width.

Instance Methods for prefix testing
is_prefix IPprefix .is_prefix(OtherIPprefix) -> True or False

Returns true if this IPprefix is a prefix of OtherIPprefix, i.e. their first IPprefix.length bits are the same.
equal IPprefix.equal(OtherIPprefix) -> True or False

Two IPprefixes are equal if they have the same version and addr.
width IPprefix.width -> anInteger

Returns IPprefix.length - 1
has_bit_set IPprefix.has_bit_set(Integer) -> True or False

Returns true if the bit specified by Integer is 1.
For example, if Integer is 0, has_bit_set is true if the leftmost bit of IPprefix is 1.
first_bit_different IPprefix.first_bit_different(OtherIPprefix) -> anInteger

Returns an Integer, the (0-origin) bit position where the two IPprefixes are different.
complement IPprefix.complement -> OtherIPprefix

Returns the complement of an IPprefix, i.e. one having the same length, but all bits the ones-complement of those in IPprefix.
is_rfc1918 IPprefix.is_rfc1918 -> True or False

Returns True if the IPprefix's address is in the IPv4 range specified in RFC 1918, i.e. in one of the Private prefixes below.

Global Constants
'Private'  prefixes
See RFC 1918 for more details

ipp.rfc1918s16 192.168.0.0/16

ipp.rfc1918s12 172.16.0.0/12

ipp.rfc1918s8 10.0.0.0/8

Nevil Brownlee
Tue, 4 Nov 14 (NZDT)