[racktables-users] IPv6 and reserved ip addresses

  • From: Jens Weibler <jens.weibler@xxxxxxx>
  • To: racktables-users@xxxxxxxxxxxxx
  • Date: Tue, 12 Apr 2011 22:28:46 +0200

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');
 }
 

Other related posts: