NAME

NetAddr::IP::UtilPP -- pure Perl functions for NetAddr::IP::Util

SYNOPSIS

  use NetAddr::IP::UtilPP qw(
	hasbits
	isIPv4
	shiftleft
	addconst
	add128
	sub128
	notcontiguous
	ipv4to6
	mask4to6
	ipanyto6
	maskanyto6
	ipv6to4
	bin2bcd
	bcd2bin
  );

  use NetAddr::IP::UtilPP qw(:all)

  $rv = hasbits($bits128);
  $rv = isIPv4($bits128);
  $bitsX2 = shiftleft($bits128,$n);
  $carry = addconst($ipv6naddr,$signed_32con);
  ($carry,$ipv6naddr)=addconst($ipv6naddr,$signed_32con);
  $carry = add128($ipv6naddr1,$ipv6naddr2);
  ($carry,$ipv6naddr)=add128($ipv6naddr1,$ipv6naddr2);
  $carry = sub128($ipv6naddr1,$ipv6naddr2);
  ($spurious,$cidr) = notcontiguous($mask128);
  ($carry,$ipv6naddr)=sub128($ipv6naddr1,$ipv6naddr2);
  $ipv6naddr = ipv4to6($netaddr);
  $ipv6naddr = mask4to6($netaddr);
  $ipv6naddr = ipanyto6($netaddr);
  $ipv6naddr = maskanyto6($netaddr);
  $netaddr = ipv6to4($pv6naddr);
  $bcdtext = bin2bcd($bits128);
  $bits128 = bcd2bin($bcdtxt);

DESCRIPTION

NetAddr::IP::UtilPP provides pure Perl functions for NetAddr::IP::Util

  • $rv = hasbits($bits128);

    This function returns true if there are one's present in the 128 bit string and false if all the bits are zero.

      i.e.	if (hasbits($bits128)) {
    	  &do_something;
    	}
    
      or	if (hasbits($bits128 & $mask128) {
    	  &do_something;
    	}

    This allows the implementation of logical functions of the form of:

    	if ($bits128 & $mask128) {
    	    ...
    
      input:	128 bit IPv6 string
      returns:	true if any bits are present
  • $rv = isIPv4($bits128);

    This function returns true if there are no on bits present in the IPv6 portion of the 128 bit string and false otherwise.

  • $bitsXn = shiftleft($bits128,$n);

      input:	128 bit string variable,
    		number of shifts [optional]
      returns:	bits X n shifts
    
      NOTE: a single shift is performed 
    	if $n is not specified
  • addconst($ipv6naddr,$signed_32con);

    Add a signed constant to a 128 bit string variable.

      input:	128 bit IPv6 string,
    		signed 32 bit integer
      returns:  scalar	carry
    	    array	(carry, result)
  • add128($ipv6naddr1,$ipv6naddr2);

    Add two 128 bit string variables.

      input:	128 bit string var1,
    		128 bit string var2
      returns:  scalar	carry
    	    array	(carry, result)
  • sub128($ipv6naddr1,$ipv6naddr2);

    Subtract two 128 bit string variables.

      input:	128 bit string var1,
    		128 bit string var2
      returns:  scalar	carry
    	    array	(carry, result)
        

    Note: The carry from this operation is the result of adding the one's complement of ARG2 +1 to the ARG1. It is logically NOT borrow.

    i.e. 	if ARG1 >= ARG2 then carry = 1
    or	if ARG1  < ARG2 then carry = 0
  • ($cidr,$spurious) = notcontiguous($mask128);

    This function counts the bit positions remaining in the mask when the rightmost '0's are removed.

    input:  128 bit netmask
    returns true if there are spurious
    	    zero bits remaining in the
    	    mask, false if the mask is
    	    contiguous one's,
    	128 bit cidr
  • $ipv6naddr = ipv4to6($netaddr);

    Convert an ipv4 network address into an ipv6 network address.

    input:	32 bit network address
    returns:	128 bit network address
  • $ipv6naddr = mask4to6($netaddr);

    Convert an ipv4 netowrk address into an ipv6 network mask.

    input:	32 bit network/mask address
    returns:	128 bit network/mask address

    NOTE: returns the high 96 bits as one's

  • $ipv6naddr = ipanyto6($netaddr);

    Similar to ipv4to6 except that this function takes either an IPv4 or IPv6 input and always returns a 128 bit IPv6 network address.

    input:	32 or 128 bit network address
    returns:	128 bit network address
  • $ipv6naddr = maskanyto6($netaddr);

    Similar to mask4to6 except that this function takes either an IPv4 or IPv6 netmask and always returns a 128 bit IPv6 netmask.

    input:	32 or 128 bit network mask
    returns:	128 bit network mask
  • $netaddr = ipv6to4($pv6naddr);

    Truncate the upper 96 bits of a 128 bit address and return the lower 32 bits. Returns an IPv4 address as returned by inet_aton.

    input:	128 bit network address
    returns:	32 bit inet_aton network address
  • $bcdtext = bin2bcd($bits128);

    Convert a 128 bit binary string into binary coded decimal text digits.

    input:	128 bit string variable
    returns:	string of bcd text digits
  • $bits128 = bcd2bin($bcdtxt);

    Convert a bcd text string to 128 bit string variable

    input:	string of bcd text digits
    returns:	128 bit string variable

EXPORT_OK

hasbits
isIPv4
shiftleft
addconst
add128
sub128
notcontiguous
ipv4to6
mask4to6
ipanyto6
maskanyto6
ipv6to4
bin2bcd
bcd2bin
comp128
bin2bcdn
bcdn2txt
bcdn2bin
simple_pack

AUTHOR

Michael Robinton <michael@bizsystems.com>

COPYRIGHT

Copyright 2006, Michael Robinton <michael@bizsystems.com>

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License (except as noted otherwise in individuals sub modules) published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

AUTHOR

Michael Robinton <michael@bizsystems.com>