r3280 VLAN_LISTSRC evolved into VLANSWITCH_LISTSRC and VLANIPV4NET_LISTSRC
authorDenis Ovsienko <infrastation@yandex.ru>
Thu, 18 Feb 2010 17:53:45 +0000 (17:53 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Thu, 18 Feb 2010 17:53:45 +0000 (17:53 +0000)
renderVLANDomainSwitches(): updated accordingly
renderIPv4Network(): display assigned VLAN, if any
renderIPv4NetworkVLANTab(): new function
renderVLANInfo(): fix propagation mode display
getDomainVLANs(): also return network counter for each row; ORDER BY
getVLANInfo(): vlan_type AS vlan_prop; ORDER BY
trigger_ipv4net_vlanconfig(): new function

inc/database.php
inc/interface.php
inc/navigation.php
inc/triggers.php
install/init-dictbase.sql
upgrade.php

index bcbbd4b..f594a53 100644 (file)
@@ -53,6 +53,7 @@ $SQLSchema = array
                        'name' => 'name',
                        'comment' => 'comment',
                        'parent_id' => '(SELECT id FROM IPv4Network AS subt WHERE IPv4Network.ip & (4294967295 >> (32 - subt.mask)) << (32 - subt.mask) = subt.ip and subt.mask < IPv4Network.mask ORDER BY subt.mask DESC limit 1)',
+                       'vlan_ck' => '(SELECT CONCAT(domain_id, "-", vlan_id) FROM VLANIPv4 WHERE ipv4net_id = id)',
                ),
                'keycolumn' => 'id',
                'ordcolumns' => array ('ip', 'mask'),
