move port OIFs from dictionary to a separate table
authorDenis Ovsienko <infrastation@yandex.ru>
Sat, 10 May 2014 13:25:56 +0000 (17:25 +0400)
committerDenis Ovsienko <infrastation@yandex.ru>
Sat, 10 May 2014 14:30:02 +0000 (18:30 +0400)
Port outer interfaces don't actually belong to the dictionary, the
reason for keeping that data there was to reuse the infrastructure.
However, with tableHandler() implemented that becomes less important
than missing foreign keys.

This change removes dictionary chapter 2, moves the outer interfaces
rows to a table of their own, much like the inner interfaces, and adds 3
new foreign keys that reference the new table.

* fetchPortList(): fetch data from PortOuterInterface instead of
  Dictionary
* getPortOIFCompat(): idem
* getPortInterfaceCompat(): idem
* getExistingPortTypeOptions(): idem
* getPortOIFOptions(): idem
* getPortIIFStats(): idem
* renderDataIntegrityReport(): idem and remove checks that duplicate the
  new foreign keys and update the foreign keys list
* getChapterRefc(): move POI-specific query to a new function
* getPortOIFRefc(): the new function
* dictionary.php: remove the contents of chapter 2
* functions.php: remove CHAP_PORTTYPE constant
* install.php: make the changes to schema
* upgrade.php: idem and add a section for 0.20.8
* renderPortOIFViewer(): new function
* renderPortOIFEditor(): new function
* navigation.php: register new page for POI management
* ophandlers.php: update $opspec_list for PortOuterInterface

ChangeLog
wwwroot/inc/database.php
wwwroot/inc/dictionary.php
wwwroot/inc/functions.php
wwwroot/inc/install.php
wwwroot/inc/interface.php
wwwroot/inc/navigation.php
wwwroot/inc/ophandlers.php
wwwroot/inc/upgrade.php

index 6b4691d831e214441df9eef16d305fa7a89da3df..e7d6163ab85493d21a66e7cf76e2394ebb5584b6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,7 @@
        bugfix: properly format comment text for locations and racks
        bugfix: the tab IP SLB/Load balancers displayed all the objects in system
        update: allow connecting to a non-standard LDAP port (by Michał Sochoń)
+       update: move port outer interfaces from the dictionary
 0.20.7 2014-03-03
        bugfix: IP tree expansion button was broken when MAX_UNFILTERED_ENTITIES was set
        bugfix: fix URL detection bug introduced in bugfix to #1023 (#1103)
index 3af1236e924a927c3b327de440acedae4bde3dcf..0b359bc9982f4e3847328abece6c57e1049eedfd 100644 (file)
@@ -847,7 +847,7 @@ SELECT
        Port.iif_id,
        Port.type AS oif_id,
        (SELECT PortInnerInterface.iif_name FROM PortInnerInterface WHERE PortInnerInterface.id = Port.iif_id) AS iif_name,
-       (SELECT Dictionary.dict_value FROM Dictionary WHERE Dictionary.dict_key = Port.type) AS oif_name,
+       (SELECT PortOuterInterface.oif_name FROM PortOuterInterface WHERE PortOuterInterface.id = Port.type) AS oif_name,
        IF(la.porta, la.cable, lb.cable) AS cableid,
        IF(la.porta, pa.id, pb.id) AS remote_id,
        IF(la.porta, pa.name, pb.name) AS remote_name,
@@ -3344,9 +3344,9 @@ function getPortOIFCompat ($ignore_cache = FALSE)
                return $cache;
 
        $query =
-               "select type1, type2, d1.dict_value as type1name, d2.dict_value as type2name from " .
-               "PortCompat as pc inner join Dictionary as d1 on pc.type1 = d1.dict_key " .
-               "inner join Dictionary as d2 on pc.type2 = d2.dict_key " .
+               "SELECT type1, type2, POI1.oif_name AS type1name, POI2.oif_name AS type2name FROM " .
+               "PortCompat AS pc INNER JOIN PortOuterInterface AS POI1 ON pc.type1 = POI1.id " .
+               "INNER JOIN PortOuterInterface AS POI2 ON pc.type2 = POI2.id " .
                'ORDER BY type1name, type2name';
        $result = usePreparedSelectBlade ($query);
        $cache = $result->fetchAll (PDO::FETCH_ASSOC);
@@ -3559,12 +3559,6 @@ function getChapterRefc ($chapter_id, $keylist)
                $query = 'select dict_key as uint_value, (select count(*) from AttributeMap where objtype_id = dict_key) + ' .
                        "(select count(*) from Object where objtype_id = dict_key) as refcnt from Dictionary where chapter_id = ?";
                break;
-       case CHAP_PORTTYPE:
-               // PortOuterInterface chapter is referenced by PortCompat, PortInterfaceCompat and Port tables
-               $query = 'select dict_key as uint_value, (select count(*) from PortCompat where type1 = dict_key or type2 = dict_key) + ' .
-                       '(select count(*) from Port where type = dict_key) + (SELECT COUNT(*) FROM PortInterfaceCompat WHERE oif_id = dict_key) as refcnt ' .
-                       "from Dictionary where chapter_id = ?";
-               break;
        default:
                // Find the list of all assigned values of dictionary-addressed attributes, each with
                // chapter/word keyed reference counters.
@@ -3582,6 +3576,22 @@ function getChapterRefc ($chapter_id, $keylist)
        return $ret;
 }
 
+// Return references counter for each of the given OIF IDs. This includes not
+// only PortCompat and PortInterfaceCompat but also Port even though the latter
+// is not based on PortOuterInterface directly.
+function getPortOIFRefc()
+{
+       $result = usePreparedSelectBlade
+       (
+               'SELECT POI.id, (' .
+               '(SELECT COUNT(*) FROM PortCompat WHERE type1 = id OR type2 = id) + ' .
+               '(SELECT COUNT(*) FROM Port WHERE type = POI.id) + ' .
+               '(SELECT COUNT(*) FROM PortInterfaceCompat WHERE oif_id = POI.id)' .
+               ') AS refcnt FROM PortOuterInterface AS POI'
+       );
+       return reduceSubarraysToColumn (reindexByID ($result->fetchAll (PDO::FETCH_ASSOC)), 'refcnt');
+}
+
 // Return a list of all stickers with sticker map applied. Each sticker records will
 // list all its ways on the map with refcnt set.
 function getAttrMap ()
