 ## SYNOPSIS

hasbits
shiftleft
sub128
notcontiguous
ipv4to6
ipanyto6
ipv6to4
bin2bcd
bcd2bin
);
\$rv = hasbits(\$bits128);
\$bitsX2 = shiftleft(\$bits128,\$n);
\$bcdtext = bin2bcd(\$bits128);
\$bits128 = bcd2bin(\$bcdtxt);

## DESCRIPTION

• \$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
```

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)
```

Add two 128 bit string variables.

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

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
```

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
contiguous one's,
128 bit cidr
```

```  input:        32 bit network address
```

```  input:        32 bit network/mask address
```

NOTE: returns the high 96 bits as one's

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
```

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
```

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
sub128
notcontiguous
ipv4to6
ipanyto6
ipv6to4
bin2bcd
bcd2bin
comp128
bin2bcdn
bcdn2txt
bcdn2bin
simple_pack
```

## AUTHOR

Michael Robinton <[email protected]>

Copyright 2003 - 2012, Michael Robinton <[email protected]>

This program is free software; you can redistribute it and/or modify it under the terms of either:

```  a) the GNU General Public License as published by the Free
Software Foundation; either version 2, or (at your option) any
later version, or
b) the "Artistic License" which comes with this distribution.
```

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 either the GNU General Public License or the Artistic License for more details.

You should have received a copy of the Artistic License with this distribution, in the file named ``Artistic''. If not, I'll be glad to provide one.

You should also have received a copy of the GNU General Public License along with this program in the file named ``Copying''. If not, write to the

```        Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor
Boston, MA 02110-1301 USA
```

or visit their web page on the internet at:

```        http://www.gnu.org/copyleft/gpl.html.

```

## AUTHOR

Michael Robinton <[email protected]>