#!/usr/bin/php
<?php

// Note: The GW generators have newer code
// Note: Copied again from ../rir-delegations/

error_reporting(E_ALL E_NOTICE E_STRICT E_DEPRECATED);

define('USE_CACHE'true);

// ---

include __DIR__ '/ipv6_functions.inc.phps';
include 
__DIR__ '/grep_funcs.inc.phps';
include 
__DIR__ '/rirs.inc.phps';

// This is like __DIR__, but does not resolve symlinks
// (useful for sharing the source codes locally by symlinking)
define('DIR'dirname($_SERVER['SCRIPT_FILENAME']));

$yyy = array();

foreach (
$rirs as &$rir) {
    if (
USE_CACHE) {
        
$rirstat_file file(DIR "/cache/rirstats/$rir");
    } else {
        
$rirstat_file file($rirstat_urls[$rir]);
    }

    
$rirstat_file antigrep($rirstat_file'#');
    
$rirstat_file grep($rirstat_file'ipv6');
    
$rirstat_file antigrep($rirstat_file'summary');

    
# ---

    
echo "$rir: Step 1 - Prepare\n";

    foreach (
$rirstat_file as $x) {
        
$x trim($x);
        if (
$x == '') continue;

        
$ary explode('|'$x);

        
# Example:
        # afrinic|KE|ipv6|2c0f:fe88::|32|20100728|allocated
        # ^0      ^1 ^2   ^3          ^4 ^5       ^6

        
$country $ary[1];
        
$baseip $ary[3];
        
$cidr $ary[4];
        
# $state = $ary[6];

        
control_cache();
        
$range ipv6_cidr2range($baseip$cidr);
        
$topip $range[1];

        if (
$country == ''$country 'XX'// Unassigned (extended RIR format)

        
$yyy[$country][$baseip] = $topip;
    }
}

ksort($yyy);

foreach (
$yyy as $country => &$xxx) {
    
$country strtolower($country);
    
$xxx ipv6_merge_address_blocks($xxx"$country: Step 2 - ");

    
// --- CIDR finden ---

    
echo "$country: Step 3 - Analyze address ranges and write CIDR blocks\n";

    
$hf fopen(DIR "/out/ipv6_${country}_cidr.new"'w');
    
$hb fopen(DIR "/out/ipv6_${country}_blocks.new"'w');

    foreach (
$xxx as $baseip => &$topip) {
        
fwrite($hb"$baseip - $topip\n");

        
control_cache();
        
$rirstat_file ipv6_range2cidr($baseip$topip);
        foreach (
$rirstat_file as $x) {
            
fwrite($hf"$x\n");
        }
    }

    
fclose($hb);
    
fclose($hf);

    
rename(DIR "/out/ipv6_${country}_cidr.new"DIR "/out/ipv6_${country}_cidr");
    
rename(DIR "/out/ipv6_${country}_blocks.new"DIR "/out/ipv6_${country}_blocks");
}

echo 
"Finished!\n";

# ---

function control_cache() {
    
$limit 10000;

    global 
$cache_ipv6_cidr2range; if (count($cache_ipv6_cidr2range) > $limit$cache_ipv6_cidr2range = array();
    global 
$cache_ipv6_range2cidr; if (count($cache_ipv6_range2cidr) > $limit$cache_ipv6_range2cidr = array();
    global 
$cache_ipv6_in_cidr; if (count($cache_ipv6_in_cidr) > $limit$cache_ipv6_in_cidr = array();
    global 
$cache_ip2long6; if (count($cache_ip2long6) > $limit$cache_ip2long6 = array();
    global 
$cache_long2ip6; if (count($cache_long2ip6) > $limit$cache_long2ip6 = array();
    global 
$cache_ip2bin; if (count($cache_ip2bin) > $limit$cache_ip2bin = array();
    global 
$cache_bin2ip; if (count($cache_bin2ip) > $limit$cache_bin2ip = array();


/*    global $cache_ipv6_cidr2range; while (count($cache_ipv6_cidr2range) > $limit) array_shift($cache_ipv6_cidr2range);
    global $cache_ipv6_range2cidr; while (count($cache_ipv6_range2cidr) > $limit) array_shift($cache_ipv6_range2cidr);
    global $cache_ipv6_in_cidr; while (count($cache_ipv6_in_cidr) > $limit) array_shift($cache_ipv6_in_cidr);
    global $cache_ip2long6; while (count($cache_ip2long6) > $limit) array_shift($cache_ip2long6);
    global $cache_long2ip6; while (count($cache_long2ip6) > $limit) array_shift($cache_long2ip6);
    global $cache_ip2bin; while (count($cache_ip2bin) > $limit) array_shift($cache_ip2bin);
    global $cache_bin2ip; while (count($cache_bin2ip) > $limit) array_shift($cache_bin2ip);
*/
}

?>