@@ -4806,9 +4816,9 @@ function getPortInterfaceCompat()
 {
        $result = usePreparedSelectBlade
        (
-               'SELECT iif_id, iif_name, oif_id, dict_value AS oif_name ' .
-               'FROM PortInterfaceCompat INNER JOIN PortInnerInterface ON id = iif_id ' .
-               'INNER JOIN Dictionary ON dict_key = oif_id ' .
+               'SELECT iif_id, iif_name, oif_id, oif_name ' .
+               'FROM PortInterfaceCompat INNER JOIN PortInnerInterface AS PII ON PII.id = iif_id ' .
+               'INNER JOIN PortOuterInterface AS POI ON POI.id = oif_id ' .
                'ORDER BY iif_name, oif_name'
        );
        return $result->fetchAll (PDO::FETCH_ASSOC);
@@ -4825,8 +4835,8 @@ function getExistingPortTypeOptions ($port_id)
        {
                $remote_portinfo = getPortInfo ($portinfo['remote_id']);
                $result = usePreparedSelectBlade ("
-SELECT DISTINCT oif_id, dict_value AS oif_name
-FROM PortInterfaceCompat INNER JOIN Dictionary ON oif_id = dict_key
+SELECT DISTINCT oif_id, oif_name
+FROM PortInterfaceCompat INNER JOIN PortOuterInterface ON oif_id = id
 LEFT JOIN PortCompat pc1 ON oif_id = pc1.type1 AND pc1.type2 = ?
 LEFT JOIN PortCompat pc2 ON oif_id = pc1.type2 AND pc2.type1 = ?
 WHERE iif_id = (SELECT iif_id FROM Port WHERE id = ?)
@@ -4838,8 +4848,8 @@ ORDER BY oif_name
        else
        {
                $result = usePreparedSelectBlade ("
-SELECT oif_id, dict_value AS oif_name
-FROM PortInterfaceCompat INNER JOIN Dictionary ON oif_id = dict_key
+SELECT oif_id, oif_name
+FROM PortInterfaceCompat INNER JOIN PortOuterInterface ON oif_id = id
 WHERE iif_id = (SELECT iif_id FROM Port WHERE id = ?)
 ORDER BY oif_name
 ", array ($port_id)
@@ -4870,7 +4880,8 @@ function getPortIIFOptions()
 
 function getPortOIFOptions()
 {
-       return readChapter (CHAP_PORTTYPE);
+       $result = usePreparedSelectBlade ('SELECT id, oif_name FROM PortOuterInterface ORDER BY oif_name');
+       return reduceSubarraysToColumn (reindexByID ($result->fetchAll (PDO::FETCH_ASSOC)), 'oif_name');
 }
 
 function commitSupplementPIC ($iif_id, $oif_id)
@@ -4886,10 +4897,10 @@ function getPortIIFStats ($args)
 {
        $result = usePreparedSelectBlade
        (
-               'SELECT dict_value AS title, COUNT(id) AS max, ' .
+               'SELECT oif_name AS title, COUNT(Port.id) AS max, ' .
                'COUNT(reservation_comment) + ' .
-               'SUM((SELECT COUNT(*) FROM Link WHERE id IN (porta, portb))) AS current ' .
-               'FROM Port INNER JOIN Dictionary ON type = dict_key ' .
+               'SUM((SELECT COUNT(*) FROM Link WHERE Port.id IN (porta, portb))) AS current ' .
+               'FROM Port INNER JOIN PortOuterInterface AS POI ON type = POI.id ' .
                'WHERE iif_id = ? GROUP BY type',
                array_slice ($args, 0, 1) // array with only the first argument
        );
index 3d9f86e727b016292a4ed605e8dd752a2b868144..b5ab62e69ee5ffa0f0e0a386f452fe3c2a2aa007 100644 (file)
@@ -114,24 +114,6 @@ $dictionary = array
        13 => array ('chapter_id' => 1, 'dict_value' => 'Modem'),
        14 => array ('chapter_id' => 1, 'dict_value' => 'MediaConverter'),
        15 => array ('chapter_id' => 1, 'dict_value' => 'console'),
-       16 => array ('chapter_id' => 2, 'dict_value' => 'AC-in'),
-       17 => array ('chapter_id' => 2, 'dict_value' => '10Base2'),
-       18 => array ('chapter_id' => 2, 'dict_value' => '10Base-T'),
-       19 => array ('chapter_id' => 2, 'dict_value' => '100Base-TX'),
-       24 => array ('chapter_id' => 2, 'dict_value' => '1000Base-T'),
-       29 => array ('chapter_id' => 2, 'dict_value' => 'RS-232 (RJ-45)'),
-       30 => array ('chapter_id' => 2, 'dict_value' => '10GBase-SR'),
-       31 => array ('chapter_id' => 2, 'dict_value' => 'virtual bridge'),
-       32 => array ('chapter_id' => 2, 'dict_value' => 'sync serial'),
-       33 => array ('chapter_id' => 2, 'dict_value' => 'KVM (host)'),
-       34 => array ('chapter_id' => 2, 'dict_value' => '1000Base-ZX'),
-       35 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER'),
-       36 => array ('chapter_id' => 2, 'dict_value' => '10GBase-LR'),
-       37 => array ('chapter_id' => 2, 'dict_value' => '10GBase-LRM'),
-       38 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR'),
-       39 => array ('chapter_id' => 2, 'dict_value' => '10GBase-LX4'),
-       40 => array ('chapter_id' => 2, 'dict_value' => '10GBase-CX4'),
-       41 => array ('chapter_id' => 2, 'dict_value' => '10GBase-Kx'),
        42 => array ('chapter_id' => 11, 'dict_value' => 'noname/unknown'),
        43 => array ('chapter_id' => 11, 'dict_value' => 'IBM xSeries%GPASS%305'),
        44 => array ('chapter_id' => 11, 'dict_value' => 'IBM xSeries%GPASS%306'),
@@ -527,14 +509,11 @@ $dictionary = array
        436 => array ('chapter_id' => 13, 'dict_value' => 'Red Hat Enterprise%GSKIP%RHEL V5'),
        437 => array ('chapter_id' => 18, 'dict_value' => 'Dell PowerVault 210S'),
        438 => array ('chapter_id' => 18, 'dict_value' => 'Dell PowerVault 221S'),
-       439 => array ('chapter_id' => 2, 'dict_value' => 'dry contact'),
-       440 => array ('chapter_id' => 2, 'dict_value' => 'unknown'),
        441 => array ('chapter_id' => 13, 'dict_value' => '[[CentOS%GSKIP%CentOS V2 | http://www.centos.org/]]'),
        442 => array ('chapter_id' => 13, 'dict_value' => '[[CentOS%GSKIP%CentOS V3 | http://www.centos.org/]]'),
        443 => array ('chapter_id' => 13, 'dict_value' => '[[CentOS%GSKIP%CentOS V4 | http://www.centos.org/]]'),
        444 => array ('chapter_id' => 13, 'dict_value' => '[[CentOS%GSKIP%CentOS V5 | http://www.centos.org/]]'),
        445 => array ('chapter_id' => 1, 'dict_value' => 'KVM switch'),
-       446 => array ('chapter_id' => 2, 'dict_value' => 'KVM (console)'),
        447 => array ('chapter_id' => 1, 'dict_value' => 'multiplexer'),
        448 => array ('chapter_id' => 21, 'dict_value' => 'Avocent DSR1021'),
        449 => array ('chapter_id' => 21, 'dict_value' => 'Avocent DSR1022'),
@@ -769,8 +748,6 @@ $dictionary = array
        678 => array ('chapter_id' => 9999, 'dict_value' => 'Raisecom%GPASS%RC805-120B'),
        679 => array ('chapter_id' => 9999, 'dict_value' => 'Raisecom%GPASS%RC805-240B'),
        680 => array ('chapter_id' => 9999, 'dict_value' => 'Raisecom%GPASS%RC805-480B'),
-       681 => array ('chapter_id' => 2, 'dict_value' => 'RS-232 (DB-9)'),
-       682 => array ('chapter_id' => 2, 'dict_value' => 'RS-232 (DB-25)'),
        683 => array ('chapter_id' => 12, 'dict_value' => 'Force10%GPASS%S2410P'),
        684 => array ('chapter_id' => 12, 'dict_value' => '[[Extreme Networks%GPASS%Summit X150-24t | http://www.extremenetworks.com/products/summit-x150.aspx]]'),
        685 => array ('chapter_id' => 12, 'dict_value' => '[[Extreme Networks%GPASS%Summit X150-48t | http://www.extremenetworks.com/products/summit-x150.aspx]]'),
@@ -1163,16 +1140,8 @@ $dictionary = array
        1074 => array ('chapter_id' => 26, 'dict_value' => 'Brocade%GPASS%Silkworm 3800'),
        1075 => array ('chapter_id' => 26, 'dict_value' => 'Brocade%GPASS%Silkworm 3900'),
        1076 => array ('chapter_id' => 26, 'dict_value' => 'Brocade%GPASS%Silkworm 4100'),
-       1077 => array ('chapter_id' => 2, 'dict_value' => 'empty SFP-1000'),
-       1078 => array ('chapter_id' => 2, 'dict_value' => 'empty GBIC'),
-       1079 => array ('chapter_id' => 2, 'dict_value' => 'empty XENPAK'),
-       1080 => array ('chapter_id' => 2, 'dict_value' => 'empty X2'),
-       1081 => array ('chapter_id' => 2, 'dict_value' => 'empty XPAK'),
-       1082 => array ('chapter_id' => 2, 'dict_value' => 'empty XFP'),
-       1084 => array ('chapter_id' => 2, 'dict_value' => 'empty SFP+'),
        1085 => array ('chapter_id' => 12, 'dict_value' => 'Nortel%GPASS%BES50GE-12T PWR'),
        1086 => array ('chapter_id' => 12, 'dict_value' => 'HP ProCurve%GPASS%4000M'),
-       1087 => array ('chapter_id' => 2, 'dict_value' => '1000Base-T (Dell 1855)'),
        1088 => array ('chapter_id' => 18, 'dict_value' => '[[NetApp%GPASS%FAS2020 | http://www.netapp.com/us/products/storage-systems/fas2000/]]'),
        1089 => array ('chapter_id' => 18, 'dict_value' => '[[NetApp%GPASS%FAS2050 | http://www.netapp.com/us/products/storage-systems/fas2000/]]'),
        1090 => array ('chapter_id' => 18, 'dict_value' => 'NetApp%GPASS%FAS3020'),
@@ -1280,112 +1249,6 @@ $dictionary = array
        1192 => array ('chapter_id' => 12, 'dict_value' => 'Hitachi Cable%GPASS%Apresia6148G-PSR'),
        1193 => array ('chapter_id' => 12, 'dict_value' => 'Hitachi Cable%GPASS%Apresia6148GT-PSR'),
        1194 => array ('chapter_id' => 12, 'dict_value' => 'Hitachi Cable%GPASS%VXC-1024FE'),
-       1195 => array ('chapter_id' => 2, 'dict_value' => '100Base-FX'),
-       1196 => array ('chapter_id' => 2, 'dict_value' => '100Base-SX'),
-       1197 => array ('chapter_id' => 2, 'dict_value' => '100Base-LX10'),
-       1198 => array ('chapter_id' => 2, 'dict_value' => '100Base-BX10-D'),
-       1199 => array ('chapter_id' => 2, 'dict_value' => '100Base-BX10-U'),
-       1200 => array ('chapter_id' => 2, 'dict_value' => '100Base-EX'),
-       1201 => array ('chapter_id' => 2, 'dict_value' => '100Base-ZX'),
-       1202 => array ('chapter_id' => 2, 'dict_value' => '1000Base-SX'),
-       1203 => array ('chapter_id' => 2, 'dict_value' => '1000Base-SX+'),
-       1204 => array ('chapter_id' => 2, 'dict_value' => '1000Base-LX'),
-       1205 => array ('chapter_id' => 2, 'dict_value' => '1000Base-LX/LH'),
-       1206 => array ('chapter_id' => 2, 'dict_value' => '1000Base-BX10-D'),
-       1207 => array ('chapter_id' => 2, 'dict_value' => '1000Base-BX10-U'),
-       1208 => array ('chapter_id' => 2, 'dict_value' => 'empty SFP-100'),
-       1209 => array ('chapter_id' => 2, 'dict_value' => '1000Base-CWDM80-1470 (gray)'),
-       1210 => array ('chapter_id' => 2, 'dict_value' => '1000Base-CWDM80-1490 (violet)'),
-       1211 => array ('chapter_id' => 2, 'dict_value' => '1000Base-CWDM80-1510 (blue)'),
-       1212 => array ('chapter_id' => 2, 'dict_value' => '1000Base-CWDM80-1530 (green)'),
-       1213 => array ('chapter_id' => 2, 'dict_value' => '1000Base-CWDM80-1550 (yellow)'),
-       1214 => array ('chapter_id' => 2, 'dict_value' => '1000Base-CWDM80-1570 (orange)'),
-       1215 => array ('chapter_id' => 2, 'dict_value' => '1000Base-CWDM80-1590 (red)'),
-       1216 => array ('chapter_id' => 2, 'dict_value' => '1000Base-CWDM80-1610 (brown)'),
-       1217 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-61.42 (ITU 20)'),
-       1218 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-60.61 (ITU 21)'),
-       1219 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-59.79 (ITU 22)'),
-       1220 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-58.98 (ITU 23)'),
-       1221 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-58.17 (ITU 24)'),
-       1222 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-57.36 (ITU 25)'),
-       1223 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-56.55 (ITU 26)'),
-       1224 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-55.75 (ITU 27)'),
-       1225 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-54.94 (ITU 28)'),
-       1226 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-54.13 (ITU 29)'),
-       1227 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-53.33 (ITU 30)'),
-       1228 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-52.52 (ITU 31)'),
-       1229 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-51.72 (ITU 32)'),
-       1230 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-50.92 (ITU 33)'),
-       1231 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-50.12 (ITU 34)'),
-       1232 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-49.32 (ITU 35)'),
-       1233 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-48.51 (ITU 36)'),
-       1234 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-47.72 (ITU 37)'),
-       1235 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-46.92 (ITU 38)'),
-       1236 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-46.12 (ITU 39)'),
-       1237 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-45.32 (ITU 40)'),
-       1238 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-44.53 (ITU 41)'),
-       1239 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-43.73 (ITU 42)'),
-       1240 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-42.94 (ITU 43)'),
-       1241 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-42.14 (ITU 44)'),
-       1242 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-41.35 (ITU 45)'),
-       1243 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-40.56 (ITU 46)'),
-       1244 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-39.77 (ITU 47)'),
-       1245 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-38.98 (ITU 48)'),
-       1246 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-38.19 (ITU 49)'),
-       1247 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-37.40 (ITU 50)'),
-       1248 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-36.61 (ITU 51)'),
-       1249 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-35.82 (ITU 52)'),
-       1250 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-35.04 (ITU 53)'),
-       1251 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-34.25 (ITU 54)'),
-       1252 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-33.47 (ITU 55)'),
-       1253 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-32.68 (ITU 56)'),
-       1254 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-31.90 (ITU 57)'),
-       1255 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-31.12 (ITU 58)'),
-       1256 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-30.33 (ITU 59)'),
-       1257 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-29.55 (ITU 60)'),
-       1258 => array ('chapter_id' => 2, 'dict_value' => '1000Base-DWDM80-28.77 (ITU 61)'),
-       1259 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-61.42 (ITU 20)'),
-       1260 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-60.61 (ITU 21)'),
-       1261 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-59.79 (ITU 22)'),
-       1262 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-58.98 (ITU 23)'),
-       1263 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-58.17 (ITU 24)'),
-       1264 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-57.36 (ITU 25)'),
-       1265 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-56.55 (ITU 26)'),
-       1266 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-55.75 (ITU 27)'),
-       1267 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-54.94 (ITU 28)'),
-       1268 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-54.13 (ITU 29)'),
-       1269 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-53.33 (ITU 30)'),
-       1270 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-52.52 (ITU 31)'),
-       1271 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-51.72 (ITU 32)'),
-       1272 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-50.92 (ITU 33)'),
-       1273 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-50.12 (ITU 34)'),
-       1274 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-49.32 (ITU 35)'),
-       1275 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-48.51 (ITU 36)'),
-       1276 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-47.72 (ITU 37)'),
-       1277 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-46.92 (ITU 38)'),
-       1278 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-46.12 (ITU 39)'),
-       1279 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-45.32 (ITU 40)'),
-       1280 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-44.53 (ITU 41)'),
-       1281 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-43.73 (ITU 42)'),
-       1282 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-42.94 (ITU 43)'),
-       1283 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-42.14 (ITU 44)'),
-       1284 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-41.35 (ITU 45)'),
-       1285 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-40.56 (ITU 46)'),
-       1286 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-39.77 (ITU 47)'),
-       1287 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-38.98 (ITU 48)'),
-       1288 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-38.19 (ITU 49)'),
-       1289 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-37.40 (ITU 50)'),
-       1290 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-36.61 (ITU 51)'),
-       1291 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-35.82 (ITU 52)'),
-       1292 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-35.04 (ITU 53)'),
-       1293 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-34.25 (ITU 54)'),
-       1294 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-33.47 (ITU 55)'),
-       1295 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-32.68 (ITU 56)'),
-       1296 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-31.90 (ITU 57)'),
-       1297 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-31.12 (ITU 58)'),
-       1298 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-30.33 (ITU 59)'),
-       1299 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-29.55 (ITU 60)'),
-       1300 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ZR-DWDM80-28.77 (ITU 61)'),
        1301 => array ('chapter_id' => 25, 'dict_value' => 'Cisco%GPASS%AIR-BR1410A'),
        1302 => array ('chapter_id' => 25, 'dict_value' => 'Cisco%GPASS%AIR-BR1310G'),
        1303 => array ('chapter_id' => 25, 'dict_value' => 'Cisco%GPASS%AIR-AP1252AG'),
@@ -1401,13 +1264,11 @@ $dictionary = array
        1313 => array ('chapter_id' => 25, 'dict_value' => 'Cisco%GPASS%AIR-WLC2106'),
        1314 => array ('chapter_id' => 25, 'dict_value' => 'Cisco%GPASS%AIR-WLC526'),
        1315 => array ('chapter_id' => 25, 'dict_value' => 'Cisco%GPASS%AIR-WLC4402'),
-       1316 => array ('chapter_id' => 2, 'dict_value' => '1000Base-T (Dell M1000e)'),
        1317 => array ('chapter_id' => 13, 'dict_value' => 'SUSE Enterprise%GSKIP%SLES11'),
        1318 => array ('chapter_id' => 13, 'dict_value' => 'MicroSoft%GSKIP%Windows Server 2008'),
        1319 => array ('chapter_id' => 13, 'dict_value' => 'SlackWare%GSKIP%Slackware 13.0'),
        1320 => array ('chapter_id' => 13, 'dict_value' => 'Ubuntu%GSKIP%Ubuntu 9.10'),
        1321 => array ('chapter_id' => 12, 'dict_value' => 'Huawei%GPASS%S5328C-EI-24S'),
-       1322 => array ('chapter_id' => 2, 'dict_value' => 'AC-out'),
        1323 => array ('chapter_id' => 1, 'dict_value' => 'Voice/video'),
        1324 => array ('chapter_id' => 28, 'dict_value' => 'Cisco%GPASS%MCS 7816'),
        1325 => array ('chapter_id' => 28, 'dict_value' => 'Cisco%GPASS%MCS 7825'),
@@ -1484,7 +1345,6 @@ $dictionary = array
        1396 => array ('chapter_id' => 13, 'dict_value' => 'Red Hat Enterprise%GSKIP%RHEL V6'),
        1397 => array ('chapter_id' => 1, 'dict_value' => 'Power supply chassis'),
        1398 => array ('chapter_id' => 1, 'dict_value' => 'Power supply'),
-       1399 => array ('chapter_id' => 2, 'dict_value' => 'DC'),
        1400 => array ('chapter_id' => 34, 'dict_value' => 'Cisco%GPASS%RPS 2300'),
        1401 => array ('chapter_id' => 34, 'dict_value' => 'D-Link%GPASS%DPS-800'),
        1402 => array ('chapter_id' => 34, 'dict_value' => 'D-Link%GPASS%DPS-900'),
@@ -1509,52 +1369,8 @@ $dictionary = array
        1421 => array ('chapter_id' => 13, 'dict_value' => '[[SciLin%GSKIP%SL5.3 | https://www.scientificlinux.org/]]'),
        1422 => array ('chapter_id' => 13, 'dict_value' => '[[SciLin%GSKIP%SL5.4 | https://www.scientificlinux.org/]]'),
        1423 => array ('chapter_id' => 12, 'dict_value' => 'HP ProCurve%GPASS%2600-8-PWR'),
-       1424 => array ('chapter_id' => 2, 'dict_value' => '1000Base-CX'),
-       1425 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-61.42 (ITU 20)'),
-       1426 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-60.61 (ITU 21)'),
-       1427 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-59.79 (ITU 22)'),
-       1428 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-58.98 (ITU 23)'),
-       1429 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-58.17 (ITU 24)'),
-       1430 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-57.36 (ITU 25)'),
-       1431 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-56.55 (ITU 26)'),
-       1432 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-55.75 (ITU 27)'),
-       1433 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-54.94 (ITU 28)'),
-       1434 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-54.13 (ITU 29)'),
-       1435 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-53.33 (ITU 30)'),
-       1436 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-52.52 (ITU 31)'),
-       1437 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-51.72 (ITU 32)'),
-       1438 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-50.92 (ITU 33)'),
-       1439 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-50.12 (ITU 34)'),
-       1440 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-49.32 (ITU 35)'),
-       1441 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-48.51 (ITU 36)'),
-       1442 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-47.72 (ITU 37)'),
-       1443 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-46.92 (ITU 38)'),
-       1444 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-46.12 (ITU 39)'),
-       1445 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-45.32 (ITU 40)'),
-       1446 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-44.53 (ITU 41)'),
-       1447 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-43.73 (ITU 42)'),
-       1448 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-42.94 (ITU 43)'),
-       1449 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-42.14 (ITU 44)'),
-       1450 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-41.35 (ITU 45)'),
-       1451 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-40.56 (ITU 46)'),
-       1452 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-39.77 (ITU 47)'),
-       1453 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-38.98 (ITU 48)'),
-       1454 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-38.19 (ITU 49)'),
-       1455 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-37.40 (ITU 50)'),
-       1456 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-36.61 (ITU 51)'),
-       1457 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-35.82 (ITU 52)'),
-       1458 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-35.04 (ITU 53)'),
-       1459 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-34.25 (ITU 54)'),
-       1460 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-33.47 (ITU 55)'),
-       1461 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-32.68 (ITU 56)'),
-       1462 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-31.90 (ITU 57)'),
-       1463 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-31.12 (ITU 58)'),
-       1464 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-30.33 (ITU 59)'),
-       1465 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-29.55 (ITU 60)'),
-       1466 => array ('chapter_id' => 2, 'dict_value' => '10GBase-ER-DWDM40-28.77 (ITU 61)'),
        1467 => array ('chapter_id' => 25, 'dict_value' => 'Cisco%GPASS%AIR-AP1141N'),
        1468 => array ('chapter_id' => 25, 'dict_value' => 'Cisco%GPASS%AIR-AP1262N'),
-       1469 => array ('chapter_id' => 2, 'dict_value' => 'virtual port'),
        1470 => array ('chapter_id' => 12, 'dict_value' => '[[Force10%GPASS%S55 | http://www.force10networks.com/products/s55.asp]]'),
        1471 => array ('chapter_id' => 12, 'dict_value' => '[[Force10%GPASS%S60 | http://www.force10networks.com/products/s60.asp]]'),
        1472 => array ('chapter_id' => 12, 'dict_value' => '[[Force10%GPASS%S4810 | http://www.force10networks.com/products/s4810.asp]]'),
@@ -1673,7 +1489,6 @@ $dictionary = array
        1585 => array ('chapter_id' => 12, 'dict_value' => 'Cisco%GPASS%Catalyst 3750X-48PF'),
        1586 => array ('chapter_id' => 12, 'dict_value' => 'Cisco%GPASS%Catalyst 3750X-12S'),
        1587 => array ('chapter_id' => 12, 'dict_value' => 'Cisco%GPASS%Catalyst 3750X-24S'),
-       1588 => array ('chapter_id' => 2, 'dict_value' => 'empty QSFP+'),
        1589 => array ('chapter_id' => 25, 'dict_value' => 'Cisco%GPASS%AIR-AP1261N'),
        1590 => array ('chapter_id' => 12, 'dict_value' => 'Cisco%GPASS%Catalyst 2960-48TC-L'),
        1591 => array ('chapter_id' => 14, 'dict_value' => 'Force10 SFTOS 2'),
@@ -1688,8 +1503,6 @@ $dictionary = array
        1600 => array ('chapter_id' => 12, 'dict_value' => 'HP ProCurve%GPASS%E2910-48G-PoE+ J9148A'),
        1601 => array ('chapter_id' => 12, 'dict_value' => 'NETGEAR%GPASS%GSM7328Sv2'),
        1602 => array ('chapter_id' => 12, 'dict_value' => 'NETGEAR%GPASS%GSM7224v2'),
-       1603 => array ('chapter_id' => 2, 'dict_value' => '1000Base-T (HP c-Class)'),
-       1604 => array ('chapter_id' => 2, 'dict_value' => '100Base-TX (HP c-Class)'),
        1605 => array ('chapter_id' => 12, 'dict_value' => 'HP GbE2c w/SFP'),
        1606 => array ('chapter_id' => 12, 'dict_value' => 'Cisco%GPASS%Catalyst 2360-48TD'),
        1607 => array ('chapter_id' => 12, 'dict_value' => 'Cisco%GPASS%Catalyst 3560E-12D'),
@@ -1727,7 +1540,6 @@ $dictionary = array
        1639 => array ('chapter_id' => 12, 'dict_value' => 'HP ProCurve%GPASS%6600-24XG J9265A'),
        1640 => array ('chapter_id' => 12, 'dict_value' => 'HP ProCurve%GPASS%6600-48G J9451A'),
        1641 => array ('chapter_id' => 12, 'dict_value' => 'HP ProCurve%GPASS%6600-48G-4XG J9452A'),
-       1642 => array ('chapter_id' => 2, 'dict_value' => '10GBase-T'),
        1643 => array ('chapter_id' => 14, 'dict_value' => 'Cisco NX-OS 6.0'),
        1644 => array ('chapter_id' => 1, 'dict_value' => 'serial console server'),
        1645 => array ('chapter_id' => 36, 'dict_value' => '[[Moxa%GPASS%NPort 6150 | http://www.moxa.com/product/NPort_6150.htm]]'),
@@ -1746,16 +1558,9 @@ $dictionary = array
        1658 => array ('chapter_id' => 36, 'dict_value' => '[[Moxa%GPASS%NPort 6250 | http://www.moxa.com/product/NPort_6250.htm]]'),
        1659 => array ('chapter_id' => 36, 'dict_value' => '[[Moxa%GPASS%NPort 6450 | http://www.moxa.com/product/NPort_6450.htm]]'),
        1660 => array ('chapter_id' => 36, 'dict_value' => '[[Moxa%GPASS%NPort S8458 | http://www.moxa.com/product/NPort_S8458_Series.htm]]'),
-       1661 => array ('chapter_id' => 2, 'dict_value' => '40GBase-KR4'),
-       1663 => array ('chapter_id' => 2, 'dict_value' => '40GBase-SR4'),
-       1664 => array ('chapter_id' => 2, 'dict_value' => '40GBase-LR4'),
        1665 => array ('chapter_id' => 13, 'dict_value' => '[[SciLin%GSKIP%SL6.x | https://www.scientificlinux.org/]]'),
        1666 => array ('chapter_id' => 13, 'dict_value' => '[[SciLin%GSKIP%SL5.x | https://www.scientificlinux.org/]]'),
        1667 => array ('chapter_id' => 13, 'dict_value' => '[[CentOS%GSKIP%CentOS V6 | http://www.centos.org/]]'),
-       1668 => array ('chapter_id' => 2, 'dict_value' => 'empty CFP'),
-       1669 => array ('chapter_id' => 2, 'dict_value' => '100GBase-SR10'),
-       1670 => array ('chapter_id' => 2, 'dict_value' => '100GBase-LR4'),
-       1671 => array ('chapter_id' => 2, 'dict_value' => '100GBase-ER4'),
        1672 => array ('chapter_id' => 11, 'dict_value' => 'Dell PowerEdge%GPASS%R510'),
        1673 => array ('chapter_id' => 37, 'dict_value' => 'Cisco Aironet IOS 12.3'),
        1674 => array ('chapter_id' => 37, 'dict_value' => 'Cisco Aironet IOS 12.4'),
index fc85d4a0739d7898d6646bbf4e9211c6e077ad4a..74aa611678bc11268f08dd4f29f4bb1513082b5c 100644 (file)
@@ -35,7 +35,6 @@ $templateWidth[4] = 1;
 $templateWidth[5] = 1;
 
 define ('CHAP_OBJTYPE', 1);
-define ('CHAP_PORTTYPE', 2);
 // The latter matches both SunOS and Linux-styled formats.
 define ('RE_L2_IFCFG', '/^[0-9a-f]{1,2}(:[0-9a-f]{1,2}){5}$/i');
 define ('RE_L2_CISCO', '/^[0-9a-f]{4}(\.[0-9a-f]{4}){2}$/i');
index 8e367dd917bc592d882f8c1dacf45201963aa251..4a1447df79515a6e2c93cc42326cc23a778ca22c 100644 (file)
@@ -887,7 +887,9 @@ function get_pseudo_file ($name)
   `type1` int(10) unsigned NOT NULL default '0',
   `type2` int(10) unsigned NOT NULL default '0',
   UNIQUE KEY `type1_2` (`type1`,`type2`),
-  KEY `type2` (`type2`)
+  KEY `type2` (`type2`),
+  CONSTRAINT `PortCompat-FK-oif_id1` FOREIGN KEY (`type1`) REFERENCES `PortOuterInterface` (`id`),
+  CONSTRAINT `PortCompat-FK-oif_id2` FOREIGN KEY (`type2`) REFERENCES `PortOuterInterface` (`id`)
 ) ENGINE=InnoDB";
 
                $query[] = "CREATE TABLE `PortInnerInterface` (
@@ -901,7 +903,8 @@ function get_pseudo_file ($name)
   `iif_id` int(10) unsigned NOT NULL,
   `oif_id` int(10) unsigned NOT NULL,
   UNIQUE KEY `pair` (`iif_id`,`oif_id`),
-  CONSTRAINT `PortInterfaceCompat-FK-iif_id` FOREIGN KEY (`iif_id`) REFERENCES `PortInnerInterface` (`id`)
+  CONSTRAINT `PortInterfaceCompat-FK-iif_id` FOREIGN KEY (`iif_id`) REFERENCES `PortInnerInterface` (`id`),
+  CONSTRAINT `PortInterfaceCompat-FK-oif_id` FOREIGN KEY (`oif_id`) REFERENCES `PortOuterInterface` (`id`)
 ) ENGINE=InnoDB";
 
                $query[] = "CREATE TABLE `PortLog` (
@@ -924,6 +927,13 @@ function get_pseudo_file ($name)
   CONSTRAINT `PortNativeVLAN-FK-compound` FOREIGN KEY (`object_id`, `port_name`, `vlan_id`) REFERENCES `PortAllowedVLAN` (`object_id`, `port_name`, `vlan_id`) ON DELETE CASCADE
 ) ENGINE=InnoDB";
 
+               $query[] = "CREATE TABLE `PortOuterInterface` (
+  `id` int(10) unsigned NOT NULL auto_increment,
+  `oif_name` char(48) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `oif_name` (`oif_name`)
+) ENGINE=InnoDB";
+
                $query[] = "CREATE TABLE `PortVLANMode` (
   `object_id` int(10) unsigned NOT NULL,
   `port_name` char(255) NOT NULL,
@@ -1361,7 +1371,6 @@ WHERE O.objtype_id = 1562";
 
                $query[] = "INSERT INTO `Chapter` (`id`, `sticky`, `name`) VALUES
 (1,'yes','ObjectType'),
-(2,'yes','PortOuterInterface'),
 (11,'no','server models'),
 (12,'no','network switch models'),
 (13,'no','server OS type'),
@@ -1550,6 +1559,207 @@ WHERE O.objtype_id = 1562";
 (10,'QSFP+'),
 (11,'CFP')";
 
+               $query[] = "INSERT INTO `PortOuterInterface` VALUES
+(16,'AC-in'),
+(17,'10Base2'),
+(18,'10Base-T'),
+(19,'100Base-TX'),
+(24,'1000Base-T'),
+(29,'RS-232 (RJ-45)'),
+(30,'10GBase-SR'),
+(31,'virtual bridge'),
+(32,'sync serial'),
+(33,'KVM (host)'),
+(34,'1000Base-ZX'),
+(35,'10GBase-ER'),
+(36,'10GBase-LR'),
+(37,'10GBase-LRM'),
+(38,'10GBase-ZR'),
+(39,'10GBase-LX4'),
+(40,'10GBase-CX4'),
+(41,'10GBase-KX4'),
+(439,'dry contact'),
+(440,'unknown'),
+(446,'KVM (console)'),
+(681,'RS-232 (DB-9)'),
+(682,'RS-232 (DB-25)'),
+(1077,'empty SFP-1000'),
+(1078,'empty GBIC'),
+(1079,'empty XENPAK'),
+(1080,'empty X2'),
+(1081,'empty XPAK'),
+(1082,'empty XFP'),
+(1084,'empty SFP+'),
+(1087,'1000Base-T (Dell 1855)'),
+(1195,'100Base-FX'),
+(1196,'100Base-SX'),
+(1197,'100Base-LX10'),
+(1198,'100Base-BX10-D'),
+(1199,'100Base-BX10-U'),
+(1200,'100Base-EX'),
+(1201,'100Base-ZX'),
+(1202,'1000Base-SX'),
+(1203,'1000Base-SX+'),
+(1204,'1000Base-LX'),
+(1205,'1000Base-LX/LH'),
+(1206,'1000Base-BX10-D'),
+(1207,'1000Base-BX10-U'),
+(1208,'empty SFP-100'),
+(1209,'1000Base-CWDM80-1470 (gray)'),
+(1210,'1000Base-CWDM80-1490 (violet)'),
+(1211,'1000Base-CWDM80-1510 (blue)'),
+(1212,'1000Base-CWDM80-1530 (green)'),
+(1213,'1000Base-CWDM80-1550 (yellow)'),
+(1214,'1000Base-CWDM80-1570 (orange)'),
+(1215,'1000Base-CWDM80-1590 (red)'),
+(1216,'1000Base-CWDM80-1610 (brown)'),
+(1217,'1000Base-DWDM80-61.42 (ITU 20)'),
+(1218,'1000Base-DWDM80-60.61 (ITU 21)'),
+(1219,'1000Base-DWDM80-59.79 (ITU 22)'),
+(1220,'1000Base-DWDM80-58.98 (ITU 23)'),
+(1221,'1000Base-DWDM80-58.17 (ITU 24)'),
+(1222,'1000Base-DWDM80-57.36 (ITU 25)'),
+(1223,'1000Base-DWDM80-56.55 (ITU 26)'),
+(1224,'1000Base-DWDM80-55.75 (ITU 27)'),
+(1225,'1000Base-DWDM80-54.94 (ITU 28)'),
+(1226,'1000Base-DWDM80-54.13 (ITU 29)'),
+(1227,'1000Base-DWDM80-53.33 (ITU 30)'),
+(1228,'1000Base-DWDM80-52.52 (ITU 31)'),
+(1229,'1000Base-DWDM80-51.72 (ITU 32)'),
+(1230,'1000Base-DWDM80-50.92 (ITU 33)'),
+(1231,'1000Base-DWDM80-50.12 (ITU 34)'),
+(1232,'1000Base-DWDM80-49.32 (ITU 35)'),
+(1233,'1000Base-DWDM80-48.51 (ITU 36)'),
+(1234,'1000Base-DWDM80-47.72 (ITU 37)'),
+(1235,'1000Base-DWDM80-46.92 (ITU 38)'),
+(1236,'1000Base-DWDM80-46.12 (ITU 39)'),
+(1237,'1000Base-DWDM80-45.32 (ITU 40)'),
+(1238,'1000Base-DWDM80-44.53 (ITU 41)'),
+(1239,'1000Base-DWDM80-43.73 (ITU 42)'),
+(1240,'1000Base-DWDM80-42.94 (ITU 43)'),
+(1241,'1000Base-DWDM80-42.14 (ITU 44)'),
+(1242,'1000Base-DWDM80-41.35 (ITU 45)'),
+(1243,'1000Base-DWDM80-40.56 (ITU 46)'),
+(1244,'1000Base-DWDM80-39.77 (ITU 47)'),
+(1245,'1000Base-DWDM80-38.98 (ITU 48)'),
+(1246,'1000Base-DWDM80-38.19 (ITU 49)'),
+(1247,'1000Base-DWDM80-37.40 (ITU 50)'),
+(1248,'1000Base-DWDM80-36.61 (ITU 51)'),
+(1249,'1000Base-DWDM80-35.82 (ITU 52)'),
+(1250,'1000Base-DWDM80-35.04 (ITU 53)'),
+(1251,'1000Base-DWDM80-34.25 (ITU 54)'),
+(1252,'1000Base-DWDM80-33.47 (ITU 55)'),
+(1253,'1000Base-DWDM80-32.68 (ITU 56)'),
+(1254,'1000Base-DWDM80-31.90 (ITU 57)'),
+(1255,'1000Base-DWDM80-31.12 (ITU 58)'),
+(1256,'1000Base-DWDM80-30.33 (ITU 59)'),
+(1257,'1000Base-DWDM80-29.55 (ITU 60)'),
+(1258,'1000Base-DWDM80-28.77 (ITU 61)'),
+(1259,'10GBase-ZR-DWDM80-61.42 (ITU 20)'),
+(1260,'10GBase-ZR-DWDM80-60.61 (ITU 21)'),
+(1261,'10GBase-ZR-DWDM80-59.79 (ITU 22)'),
+(1262,'10GBase-ZR-DWDM80-58.98 (ITU 23)'),
+(1263,'10GBase-ZR-DWDM80-58.17 (ITU 24)'),
+(1264,'10GBase-ZR-DWDM80-57.36 (ITU 25)'),
+(1265,'10GBase-ZR-DWDM80-56.55 (ITU 26)'),
+(1266,'10GBase-ZR-DWDM80-55.75 (ITU 27)'),
+(1267,'10GBase-ZR-DWDM80-54.94 (ITU 28)'),
+(1268,'10GBase-ZR-DWDM80-54.13 (ITU 29)'),
+(1269,'10GBase-ZR-DWDM80-53.33 (ITU 30)'),
+(1270,'10GBase-ZR-DWDM80-52.52 (ITU 31)'),
+(1271,'10GBase-ZR-DWDM80-51.72 (ITU 32)'),
+(1272,'10GBase-ZR-DWDM80-50.92 (ITU 33)'),
+(1273,'10GBase-ZR-DWDM80-50.12 (ITU 34)'),
+(1274,'10GBase-ZR-DWDM80-49.32 (ITU 35)'),
+(1275,'10GBase-ZR-DWDM80-48.51 (ITU 36)'),
+(1276,'10GBase-ZR-DWDM80-47.72 (ITU 37)'),
+(1277,'10GBase-ZR-DWDM80-46.92 (ITU 38)'),
+(1278,'10GBase-ZR-DWDM80-46.12 (ITU 39)'),
+(1279,'10GBase-ZR-DWDM80-45.32 (ITU 40)'),
+(1280,'10GBase-ZR-DWDM80-44.53 (ITU 41)'),
+(1281,'10GBase-ZR-DWDM80-43.73 (ITU 42)'),
+(1282,'10GBase-ZR-DWDM80-42.94 (ITU 43)'),
+(1283,'10GBase-ZR-DWDM80-42.14 (ITU 44)'),
+(1284,'10GBase-ZR-DWDM80-41.35 (ITU 45)'),
+(1285,'10GBase-ZR-DWDM80-40.56 (ITU 46)'),
+(1286,'10GBase-ZR-DWDM80-39.77 (ITU 47)'),
+(1287,'10GBase-ZR-DWDM80-38.98 (ITU 48)'),
+(1288,'10GBase-ZR-DWDM80-38.19 (ITU 49)'),
+(1289,'10GBase-ZR-DWDM80-37.40 (ITU 50)'),
+(1290,'10GBase-ZR-DWDM80-36.61 (ITU 51)'),
+(1291,'10GBase-ZR-DWDM80-35.82 (ITU 52)'),
+(1292,'10GBase-ZR-DWDM80-35.04 (ITU 53)'),
+(1293,'10GBase-ZR-DWDM80-34.25 (ITU 54)'),
+(1294,'10GBase-ZR-DWDM80-33.47 (ITU 55)'),
+(1295,'10GBase-ZR-DWDM80-32.68 (ITU 56)'),
+(1296,'10GBase-ZR-DWDM80-31.90 (ITU 57)'),
+(1297,'10GBase-ZR-DWDM80-31.12 (ITU 58)'),
+(1298,'10GBase-ZR-DWDM80-30.33 (ITU 59)'),
+(1299,'10GBase-ZR-DWDM80-29.55 (ITU 60)'),
+(1300,'10GBase-ZR-DWDM80-28.77 (ITU 61)'),
+(1316,'1000Base-T (Dell M1000e)'),
+(1322,'AC-out'),
+(1399,'DC'),
+(1424,'1000Base-CX'),
+(1425,'10GBase-ER-DWDM40-61.42 (ITU 20)'),
+(1426,'10GBase-ER-DWDM40-60.61 (ITU 21)'),
+(1427,'10GBase-ER-DWDM40-59.79 (ITU 22)'),
+(1428,'10GBase-ER-DWDM40-58.98 (ITU 23)'),
+(1429,'10GBase-ER-DWDM40-58.17 (ITU 24)'),
+(1430,'10GBase-ER-DWDM40-57.36 (ITU 25)'),
+(1431,'10GBase-ER-DWDM40-56.55 (ITU 26)'),
+(1432,'10GBase-ER-DWDM40-55.75 (ITU 27)'),
+(1433,'10GBase-ER-DWDM40-54.94 (ITU 28)'),
+(1434,'10GBase-ER-DWDM40-54.13 (ITU 29)'),
+(1435,'10GBase-ER-DWDM40-53.33 (ITU 30)'),
+(1436,'10GBase-ER-DWDM40-52.52 (ITU 31)'),
+(1437,'10GBase-ER-DWDM40-51.72 (ITU 32)'),
+(1438,'10GBase-ER-DWDM40-50.92 (ITU 33)'),
+(1439,'10GBase-ER-DWDM40-50.12 (ITU 34)'),
+(1440,'10GBase-ER-DWDM40-49.32 (ITU 35)'),
+(1441,'10GBase-ER-DWDM40-48.51 (ITU 36)'),
+(1442,'10GBase-ER-DWDM40-47.72 (ITU 37)'),
+(1443,'10GBase-ER-DWDM40-46.92 (ITU 38)'),
+(1444,'10GBase-ER-DWDM40-46.12 (ITU 39)'),
+(1445,'10GBase-ER-DWDM40-45.32 (ITU 40)'),
+(1446,'10GBase-ER-DWDM40-44.53 (ITU 41)'),
+(1447,'10GBase-ER-DWDM40-43.73 (ITU 42)'),
+(1448,'10GBase-ER-DWDM40-42.94 (ITU 43)'),
+(1449,'10GBase-ER-DWDM40-42.14 (ITU 44)'),
+(1450,'10GBase-ER-DWDM40-41.35 (ITU 45)'),
+(1451,'10GBase-ER-DWDM40-40.56 (ITU 46)'),
+(1452,'10GBase-ER-DWDM40-39.77 (ITU 47)'),
+(1453,'10GBase-ER-DWDM40-38.98 (ITU 48)'),
+(1454,'10GBase-ER-DWDM40-38.19 (ITU 49)'),
+(1455,'10GBase-ER-DWDM40-37.40 (ITU 50)'),
+(1456,'10GBase-ER-DWDM40-36.61 (ITU 51)'),
+(1457,'10GBase-ER-DWDM40-35.82 (ITU 52)'),
+(1458,'10GBase-ER-DWDM40-35.04 (ITU 53)'),
+(1459,'10GBase-ER-DWDM40-34.25 (ITU 54)'),
+(1460,'10GBase-ER-DWDM40-33.47 (ITU 55)'),
+(1461,'10GBase-ER-DWDM40-32.68 (ITU 56)'),
+(1462,'10GBase-ER-DWDM40-31.90 (ITU 57)'),
+(1463,'10GBase-ER-DWDM40-31.12 (ITU 58)'),
+(1464,'10GBase-ER-DWDM40-30.33 (ITU 59)'),
+(1465,'10GBase-ER-DWDM40-29.55 (ITU 60)'),
+(1466,'10GBase-ER-DWDM40-28.77 (ITU 61)'),
+(1469,'virtual port'),
+(1588,'empty QSFP+'),
+(1603,'1000Base-T (HP c-Class)'),
+(1604,'100Base-TX (HP c-Class)'),
+(1642,'10GBase-T'),
+(1661,'40GBase-KR4'),
+(1663,'40GBase-SR4'),
+(1664,'40GBase-LR4'),
+(1668,'empty CFP'),
+(1669,'100GBase-SR10'),
+(1670,'100GBase-LR4'),
+(1671,'100GBase-ER4'),
+(1999,'10GBase-KR')
+";
+// Add new outer interface types with id < 2000. Values 2000 and up are for
+// users' local types.
+
                $query[] = "INSERT INTO `ObjectParentCompat` VALUES
 (3,13),
 (4,1504),
@@ -1775,7 +1985,8 @@ WHERE O.objtype_id = 1562";
 (1669,1669),
 (1670,1670),
 (1671,1671),
-(1642,1642)";
+(1642,1642),
+(1999,1999)";
 
                $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, is_userdefined, description) VALUES
 ('MASSCOUNT','8','uint','no','no','yes','&quot;Fast&quot; form is this many records tall'),
index d8baa4e54ded411d08400a94823a36c48885dab6..247dea924230ef5266618b85d9fb3d1f53ed179d 100644 (file)
@@ -4291,6 +4291,85 @@ function renderChapterEditor ($tgt_chapter_no)
        echo "</table>\n";
 }
 
