[yast-commit] r49334 - /trunk/yast2/library/network/src/DnsServerAPI.pm
Author: locilka Date: Tue Jul 22 22:44:33 2008 New Revision: 49334 URL: http://svn.opensuse.org/viewcvs/yast?rev=49334&view=rev Log: A bit better and a bit more generic solution of the IPv6 functions from my previous commit ;) Nadrazi! Modified: trunk/yast2/library/network/src/DnsServerAPI.pm Modified: trunk/yast2/library/network/src/DnsServerAPI.pm URL: http://svn.opensuse.org/viewcvs/yast/trunk/yast2/library/network/src/DnsServerAPI.pm?rev=49334&r1=49333&r2=49334&view=diff ============================================================================== --- trunk/yast2/library/network/src/DnsServerAPI.pm (original) +++ trunk/yast2/library/network/src/DnsServerAPI.pm Tue Jul 22 22:44:33 2008 @@ -2331,23 +2331,25 @@ } =item * -C<$reverseip = GetReverseIPforIPv6($ipv6);> +C<$reverseip = GetFullIPv6($ipv6);> -Returns reverse ip for IPv6. +Returns full-length ip IPv6. EXAMPLE: - my $reverseip = GetReverseIPforIPv6('3ffe:ffff::1'); - -> '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.f.f.f.e.f.f.3.ip6.arpa.' - my $reverseip = GetReverseIPforIPv6('3ffe:ffff::210:a4ff:fe01:1'); - -> '1.0.0.0.1.0.e.f.f.f.4.a.0.1.2.0.0.0.0.0.0.0.0.0.f.f.f.f.e.f.f.3.ip6.arpa.' - my $reverseip = GetReverseIPforIPv6('3ffe:ffff::'); - -> '0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.f.f.f.e.f.f.3.ip6.arpa.' + my $reverseip = GetFullIPv6('3ffe:ffff::1'); + -> '3ffe:ffff:0000:0000:0000:0000:0000:0001' + my $reverseip = GetFullIPv6('3ffe:ffff::210:a4ff:fe01:1'); + -> '3ffe:ffff:0000:0000:0210:a4ff:fe01:0001' + my $reverseip = GetFullIPv6('3ffe:ffff::'); + -> '3ffe:ffff:0000:0000:0000:0000:0000:0000' + my $reverseip = GetFullIPv6('::25'); + -> '0000:0000:0000:0000:0000:0000:0000:0025' =cut -BEGIN{$TYPEINFO{GetReverseIPforIPv6} = ["function","string","string"]}; -sub GetReverseIPforIPv6 { +BEGIN{$TYPEINFO{GetFullIPv6} = ["function","string","string"]}; +sub GetFullIPv6 { my $class = shift; my $ipv6 = shift || ''; @@ -2355,42 +2357,88 @@ return undef if (!IP->Check6($ipv6)); - my $reverseip = 'ip6.arpa.'; - + # :: means undefined amount of "0000" if ($ipv6 =~ /::/) { + # before :: my $part_before = $ipv6; $part_before =~ s/(.*)::.*/$1/; + # after :: my $part_after = $ipv6; $part_after =~ s/.*::(.*)/$1/; my @part_before_full = (); my @part_after_full = (); + # parts before :: foreach my $part (split /:/, $part_before) { - $part = sprintf ("%04s", $part); push @part_before_full, $part; } + # parts after :: foreach my $part (split /:/, $part_after) { - $part = sprintf ("%04s", $part); push @part_after_full, $part; } - my $zeros = 32 - 4 * (scalar (@part_before_full) + scalar (@part_after_full)); - $zeros = "0"x${zeros}; - - $ipv6 = join ("", @part_before_full); + # how many "0000" means the :: + my $zeros = 8 - (scalar (@part_before_full) + scalar (@part_after_full)); + # string of zeros + $zeros = "0000:"x${zeros}; + $zeros =~ s/:$//; + + # create like-an-IPv6 string + $ipv6 = join (":", @part_before_full); + $ipv6 .= (scalar (@part_before_full) > 0 ? ":":""); $ipv6 .= $zeros; - $ipv6 .= join ("", @part_after_full); + $ipv6 .= (scalar (@part_after_full) > 0 ? ":":""); + $ipv6 .= join (":", @part_after_full); } + my @ret = (); + foreach my $part (split /:/, $ipv6) { - foreach my $letter (split //, $part) { - $reverseip = $letter.'.'.$reverseip; - } + push @ret, sprintf ("%04s", $part); } + return join (":", @ret); +} + +=item * +C<$reverseip = GetReverseIPforIPv6($ipv6);> + +Returns reverse ip for IPv6. + +EXAMPLE: + + my $reverseip = GetReverseIPforIPv6('3ffe:ffff::1'); + -> '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.f.f.f.e.f.f.3.ip6.arpa.' + my $reverseip = GetReverseIPforIPv6('3ffe:ffff::210:a4ff:fe01:1'); + -> '1.0.0.0.1.0.e.f.f.f.4.a.0.1.2.0.0.0.0.0.0.0.0.0.f.f.f.f.e.f.f.3.ip6.arpa.' + my $reverseip = GetReverseIPforIPv6('3ffe:ffff::'); + -> '0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.f.f.f.e.f.f.3.ip6.arpa.' + +=cut + +BEGIN{$TYPEINFO{GetReverseIPforIPv6} = ["function","string","string"]}; +sub GetReverseIPforIPv6 { + my $class = shift; + my $ipv6 = shift || ''; + + return undef if !Init(); + + return undef if (!IP->Check6($ipv6)); + + # get full-length IPv6 + $ipv6 = $class->GetFullIPv6 ($ipv6); + # colons are ignored for reverse IP + $ipv6 =~ s/://g; + + # all letters one by one + # in reverse order + # join with a dot + # reverse IPv6 suffix at the end + my $reverseip = join ('.', reverse (split (//, $ipv6))).'.ip6.arpa.'; + return $reverseip; } -- To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org For additional commands, e-mail: yast-commit+help@opensuse.org
participants (1)
-
locilka@svn.opensuse.org