NAME

NetAddr::IP::UtilPP - Pure perl implementations of IPv4 and IPv6 address utilities

VERSION

version 4.080_03

SYNOPSIS

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

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

$rv        = hasbits($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
$bitsXn = shiftleft($bits128, $n);
input:    128 bit string variable, number of shifts [optional]
returns:  bits X n shifts

NOTE: input bits are returned 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
($spurious, $cidr) = 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 network 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
shiftleft
addconst
add128
sub128
notcontiguous
ipv4to6
mask4to6
ipanyto6
maskanyto6
ipv6to4
bin2bcd
bcd2bin
comp128
bin2bcdn
bcdn2txt
bcdn2bin
simple_pack
threads

AUTHORS

  • Dean Hamstead <dean@fragfest.com.au>

  • Luis E. Muñoz <luismunoz@cpan.org>

  • Michael Robinton <miker@cpan.org>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2026 by Dean Hamstead.

This is free software, licensed under:

The GNU General Public License, Version 2, June 1991

ADDITIONAL LICENSE

This file is also available to redistribute it and/or modify it under the terms of the "Artistic License" which comes with this distribution, in the file named "Artistic".