+function renderPortOIFViewer()
+{
+       global $nextorder;
+       echo '<br><table class=cooltable align=center border=0 cellpadding=5 cellspacing=0>';
+       echo '<tr><th>Origin</th><th>Key</th><th>Refcnt</th><th>Outer Interface</th></tr>';
+       $order = 'odd';
+       $refcnt = getPortOIFRefc();
+       foreach (getPortOIFOptions() as $oif_id => $oif_name)
+       {
+               echo "<tr class=row_${order}>";
+               echo '<td class=tdleft>' . getImageHREF ($oif_id < 2000 ? 'computer' : 'favorite') . '</td>';
+               echo "<td class=tdright>${oif_id}</td>";
+               echo '<td class=tdright>' . ($refcnt[$oif_id] ? $refcnt[$oif_id] : '&nbsp;') . '</td>';
+               echo '<td class=tdleft>' . niftyString ($oif_name, 48) . '</td>';
+               echo '</tr>';
+               $order = $nextorder[$order];
+       }
+       echo '</table>';
+}
+
+function renderPortOIFEditor()
+{
+       function printNewitemTR()
+       {
+               printOpFormIntro ('add');
+               echo '<tr>';
+               echo '<td>&nbsp;</td>';
+               echo '<td>&nbsp;</td>';
+               echo '<td>&nbsp;</td>';
+               echo '<td class=tdleft>' . getImageHREF ('create', 'create new', TRUE, 110) . '</td>';
+               echo '<td class=tdleft><input type=text size=48 name=oif_name tabindex=100></td>';
+               echo '<td class=tdleft>' . getImageHREF ('create', 'create new', TRUE, 110) . '</td>';
+               echo '</tr></form>';
+       }
+       echo '<table class=widetable border=0 cellpadding=5 cellspacing=0 align=center>';
+       echo '<tr><th class=tdleft>Origin</th><th>Key</th><th>Refcnt</th><th>&nbsp;</th><th>Outer Interface</th><th>&nbsp;</th></tr>';
+       if (getConfigVar ('ADDNEW_AT_TOP') == 'yes')
+               printNewitemTR();
+       $refcnt = getPortOIFRefc();
+       foreach (getPortOIFOptions() as $oif_id => $oif_name)
+       {
+               echo '<tr>';
+               if ($oif_id < 2000)
+               {
+                       echo '<td class=tdleft>' . getImageHREF ('computer') . '</td>';
+                       echo "<td class=tdleft>${oif_id}</td>";
+                       echo '<td class=tdright>' . ($refcnt[$oif_id] ? $refcnt[$oif_id] : '&nbsp;') . '</td>';
+                       echo '<td>&nbsp;</td>';
+                       echo '<td class=tdleft>' . niftyString ($oif_name, 48) . '</td>';
+                       echo '<td>&nbsp;</td>';
+               }
+               else
+               {
+                       printOpFormIntro ('upd', array ('id' => $oif_id));
+                       echo '<td class=tdleft>' . getImageHREF ('favorite') . '</td>';
+                       echo "<td class=tdleft>${oif_id}</td>";
+                       if ($refcnt[$oif_id])
+                       {
+                               echo "<td class=tdright>${refcnt[$oif_id]}</td>";
+                               echo '<td class=tdleft>' . getImageHREF ('nodestroy', 'cannot remove') . '</td>';
+                       }
+                       else
+                       {
+                               echo '<td>&nbsp;</td>';
+                               echo '<td class=tdleft>';
+                               echo getOpLink (array ('op' => 'del', 'id' => $oif_id), '', 'destroy', 'remove');
+                               echo '</td>';
+                       }
+                       echo '<td class=tdleft><input type=text size=48 name=oif_name value="' . niftyString ($oif_name, 48) . '"></td>';
+                       echo '<td>' . getImageHREF ('save', 'Save changes', TRUE) . '</td>';
+                       echo '</form>';
+               }
+               echo '</tr>';
+       }
+       if (getConfigVar ('ADDNEW_AT_TOP') != 'yes')
+               printNewitemTR();
+       echo '</table>';
+}
+
 // We don't allow to rename/delete a sticky chapter and we don't allow
 // to delete a non-empty chapter.
 function renderChaptersEditor ()