@@ -3572,7 +3573,15 @@ function getVLANDomainInfo ($vdom_id)
 function getDomainVLANs ($vdom_id)
 {
        global $dbxlink;
-       $query = $dbxlink->prepare ('SELECT vlan_id, vlan_type, vlan_descr FROM VLANDescription WHERE domain_id = ? ORDER BY vlan_id');
+       $query = $dbxlink->prepare
+       (
+               'SELECT VLANDescription.vlan_id, vlan_type, COUNT(ipv4net_id) AS netc, vlan_descr ' .
+               'FROM VLANDescription LEFT JOIN VLANIPv4 ON VLANDescription.domain_id = VLANIPv4.domain_id AND VLANDescription.vlan_id = VLANIPv4.vlan_id ' .
+               'WHERE VLANDescription.domain_id = ? ' .
+               'GROUP BY VLANDescription.domain_id, VLANDescription.vlan_id ' .
+               'ORDER BY VLANDescription.vlan_id'
+#              'SELECT vlan_id, vlan_type, vlan_descr FROM VLANDescription WHERE domain_id = ? ORDER BY vlan_id'
+       );
        $result = $query->execute (array ($vdom_id));
        $ret = array();
        while ($row = $query->fetch (PDO::FETCH_ASSOC))
@@ -3670,7 +3679,7 @@ function getVLANInfo ($vlan_ck)
 {
        list ($vdom_id, $vlan_id) = decodeVLANCK ($vlan_ck);
        global $dbxlink;
-       $query = 'SELECT domain_id, vlan_id, vlan_type, vlan_descr, ' .
+       $query = 'SELECT domain_id, vlan_id, vlan_type AS vlan_prop, vlan_descr, ' .
                '(SELECT description FROM VLANDomain WHERE id = domain_id) AS domain_descr ' .
                'FROM VLANDescription WHERE domain_id = ? AND vlan_id = ?';
        $prepared = $dbxlink->prepare ($query);
@@ -3678,7 +3687,7 @@ function getVLANInfo ($vlan_ck)
        if (NULL == ($ret = $prepared->fetch (PDO::FETCH_ASSOC)))
                return NULL; // throw what ?
        unset ($prepared);
-       $query = 'SELECT ipv4net_id FROM VLANIPv4 WHERE domain_id = ? AND vlan_id = ?';
+       $query = 'SELECT ipv4net_id FROM VLANIPv4 WHERE domain_id = ? AND vlan_id = ? ORDER BY ipv4net_id';
        $prepared = $dbxlink->prepare ($query);
        $prepared->execute (array ($vdom_id, $vlan_id));
        $ret['ipv4nets'] = array();
index 03a9553..011f737 100644 (file)
@@ -2250,6 +2250,14 @@ function renderIPv4Network ($id)
        echo $wildcardbylen[$range['mask']];
        echo "</td></tr>\n";
 
+       if (strlen ($range['vlan_ck']))
+       {
+               $vlaninfo = getVLANInfo ($range['vlan_ck']);
+               echo '<tr><th width="50%" class=tdright>VLAN:</th><td class=tdleft><a href="';
+               echo makeHref (array ('page' => 'vlan', 'vlan_ck' => $range['vlan_ck'])) . '">';
+               echo $vlaninfo['vlan_id'] . '@' . $vlaninfo['domain_descr'] . ' (';
+               echo $vlaninfo['vlan_descr'] . ')</a></td></tr>';
+       }
        if (getConfigVar ('EXT_IPV4_VIEW') == 'yes' and count ($routers = findRouters ($range['addrlist'])))
        {
                echo "<tr><th width='50%' class=tdright>Routed by:</th>";
@@ -2384,6 +2392,41 @@ function renderIPv4NetworkProperties ($id)
        echo "</td></form></tr></table>\n";
 }
 
+function renderIPv4NetworkVLANTab ($id)
+{
+       $netinfo = spotEntity ('ipv4net', $id);
+       echo "<table border=0 cellspacing=0 cellpadding=3 width='100%'>";
+       if (strlen ($netinfo['vlan_ck']))
+       {
+               $vlaninfo = getVLANInfo ($netinfo['vlan_ck']);
+               echo '<tr><th width="50%" class=tdright>VLAN:</th><td class=tdleft><a href="';
+               echo makeHref (array ('page' => 'vlan', 'vlan_ck' => $range['vlan_ck'])) . '">';
+               echo $vlaninfo['vlan_id'] . '@' . $vlaninfo['domain_descr'] . ' (';
+               echo $vlaninfo['vlan_descr'] . ')</a></td></tr>';
+               echo "<tr><th width='50%' class=tdright>Action:</th><td class=tdleft>";
+               echo '<a href="' . makeHrefProcess (array ('op' => 'unbind', 'vlan_ck' => $netinfo['vlan_ck'], 'id' => $id));
+               echo '">';
+               printImageHREF ('CUT', 'unbind');
+               echo '</a></td></tr>';
+       }
+       else
+       {
+               $options = array();
+               foreach (getVLANDomainList() as $dominfo)
+                       foreach (getDomainVLANs ($dominfo['id']) as $vlaninfo)
+                               $options[$dominfo['description']][$dominfo['id']. '-' . $vlaninfo['vlan_id']] =
+                                       $vlaninfo['vlan_id'] . ' (' . $vlaninfo['netc'] . ') ' . $vlaninfo['vlan_descr'];
+               printOpFormIntro ('bind');
+               echo "<tr><th width='50%' class=tdright>Current:</th><td class='tdleft sparenetwork'>(none)</td></tr>";
+               echo "<tr><th width='50%' class=tdright>Action:</th><td class=tdleft>";
+               printNiftySelect ($options, array ('name' => 'vlan_ck'));
+               echo ' ';
+               printImageHref ('ATTACH', 'bind', TRUE);
+               echo '</td></tr></form>';
+       }
+       echo '</table>';
+}
+
 function renderIPv4Address ($dottedquad)
 {
        global $aat, $nextorder;
@@ -6471,7 +6514,7 @@ function renderVLANDomainSwitches ($vdom_id)
                printImageHREF ('attach', 'bind', TRUE);
                echo '</td><td>';
                $options = array();
-               foreach (getNarrowObjectList ('VLAN_LISTSRC') as $object_id => $object_dname)
+               foreach (getNarrowObjectList ('VLANSWITCH_LISTSRC') as $object_id => $object_dname)
                        if (!in_array ($object_id, $twitlist))
                                $options[$object_id] = $object_dname;
                printSelect ($options, array ('name' => 'object_id', 'tabindex' => 100));
@@ -6696,6 +6739,7 @@ function renderPortNativeVLAN ($port_id, $allowed, $native)
 
 function renderVLANInfo ()
 {
+       global $vtoptions;
        $vlan = getVLANInfo ($_REQUEST['vlan_ck']);
        echo '<table border=0 class=objectview cellspacing=0 cellpadding=0>';
        echo "<tr><td colspan=2 align=center><h1>${mydomain['description']}</h1></td></tr>";
@@ -6706,7 +6750,7 @@ function renderVLANInfo ()
        echo "<tr><th width='50%' class=tdright>VLAN ID:</th><td class=tdleft>${vlan['vlan_id']}</td></tr>";
        if (strlen ($vlan['vlan_descr']))
                echo "<tr><th width='50%' class=tdright>Description:</th><td class=tdleft>${vlan['vlan_descr']}</td></tr>";
-       echo "<tr><th width='50%' class=tdright>Propagation:</th><td class=tdleft>${vlan['vlan_prop']}</td></tr>";
+       echo "<tr><th width='50%' class=tdright>Propagation:</th><td class=tdleft>" . $vtoptions[$vlan['vlan_prop']] . "</td></tr>";
        echo '</table>';
        finishPortlet();
        echo '</td><td class=pcright>';
index 572c2e1..82f52f2 100644 (file)
@@ -167,13 +167,15 @@ $tab['ipv4net']['properties'] = 'Properties';
 $tab['ipv4net']['liveptr'] = 'Live PTR';
 $tab['ipv4net']['tags'] = 'Tags';
 $tab['ipv4net']['files'] = 'Files';
-$tab['ipv4net']['vlan'] = '[VLAN]';
+$tab['ipv4net']['vlan'] = 'VLAN';
 $tabhandler['ipv4net']['default'] = 'renderIPv4Network';
 $tabhandler['ipv4net']['properties'] = 'renderIPv4NetworkProperties';
 $tabhandler['ipv4net']['liveptr'] = 'renderLivePTR';
 $tabhandler['ipv4net']['tags'] = 'renderEntityTags';
 $tabhandler['ipv4net']['files'] = 'renderFilesForEntity';
+$tabhandler['ipv4net']['vlan'] = 'renderIPv4NetworkVLANTab';
 $trigger['ipv4net']['tags'] = 'trigger_tags';
+$trigger['ipv4net']['vlan'] = 'trigger_ipv4net_vlanconfig';
 $ophandler['ipv4net']['properties']['editRange'] = 'updIPv4Prefix';
 $ophandler['ipv4net']['liveptr']['importPTRData'] = 'importPTRData';
 $ophandler['ipv4net']['tags']['saveTags'] = 'saveEntityTags';
index 5aa1d0e..b9599dc 100644 (file)
@@ -187,7 +187,19 @@ function trigger_vlanconfig ()
 {
        if (getObjectVLANDomainID ($_REQUEST['object_id']))
                return 'std';
-       elseif (considerConfiguredConstraint (spotEntity ('object', $_REQUEST['object_id']), 'VLAN_LISTSRC'))
+       elseif (considerConfiguredConstraint (spotEntity ('object', $_REQUEST['object_id']), 'VLANSWITCH_LISTSRC'))
+               return 'attn';
+       else
+               return '';
+}
+
+// implement similar logic for IPv4 networks
+function trigger_ipv4net_vlanconfig ()
+{
+       $netinfo = spotEntity ('ipv4net', $_REQUEST['id']);
+       if (strlen ($netinfo['vlan_ck']))
+               return 'std';
+       elseif (considerConfiguredConstraint ($netinfo, 'VLANIPV4NET_LISTSRC'))
                return 'attn';
        else
                return '';
index 864a5ab..eed9268 100644 (file)
@@ -392,6 +392,8 @@ INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, is_userdef
 ('DEFAULT_PORT_OIF_IDS','1=24; 3=1078; 4=1077; 5=1079; 6=1080; 8=1082; 9=1084','string','no','no','no','Default port outer interface IDs'),
 ('IPV4_TREE_RTR_AS_CELL','yes','string','no','no','no','Show full router info for each network in IPv4 tree view'),
 ('PROXIMITY_RANGE','0','uint','yes','no','no','Proximity range (0 is current rack only)'),
+('VLANSWITCH_LISTSRC', '', 'string', 'yes', 'no', 'List of VLAN running switches'),
+('VLANIPV4NET_LISTSRC', '', 'string', 'yes', 'no', 'List of VLAN-based IPv4 networks'),
 ('DB_VERSION','0.17.9','string','no','yes','no','Database version.');
 
 INSERT INTO `Script` VALUES ('RackCode','allow {$userid_1}');
index 5365c38..8e7336e 100644 (file)
@@ -474,7 +474,8 @@ CREATE TABLE `UserConfig` (
                        break;
                case '0.18.0':
                        $query = array_merge ($query, reloadDictionary ($batchid));
-                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('VLAN_LISTSRC', '', 'string', 'yes', 'no', 'List of VLAN running switches')";
+                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('VLANSWITCH_LISTSRC', '', 'string', 'yes', 'no', 'List of VLAN running switches')";
+                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('VLANIPV4NET_LISTSRC', '', 'string', 'yes', 'no', 'List of VLAN-based IPv4 networks')";
                        $query[] = "ALTER TABLE IPv4Network ENGINE=InnoDB";
                        $query[] = "UPDATE Config SET varvalue = '0.18.0' WHERE varname = 'DB_VERSION'";
                default: