]>
jfr.im git - irc/SurrealServices/srsv.git/blob - branches/0.4.3/SrSv/IPv6.pm
3 use Exporter
qw( import );
4 use SrSv
::Conf2Consts
qw( main );
8 our @EXPORT = qw( is_ipv6 get_ipv6_net get_ipv6_64 );
10 require Socket
; import Socket
;
11 require Socket6
; import Socket6
;
15 import Math
::BigInt
try => 'GMP';
18 print STDERR
"Running old version of perl/Math::BigInt.\n", $@, "Trying again.\n";
23 push @EXPORT, qw( AF_INET6 );
29 if($addr =~ /^((?:\d{1,3}\.){3}\d{1,3})$/) {
30 return 0 unless wantarray;
33 elsif($addr =~ /:ffff:((?:\d{1,3}\.){3}\d{1,3})$/) {
34 return 0 unless wantarray;
37 return 1 unless wantarray;
44 # grabs the top 64bits of the IPv6 addr.
46 my $str = Socket6
::inet_pton
(AF_INET6
, $addr);
47 my (@words) = unpack('H4H4H4H4H4H4H4H4', $str);
48 my $int = ( !HAS_64BIT_INT
? Math
::BigInt-
>bzero() : 0 );
51 $int |= hex($words[$_]);
58 my $str = Socket6
::inet_pton
(AF_INET6
, $addr);
59 return join(":", unpack("H4H4H4H4", $str))."::/64";