@@ -9292,70 +9371,6 @@ function renderDataIntegrityReport ()
                finishPortLet ();
        }
 
-       // check 3.5: PortCompat
-       $orphans = array ();
-       $result = usePreparedSelectBlade
-       (
-               'SELECT PC.*, 1D.dict_value AS type1_name, 2D.dict_value AS type2_name ' .
-               'FROM PortCompat PC ' .
-               'LEFT JOIN Dictionary 1D ON PC.type1 = 1D.dict_key ' .
-               'LEFT JOIN Dictionary 2D ON PC.type2 = 2D.dict_key ' .
-               'WHERE 1D.dict_key IS NULL OR 2D.dict_key IS NULL'
-       );
-       $orphans = $result->fetchAll (PDO::FETCH_ASSOC);
-       unset ($result);
-       if (count ($orphans))
-       {
-               $violations = TRUE;
-               startPortlet ('Port Compatibility rules: Invalid From or To Type (' . count ($orphans) . ')');
-               echo "<table cellpadding=5 cellspacing=0 align=center class=cooltable>\n";
-               echo "<tr><th>From</th><th>From Type ID</th><th>To</th><th>To Type ID</th></tr>\n";
-               $order = 'odd';
-               foreach ($orphans as $orphan)
-               {
-                       echo "<tr class=row_${order}>";
-                       echo "<td>${orphan['type1_name']}</td>";
-                       echo "<td>${orphan['type1']}</td>";
-                       echo "<td>${orphan['type2_name']}</td>";
-                       echo "<td>${orphan['type2']}</td>";
-                       echo "</tr>\n";
-                       $order = $nextorder[$order];
-               }
-               echo "</table>\n";
-               finishPortLet ();
-       }
-
-       // check 3.6: PortInterfaceCompat
-       $orphans = array ();
-       $result = usePreparedSelectBlade
-       (
-               'SELECT PIC.*, PII.iif_name ' .
-               'FROM PortInterfaceCompat PIC ' .
-               'LEFT JOIN PortInnerInterface PII ON PIC.iif_id = PII.id ' .
-               'LEFT JOIN Dictionary D ON PIC.oif_id = D.dict_key ' .
-               'WHERE D.dict_key IS NULL'
-       );
-       $orphans = $result->fetchAll (PDO::FETCH_ASSOC);
-       unset ($result);
-       if (count ($orphans))
-       {
-               $violations = TRUE;
-               startPortlet ('Enabled Port Types: Invalid Outer Interface (' . count ($orphans) . ')');
-               echo "<table cellpadding=5 cellspacing=0 align=center class=cooltable>\n";
-               echo "<tr><th>Inner Interface</th><th>Outer Interface ID</th></tr>\n";
-               $order = 'odd';
-               foreach ($orphans as $orphan)
-               {
-                       echo "<tr class=row_${order}>";
-                       echo "<td>${orphan['iif_name']}</td>";
-                       echo "<td>${orphan['oif_id']}</td>";
-                       echo "</tr>\n";
-                       $order = $nextorder[$order];
-               }
-               echo "</table>\n";
-               finishPortLet ();
-       }
-
        // check 4: relationships that violate ObjectParentCompat Rules
        $invalids = array ();
        $result = usePreparedSelectBlade
