4 * Given IPv6 address and prefix creates array of * wildcard suffixed
5 * addresses to be used for as reverse DNS records
7 function ipv6_prefix2wildcards($address, $prefix) {
10 echo("IPv6 prefix: ".$address."/".$prefix."\n");
11 $addr = inet_pton ($address);
13 $a = gmp_import($addr);
15 //Separate maskable octets
16 $pref_hex = ceil($pref / 4)*4; //Prefix rounded up to full octets
17 $pref_rem = $pref_hex - $pref; //Remainder of prefix
18 echo("Rounding prefix: ".$pref_hex."-".$pref_rem."\n");
20 $a = gmp_div_q($a, gmp_pow(2,128-$prefix)); //Truncate to just prefix
21 $a = gmp_mul($a, gmp_pow(2,$pref_rem)); //Fill remaining bits in last wildcard octet with zeros
25 for($i = 0; $i < (2**$pref_rem) ; $i++
) {
26 //echo("ADDED: ".$i." = ".decbin($i)."\n");
27 $ap = gmp_or($a, gmp_init($i));
35 $wcs = ipv6_prefix2wildcards($argv[1],$argv[2]);
37 $wcs = ipv6_prefix2wildcards('2001:1:3::10', 67);
42 //echo(gmp_strval($w, 2)."* :-)\n");
43 echo(gmp_strval($w, 16)."*\n");
This page took 0.30038 seconds and 4 git commands to generate.