Hi, I just did the fault and used 2001:db8::/64 as router ip (as example).A few days later I read rfc3513 which defines the "Subnet-Router anycast address"...
Just as request for comments I've written a small patch (with some fixed typo and better variable naming)...
For greater reserved ranges (multicast...) we might need a better concept :-/
-- Jens Weibler IT Services Hochschule Darmstadt www.h-da.de University of Applied Sciences Fachbereich Informatik www.fbi.h-da.de Schöfferstr. 8b D-64295 Darmstadt Tel +49 6151 16-8425 Fax +49 6151 16-8935 jens.weibler@xxxxxxx
diff -ur RackTables-0.19.3/wwwroot/inc/database.php RackTables/wwwroot/inc/database.php --- RackTables-0.19.3/wwwroot/inc/database.php 2011-04-05 12:40:33.000000000 +0200 +++ RackTables/wwwroot/inc/database.php 2011-04-12 22:17:11.000000000 +0200 @@ -3338,7 +3338,7 @@ produceTagsForLastRecord ('ipv4net', $taglist); } -function createIPv6Prefix ($range = '', $name = '', $taglist = array()) +function createIPv6Prefix ($range = '', $name = '', $is_connected = FALSE, $taglist = array()) { // $range is in aaa0:b::c:d/x format, split into ip/mask vars $rangeArray = explode ('/', $range); @@ -3348,22 +3348,29 @@ $mask = $rangeArray[1]; $address = new IPv6Address; if (!strlen ($ip) or !strlen ($mask) or ! $address->parse ($ip)) - throw new InvalidRequestArgException ('range', $range, 'Invalid IPv4 prefix'); - $network_addr = $address->get_first_subnet_address ($mask); - $broadcast_addr = $address->get_last_subnet_address ($mask); - if (! $network_addr || ! $broadcast_addr) + throw new InvalidRequestArgException ('range', $range, 'Invalid IPv6 prefix'); + $first_addr = $address->get_first_subnet_address ($mask); + $last_addr = $address->get_last_subnet_address ($mask); + if (! $first_addr || ! $last_addr) throw new InvalidRequestArgException ('range', $range, 'Invalid netmask'); usePreparedInsertBlade ( 'IPv6Network', array ( - 'ip' => $network_addr->getBin(), - 'last_ip' => $broadcast_addr->getBin(), + 'ip' => $first_addr->getBin(), + 'last_ip' => $last_addr->getBin(), 'mask' => $mask, 'name' => $name ) ); + + // rfc3513 and rfc2526 (todo) + if ($is_connected) + { + // rfc3513 2.6.1 - Subnet-Router anycast + updateV6Address($first_addr, 'Subnet-Router anycast', 'yes'); + } produceTagsForLastRecord ('ipv6net', $taglist); } diff -ur RackTables-0.19.3/wwwroot/inc/interface.php RackTables/wwwroot/inc/interface.php --- RackTables-0.19.3/wwwroot/inc/interface.php 2011-04-05 15:44:00.000000000 +0200 +++ RackTables/wwwroot/inc/interface.php 2011-04-12 22:17:55.000000000 +0200 @@ -2546,6 +2546,7 @@ $prefix_value = empty ($_REQUEST['set-prefix']) ? '' : $_REQUEST['set-prefix']; echo "<th class=tdright>prefix</th><td class=tdleft><input type=text name='range' size=36 class='live-validate' tabindex=1 value='${prefix_value}'></td>"; echo "<tr><th class=tdright>name</th><td class=tdleft><input type=text name='name' size='20' tabindex=2></td></tr>"; + echo "<tr><th class=tdright>connected network</th><td class=tdleft><input type=checkbox name='is_connected' tabindex=3></td></tr>"; echo "<tr><td colspan=2>"; printImageHREF ('CREATE', 'Add a new network', TRUE, 4); echo '</td></tr>'; diff -ur RackTables-0.19.3/wwwroot/inc/ophandlers.php RackTables/wwwroot/inc/ophandlers.php --- RackTables-0.19.3/wwwroot/inc/ophandlers.php 2011-04-05 12:59:58.000000000 +0200 +++ RackTables/wwwroot/inc/ophandlers.php 2011-04-12 22:17:11.000000000 +0200 @@ -910,9 +910,10 @@ assertStringArg ('range'); assertStringArg ('name', TRUE); + $is_connected = isset ($_REQUEST['is_connected']) ? $_REQUEST['is_connected'] : 'off'; $taglist = isset ($_REQUEST['taglist']) ? $_REQUEST['taglist'] : array(); global $sic; - createIPv6Prefix ($_REQUEST['range'], $sic['name'], $taglist); + createIPv6Prefix ($_REQUEST['range'], $sic['name'], $is_connected, $taglist); return buildRedirectURL (__FUNCTION__, 'OK'); }