@@ -9398,15 +9413,15 @@ function renderDataIntegrityReport ()
        $invalids = array ();
        $result = usePreparedSelectBlade
        (
-               'SELECT OA.id AS obja_id, OA.name AS obja_name, L.porta AS porta_id, PA.name AS porta_name, DA.dict_value AS porta_type, ' .
-               'OB.id AS objb_id, OB.name AS objb_name, L.portb AS portb_id, PB.name AS portb_name, DB.dict_value AS portb_type ' .
+               'SELECT OA.id AS obja_id, OA.name AS obja_name, L.porta AS porta_id, PA.name AS porta_name, POIA.oif_name AS porta_type, ' .
+               'OB.id AS objb_id, OB.name AS objb_name, L.portb AS portb_id, PB.name AS portb_name, POIB.oif_name AS portb_type ' .
                'FROM Link L ' .
                'LEFT JOIN Port PA ON L.porta = PA.id ' .
                'LEFT JOIN Object OA ON PA.object_id = OA.id ' .
-               'LEFT JOIN Dictionary DA ON PA.type = DA.dict_key ' .
+               'LEFT JOIN PortOuterInterface POIA ON PA.type = POIA.id ' .
                'LEFT JOIN Port PB ON L.portb = PB.id ' .
                'LEFT JOIN Object OB ON PB.object_id = OB.id ' .
-               'LEFT JOIN Dictionary DB ON PB.type = DB.dict_key ' .
+               'LEFT JOIN PortOuterInterface POIB ON PB.type = POIB.id ' .
                'LEFT JOIN PortCompat PC on PA.type = PC.type1 AND PB.type = PC.type2 ' .
                'WHERE PC.type1 IS NULL OR PC.type2 IS NULL'
        );
@@ -9601,7 +9616,10 @@ function renderDataIntegrityReport ()
                'Port-FK-object_id' => 'Port',
                'PortAllowedVLAN-FK-object-port' => 'PortAllowedVLAN',
                'PortAllowedVLAN-FK-vlan_id' => 'PortAllowedVLAN',
+               'PortCompat-FK-oif_id1' => 'PortCompat',
+               'PortCompat-FK-oif_id2' => 'PortCompat',
                'PortInterfaceCompat-FK-iif_id' => 'PortInterfaceCompat',
+               'PortInterfaceCompat-FK-oif_id' => 'PortInterfaceCompat',
                'PortLog_ibfk_1' => 'PortLog',
                'PortNativeVLAN-FK-compound' => 'PortNativeVLAN',
                'PortVLANMode-FK-object-port' => 'PortVLANMode',
index 1a1b23bf247af8913f89d584c564cfdb585b6334..d24f7b23fcd1327aa2ace141a04a6eebf2d35c14 100644 (file)
@@ -559,6 +559,16 @@ $ophandler['portifcompat']['edit']['del'] = 'tableHandler';
 $ophandler['portifcompat']['edit']['addPack'] = 'addIIFOIFCompatPack';
 $ophandler['portifcompat']['edit']['delPack'] = 'delIIFOIFCompatPack';
 
+$page['portoifs']['title'] = 'Port outer interfaces';
+$page['portoifs']['parent'] = 'config';
+$tab['portoifs']['default'] = 'View';
+$tab['portoifs']['edit'] = 'Edit';
+$tabhandler['portoifs']['default'] = 'renderPortOIFViewer';
+$tabhandler['portoifs']['edit'] = 'renderPortOIFEditor';
+$ophandler['portoifs']['edit']['add'] = 'tableHandler';
+$ophandler['portoifs']['edit']['del'] = 'tableHandler';
+$ophandler['portoifs']['edit']['upd'] = 'tableHandler';
+
 $page['attrs']['title'] = 'Attributes';
 $page['attrs']['parent'] = 'config';
 $tab['attrs']['default'] = 'View';
index f94b4f4de4927073c7b44529ea78527237446282..a3a88127c5eaec619d665b453a21a74472383733 100644 (file)
@@ -262,6 +262,37 @@ $opspec_list['portifcompat-edit-del'] = array
                array ('url_argname' => 'oif_id', 'assertion' => 'uint'),
        ),
 );
+$opspec_list['portoifs-edit-add'] = array
+(
+       'table' => 'PortOuterInterface',
+       'action' => 'INSERT',
+       'arglist' => array
+       (
+               array ('url_argname' => 'oif_name', 'assertion' => 'string'),
+       ),
+);
+$opspec_list['portoifs-edit-del'] = array
+(
+       'table' => 'PortOuterInterface',
+       'action' => 'DELETE',
+       'arglist' => array
+       (
+               array ('url_argname' => 'id', 'assertion' => 'uint'),
+       ),
+);
+$opspec_list['portoifs-edit-upd'] = array
+(
+       'table' => 'PortOuterInterface',
+       'action' => 'UPDATE',
+       'set_arglist' => array
+       (
+               array ('url_argname' => 'oif_name', 'assertion' => 'string'),
+       ),
+       'where_arglist' => array
+       (
+               array ('url_argname' => 'id', 'assertion' => 'uint'),
+       ),
+);
 $opspec_list['attrs-editmap-del'] = array
 (
        'table' => 'AttributeMap',
index f034ac8b1559f5c99e67df66b2a3609dbc221e21..80aa86ee8038b964f78ccc117f7eecc286846951 100644 (file)
@@ -268,6 +268,7 @@ function getDBUpgradePath ($v1, $v2)
                '0.20.5',
                '0.20.6',
                '0.20.7',
+               '0.20.8',
                '0.21.0',
        );
        if (!in_array ($v1, $versionhistory) or !in_array ($v2, $versionhistory))
@@ -1611,6 +1612,29 @@ ENDOFTRIGGER;
 
                        $query[] = "UPDATE Config SET varvalue = '0.20.7' WHERE varname = 'DB_VERSION'";
                        break;
+               case '0.20.8':
+                       $query[] = "
+CREATE TABLE `PortOuterInterface` (
+  `id` int(10) unsigned NOT NULL auto_increment,
+  `oif_name` char(48) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `oif_name` (`oif_name`)
+) ENGINE=InnoDB
+";
+                       $query[] = "INSERT INTO PortOuterInterface SELECT dict_key, dict_value FROM Dictionary WHERE chapter_id = 2";
+                       // Previously listed 10GBase-Kx actually means two standards: 10GBase-KX4
+                       // and 10GBase-KR. Make respective changes and make primary key auto
+                       // increment start at 2000.
+                       $query[] = "UPDATE PortOuterInterface SET oif_name = '10GBase-KX4' WHERE id = 41";
+                       $query[] = "INSERT INTO PortOuterInterface (id, oif_name) VALUES (1999, '10GBase-KR')";
+                       $query[] = "INSERT INTO PortCompat (type1, type2) VALUES (1999, 1999)";
+                       $query[] = "DELETE FROM Dictionary WHERE chapter_id = 2";
+                       $query[] = "DELETE FROM Chapter WHERE id = 2";
+                       $query[] = "ALTER TABLE PortInterfaceCompat ADD CONSTRAINT `PortInterfaceCompat-FK-oif_id` FOREIGN KEY (oif_id) REFERENCES PortOuterInterface (id)";
+                       $query[] = "ALTER TABLE PortCompat ADD CONSTRAINT `PortCompat-FK-oif_id1` FOREIGN KEY (type1) REFERENCES PortOuterInterface (id)";
+                       $query[] = "ALTER TABLE PortCompat ADD CONSTRAINT `PortCompat-FK-oif_id2` FOREIGN KEY (type2) REFERENCES PortOuterInterface (id)";
+                       $query[] = "UPDATE Config SET varvalue = '0.20.8' WHERE varname = 'DB_VERSION'";
+                       break;
                case '0.21.0':
                        $query[] = "ALTER TABLE `VLANSTRule` CHANGE COLUMN `wrt_vlans` `wrt_vlans` text";