1<?php 2 3# This file is a part of RackTables, a datacenter and server room management 4# framework. See accompanying file "COPYING" for the full copyright and 5# licensing information. 6 7function renderInstallerHTML() 8{ 9$stepfunc[1] = 'not_already_installed'; 10$stepfunc[2] = 'platform_is_ok'; 11$stepfunc[3] = 'init_config'; 12$stepfunc[4] = 'check_config_access'; 13$stepfunc[5] = 'init_database_static'; 14$stepfunc[6] = 'init_database_dynamic'; 15$stepfunc[7] = 'congrats'; 16 17if (isset ($_REQUEST['step'])) 18 $step = intval ($_REQUEST['step']); 19else 20 $step = 1; 21 22if (! array_key_exists ($step, $stepfunc)) 23{ 24 // Leave the installer module. 25 header ('Location: ' . $_SERVER['PHP_SELF']); 26 exit; 27} 28$title = "RackTables installation: step ${step} of " . count ($stepfunc); 29header ('Content-Type: text/html; charset=UTF-8'); 30 // Heredoc, not nowdoc! 31 echo <<<"ENDOFTEXT" 32<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 33<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 34<head><title>${title}</title> 35<style type="text/css"> 36.tdleft { 37 text-align: left; 38} 39 40.trok { 41 background-color: #80FF80; 42} 43 44.trwarning { 45 background-color: #FFFF80; 46} 47 48.trerror { 49 background-color: #FF8080; 50} 51</style> 52</head> 53<body> 54<center> 55ENDOFTEXT; 56echo "<h1>${title}</h1><p>"; 57 58echo "</p><form method=post>\n"; 59$testres = $stepfunc[$step] (); 60if ($testres) 61{ 62 $next_step = $step + 1; 63 echo "<br><input type=submit value='proceed'>"; 64} 65else 66{ 67 $next_step = $step; 68 echo "<br><input type=submit value='retry'>"; 69} 70echo "<input type=hidden name=step value='${next_step}'>\n"; 71 echo '</form>'; 72 echo '</center>'; 73 echo '</body>'; 74 echo '</html>'; 75} 76 77// Check if the software is already installed. 78function not_already_installed() 79{ 80 global $found_secret_file, $pdo_dsn; 81 if ($found_secret_file && isset ($pdo_dsn)) 82 { 83 echo 'Your configuration file exists and seems to hold necessary data already.<br>'; 84 return FALSE; 85 } 86 else 87 { 88 echo 'There seems to be no existing installation here, let\'s set one up now.<br>'; 89 return TRUE; 90 } 91} 92 93// Test that the web-server can write to the configuration file. 94// If so, prompt for the DB connection parameters and test 95// the connection. Do not save the parameters into the configuration 96// file until the database connection succeeds. Do not proceed to the 97// next steps until a working configuration file is in place. 98function init_config () 99{ 100 function print_form 101 ( 102 $use_tcp = TRUE, 103 $tcp_host = 'localhost', 104 $tcp_port = '', 105 $unix_socket = '/var/lib/mysql/mysql.sock', 106 $database = 'racktables_db', 107 $username = 'racktables_user', 108 $password = '' 109 ) 110 { 111 echo "<input type=hidden name=save_config value=1>\n"; 112 echo '<h3>Server-side MySQL setup of the database:</h3><div align=left><pre class=trok>'; 113 echo "mysql>\nCREATE DATABASE racktables_db CHARACTER SET utf8 COLLATE utf8_general_ci;\n"; 114 echo "CREATE USER racktables_user@localhost IDENTIFIED BY 'MY_SECRET_PASSWORD';\n"; 115 echo "GRANT ALL PRIVILEGES ON racktables_db.* TO racktables_user@localhost;\n</pre></div>"; 116 echo '<table>'; 117 echo '<tr><td><label for=conn_tcp>TCP connection</label></td>'; 118 echo '<td><input type=radio name=conn value=conn_tcp id=conn_tcp' . ($use_tcp ? ' checked' : '') . '></td></tr>'; 119 echo '<tr><td><label for=conn_unix>UNIX socket</label></td>'; 120 echo '<td><input type=radio name=conn value=conn_unix id=conn_unix' . ($use_tcp ? '' : ' checked') . '></td></tr>'; 121 echo "<tr><td><label for=mysql_host>TCP host:</label></td>"; 122 echo "<td><input type=text name=mysql_host id=mysql_host value='${tcp_host}'></td></tr>\n"; 123 echo "<tr><td><label for=mysql_port>TCP port (if not 3306):</label></td>"; 124 echo "<td><input type=text name=mysql_port id=mysql_port value='${tcp_port}'></td></tr>\n"; 125 echo "<tr><td><label for=mysql_socket>UNIX socket:</label></td>"; 126 echo "<td><input type=text name=mysql_socket id=mysql_socket value='${unix_socket}'></td></tr>\n"; 127 echo "<tr><td><label for=mysql_db>database:</label></td>"; 128 echo "<td><input type=text name=mysql_db id=mysql_db value='${database}'></td></tr>\n"; 129 echo "<tr><td><label for=mysql_username>username:</label></td>"; 130 echo "<td><input type=text name=mysql_username id=mysql_username value='${username}'></td></tr>\n"; 131 echo "<tr><td><label for=mysql_password>password:</label></td>"; 132 echo "<td><input type=password name=mysql_password id=mysql_password value='${password}'></td></tr>\n"; 133 echo '</table>'; 134 } 135 global $path_to_secret_php; 136 if (!is_writable ($path_to_secret_php)) 137 { 138 echo "The $path_to_secret_php file is not writable by web-server. Make sure it is."; 139 echo "The following commands should suffice:<pre>touch '$path_to_secret_php'; chmod a=rw '$path_to_secret_php'</pre>"; 140 echo 'Fedora Linux with SELinux may require this file to be owned by specific user (apache) and/or executing "setenforce 0" for the time of installation. '; 141 echo 'SELinux may be turned back on with "setenforce 1" command.<br>'; 142 return FALSE; 143 } 144 if (! array_key_exists ('save_config', $_REQUEST)) 145 { 146 print_form(); 147 return FALSE; 148 } 149 if (empty ($_REQUEST['mysql_db']) || empty ($_REQUEST['mysql_username'])) 150 { 151 print_form 152 ( 153 $_REQUEST['conn'] == 'conn_tcp', 154 $_REQUEST['mysql_host'], 155 $_REQUEST['mysql_port'], 156 $_REQUEST['mysql_socket'], 157 $_REQUEST['mysql_db'], 158 $_REQUEST['mysql_username'], 159 $_REQUEST['mysql_password'] 160 ); 161 echo '<h2 class=trerror>Missing database/username parameter!</h2>'; 162 return FALSE; 163 } 164 if ($_REQUEST['conn'] == 'conn_tcp' && empty ($_REQUEST['mysql_host'])) 165 { 166 print_form 167 ( 168 $_REQUEST['conn'] == 'conn_tcp', 169 $_REQUEST['mysql_host'], 170 $_REQUEST['mysql_port'], 171 $_REQUEST['mysql_socket'], 172 $_REQUEST['mysql_db'], 173 $_REQUEST['mysql_username'], 174 $_REQUEST['mysql_password'] 175 ); 176 echo '<h2 class=trerror>Missing TCP hostname parameter!</h2>'; 177 return FALSE; 178 } 179 if ($_REQUEST['conn'] == 'conn_unix' && empty ($_REQUEST['mysql_socket'])) 180 { 181 print_form 182 ( 183 $_REQUEST['conn'] == 'conn_tcp', 184 $_REQUEST['mysql_host'], 185 $_REQUEST['mysql_port'], 186 $_REQUEST['mysql_socket'], 187 $_REQUEST['mysql_db'], 188 $_REQUEST['mysql_username'], 189 $_REQUEST['mysql_password'] 190 ); 191 echo '<h2 class=trerror>Missing UNIX socket parameter!</h2>'; 192 return FALSE; 193 } 194 # finally OK to make a connection attempt 195 $pdo_dsn = 'mysql:'; 196 switch ($_REQUEST['conn']) 197 { 198 case 'conn_tcp': 199 $pdo_dsn .= 'host=' . $_REQUEST['mysql_host']; 200 if (! empty ($_REQUEST['mysql_port']) && $_REQUEST['mysql_port'] != '3306') 201 $pdo_dsn .= ';port=' . $_REQUEST['mysql_port']; 202 break; 203 case 'conn_unix': 204 $pdo_dsn .= 'unix_socket=' . $_REQUEST['mysql_socket']; 205 break; 206 default: 207 print_form(); 208 echo '<h2 class=trerror>form error</h2>'; 209 return FALSE; 210 } 211 $pdo_dsn .= ';dbname=' . $_REQUEST['mysql_db']; 212 try 213 { 214 $dbxlink = new PDO ($pdo_dsn, $_REQUEST['mysql_username'], $_REQUEST['mysql_password']); 215 } 216 catch (PDOException $e) 217 { 218 print_form 219 ( 220 $_REQUEST['conn'] == 'conn_tcp', 221 $_REQUEST['mysql_host'], 222 $_REQUEST['mysql_port'], 223 $_REQUEST['mysql_socket'], 224 $_REQUEST['mysql_db'], 225 $_REQUEST['mysql_username'], 226 $_REQUEST['mysql_password'] 227 ); 228 echo "<h2 class=trerror>Database connection failed. Check parameters and try again.</h2>\n"; 229 echo "PDO DSN: <tt class=trwarning>${pdo_dsn}</tt><br>"; 230 return FALSE; 231 } 232 233 $conf = fopen ($path_to_secret_php, 'w+'); 234 if ($conf === FALSE) 235 { 236 echo "Error: failed to open $path_to_secret_php for writing"; 237 return FALSE; 238 } 239 fwrite ($conf, "<?php\n# This file has been generated automatically by RackTables installer.\n"); 240 fwrite ($conf, "\$pdo_dsn = '${pdo_dsn}';\n"); 241 fwrite ($conf, "\$db_username = '" . $_REQUEST['mysql_username'] . "';\n"); 242 fwrite ($conf, "\$db_password = '" . $_REQUEST['mysql_password'] . "';\n\n"); 243 fwrite ($conf, <<<'ENDOFTEXT' 244# Set this if you need to override the default plugins directory. 245#$racktables_plugins_dir = '/path/to/plugins'; 246 247# Setting MySQL client buffer size may be required to make downloading work for 248# larger files, but it does not work with mysqlnd. 249# $pdo_bufsize = 50 * 1024 * 1024; 250# Setting PDO SSL key, cert, and CA will allow a SSL/TLS connection to the MySQL 251# DB. Make sure the files are readable by the web server 252# $pdo_ssl_key = '/path/to/ssl/key' 253# $pdo_ssl_cert = '/path/to/ssl/cert' 254# $pdo_ssl_ca = '/path/to/ssl/ca' 255 256$user_auth_src = 'database'; 257$require_local_account = TRUE; 258# Default setting is to authenticate users locally, but it is possible to 259# employ existing LDAP or Apache user accounts. Check RackTables wiki for 260# more information, in particular, this page for LDAP configuration details: 261# https://wiki.racktables.org/index.php?title=LDAP 262 263#$LDAP_options = array 264#( 265# 'server' => 'localhost', 266# 'domain' => 'example.com', 267# 'search_attr' => '', 268# 'search_dn' => '', 269# // The following credentials will be used when searching for the user's DN: 270# 'search_bind_rdn' => NULL, 271# 'search_bind_password' => NULL, 272# 'displayname_attrs' => '', 273# 'options' => array (LDAP_OPT_PROTOCOL_VERSION => 3), 274# 'use_tls' => 2, // 0 == don't attempt, 1 == attempt, 2 == require 275#); 276 277# For SAML configuration details: 278# https://wiki.racktables.org/index.php?title=SAML 279 280#$SAML_options = array 281#( 282# 'simplesamlphp_basedir' => '../simplesaml', 283# 'sp_profile' => 'default-sp', 284# 'usernameAttribute' => 'eduPersonPrincipName', 285# 'fullnameAttribute' => 'fullName', 286# 'groupListAttribute' => 'memberOf', 287#); 288 289# This HTML banner is intended to assist users in dispatching their issues 290# to the local tech support service. Its text (in its verbatim form) will 291# be appended to assorted error messages visible in user's browser (including 292# "not authenticated" message). Beware of placing any sensitive information 293# here, it will be readable by unauthorized visitors. 294#$helpdesk_banner = '<B>This RackTables instance is supported by Example Inc. IT helpdesk, dial ext. 1234 to report a problem.</B>'; 295 296ENDOFTEXT 297); 298 fclose ($conf); 299 echo "The configuration file has been written successfully.<br>"; 300 return TRUE; 301} 302 303function get_process_owner() 304{ 305 // this function requires the posix extention and returns the fallback value otherwise 306 if (is_callable ('posix_getpwuid') && is_callable ('posix_geteuid')) 307 { 308 $user = posix_getpwuid(posix_geteuid()); 309 if (isset ($user['name'])) 310 return $user['name']; 311 } 312 return 'nobody'; 313} 314 315function check_config_access() 316{ 317 global $path_to_secret_php; 318 if (! is_writable ($path_to_secret_php) && is_readable ($path_to_secret_php)) 319 { 320 echo 'The configuration file ownership and permissions seem to be OK.<br>'; 321 return TRUE; 322 } 323 $uname = get_process_owner(); 324 echo 'Please set ownership (<tt>chown</tt>) and/or permissions (<tt>chmod</tt>) '; 325 echo "of <tt>${path_to_secret_php}</tt> on the server filesystem as follows:"; 326 echo '<div align=left><ul>'; 327 echo '<li>The file MUST NOT be writable by the httpd process.</li>'; 328 echo '<li>The file MUST be readable by the httpd process.</li>'; 329 echo '<li>The file should not be readable by anyone except the httpd process.</li>'; 330 echo '<li>The file should not be writable by anyone.</li>'; 331 echo '</ul></div>'; 332 echo 'For example, if httpd runs as user "' . $uname . '" and group "nogroup", commands '; 333 echo 'similar to the following may work (though not guaranteed to, please consider '; 334 echo 'only as an example):'; 335 echo "<pre>chown $uname:nogroup secret.php; chmod 440 secret.php</pre>"; 336 return FALSE; 337} 338 339function connect_to_db_or_die () 340{ 341 try 342 { 343 connectDB(); 344 } 345 catch (RackTablesError $e) 346 { 347 die ('Error connecting to the database'); 348 } 349} 350 351function init_database_static () 352{ 353 connect_to_db_or_die(); 354 global $dbxlink; 355 // platform_is_ok() didn't check for InnoDB support during its previous invocation, which 356 // was right because at that time secret.php did not exist yet and $dbxlink was not available. 357 if (!isInnoDBSupported()) 358 { 359 echo 'InnoDB test failed! Please configure MySQL server properly and retry.'; 360 return FALSE; 361 } 362 $result = $dbxlink->query ('show tables'); 363 $tables = $result->fetchAll (PDO::FETCH_NUM); 364 $result->closeCursor(); 365 unset ($result); 366 if (count ($tables)) 367 { 368 echo 'Your database is already holding ' . count ($tables); 369 echo ' tables, so I will stop here and let you check it yourself.<br>'; 370 echo 'There is some important data there probably.<br>'; 371 return FALSE; 372 } 373 echo 'Initializing the database...<br>'; 374 echo '<table border=1>'; 375 echo "<tr><th>section</th><th>queries</th><th>errors</th></tr>"; 376 $failures = array(); 377 foreach (array ('structure', 'dictbase') as $part) 378 { 379 echo "<tr><td>${part}</td>"; 380 $nq = $nerrs = 0; 381 foreach (get_pseudo_file ($part) as $q) 382 try 383 { 384 $result = $dbxlink->query ($q); 385 $nq++; 386 } 387 catch (PDOException $e) 388 { 389 $nerrs++; 390 $errorInfo = $dbxlink->errorInfo(); 391 $failures[] = array ($q, $errorInfo[2]); 392 } 393 echo "<td>${nq}</td><td>${nerrs}</td></tr>\n"; 394 } 395 if (!count ($failures)) 396 echo "<strong><font color=green>done</font></strong>"; 397 else 398 { 399 echo "<strong><font color=red>The following queries failed:</font></strong><br><pre>"; 400 foreach ($failures as $f) 401 { 402 list ($q, $i) = $f; 403 echo "${q} -- ${i}\n"; 404 } 405 } 406 // (re)load dictionary by pure PHP means w/o any external file 407 echo "<tr><td>dictionary</td>"; 408 $nq = $nerrs = 0; 409 $dictq = array(); 410 foreach (reloadDictionary() as $query) 411 { 412 $nq++; 413 if ($dbxlink->exec ($query) === FALSE) 414 { 415 $nerrs++; 416 $errlist[] = $query; 417 } 418 } 419 echo "<td>${nq}</td><td>${nerrs}</td></tr>\n"; 420 421 echo '</table>'; 422 if (isset($errlist) && count ($errlist)) 423 { 424 echo '<pre>The following queries failed:\n'; 425 foreach ($errlist as $q) 426 echo "${q}\n\n"; 427 echo '</pre>'; 428 return FALSE; 429 } 430 return TRUE; 431} 432 433function init_database_dynamic () 434{ 435 connect_to_db_or_die(); 436 global $dbxlink; 437 if (! isset ($_REQUEST['password']) || empty ($_REQUEST['password'])) 438 { 439 $result = $dbxlink->query ('select count(user_id) from UserAccount where user_id = 1'); 440 $row = $result->fetch (PDO::FETCH_NUM); 441 $nrecs = $row[0]; 442 $result->closeCursor(); 443 if (!$nrecs) 444 { 445 echo '<table border=1>'; 446 echo '<caption>Administrator password not set</caption>'; 447 echo '<tr><td><input type=password name=password></td></tr>'; 448 echo '</table>'; 449 } 450 return FALSE; 451 } 452 else 453 { 454 // Never send cleartext password over the wire. 455 $hash = sha1 ($_REQUEST['password']); 456 $query = "INSERT INTO `UserAccount` (`user_id`, `user_name`, `user_password_hash`, `user_realname`) " . 457 "VALUES (1,'admin','${hash}','RackTables Administrator')"; 458 $result = $dbxlink->exec ($query); 459 echo "Administrator password has been set successfully.<br>"; 460 return TRUE; 461 } 462} 463 464function congrats () 465{ 466 echo 'Congratulations! RackTables installation is complete. After pressing Proceed you will '; 467 echo 'enter the system. Authenticate with <strong>admin</strong> username.<br>RackTables project has a '; 468 echo "<a href='https://wiki.racktables.org/index.php?title=RackTablesAdminGuide'>"; 469 echo "wiki</a> and a "; 470 echo "<a href='https://www.freelists.org/list/racktables-users'>mailing list</a> for users. Have fun.<br>"; 471 return TRUE; 472} 473 474function get_pseudo_file ($name) 475{ 476 switch ($name) 477 { 478 case 'structure': 479 $query = array(); 480 481 $query[] = "alter database character set utf8 collate utf8_unicode_ci"; 482 $query[] = "set names 'utf8'"; 483 $query[] = "SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0"; 484 485 $query[] = "CREATE TABLE `Atom` ( 486 `molecule_id` int(10) unsigned NOT NULL, 487 `rack_id` int(10) unsigned NOT NULL, 488 `unit_no` int(10) unsigned NOT NULL, 489 `atom` enum('front','interior','rear') NOT NULL, 490 PRIMARY KEY (`molecule_id`,`rack_id`,`unit_no`,`atom`), 491 KEY `Atom-FK-rack_id` (`rack_id`), 492 CONSTRAINT `Atom-FK-molecule_id` FOREIGN KEY (`molecule_id`) REFERENCES `Molecule` (`id`) ON DELETE CASCADE, 493 CONSTRAINT `Atom-FK-rack_id` FOREIGN KEY (`rack_id`) REFERENCES `Object` (`id`) ON DELETE CASCADE 494) ENGINE=InnoDB"; 495 496 $query[] = "CREATE TABLE `Attribute` ( 497 `id` int(10) unsigned NOT NULL auto_increment, 498 `type` enum('string','uint','float','dict','date') default NULL, 499 `name` char(64) default NULL, 500 PRIMARY KEY (`id`), 501 UNIQUE KEY `name` (`name`) 502) ENGINE=InnoDB"; 503 504 $query[] = "CREATE TABLE `AttributeMap` ( 505 `objtype_id` int(10) unsigned NOT NULL default '1', 506 `attr_id` int(10) unsigned NOT NULL default '1', 507 `chapter_id` int(10) unsigned default NULL, 508 `sticky` enum('yes','no') default 'no', 509 UNIQUE KEY `objtype_id` (`objtype_id`,`attr_id`), 510 KEY `attr_id` (`attr_id`), 511 KEY `chapter_id` (`chapter_id`), 512 CONSTRAINT `AttributeMap-FK-chapter_id` FOREIGN KEY (`chapter_id`) REFERENCES `Chapter` (`id`), 513 CONSTRAINT `AttributeMap-FK-attr_id` FOREIGN KEY (`attr_id`) REFERENCES `Attribute` (`id`) 514) ENGINE=InnoDB"; 515 516 $query[] = "CREATE TABLE `AttributeValue` ( 517 `object_id` int(10) unsigned NOT NULL, 518 -- Default value intentionally breaks the constraint, this blocks 519 -- any insertion that doesn't have 'object_tid' on the column list. 520 `object_tid` int(10) unsigned NOT NULL default '0', 521 `attr_id` int(10) unsigned NOT NULL, 522 `string_value` char(255) default NULL, 523 `uint_value` int(10) unsigned default NULL, 524 `float_value` float default NULL, 525 PRIMARY KEY (`object_id`,`attr_id`), 526 KEY `attr_id-uint_value` (`attr_id`,`uint_value`), 527 KEY `attr_id-string_value` (`attr_id`,`string_value`(12)), 528 KEY `id-tid` (`object_id`,`object_tid`), 529 KEY `object_tid-attr_id` (`object_tid`,`attr_id`), 530 CONSTRAINT `AttributeValue-FK-map` FOREIGN KEY (`object_tid`, `attr_id`) REFERENCES `AttributeMap` (`objtype_id`, `attr_id`), 531 CONSTRAINT `AttributeValue-FK-object` FOREIGN KEY (`object_id`, `object_tid`) REFERENCES `Object` (`id`, `objtype_id`) ON DELETE CASCADE ON UPDATE CASCADE 532) ENGINE=InnoDB"; 533 534 $query[] = "CREATE TABLE `CachedPAV` ( 535 `object_id` int(10) unsigned NOT NULL, 536 `port_name` char(255) NOT NULL, 537 `vlan_id` int(10) unsigned NOT NULL default '0', 538 PRIMARY KEY (`object_id`,`port_name`,`vlan_id`), 539 KEY `vlan_id` (`vlan_id`), 540 CONSTRAINT `CachedPAV-FK-object-port` FOREIGN KEY (`object_id`, `port_name`) REFERENCES `CachedPVM` (`object_id`, `port_name`) ON DELETE CASCADE, 541 CONSTRAINT `CachedPAV-FK-vlan_id` FOREIGN KEY (`vlan_id`) REFERENCES `VLANValidID` (`vlan_id`) 542) ENGINE=InnoDB"; 543 544 $query[] = "CREATE TABLE `CachedPNV` ( 545 `object_id` int(10) unsigned NOT NULL, 546 `port_name` char(255) NOT NULL, 547 `vlan_id` int(10) unsigned NOT NULL default '0', 548 PRIMARY KEY (`object_id`,`port_name`,`vlan_id`), 549 UNIQUE KEY `port_id` (`object_id`,`port_name`), 550 CONSTRAINT `CachedPNV-FK-compound` FOREIGN KEY (`object_id`, `port_name`, `vlan_id`) REFERENCES `CachedPAV` (`object_id`, `port_name`, `vlan_id`) ON DELETE CASCADE 551) ENGINE=InnoDB"; 552 553 $query[] = "CREATE TABLE `CachedPVM` ( 554 `object_id` int(10) unsigned NOT NULL, 555 `port_name` char(255) NOT NULL, 556 `vlan_mode` enum('access','trunk') NOT NULL default 'access', 557 PRIMARY KEY (`object_id`,`port_name`), 558 CONSTRAINT `CachedPVM-FK-object_id` FOREIGN KEY (`object_id`) REFERENCES `Object` (`id`) ON DELETE CASCADE 559) ENGINE=InnoDB"; 560 561 $query[] = "CREATE TABLE `Chapter` ( 562 `id` int(10) unsigned NOT NULL auto_increment, 563 `sticky` enum('yes','no') default 'no', 564 `name` char(128) NOT NULL, 565 PRIMARY KEY (`id`), 566 UNIQUE KEY `name` (`name`) 567) ENGINE=InnoDB"; 568 569 $query[] = "CREATE TABLE `Config` ( 570 `varname` char(32) NOT NULL, 571 `varvalue` text NOT NULL, 572 `vartype` enum('string','uint') NOT NULL default 'string', 573 `emptyok` enum('yes','no') NOT NULL default 'no', 574 `is_hidden` enum('yes','no') NOT NULL default 'yes', 575 `is_userdefined` enum('yes','no') NOT NULL default 'no', 576 `description` text, 577 PRIMARY KEY (`varname`) 578) ENGINE=InnoDB"; 579 580 $query[] = "CREATE TABLE `Dictionary` ( 581 `chapter_id` int(10) unsigned NOT NULL, 582 `dict_key` int(10) unsigned NOT NULL auto_increment, 583 `dict_sticky` enum('yes','no') DEFAULT 'no', 584 `dict_value` char(255) default NULL, 585 PRIMARY KEY (`dict_key`), 586 UNIQUE KEY `dict_unique` (`chapter_id`,`dict_value`,`dict_sticky`), 587 CONSTRAINT `Dictionary-FK-chapter_id` FOREIGN KEY (`chapter_id`) REFERENCES `Chapter` (`id`) 588) ENGINE=InnoDB"; 589 590 $query[] = "CREATE TABLE `EntityLink` ( 591 `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 592 `parent_entity_type` enum('location','object','rack','row') NOT NULL, 593 `parent_entity_id` int(10) unsigned NOT NULL, 594 `child_entity_type` enum('location','object','rack','row') NOT NULL, 595 `child_entity_id` int(10) unsigned NOT NULL, 596 PRIMARY KEY (`id`), 597 UNIQUE KEY `EntityLink-unique` (`parent_entity_type`,`parent_entity_id`,`child_entity_type`,`child_entity_id`), 598 KEY `EntityLink-compound` (`parent_entity_type`,`child_entity_type`,`child_entity_id`) 599) ENGINE=InnoDB"; 600 601 $query[] = "CREATE TABLE `File` ( 602 `id` int(10) unsigned NOT NULL auto_increment, 603 `name` char(255) NOT NULL, 604 `type` char(255) NOT NULL, 605 `size` int(10) unsigned NOT NULL, 606 `ctime` datetime NOT NULL, 607 `mtime` datetime NOT NULL, 608 `atime` datetime NOT NULL, 609 `thumbnail` longblob, 610 `contents` longblob NOT NULL, 611 `comment` text, 612 PRIMARY KEY (`id`), 613 UNIQUE KEY `name` (`name`) 614) ENGINE=InnoDB"; 615 616 $query[] = "CREATE TABLE `FileLink` ( 617 `id` int(10) unsigned NOT NULL auto_increment, 618 `file_id` int(10) unsigned NOT NULL, 619 `entity_type` enum('ipv4net','ipv4rspool','ipv4vs','ipvs','ipv6net','location','object','rack','row','user') NOT NULL default 'object', 620 `entity_id` int(10) NOT NULL, 621 PRIMARY KEY (`id`), 622 KEY `FileLink-file_id` (`file_id`), 623 UNIQUE KEY `FileLink-unique` (`file_id`,`entity_type`,`entity_id`), 624 CONSTRAINT `FileLink-File_fkey` FOREIGN KEY (`file_id`) REFERENCES `File` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 625) ENGINE=InnoDB"; 626 627 $query[] = "CREATE TABLE `IPv4Address` ( 628 `ip` int(10) unsigned NOT NULL default '0', 629 `name` char(255) NOT NULL default '', 630 `comment` char(255) NOT NULL default '', 631 `reserved` enum('yes','no') default NULL, 632 PRIMARY KEY (`ip`) 633) ENGINE=InnoDB"; 634 635 $query[] = "CREATE TABLE `IPv4Allocation` ( 636 `object_id` int(10) unsigned NOT NULL default '0', 637 `ip` int(10) unsigned NOT NULL default '0', 638 `name` char(255) NOT NULL default '', 639 `type` enum('regular','shared','virtual','router','point2point','sharedrouter') NOT NULL DEFAULT 'regular', 640 PRIMARY KEY (`object_id`,`ip`), 641 KEY `ip` (`ip`), 642 CONSTRAINT `IPv4Allocation-FK-object_id` FOREIGN KEY (`object_id`) REFERENCES `Object` (`id`) ON DELETE CASCADE 643) ENGINE=InnoDB"; 644 645 $query[] = "CREATE TABLE `IPv4LB` ( 646 `object_id` int(10) unsigned default NULL, 647 `rspool_id` int(10) unsigned default NULL, 648 `vs_id` int(10) unsigned default NULL, 649 `prio` varchar(255) default NULL, 650 `vsconfig` text, 651 `rsconfig` text, 652 UNIQUE KEY `LB-VS` (`object_id`,`vs_id`), 653 KEY `IPv4LB-FK-rspool_id` (`rspool_id`), 654 KEY `IPv4LB-FK-vs_id` (`vs_id`), 655 CONSTRAINT `IPv4LB-FK-vs_id` FOREIGN KEY (`vs_id`) REFERENCES `IPv4VS` (`id`), 656 CONSTRAINT `IPv4LB-FK-object_id` FOREIGN KEY (`object_id`) REFERENCES `Object` (`id`), 657 CONSTRAINT `IPv4LB-FK-rspool_id` FOREIGN KEY (`rspool_id`) REFERENCES `IPv4RSPool` (`id`) 658) ENGINE=InnoDB"; 659 660 $query[] = "CREATE TABLE `IPv4Log` ( 661 `id` int(10) NOT NULL AUTO_INCREMENT, 662 `ip` int(10) unsigned NOT NULL, 663 `date` datetime NOT NULL, 664 `user` varchar(64) NOT NULL, 665 `message` text NOT NULL, 666 PRIMARY KEY (`id`), 667 KEY `ip-date` (`ip`,`date`) 668) ENGINE=InnoDB"; 669 670 $query[] = "CREATE TABLE `IPv6Log` ( 671 `id` int(10) NOT NULL AUTO_INCREMENT, 672 `ip` binary(16) NOT NULL, 673 `date` datetime NOT NULL, 674 `user` varchar(64) NOT NULL, 675 `message` text NOT NULL, 676 PRIMARY KEY (`id`), 677 KEY `ip-date` (`ip`,`date`) 678) ENGINE=InnoDB"; 679 680 $query[] = "CREATE TABLE `IPv4NAT` ( 681 `object_id` int(10) unsigned NOT NULL default '0', 682 `proto` enum('TCP','UDP','ALL') NOT NULL default 'TCP', 683 `localip` int(10) unsigned NOT NULL default '0', 684 `localport` smallint(5) unsigned NOT NULL default '0', 685 `remoteip` int(10) unsigned NOT NULL default '0', 686 `remoteport` smallint(5) unsigned NOT NULL default '0', 687 `description` char(255) default NULL, 688 PRIMARY KEY (`object_id`,`proto`,`localip`,`localport`,`remoteip`,`remoteport`), 689 KEY `localip` (`localip`), 690 KEY `remoteip` (`remoteip`), 691 KEY `object_id` (`object_id`), 692 CONSTRAINT `IPv4NAT-FK-object_id` FOREIGN KEY (`object_id`) REFERENCES `Object` (`id`) 693) ENGINE=InnoDB"; 694 695 $query[] = "CREATE TABLE `IPv4Network` ( 696 `id` int(10) unsigned NOT NULL auto_increment, 697 `ip` int(10) unsigned NOT NULL default '0', 698 `mask` int(10) unsigned NOT NULL default '0', 699 `name` char(255) default NULL, 700 `comment` text, 701 PRIMARY KEY (`id`), 702 UNIQUE KEY `base-len` (`ip`,`mask`) 703) ENGINE=InnoDB"; 704 705 $query[] = "CREATE TABLE `IPv4RS` ( 706 `id` int(10) unsigned NOT NULL auto_increment, 707 `inservice` enum('yes','no') NOT NULL default 'no', 708 `rsip` varbinary(16) NOT NULL, 709 `rsport` smallint(5) unsigned default NULL, 710 `rspool_id` int(10) unsigned default NULL, 711 `rsconfig` text, 712 `comment` varchar(255) DEFAULT NULL, 713 PRIMARY KEY (`id`), 714 KEY `rsip` (`rsip`), 715 UNIQUE KEY `pool-endpoint` (`rspool_id`,`rsip`,`rsport`), 716 CONSTRAINT `IPv4RS-FK` FOREIGN KEY (`rspool_id`) REFERENCES `IPv4RSPool` (`id`) ON DELETE CASCADE 717) ENGINE=InnoDB"; 718 719 $query[] = "CREATE TABLE `IPv4RSPool` ( 720 `id` int(10) unsigned NOT NULL auto_increment, 721 `name` char(255) default NULL, 722 `vsconfig` text, 723 `rsconfig` text, 724 PRIMARY KEY (`id`) 725) ENGINE=InnoDB"; 726 727 $query[] = "CREATE TABLE `IPv4VS` ( 728 `id` int(10) unsigned NOT NULL auto_increment, 729 `vip` varbinary(16) NOT NULL, 730 `vport` smallint(5) unsigned default NULL, 731 `proto` enum('TCP','UDP','MARK') NOT NULL default 'TCP', 732 `name` char(255) default NULL, 733 `vsconfig` text, 734 `rsconfig` text, 735 PRIMARY KEY (`id`), 736 KEY `vip` (`vip`) 737) ENGINE=InnoDB"; 738 739 $query[] = "CREATE TABLE `IPv6Address` ( 740 `ip` binary(16) NOT NULL, 741 `name` char(255) NOT NULL default '', 742 `comment` char(255) NOT NULL default '', 743 `reserved` enum('yes','no') default NULL, 744 PRIMARY KEY (`ip`) 745) ENGINE=InnoDB"; 746 747 $query[] = "CREATE TABLE `IPv6Allocation` ( 748 `object_id` int(10) unsigned NOT NULL default '0', 749 `ip` binary(16) NOT NULL, 750 `name` char(255) NOT NULL default '', 751 `type` enum('regular','shared','virtual','router','point2point','sharedrouter') NOT NULL DEFAULT 'regular', 752 PRIMARY KEY (`object_id`,`ip`), 753 KEY `ip` (`ip`), 754 CONSTRAINT `IPv6Allocation-FK-object_id` FOREIGN KEY (`object_id`) REFERENCES `Object` (`id`) ON DELETE CASCADE 755) ENGINE=InnoDB"; 756 757 $query[] = "CREATE TABLE `IPv6Network` ( 758 `id` int(10) unsigned NOT NULL auto_increment, 759 `ip` binary(16) NOT NULL, 760 `mask` int(10) unsigned NOT NULL, 761 `last_ip` binary(16) NOT NULL, 762 `name` char(255) default NULL, 763 `comment` text, 764 PRIMARY KEY (`id`), 765 UNIQUE KEY `ip` (`ip`,`mask`) 766) ENGINE=InnoDB"; 767 768 $query[] = "CREATE TABLE `LDAPCache` ( 769 `presented_username` char(64) NOT NULL, 770 `successful_hash` char(40) NOT NULL, 771 `first_success` timestamp NOT NULL default CURRENT_TIMESTAMP, 772 `last_retry` timestamp NULL default NULL, 773 `displayed_name` char(128) default NULL, 774 `memberof` text, 775 UNIQUE KEY `presented_username` (`presented_username`), 776 KEY `scanidx` (`presented_username`,`successful_hash`) 777) ENGINE=InnoDB"; 778 779 $query[] = "CREATE TABLE `Link` ( 780 `porta` int(10) unsigned NOT NULL default '0', 781 `portb` int(10) unsigned NOT NULL default '0', 782 `cable` char(64) DEFAULT NULL, 783 PRIMARY KEY (`porta`,`portb`), 784 UNIQUE KEY `porta` (`porta`), 785 UNIQUE KEY `portb` (`portb`), 786 CONSTRAINT `Link-FK-a` FOREIGN KEY (`porta`) REFERENCES `Port` (`id`) ON DELETE CASCADE, 787 CONSTRAINT `Link-FK-b` FOREIGN KEY (`portb`) REFERENCES `Port` (`id`) ON DELETE CASCADE 788) ENGINE=InnoDB"; 789 790 $query[] = "CREATE TABLE `Molecule` ( 791 `id` int(10) unsigned NOT NULL auto_increment, 792 PRIMARY KEY (`id`) 793) ENGINE=InnoDB"; 794 795 $query[] = "CREATE TABLE `MountOperation` ( 796 `id` int(10) unsigned NOT NULL auto_increment, 797 `object_id` int(10) unsigned NOT NULL default '0', 798 `ctime` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, 799 `user_name` char(64) default NULL, 800 `old_molecule_id` int(10) unsigned default NULL, 801 `new_molecule_id` int(10) unsigned default NULL, 802 `comment` text, 803 PRIMARY KEY (`id`), 804 UNIQUE KEY `old_molecule_id` (`old_molecule_id`), 805 UNIQUE KEY `new_molecule_id` (`new_molecule_id`), 806 KEY `object_id` (`object_id`), 807 CONSTRAINT `MountOperation-FK-object_id` FOREIGN KEY (`object_id`) REFERENCES `Object` (`id`) ON DELETE CASCADE, 808 CONSTRAINT `MountOperation-FK-old_molecule_id` FOREIGN KEY (`old_molecule_id`) REFERENCES `Molecule` (`id`) ON DELETE CASCADE, 809 CONSTRAINT `MountOperation-FK-new_molecule_id` FOREIGN KEY (`new_molecule_id`) REFERENCES `Molecule` (`id`) ON DELETE CASCADE 810) ENGINE=InnoDB"; 811 812 $query[] = "CREATE TABLE `ObjectLog` ( 813 `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 814 `object_id` int(10) unsigned NOT NULL, 815 `user` char(64) NOT NULL, 816 `date` datetime NOT NULL, 817 `content` text NOT NULL, 818 PRIMARY KEY (`id`), 819 KEY `object_id` (`object_id`), 820 KEY `date` (`date`), 821 CONSTRAINT `ObjectLog-FK-object_id` FOREIGN KEY (`object_id`) REFERENCES `Object` (`id`) ON DELETE CASCADE 822) ENGINE=InnoDB"; 823 824 $query[] = "CREATE TABLE `ObjectParentCompat` ( 825 `parent_objtype_id` int(10) unsigned NOT NULL, 826 `child_objtype_id` int(10) unsigned NOT NULL, 827 UNIQUE KEY `parent_child` (`parent_objtype_id`,`child_objtype_id`) 828) ENGINE=InnoDB"; 829 830 $query[] = "CREATE TABLE `PatchCableConnector` ( 831 `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 832 `origin` enum('default','custom') NOT NULL DEFAULT 'custom', 833 `connector` char(32) NOT NULL, 834 PRIMARY KEY (`id`), 835 UNIQUE KEY `connector_per_origin` (`connector`,`origin`) 836) ENGINE=InnoDB"; 837 838 $query[] = "CREATE TABLE `PatchCableConnectorCompat` ( 839 `pctype_id` int(10) unsigned NOT NULL, 840 `connector_id` int(10) unsigned NOT NULL, 841 PRIMARY KEY (`pctype_id`,`connector_id`), 842 KEY `connector_id` (`connector_id`), 843 CONSTRAINT `PatchCableConnectorCompat-FK-connector_id` FOREIGN KEY (`connector_id`) REFERENCES `PatchCableConnector` (`id`), 844 CONSTRAINT `PatchCableConnectorCompat-FK-pctype_id` FOREIGN KEY (`pctype_id`) REFERENCES `PatchCableType` (`id`) 845) ENGINE=InnoDB"; 846 847 $query[] = "CREATE TABLE `PatchCableHeap` ( 848 `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 849 `pctype_id` int(10) unsigned NOT NULL, 850 `end1_conn_id` int(10) unsigned NOT NULL, 851 `end2_conn_id` int(10) unsigned NOT NULL, 852 `amount` smallint(5) unsigned NOT NULL DEFAULT '0', 853 `length` decimal(5,2) unsigned NOT NULL DEFAULT '1.00', 854 `description` char(255) DEFAULT NULL, 855 PRIMARY KEY (`id`), 856 KEY `compat1` (`pctype_id`,`end1_conn_id`), 857 KEY `compat2` (`pctype_id`,`end2_conn_id`), 858 CONSTRAINT `PatchCableHeap-FK-compat1` FOREIGN KEY (`pctype_id`, `end1_conn_id`) REFERENCES `PatchCableConnectorCompat` (`pctype_id`, `connector_id`), 859 CONSTRAINT `PatchCableHeap-FK-compat2` FOREIGN KEY (`pctype_id`, `end2_conn_id`) REFERENCES `PatchCableConnectorCompat` (`pctype_id`, `connector_id`) 860) ENGINE=InnoDB"; 861 862 $query[] = "CREATE TABLE `PatchCableHeapLog` ( 863 `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 864 `heap_id` int(10) unsigned NOT NULL, 865 `date` datetime NOT NULL, 866 `user` char(64) NOT NULL, 867 `message` char(255) NOT NULL, 868 PRIMARY KEY (`id`), 869 KEY `heap_id-date` (`heap_id`,`date`), 870 CONSTRAINT `PatchCableHeapLog-FK-heap_id` FOREIGN KEY (`heap_id`) REFERENCES `PatchCableHeap` (`id`) ON DELETE CASCADE 871) ENGINE=InnoDB"; 872 873 $query[] = "CREATE TABLE `PatchCableOIFCompat` ( 874 `pctype_id` int(10) unsigned NOT NULL, 875 `oif_id` int(10) unsigned NOT NULL, 876 PRIMARY KEY (`pctype_id`,`oif_id`), 877 KEY `oif_id` (`oif_id`), 878 CONSTRAINT `PatchCableOIFCompat-FK-oif_id` FOREIGN KEY (`oif_id`) REFERENCES `PortOuterInterface` (`id`), 879 CONSTRAINT `PatchCableOIFCompat-FK-pctype_id` FOREIGN KEY (`pctype_id`) REFERENCES `PatchCableType` (`id`) 880) ENGINE=InnoDB"; 881 882 $query[] = "CREATE TABLE `PatchCableType` ( 883 `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 884 `origin` enum('default','custom') NOT NULL DEFAULT 'custom', 885 `pctype` char(64) NOT NULL, 886 PRIMARY KEY (`id`), 887 UNIQUE KEY `pctype_per_origin` (`pctype`,`origin`) 888) ENGINE=InnoDB"; 889 890 $query[] = "CREATE TABLE `Plugin` ( 891 `name` char(255) NOT NULL, 892 `longname` char(255) NOT NULL, 893 `version` char(64) NOT NULL, 894 `home_url` char(255) NOT NULL, 895 `state` enum('disabled','enabled') NOT NULL default 'disabled', 896 PRIMARY KEY (`name`) 897) ENGINE=InnoDB"; 898 899 $query[] = "CREATE TABLE `Port` ( 900 `id` int(10) unsigned NOT NULL auto_increment, 901 `object_id` int(10) unsigned NOT NULL default '0', 902 `name` char(255) NOT NULL default '', 903 `iif_id` int(10) unsigned NOT NULL, 904 `type` int(10) unsigned NOT NULL default '0', 905 `l2address` char(64) default NULL, 906 `reservation_comment` char(255) default NULL, 907 `label` char(255) default NULL, 908 PRIMARY KEY (`id`), 909 UNIQUE KEY `object_iif_oif_name` (`object_id`,`iif_id`,`type`,`name`), 910 KEY `type` (`type`), 911 KEY `comment` (`reservation_comment`), 912 KEY `l2address` (`l2address`), 913 KEY `Port-FK-iif-oif` (`iif_id`,`type`), 914 CONSTRAINT `Port-FK-iif-oif` FOREIGN KEY (`iif_id`, `type`) REFERENCES `PortInterfaceCompat` (`iif_id`, `oif_id`), 915 CONSTRAINT `Port-FK-object_id` FOREIGN KEY (`object_id`) REFERENCES `Object` (`id`) ON DELETE CASCADE 916) ENGINE=InnoDB"; 917 918 $query[] = "CREATE TABLE `PortAllowedVLAN` ( 919 `object_id` int(10) unsigned NOT NULL, 920 `port_name` char(255) NOT NULL, 921 `vlan_id` int(10) unsigned NOT NULL default '0', 922 PRIMARY KEY (`object_id`,`port_name`,`vlan_id`), 923 KEY `vlan_id` (`vlan_id`), 924 CONSTRAINT `PortAllowedVLAN-FK-object-port` FOREIGN KEY (`object_id`, `port_name`) REFERENCES `PortVLANMode` (`object_id`, `port_name`) ON DELETE CASCADE, 925 CONSTRAINT `PortAllowedVLAN-FK-vlan_id` FOREIGN KEY (`vlan_id`) REFERENCES `VLANValidID` (`vlan_id`) 926) ENGINE=InnoDB"; 927 928 $query[] = "CREATE TABLE `PortCompat` ( 929 `type1` int(10) unsigned NOT NULL default '0', 930 `type2` int(10) unsigned NOT NULL default '0', 931 UNIQUE KEY `type1_2` (`type1`,`type2`), 932 KEY `type2` (`type2`), 933 CONSTRAINT `PortCompat-FK-oif_id1` FOREIGN KEY (`type1`) REFERENCES `PortOuterInterface` (`id`), 934 CONSTRAINT `PortCompat-FK-oif_id2` FOREIGN KEY (`type2`) REFERENCES `PortOuterInterface` (`id`) 935) ENGINE=InnoDB"; 936 937 $query[] = "CREATE TABLE `PortInnerInterface` ( 938 `id` int(10) unsigned NOT NULL, 939 `iif_name` char(16) NOT NULL, 940 PRIMARY KEY (`id`), 941 UNIQUE KEY `iif_name` (`iif_name`) 942) ENGINE=InnoDB"; 943 944 $query[] = "CREATE TABLE `PortInterfaceCompat` ( 945 `iif_id` int(10) unsigned NOT NULL, 946 `oif_id` int(10) unsigned NOT NULL, 947 UNIQUE KEY `pair` (`iif_id`,`oif_id`), 948 CONSTRAINT `PortInterfaceCompat-FK-iif_id` FOREIGN KEY (`iif_id`) REFERENCES `PortInnerInterface` (`id`), 949 CONSTRAINT `PortInterfaceCompat-FK-oif_id` FOREIGN KEY (`oif_id`) REFERENCES `PortOuterInterface` (`id`) 950) ENGINE=InnoDB"; 951 952 $query[] = "CREATE TABLE `PortLog` ( 953 `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 954 `port_id` int(10) unsigned NOT NULL, 955 `date` datetime NOT NULL, 956 `user` varchar(64) NOT NULL, 957 `message` text NOT NULL, 958 PRIMARY KEY (`id`), 959 KEY `port_id-date` (`port_id`,`date`), 960 CONSTRAINT `PortLog_ibfk_1` FOREIGN KEY (`port_id`) REFERENCES `Port` (`id`) ON DELETE CASCADE 961) ENGINE=InnoDB"; 962 963 $query[] = "CREATE TABLE `PortNativeVLAN` ( 964 `object_id` int(10) unsigned NOT NULL, 965 `port_name` char(255) NOT NULL, 966 `vlan_id` int(10) unsigned NOT NULL default '0', 967 PRIMARY KEY (`object_id`,`port_name`,`vlan_id`), 968 UNIQUE KEY `port_id` (`object_id`,`port_name`), 969 CONSTRAINT `PortNativeVLAN-FK-compound` FOREIGN KEY (`object_id`, `port_name`, `vlan_id`) REFERENCES `PortAllowedVLAN` (`object_id`, `port_name`, `vlan_id`) ON DELETE CASCADE 970) ENGINE=InnoDB"; 971 972 $query[] = "CREATE TABLE `PortOuterInterface` ( 973 `id` int(10) unsigned NOT NULL auto_increment, 974 `oif_name` char(48) NOT NULL, 975 PRIMARY KEY (`id`), 976 UNIQUE KEY `oif_name` (`oif_name`) 977) ENGINE=InnoDB"; 978 979 $query[] = "CREATE TABLE `PortVLANMode` ( 980 `object_id` int(10) unsigned NOT NULL, 981 `port_name` char(255) NOT NULL, 982 `vlan_mode` enum('access','trunk') NOT NULL default 'access', 983 PRIMARY KEY (`object_id`,`port_name`), 984 CONSTRAINT `PortVLANMode-FK-object-port` FOREIGN KEY (`object_id`, `port_name`) REFERENCES `CachedPVM` (`object_id`, `port_name`) 985) ENGINE=InnoDB"; 986 987 $query[] = "CREATE TABLE `Object` ( 988 `id` int(10) unsigned NOT NULL auto_increment, 989 `name` char(255) default NULL, 990 `label` char(255) default NULL, 991 `objtype_id` int(10) unsigned NOT NULL default '1', 992 `asset_no` char(64) default NULL, 993 `has_problems` enum('yes','no') NOT NULL default 'no', 994 `comment` text, 995 PRIMARY KEY (`id`), 996 UNIQUE KEY `asset_no` (`asset_no`), 997 KEY `id-tid` (`id`,`objtype_id`), 998 KEY `type_id` (`objtype_id`,`id`) 999) ENGINE=InnoDB"; 1000 1001 $query[] = "CREATE TABLE `ObjectHistory` ( 1002 `event_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 1003 `id` int(10) unsigned default NULL, 1004 `name` char(255) default NULL, 1005 `label` char(255) default NULL, 1006 `objtype_id` int(10) unsigned default NULL, 1007 `asset_no` char(64) default NULL, 1008 `has_problems` enum('yes','no') NOT NULL default 'no', 1009 `comment` text, 1010 `ctime` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, 1011 `user_name` char(64) default NULL, 1012 PRIMARY KEY (`event_id`), 1013 KEY `id` (`id`), 1014 CONSTRAINT `ObjectHistory-FK-object_id` FOREIGN KEY (`id`) REFERENCES `Object` (`id`) ON DELETE CASCADE 1015) ENGINE=InnoDB"; 1016 1017 $query[] = "CREATE TABLE `RackSpace` ( 1018 `rack_id` int(10) unsigned NOT NULL default '0', 1019 `unit_no` int(10) unsigned NOT NULL default '0', 1020 `atom` enum('front','interior','rear') NOT NULL default 'interior', 1021 `state` enum('A','U','T') NOT NULL default 'A', 1022 `object_id` int(10) unsigned default NULL, 1023 PRIMARY KEY (`rack_id`,`unit_no`,`atom`), 1024 KEY `RackSpace_object_id` (`object_id`), 1025 CONSTRAINT `RackSpace-FK-rack_id` FOREIGN KEY (`rack_id`) REFERENCES `Object` (`id`), 1026 CONSTRAINT `RackSpace-FK-object_id` FOREIGN KEY (`object_id`) REFERENCES `Object` (`id`) ON DELETE CASCADE 1027) ENGINE=InnoDB"; 1028 1029 $query[] = "CREATE TABLE `RackThumbnail` ( 1030 `rack_id` int(10) unsigned NOT NULL, 1031 `thumb_data` blob, 1032 UNIQUE KEY `rack_id` (`rack_id`), 1033 CONSTRAINT `RackThumbnail-FK-rack_id` FOREIGN KEY (`rack_id`) REFERENCES `Object` (`id`) ON DELETE CASCADE 1034) ENGINE=InnoDB"; 1035 1036 $query[] = "CREATE TABLE `Script` ( 1037 `script_name` char(64) NOT NULL, 1038 `script_text` longtext, 1039 PRIMARY KEY (`script_name`) 1040) ENGINE=InnoDB"; 1041 1042 $query[] = "CREATE TABLE `TagStorage` ( 1043 `entity_realm` enum('file','ipv4net','ipv4rspool','ipv4vs','ipvs','ipv6net','location','object','rack','user','vst') NOT NULL default 'object', 1044 `entity_id` int(10) unsigned NOT NULL, 1045 `tag_id` int(10) unsigned NOT NULL default '0', 1046 `tag_is_assignable` enum('yes','no') NOT NULL DEFAULT 'yes', 1047 `user` char(64) DEFAULT NULL, 1048 `date` datetime DEFAULT NULL, 1049 UNIQUE KEY `entity_tag` (`entity_realm`,`entity_id`,`tag_id`), 1050 KEY `entity_id` (`entity_id`), 1051 KEY `TagStorage-FK-tag_id` (`tag_id`), 1052 KEY `tag_id-tag_is_assignable` (`tag_id`,`tag_is_assignable`), 1053 CONSTRAINT `TagStorage-FK-TagTree` FOREIGN KEY (`tag_id`, `tag_is_assignable`) REFERENCES `TagTree` (`id`, `is_assignable`) 1054) ENGINE=InnoDB"; 1055 1056 $query[] = "CREATE TABLE `TagTree` ( 1057 `id` int(10) unsigned NOT NULL auto_increment, 1058 `parent_id` int(10) unsigned default NULL, 1059 `is_assignable` enum('yes','no') NOT NULL DEFAULT 'yes', 1060 `tag` char(255) default NULL, 1061 `color` mediumint(8) unsigned DEFAULT NULL, 1062 `description` char(255) COLLATE utf8_unicode_ci DEFAULT NULL, 1063 PRIMARY KEY (`id`), 1064 UNIQUE KEY `tag` (`tag`), 1065 KEY `TagTree-K-parent_id` (`parent_id`), 1066 KEY `id-is_assignable` (`id`,`is_assignable`), 1067 CONSTRAINT `TagTree-K-parent_id` FOREIGN KEY (`parent_id`) REFERENCES `TagTree` (`id`) 1068) ENGINE=InnoDB"; 1069 1070 $query[] = "CREATE TABLE `UserAccount` ( 1071 `user_id` int(10) unsigned NOT NULL auto_increment, 1072 `user_name` char(64) NOT NULL default '', 1073 `user_password_hash` char(40) default NULL, 1074 `user_realname` char(64) default NULL, 1075 PRIMARY KEY (`user_id`), 1076 UNIQUE KEY `user_name` (`user_name`) 1077) ENGINE=InnoDB"; 1078 1079 $query[] = "CREATE TABLE `UserConfig` ( 1080 `varname` char(32) NOT NULL, 1081 `varvalue` text NOT NULL, 1082 `user` char(64) NOT NULL, 1083 UNIQUE KEY `user_varname` (`user`,`varname`), 1084 KEY `varname` (`varname`), 1085 CONSTRAINT `UserConfig-FK-varname` FOREIGN KEY (`varname`) REFERENCES `Config` (`varname`) ON DELETE CASCADE ON UPDATE CASCADE 1086) ENGINE=InnoDB"; 1087 1088 $query[] = "CREATE TABLE `VLANDescription` ( 1089 `domain_id` int(10) unsigned NOT NULL, 1090 `vlan_id` int(10) unsigned NOT NULL default '0', 1091 `vlan_type` enum('ondemand','compulsory','alien') NOT NULL default 'ondemand', 1092 `vlan_descr` char(255) default NULL, 1093 PRIMARY KEY (`domain_id`,`vlan_id`), 1094 KEY `vlan_id` (`vlan_id`), 1095 CONSTRAINT `VLANDescription-FK-domain_id` FOREIGN KEY (`domain_id`) REFERENCES `VLANDomain` (`id`) ON DELETE CASCADE, 1096 CONSTRAINT `VLANDescription-FK-vlan_id` FOREIGN KEY (`vlan_id`) REFERENCES `VLANValidID` (`vlan_id`) 1097) ENGINE=InnoDB"; 1098 1099 $query[] = "CREATE TABLE `VLANDomain` ( 1100 `id` int(10) unsigned NOT NULL auto_increment, 1101 `group_id` int(10) unsigned default NULL, 1102 `description` char(255) default NULL, 1103 PRIMARY KEY (`id`), 1104 UNIQUE KEY `description` (`description`), 1105 CONSTRAINT `VLANDomain-FK-group_id` FOREIGN KEY (`group_id`) REFERENCES `VLANDomain` (`id`) ON DELETE SET NULL 1106) ENGINE=InnoDB"; 1107 1108 $query[] = "CREATE TABLE `VLANIPv4` ( 1109 `domain_id` int(10) unsigned NOT NULL, 1110 `vlan_id` int(10) unsigned NOT NULL, 1111 `ipv4net_id` int(10) unsigned NOT NULL, 1112 UNIQUE KEY `network-domain-vlan` (`ipv4net_id`,`domain_id`,`vlan_id`), 1113 KEY `VLANIPv4-FK-compound` (`domain_id`,`vlan_id`), 1114 CONSTRAINT `VLANIPv4-FK-compound` FOREIGN KEY (`domain_id`, `vlan_id`) REFERENCES `VLANDescription` (`domain_id`, `vlan_id`) ON DELETE CASCADE, 1115 CONSTRAINT `VLANIPv4-FK-ipv4net_id` FOREIGN KEY (`ipv4net_id`) REFERENCES `IPv4Network` (`id`) ON DELETE CASCADE 1116) ENGINE=InnoDB"; 1117 1118 $query[] = "CREATE TABLE `VLANIPv6` ( 1119 `domain_id` int(10) unsigned NOT NULL, 1120 `vlan_id` int(10) unsigned NOT NULL, 1121 `ipv6net_id` int(10) unsigned NOT NULL, 1122 UNIQUE KEY `network-domain-vlan` (`ipv6net_id`,`domain_id`,`vlan_id`), 1123 KEY `VLANIPv6-FK-compound` (`domain_id`,`vlan_id`), 1124 CONSTRAINT `VLANIPv6-FK-compound` FOREIGN KEY (`domain_id`, `vlan_id`) REFERENCES `VLANDescription` (`domain_id`, `vlan_id`) ON DELETE CASCADE, 1125 CONSTRAINT `VLANIPv6-FK-ipv6net_id` FOREIGN KEY (`ipv6net_id`) REFERENCES `IPv6Network` (`id`) ON DELETE CASCADE 1126) ENGINE=InnoDB"; 1127 1128 $query[] = "CREATE TABLE `VLANSTRule` ( 1129 `vst_id` int(10) unsigned NOT NULL, 1130 `rule_no` int(10) unsigned NOT NULL, 1131 `port_pcre` char(255) NOT NULL, 1132 `port_role` enum('access','trunk','anymode','uplink','downlink','none') NOT NULL default 'none', 1133 `wrt_vlans` text, 1134 `description` char(255) default NULL, 1135 UNIQUE KEY `vst-rule` (`vst_id`,`rule_no`), 1136 CONSTRAINT `VLANSTRule-FK-vst_id` FOREIGN KEY (`vst_id`) REFERENCES `VLANSwitchTemplate` (`id`) ON DELETE CASCADE 1137) ENGINE=InnoDB"; 1138 1139 $query[] = "CREATE TABLE `VLANSwitch` ( 1140 `object_id` int(10) unsigned NOT NULL, 1141 `domain_id` int(10) unsigned NOT NULL, 1142 `template_id` int(10) unsigned NOT NULL, 1143 `mutex_rev` int(10) unsigned NOT NULL default '0', 1144 `out_of_sync` enum('yes','no') NOT NULL default 'yes', 1145 `last_errno` int(10) unsigned NOT NULL default '0', 1146 `last_change` timestamp NOT NULL default '0000-00-00 00:00:00', 1147 `last_push_started` timestamp NOT NULL default '0000-00-00 00:00:00', 1148 `last_push_finished` timestamp NOT NULL default '0000-00-00 00:00:00', 1149 `last_error_ts` timestamp NOT NULL default '0000-00-00 00:00:00', 1150 UNIQUE KEY `object_id` (`object_id`), 1151 KEY `domain_id` (`domain_id`), 1152 KEY `template_id` (`template_id`), 1153 KEY `out_of_sync` (`out_of_sync`), 1154 KEY `last_errno` (`last_errno`), 1155 CONSTRAINT `VLANSwitch-FK-domain_id` FOREIGN KEY (`domain_id`) REFERENCES `VLANDomain` (`id`), 1156 CONSTRAINT `VLANSwitch-FK-object_id` FOREIGN KEY (`object_id`) REFERENCES `Object` (`id`), 1157 CONSTRAINT `VLANSwitch-FK-template_id` FOREIGN KEY (`template_id`) REFERENCES `VLANSwitchTemplate` (`id`) 1158) ENGINE=InnoDB"; 1159 1160 $query[] = "CREATE TABLE `VLANSwitchTemplate` ( 1161 `id` int(10) unsigned NOT NULL auto_increment, 1162 `mutex_rev` int(10) NOT NULL, 1163 `description` char(255) default NULL, 1164 `saved_by` char(64) NOT NULL, 1165 PRIMARY KEY (`id`), 1166 UNIQUE KEY `description` (`description`) 1167) ENGINE=InnoDB"; 1168 1169 $query[] = "CREATE TABLE `VLANValidID` ( 1170 `vlan_id` int(10) unsigned NOT NULL default '1', 1171 PRIMARY KEY (`vlan_id`) 1172) ENGINE=InnoDB"; 1173 1174 $query[] = "CREATE TABLE `VS` ( 1175 `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 1176 `name` char(255) DEFAULT NULL, 1177 `vsconfig` text, 1178 `rsconfig` text, 1179 PRIMARY KEY (`id`) 1180) ENGINE=InnoDB"; 1181 1182 $query[] = "CREATE TABLE `VSIPs` ( 1183 `vs_id` int(10) unsigned NOT NULL, 1184 `vip` varbinary(16) NOT NULL, 1185 `vsconfig` text, 1186 `rsconfig` text, 1187 PRIMARY KEY (`vs_id`,`vip`), 1188 KEY `vip` (`vip`), 1189 CONSTRAINT `VSIPs-vs_id` FOREIGN KEY (`vs_id`) REFERENCES `VS` (`id`) ON DELETE CASCADE 1190) ENGINE=InnoDB"; 1191 1192 $query[] = "CREATE TABLE `VSPorts` ( 1193 `vs_id` int(10) unsigned NOT NULL, 1194 `proto` enum('TCP','UDP','MARK') NOT NULL, 1195 `vport` int(10) unsigned NOT NULL, 1196 `vsconfig` text, 1197 `rsconfig` text, 1198 PRIMARY KEY (`vs_id`,`proto`,`vport`), 1199 KEY `proto-vport` (`proto`,`vport`), 1200 CONSTRAINT `VS-vs_id` FOREIGN KEY (`vs_id`) REFERENCES `VS` (`id`) ON DELETE CASCADE 1201) ENGINE=InnoDB"; 1202 1203 $query[] = "CREATE TABLE `VSEnabledIPs` ( 1204 `object_id` int(10) unsigned NOT NULL, 1205 `vs_id` int(10) unsigned NOT NULL, 1206 `vip` varbinary(16) NOT NULL, 1207 `rspool_id` int(10) unsigned NOT NULL, 1208 `prio` varchar(255) DEFAULT NULL, 1209 `vsconfig` text, 1210 `rsconfig` text, 1211 PRIMARY KEY (`object_id`,`vs_id`,`vip`,`rspool_id`), 1212 KEY `vip` (`vip`), 1213 KEY `VSEnabledIPs-FK-vs_id-vip` (`vs_id`,`vip`), 1214 KEY `VSEnabledIPs-FK-rspool_id` (`rspool_id`), 1215 CONSTRAINT `VSEnabledIPs-FK-object_id` FOREIGN KEY (`object_id`) REFERENCES `Object` (`id`) ON DELETE CASCADE, 1216 CONSTRAINT `VSEnabledIPs-FK-rspool_id` FOREIGN KEY (`rspool_id`) REFERENCES `IPv4RSPool` (`id`) ON DELETE CASCADE, 1217 CONSTRAINT `VSEnabledIPs-FK-vs_id-vip` FOREIGN KEY (`vs_id`, `vip`) REFERENCES `VSIPs` (`vs_id`, `vip`) ON DELETE CASCADE 1218) ENGINE=InnoDB"; 1219 1220 $query[] = "CREATE TABLE `VSEnabledPorts` ( 1221 `object_id` int(10) unsigned NOT NULL, 1222 `vs_id` int(10) unsigned NOT NULL, 1223 `proto` enum('TCP','UDP','MARK') NOT NULL, 1224 `vport` int(10) unsigned NOT NULL, 1225 `rspool_id` int(10) unsigned NOT NULL, 1226 `vsconfig` text, 1227 `rsconfig` text, 1228 PRIMARY KEY (`object_id`,`vs_id`,`proto`,`vport`,`rspool_id`), 1229 KEY `VSEnabledPorts-FK-vs_id-proto-vport` (`vs_id`,`proto`,`vport`), 1230 KEY `VSEnabledPorts-FK-rspool_id` (`rspool_id`), 1231 CONSTRAINT `VSEnabledPorts-FK-object_id` FOREIGN KEY (`object_id`) REFERENCES `Object` (`id`) ON DELETE CASCADE, 1232 CONSTRAINT `VSEnabledPorts-FK-rspool_id` FOREIGN KEY (`rspool_id`) REFERENCES `IPv4RSPool` (`id`) ON DELETE CASCADE, 1233 CONSTRAINT `VSEnabledPorts-FK-vs_id-proto-vport` FOREIGN KEY (`vs_id`, `proto`, `vport`) REFERENCES `VSPorts` (`vs_id`, `proto`, `vport`) ON DELETE CASCADE 1234) ENGINE=InnoDB"; 1235 1236 $query[] = " 1237CREATE TRIGGER `EntityLink-before-insert` BEFORE INSERT ON `EntityLink` FOR EACH ROW 1238EntityLinkTrigger:BEGIN 1239 DECLARE parent_objtype, child_objtype, count INTEGER; 1240 1241 # forbid linking an entity to itself 1242 IF NEW.parent_entity_type = NEW.child_entity_type AND NEW.parent_entity_id = NEW.child_entity_id THEN 1243 SET NEW.parent_entity_id = NULL; 1244 LEAVE EntityLinkTrigger; 1245 END IF; 1246 1247 # in some scenarios, only one parent is allowed 1248 CASE CONCAT(NEW.parent_entity_type, '.', NEW.child_entity_type) 1249 WHEN 'location.location' THEN 1250 SELECT COUNT(*) INTO count FROM EntityLink WHERE parent_entity_type = 'location' AND child_entity_type = 'location' AND child_entity_id = NEW.child_entity_id; 1251 WHEN 'location.row' THEN 1252 SELECT COUNT(*) INTO count FROM EntityLink WHERE parent_entity_type = 'location' AND child_entity_type = 'row' AND child_entity_id = NEW.child_entity_id; 1253 WHEN 'row.rack' THEN 1254 SELECT COUNT(*) INTO count FROM EntityLink WHERE parent_entity_type = 'row' AND child_entity_type = 'rack' AND child_entity_id = NEW.child_entity_id; 1255 ELSE 1256 # some other scenario, assume it is valid 1257 SET count = 0; 1258 END CASE; 1259 IF count > 0 THEN 1260 SET NEW.parent_entity_id = NULL; 1261 LEAVE EntityLinkTrigger; 1262 END IF; 1263 1264 IF NEW.parent_entity_type = 'object' AND NEW.child_entity_type = 'object' THEN 1265 # lock objects to prevent concurrent link establishment 1266 SELECT objtype_id INTO parent_objtype FROM Object WHERE id = NEW.parent_entity_id FOR UPDATE; 1267 SELECT objtype_id INTO child_objtype FROM Object WHERE id = NEW.child_entity_id FOR UPDATE; 1268 1269 # only permit the link if object types are compatibile 1270 SELECT COUNT(*) INTO count FROM ObjectParentCompat WHERE parent_objtype_id = parent_objtype AND child_objtype_id = child_objtype; 1271 IF count = 0 THEN 1272 SET NEW.parent_entity_id = NULL; 1273 END IF; 1274 END IF; 1275END; 1276"; 1277 $query[] = " 1278CREATE TRIGGER `EntityLink-before-update` BEFORE UPDATE ON `EntityLink` FOR EACH ROW 1279EntityLinkTrigger:BEGIN 1280 DECLARE parent_objtype, child_objtype, count INTEGER; 1281 1282 # forbid linking an entity to itself 1283 IF NEW.parent_entity_type = NEW.child_entity_type AND NEW.parent_entity_id = NEW.child_entity_id THEN 1284 SET NEW.parent_entity_id = NULL; 1285 LEAVE EntityLinkTrigger; 1286 END IF; 1287 1288 # in some scenarios, only one parent is allowed 1289 CASE CONCAT(NEW.parent_entity_type, '.', NEW.child_entity_type) 1290 WHEN 'location.location' THEN 1291 SELECT COUNT(*) INTO count FROM EntityLink WHERE parent_entity_type = 'location' AND child_entity_type = 'location' AND child_entity_id = NEW.child_entity_id AND id != NEW.id; 1292 WHEN 'location.row' THEN 1293 SELECT COUNT(*) INTO count FROM EntityLink WHERE parent_entity_type = 'location' AND child_entity_type = 'row' AND child_entity_id = NEW.child_entity_id AND id != NEW.id; 1294 WHEN 'row.rack' THEN 1295 SELECT COUNT(*) INTO count FROM EntityLink WHERE parent_entity_type = 'row' AND child_entity_type = 'rack' AND child_entity_id = NEW.child_entity_id AND id != NEW.id; 1296 ELSE 1297 # some other scenario, assume it is valid 1298 SET count = 0; 1299 END CASE; 1300 IF count > 0 THEN 1301 SET NEW.parent_entity_id = NULL; 1302 LEAVE EntityLinkTrigger; 1303 END IF; 1304 1305 IF NEW.parent_entity_type = 'object' AND NEW.child_entity_type = 'object' THEN 1306 # lock objects to prevent concurrent link establishment 1307 SELECT objtype_id INTO parent_objtype FROM Object WHERE id = NEW.parent_entity_id FOR UPDATE; 1308 SELECT objtype_id INTO child_objtype FROM Object WHERE id = NEW.child_entity_id FOR UPDATE; 1309 1310 # only permit the link if object types are compatibile 1311 SELECT COUNT(*) INTO count FROM ObjectParentCompat WHERE parent_objtype_id = parent_objtype AND child_objtype_id = child_objtype; 1312 IF count = 0 THEN 1313 SET NEW.parent_entity_id = NULL; 1314 END IF; 1315 END IF; 1316END; 1317"; 1318 $link_trigger_body = <<<'ENDOFTRIGGER' 1319LinkTrigger:BEGIN 1320 DECLARE tmp, porta_type, portb_type, count INTEGER; 1321 1322 IF NEW.porta = NEW.portb THEN 1323 # forbid connecting a port to itself 1324 SET NEW.porta = NULL; 1325 LEAVE LinkTrigger; 1326 ELSEIF NEW.porta > NEW.portb THEN 1327 # force porta < portb 1328 SET tmp = NEW.porta; 1329 SET NEW.porta = NEW.portb; 1330 SET NEW.portb = tmp; 1331 END IF; 1332 1333 # lock ports to prevent concurrent link establishment 1334 SELECT type INTO porta_type FROM Port WHERE id = NEW.porta FOR UPDATE; 1335 SELECT type INTO portb_type FROM Port WHERE id = NEW.portb FOR UPDATE; 1336 1337 # only permit the link if ports are compatibile 1338 SELECT COUNT(*) INTO count FROM PortCompat WHERE (type1 = porta_type AND type2 = portb_type) OR (type1 = portb_type AND type2 = porta_type); 1339 IF count = 0 THEN 1340 SET NEW.porta = NULL; 1341 END IF; 1342END; 1343ENDOFTRIGGER; 1344 $query[] = "CREATE TRIGGER `Link-before-insert` BEFORE INSERT ON `Link` FOR EACH ROW $link_trigger_body"; 1345 $query[] = "CREATE TRIGGER `Link-before-update` BEFORE UPDATE ON `Link` FOR EACH ROW $link_trigger_body"; 1346 1347 $query[] = "CREATE VIEW `Location` AS SELECT O.id, O.name, O.has_problems, O.comment, P.id AS parent_id, P.name AS parent_name 1348FROM `Object` O 1349LEFT JOIN ( 1350 `Object` P INNER JOIN `EntityLink` EL 1351 ON EL.parent_entity_id = P.id AND P.objtype_id = 1562 AND EL.parent_entity_type = 'location' AND EL.child_entity_type = 'location' 1352) ON EL.child_entity_id = O.id 1353WHERE O.objtype_id = 1562"; 1354 1355 $query[] = "CREATE VIEW `Row` AS SELECT O.id, O.name, L.id AS location_id, L.name AS location_name 1356 FROM `Object` O 1357 LEFT JOIN `EntityLink` EL ON O.id = EL.child_entity_id AND EL.parent_entity_type = 'location' AND EL.child_entity_type = 'row' 1358 LEFT JOIN `Object` L ON EL.parent_entity_id = L.id AND L.objtype_id = 1562 1359 WHERE O.objtype_id = 1561"; 1360 1361 $query[] = "CREATE VIEW `Rack` AS SELECT O.id, O.name AS name, O.asset_no, O.has_problems, O.comment, 1362 AV_H.uint_value AS height, 1363 AV_S.uint_value AS sort_order, 1364 RT.thumb_data, 1365 R.id AS row_id, 1366 R.name AS row_name, 1367 L.id AS location_id, 1368 L.name AS location_name 1369 FROM `Object` O 1370 LEFT JOIN `AttributeValue` AV_H ON O.id = AV_H.object_id AND AV_H.attr_id = 27 1371 LEFT JOIN `AttributeValue` AV_S ON O.id = AV_S.object_id AND AV_S.attr_id = 29 1372 LEFT JOIN `RackThumbnail` RT ON O.id = RT.rack_id 1373 LEFT JOIN `EntityLink` RL ON O.id = RL.child_entity_id AND RL.parent_entity_type = 'row' AND RL.child_entity_type = 'rack' 1374 INNER JOIN `Object` R ON R.id = RL.parent_entity_id 1375 LEFT JOIN `EntityLink` LL ON R.id = LL.child_entity_id AND LL.parent_entity_type = 'location' AND LL.child_entity_type = 'row' 1376 LEFT JOIN `Object` L ON L.id = LL.parent_entity_id 1377 WHERE O.objtype_id = 1560"; 1378 1379 $query[] = "CREATE VIEW `RackObject` AS SELECT id, name, label, objtype_id, asset_no, has_problems, comment FROM `Object` 1380 WHERE `objtype_id` NOT IN (1560, 1561, 1562)"; 1381 1382 $query[] = "SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS"; 1383 1384 return $query; 1385########################################################################## 1386 case 'dictbase': 1387 $db_version = CODE_VERSION; 1388 $query = array(); 1389 1390 $query[] = "INSERT INTO `Attribute` (`id`, `type`, `name`) VALUES 1391(1,'string','OEM S/N 1'), 1392(2,'dict','HW type'), 1393(3,'string','FQDN'), 1394(4,'dict','SW type'), 1395(5,'string','SW version'), 1396(6,'uint','number of ports'), 1397(7,'float','max. current, Ampers'), 1398(8,'float','power load, percents'), 1399(13,'float','max power, Watts'), 1400(14,'string','contact person'), 1401(16,'uint','flash memory, MB'), 1402(17,'uint','DRAM, MB'), 1403(18,'uint','CPU, MHz'), 1404(20,'string','OEM S/N 2'), 1405(21,'date','support contract expiration'), 1406(22,'date','HW warranty expiration'), 1407(24,'date','SW warranty expiration'), 1408(25,'string','UUID'), 1409(26,'dict','Hypervisor'), 1410(27,'uint','Height, units'), 1411(28,'string','Slot number'), 1412(29,'uint','Sort order'), 1413(30,'dict','Mgmt type'), 1414-- ^^^^^ Any new 'default' attributes must go above this line! ^^^^^ 1415-- Primary key value 9999 makes sure that AUTO_INCREMENT on server restart 1416-- doesn't drop below 10000 (other code relies on this, site-specific 1417-- attributes are assigned IDs starting from 10000). 1418(9999,'string','base MAC address')"; 1419 1420 $query[] = "INSERT INTO `Chapter` (`id`, `sticky`, `name`) VALUES 1421(1,'yes','ObjectType'), 1422(11,'no','server models'), 1423(12,'no','network switch models'), 1424(13,'no','server OS type'), 1425(14,'no','switch OS type'), 1426(16,'no','router OS type'), 1427(17,'no','router models'), 1428(18,'no','disk array models'), 1429(19,'no','tape library models'), 1430(21,'no','KVM switch models'), 1431(23,'no','console models'), 1432(24,'no','network security models'), 1433(25,'no','wireless models'), 1434(26,'no','fibre channel switch models'), 1435(27,'no','PDU models'), 1436(28,'no','Voice/video hardware'), 1437(29,'no','Yes/No'), 1438(30,'no','network chassis models'), 1439(31,'no','server chassis models'), 1440(32,'no','virtual switch models'), 1441(33,'no','virtual switch OS type'), 1442(34,'no','power supply chassis models'), 1443(35,'no','power supply models'), 1444(36,'no','serial console server models'), 1445(37,'no','wireless OS type'), 1446(38,'no','management interface type'), 1447(39,'no','UPS models'), 1448-- Default chapters must have ID less than 10000, add them above this line. 1449(9999,'no','multiplexer models')"; 1450 1451 $query[] = "INSERT INTO `AttributeMap` (`objtype_id`, `attr_id`, `chapter_id`, `sticky`) VALUES 1452(2,1,NULL,'no'), 1453(2,2,27,'no'), 1454(2,3,NULL,'no'), 1455(2,5,NULL,'no'), 1456(4,1,NULL,'no'), 1457(4,2,11,'no'), 1458(4,3,NULL,'no'), 1459(4,4,13,'no'), 1460(4,14,NULL,'no'), 1461(4,21,NULL,'no'), 1462(4,22,NULL,'no'), 1463(4,24,NULL,'no'), 1464(4,25,NULL,'no'), 1465(4,26,29,'yes'), 1466(4,28,NULL,'yes'), 1467(5,1,NULL,'no'), 1468(5,2,18,'no'), 1469(6,1,NULL,'no'), 1470(6,2,19,'no'), 1471(6,20,NULL,'no'), 1472(7,1,NULL,'no'), 1473(7,2,17,'no'), 1474(7,3,NULL,'no'), 1475(7,4,16,'no'), 1476(7,5,NULL,'no'), 1477(7,14,NULL,'no'), 1478(7,16,NULL,'no'), 1479(7,17,NULL,'no'), 1480(7,18,NULL,'no'), 1481(7,21,NULL,'no'), 1482(7,22,NULL,'no'), 1483(7,24,NULL,'no'), 1484(8,1,NULL,'yes'), 1485(8,2,12,'yes'), 1486(8,3,NULL,'no'), 1487(8,4,14,'yes'), 1488(8,5,NULL,'no'), 1489(8,14,NULL,'no'), 1490(8,16,NULL,'no'), 1491(8,17,NULL,'no'), 1492(8,18,NULL,'no'), 1493(8,20,NULL,'no'), 1494(8,21,NULL,'no'), 1495(8,22,NULL,'no'), 1496(8,24,NULL,'no'), 1497(8,28,NULL,'yes'), 1498(9,6,NULL,'no'), 1499(12,1,NULL,'no'), 1500(12,3,NULL,'no'), 1501(12,7,NULL,'no'), 1502(12,8,NULL,'no'), 1503(12,13,NULL,'no'), 1504(12,20,NULL,'no'), 1505(15,2,23,'no'), 1506(445,1,NULL,'no'), 1507(445,2,21,'no'), 1508(445,3,NULL,'no'), 1509(445,5,NULL,'no'), 1510(445,14,NULL,'no'), 1511(445,22,NULL,'no'), 1512(447,1,NULL,'no'), 1513(447,2,9999,'no'), 1514(447,3,NULL,'no'), 1515(447,5,NULL,'no'), 1516(447,14,NULL,'no'), 1517(447,22,NULL,'no'), 1518(798,1,NULL,'no'), 1519(798,2,24,'no'), 1520(798,3,NULL,'no'), 1521(798,5,NULL,'no'), 1522(798,14,NULL,'no'), 1523(798,16,NULL,'no'), 1524(798,17,NULL,'no'), 1525(798,18,NULL,'no'), 1526(798,20,NULL,'no'), 1527(798,21,NULL,'no'), 1528(798,22,NULL,'no'), 1529(798,24,NULL,'no'), 1530(798,28,NULL,'yes'), 1531(965,1,NULL,'no'), 1532(965,2,25,'no'), 1533(965,3,NULL,'no'), 1534(965,4,37,'no'), 1535(1055,2,26,'no'), 1536(1055,28,NULL,'yes'), 1537(1323,1,NULL,'no'), 1538(1323,2,28,'no'), 1539(1323,3,NULL,'no'), 1540(1323,5,NULL,'no'), 1541(1397,1,NULL,'no'), 1542(1397,2,34,'no'), 1543(1397,14,NULL,'no'), 1544(1397,21,NULL,'no'), 1545(1397,22,NULL,'no'), 1546(1398,1,NULL,'no'), 1547(1398,2,35,'no'), 1548(1398,14,NULL,'no'), 1549(1398,21,NULL,'no'), 1550(1398,22,NULL,'no'), 1551(1502,1,NULL,'no'), 1552(1502,2,31,'no'), 1553(1502,3,NULL,'no'), 1554(1502,14,NULL,'no'), 1555(1502,20,NULL,'no'), 1556(1502,21,NULL,'no'), 1557(1502,22,NULL,'no'), 1558(1503,1,NULL,'no'), 1559(1503,2,30,'no'), 1560(1503,3,NULL,'no'), 1561(1503,4,14,'no'), 1562(1503,5,NULL,'no'), 1563(1503,14,NULL,'no'), 1564(1503,16,NULL,'no'), 1565(1503,17,NULL,'no'), 1566(1503,18,NULL,'no'), 1567(1503,20,NULL,'no'), 1568(1503,21,NULL,'no'), 1569(1503,22,NULL,'no'), 1570(1503,24,NULL,'no'), 1571(1504,3,NULL,'no'), 1572(1504,4,13,'no'), 1573(1504,14,NULL,'no'), 1574(1504,24,NULL,'no'), 1575(1505,14,NULL,'no'), 1576(1506,14,NULL,'no'), 1577(1506,17,NULL,'no'), 1578(1506,18,NULL,'no'), 1579(1507,1,NULL,'no'), 1580(1507,2,32,'no'), 1581(1507,3,NULL,'no'), 1582(1507,4,33,'no'), 1583(1507,5,NULL,'no'), 1584(1507,14,NULL,'no'), 1585(1507,20,NULL,'no'), 1586(1507,21,NULL,'no'), 1587(1507,22,NULL,'no'), 1588(1560,27,NULL,'yes'), 1589(1560,29,NULL,'yes'), 1590(1562,14,NULL,'no'), 1591(1644,1,NULL,'no'), 1592(1644,2,36,'no'), 1593(1644,3,NULL,'no'), 1594(1787,3,NULL,'no'), 1595(1787,14,NULL,'no'), 1596(1787,30,38,'yes'), 1597(12,2,39,'no')"; 1598 1599 $query[] = "INSERT INTO PatchCableConnector (id, origin, connector) VALUES 1600(1,'default','FC/PC'),(2,'default','FC/APC'), 1601(3,'default','LC/PC'),(4,'default','LC/APC'), 1602(5,'default','MPO-12/PC'),(6,'default','MPO-12/APC'), 1603(7,'default','MPO-24/PC'),(8,'default','MPO-24/APC'), 1604(9,'default','SC/PC'),(10,'default','SC/APC'), 1605(11,'default','ST/PC'),(12,'default','ST/APC'), 1606(13,'default','T568/8P8C/RJ45'), 1607(14,'default','SFP-1000'), 1608(15,'default','SFP+'), 1609(999,'default','CX4/SFF-8470')"; 1610 1611 $query[] = "INSERT INTO PatchCableType (id, origin, pctype) VALUES 1612(1,'default','duplex OM1'), 1613(2,'default','duplex OM2'), 1614(3,'default','duplex OM3'), 1615(4,'default','duplex OM4'), 1616(5,'default','duplex OS1'), 1617(6,'default','duplex OS2'), 1618(7,'default','simplex OM1'), 1619(8,'default','simplex OM2'), 1620(9,'default','simplex OM3'), 1621(10,'default','simplex OM4'), 1622(11,'default','simplex OS1'), 1623(12,'default','simplex OS2'), 1624(13,'default','Cat.5 TP'), 1625(14,'default','Cat.6 TP'), 1626(15,'default','Cat.6a TP'), 1627(16,'default','Cat.7 TP'), 1628(17,'default','Cat.7a TP'), 1629(18,'default','12-fiber OM3'), 1630(19,'default','12-fiber OM4'), 1631(20,'default','10Gb/s CX4 coax'), 1632(21,'default','24-fiber OM3'), 1633(22,'default','24-fiber OM4'), 1634(23,'default','1Gb/s 50cm shielded'), 1635(24,'default','10Gb/s 24AWG twinax'), 1636(25,'default','10Gb/s 26AWG twinax'), 1637(26,'default','10Gb/s 28AWG twinax'), 1638(27,'default','10Gb/s 30AWG twinax'), 1639(999,'default','Cat.3 TP')"; 1640 1641 $query[] = "INSERT INTO PatchCableConnectorCompat (pctype_id, connector_id) VALUES 1642(1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1),(8,1),(9,1),(10,1),(11,1),(12,1), -- FC/PC 1643(1,2),(2,2),(3,2),(4,2),(5,2),(6,2),(7,2),(8,2),(9,2),(10,2),(11,2),(12,2), -- FC/APC 1644(1,3),(2,3),(3,3),(4,3),(5,3),(6,3),(7,3),(8,3),(9,3),(10,3),(11,3),(12,3), -- LC/PC 1645(1,4),(2,4),(3,4),(4,4),(5,4),(6,4),(7,4),(8,4),(9,4),(10,4),(11,4),(12,4), -- LC/APC 1646(1,9),(2,9),(3,9),(4,9),(5,9),(6,9),(7,9),(8,9),(9,9),(10,9),(11,9),(12,9), -- SC/PC 1647(1,10),(2,10),(3,10),(4,10),(5,10),(6,10),(7,10),(8,10),(9,10),(10,10),(11,10),(12,10), -- SC/APC 1648(1,11),(2,11),(3,11),(4,11),(5,11),(6,11),(7,11),(8,11),(9,11),(10,11),(11,11),(12,11), -- ST/PC 1649(1,12),(2,12),(3,12),(4,12),(5,12),(6,12),(7,12),(8,12),(9,12),(10,12),(11,12),(12,12), -- ST/APC 1650(13,13),(14,13),(15,13),(16,13),(17,13),(999,13), -- T568 1651(18,5),(19,5), -- MPO-12/PC 1652(18,6),(19,6), -- MPO-12/APC 1653(20,999), -- CX4 1654(21,7),(22,7), -- MPO-24/PC 1655(21,8),(22,8), -- MPO-24/APC 1656(23,14), -- SFP-1000 1657(24,15),(25,15),(26,15),(27,15) -- SFP+"; 1658 1659 $query[] = "INSERT INTO `PortInnerInterface` VALUES 1660(1,'hardwired'), 1661(2,'SFP-100'), 1662(3,'GBIC'), 1663(4,'SFP-1000'), 1664(5,'XENPAK'), 1665(6,'X2'), 1666(7,'XPAK'), 1667(8,'XFP'), 1668(9,'SFP+'), 1669(10,'QSFP+'), 1670(11,'CFP'), 1671(12,'CFP2'), 1672(13,'CPAK'), 1673(14,'CXP'), 1674(15,'QSFP28'), 1675(16,'SFP28')"; 1676 1677 $query[] = "INSERT INTO `PortOuterInterface` VALUES 1678(16,'AC-in'), 1679(17,'10Base2'), 1680(18,'10Base-T'), 1681(19,'100Base-TX'), 1682(24,'1000Base-T'), 1683(29,'RS-232 (RJ-45)'), 1684(30,'10GBase-SR'), 1685(31,'virtual bridge'), 1686(32,'sync serial'), 1687(33,'KVM (host)'), 1688(34,'1000Base-ZX'), 1689(35,'10GBase-ER'), 1690(36,'10GBase-LR'), 1691(37,'10GBase-LRM'), 1692(38,'10GBase-ZR'), 1693(39,'10GBase-LX4'), 1694(40,'10GBase-CX4'), 1695(41,'10GBase-KX4'), 1696(42, '1000Base-EX'), 1697(439,'dry contact'), 1698(440,'unknown'), 1699(446,'KVM (console)'), 1700(681,'RS-232 (DB-9)'), 1701(682,'RS-232 (DB-25)'), 1702(1077,'empty SFP-1000'), 1703(1078,'empty GBIC'), 1704(1079,'empty XENPAK'), 1705(1080,'empty X2'), 1706(1081,'empty XPAK'), 1707(1082,'empty XFP'), 1708(1084,'empty SFP+'), 1709(1087,'1000Base-T (Dell 1855)'), 1710(1088,'1000Base-BX40-D'), 1711(1089,'1000Base-BX40-U'), 1712(1090,'1000Base-BX80-D'), 1713(1091,'1000Base-BX80-U'), 1714(1195,'100Base-FX'), 1715(1196,'100Base-SX'), 1716(1197,'100Base-LX10'), 1717(1198,'100Base-BX10-D'), 1718(1199,'100Base-BX10-U'), 1719(1200,'100Base-EX'), 1720(1201,'100Base-ZX'), 1721(1202,'1000Base-SX'), 1722(1203,'1000Base-SX+'), 1723(1204,'1000Base-LX'), 1724(1205,'1000Base-LX10'), 1725(1206,'1000Base-BX10-D'), 1726(1207,'1000Base-BX10-U'), 1727(1208,'empty SFP-100'), 1728(1209,'1000Base-CWDM80-1470 (gray)'), 1729(1210,'1000Base-CWDM80-1490 (violet)'), 1730(1211,'1000Base-CWDM80-1510 (blue)'), 1731(1212,'1000Base-CWDM80-1530 (green)'), 1732(1213,'1000Base-CWDM80-1550 (yellow)'), 1733(1214,'1000Base-CWDM80-1570 (orange)'), 1734(1215,'1000Base-CWDM80-1590 (red)'), 1735(1216,'1000Base-CWDM80-1610 (brown)'), 1736(1217,'1000Base-DWDM80-61.42 (ITU 20)'), 1737(1218,'1000Base-DWDM80-60.61 (ITU 21)'), 1738(1219,'1000Base-DWDM80-59.79 (ITU 22)'), 1739(1220,'1000Base-DWDM80-58.98 (ITU 23)'), 1740(1221,'1000Base-DWDM80-58.17 (ITU 24)'), 1741(1222,'1000Base-DWDM80-57.36 (ITU 25)'), 1742(1223,'1000Base-DWDM80-56.55 (ITU 26)'), 1743(1224,'1000Base-DWDM80-55.75 (ITU 27)'), 1744(1225,'1000Base-DWDM80-54.94 (ITU 28)'), 1745(1226,'1000Base-DWDM80-54.13 (ITU 29)'), 1746(1227,'1000Base-DWDM80-53.33 (ITU 30)'), 1747(1228,'1000Base-DWDM80-52.52 (ITU 31)'), 1748(1229,'1000Base-DWDM80-51.72 (ITU 32)'), 1749(1230,'1000Base-DWDM80-50.92 (ITU 33)'), 1750(1231,'1000Base-DWDM80-50.12 (ITU 34)'), 1751(1232,'1000Base-DWDM80-49.32 (ITU 35)'), 1752(1233,'1000Base-DWDM80-48.51 (ITU 36)'), 1753(1234,'1000Base-DWDM80-47.72 (ITU 37)'), 1754(1235,'1000Base-DWDM80-46.92 (ITU 38)'), 1755(1236,'1000Base-DWDM80-46.12 (ITU 39)'), 1756(1237,'1000Base-DWDM80-45.32 (ITU 40)'), 1757(1238,'1000Base-DWDM80-44.53 (ITU 41)'), 1758(1239,'1000Base-DWDM80-43.73 (ITU 42)'), 1759(1240,'1000Base-DWDM80-42.94 (ITU 43)'), 1760(1241,'1000Base-DWDM80-42.14 (ITU 44)'), 1761(1242,'1000Base-DWDM80-41.35 (ITU 45)'), 1762(1243,'1000Base-DWDM80-40.56 (ITU 46)'), 1763(1244,'1000Base-DWDM80-39.77 (ITU 47)'), 1764(1245,'1000Base-DWDM80-38.98 (ITU 48)'), 1765(1246,'1000Base-DWDM80-38.19 (ITU 49)'), 1766(1247,'1000Base-DWDM80-37.40 (ITU 50)'), 1767(1248,'1000Base-DWDM80-36.61 (ITU 51)'), 1768(1249,'1000Base-DWDM80-35.82 (ITU 52)'), 1769(1250,'1000Base-DWDM80-35.04 (ITU 53)'), 1770(1251,'1000Base-DWDM80-34.25 (ITU 54)'), 1771(1252,'1000Base-DWDM80-33.47 (ITU 55)'), 1772(1253,'1000Base-DWDM80-32.68 (ITU 56)'), 1773(1254,'1000Base-DWDM80-31.90 (ITU 57)'), 1774(1255,'1000Base-DWDM80-31.12 (ITU 58)'), 1775(1256,'1000Base-DWDM80-30.33 (ITU 59)'), 1776(1257,'1000Base-DWDM80-29.55 (ITU 60)'), 1777(1258,'1000Base-DWDM80-28.77 (ITU 61)'), 1778(1259,'10GBase-ZR-DWDM80-61.42 (ITU 20)'), 1779(1260,'10GBase-ZR-DWDM80-60.61 (ITU 21)'), 1780(1261,'10GBase-ZR-DWDM80-59.79 (ITU 22)'), 1781(1262,'10GBase-ZR-DWDM80-58.98 (ITU 23)'), 1782(1263,'10GBase-ZR-DWDM80-58.17 (ITU 24)'), 1783(1264,'10GBase-ZR-DWDM80-57.36 (ITU 25)'), 1784(1265,'10GBase-ZR-DWDM80-56.55 (ITU 26)'), 1785(1266,'10GBase-ZR-DWDM80-55.75 (ITU 27)'), 1786(1267,'10GBase-ZR-DWDM80-54.94 (ITU 28)'), 1787(1268,'10GBase-ZR-DWDM80-54.13 (ITU 29)'), 1788(1269,'10GBase-ZR-DWDM80-53.33 (ITU 30)'), 1789(1270,'10GBase-ZR-DWDM80-52.52 (ITU 31)'), 1790(1271,'10GBase-ZR-DWDM80-51.72 (ITU 32)'), 1791(1272,'10GBase-ZR-DWDM80-50.92 (ITU 33)'), 1792(1273,'10GBase-ZR-DWDM80-50.12 (ITU 34)'), 1793(1274,'10GBase-ZR-DWDM80-49.32 (ITU 35)'), 1794(1275,'10GBase-ZR-DWDM80-48.51 (ITU 36)'), 1795(1276,'10GBase-ZR-DWDM80-47.72 (ITU 37)'), 1796(1277,'10GBase-ZR-DWDM80-46.92 (ITU 38)'), 1797(1278,'10GBase-ZR-DWDM80-46.12 (ITU 39)'), 1798(1279,'10GBase-ZR-DWDM80-45.32 (ITU 40)'), 1799(1280,'10GBase-ZR-DWDM80-44.53 (ITU 41)'), 1800(1281,'10GBase-ZR-DWDM80-43.73 (ITU 42)'), 1801(1282,'10GBase-ZR-DWDM80-42.94 (ITU 43)'), 1802(1283,'10GBase-ZR-DWDM80-42.14 (ITU 44)'), 1803(1284,'10GBase-ZR-DWDM80-41.35 (ITU 45)'), 1804(1285,'10GBase-ZR-DWDM80-40.56 (ITU 46)'), 1805(1286,'10GBase-ZR-DWDM80-39.77 (ITU 47)'), 1806(1287,'10GBase-ZR-DWDM80-38.98 (ITU 48)'), 1807(1288,'10GBase-ZR-DWDM80-38.19 (ITU 49)'), 1808(1289,'10GBase-ZR-DWDM80-37.40 (ITU 50)'), 1809(1290,'10GBase-ZR-DWDM80-36.61 (ITU 51)'), 1810(1291,'10GBase-ZR-DWDM80-35.82 (ITU 52)'), 1811(1292,'10GBase-ZR-DWDM80-35.04 (ITU 53)'), 1812(1293,'10GBase-ZR-DWDM80-34.25 (ITU 54)'), 1813(1294,'10GBase-ZR-DWDM80-33.47 (ITU 55)'), 1814(1295,'10GBase-ZR-DWDM80-32.68 (ITU 56)'), 1815(1296,'10GBase-ZR-DWDM80-31.90 (ITU 57)'), 1816(1297,'10GBase-ZR-DWDM80-31.12 (ITU 58)'), 1817(1298,'10GBase-ZR-DWDM80-30.33 (ITU 59)'), 1818(1299,'10GBase-ZR-DWDM80-29.55 (ITU 60)'), 1819(1300,'10GBase-ZR-DWDM80-28.77 (ITU 61)'), 1820(1316,'1000Base-T (Dell M1000e)'), 1821(1322,'AC-out'), 1822(1399,'DC'), 1823(1424,'1000Base-CX'), 1824(1425,'10GBase-ER-DWDM40-61.42 (ITU 20)'), 1825(1426,'10GBase-ER-DWDM40-60.61 (ITU 21)'), 1826(1427,'10GBase-ER-DWDM40-59.79 (ITU 22)'), 1827(1428,'10GBase-ER-DWDM40-58.98 (ITU 23)'), 1828(1429,'10GBase-ER-DWDM40-58.17 (ITU 24)'), 1829(1430,'10GBase-ER-DWDM40-57.36 (ITU 25)'), 1830(1431,'10GBase-ER-DWDM40-56.55 (ITU 26)'), 1831(1432,'10GBase-ER-DWDM40-55.75 (ITU 27)'), 1832(1433,'10GBase-ER-DWDM40-54.94 (ITU 28)'), 1833(1434,'10GBase-ER-DWDM40-54.13 (ITU 29)'), 1834(1435,'10GBase-ER-DWDM40-53.33 (ITU 30)'), 1835(1436,'10GBase-ER-DWDM40-52.52 (ITU 31)'), 1836(1437,'10GBase-ER-DWDM40-51.72 (ITU 32)'), 1837(1438,'10GBase-ER-DWDM40-50.92 (ITU 33)'), 1838(1439,'10GBase-ER-DWDM40-50.12 (ITU 34)'), 1839(1440,'10GBase-ER-DWDM40-49.32 (ITU 35)'), 1840(1441,'10GBase-ER-DWDM40-48.51 (ITU 36)'), 1841(1442,'10GBase-ER-DWDM40-47.72 (ITU 37)'), 1842(1443,'10GBase-ER-DWDM40-46.92 (ITU 38)'), 1843(1444,'10GBase-ER-DWDM40-46.12 (ITU 39)'), 1844(1445,'10GBase-ER-DWDM40-45.32 (ITU 40)'), 1845(1446,'10GBase-ER-DWDM40-44.53 (ITU 41)'), 1846(1447,'10GBase-ER-DWDM40-43.73 (ITU 42)'), 1847(1448,'10GBase-ER-DWDM40-42.94 (ITU 43)'), 1848(1449,'10GBase-ER-DWDM40-42.14 (ITU 44)'), 1849(1450,'10GBase-ER-DWDM40-41.35 (ITU 45)'), 1850(1451,'10GBase-ER-DWDM40-40.56 (ITU 46)'), 1851(1452,'10GBase-ER-DWDM40-39.77 (ITU 47)'), 1852(1453,'10GBase-ER-DWDM40-38.98 (ITU 48)'), 1853(1454,'10GBase-ER-DWDM40-38.19 (ITU 49)'), 1854(1455,'10GBase-ER-DWDM40-37.40 (ITU 50)'), 1855(1456,'10GBase-ER-DWDM40-36.61 (ITU 51)'), 1856(1457,'10GBase-ER-DWDM40-35.82 (ITU 52)'), 1857(1458,'10GBase-ER-DWDM40-35.04 (ITU 53)'), 1858(1459,'10GBase-ER-DWDM40-34.25 (ITU 54)'), 1859(1460,'10GBase-ER-DWDM40-33.47 (ITU 55)'), 1860(1461,'10GBase-ER-DWDM40-32.68 (ITU 56)'), 1861(1462,'10GBase-ER-DWDM40-31.90 (ITU 57)'), 1862(1463,'10GBase-ER-DWDM40-31.12 (ITU 58)'), 1863(1464,'10GBase-ER-DWDM40-30.33 (ITU 59)'), 1864(1465,'10GBase-ER-DWDM40-29.55 (ITU 60)'), 1865(1466,'10GBase-ER-DWDM40-28.77 (ITU 61)'), 1866(1469,'virtual port'), 1867(1588,'empty QSFP'), 1868(1589,'empty CFP2'), 1869(1590,'empty CPAK'), 1870(1591,'empty CXP'), 1871(1592,'empty SFP28'), 1872(1603,'1000Base-T (HP c-Class)'), 1873(1604,'100Base-TX (HP c-Class)'), 1874(1642,'10GBase-T'), 1875(1651,'25GBase-KR'), 1876(1652,'25GBase-T'), 1877(1653,'25GBase-CR'), 1878(1654,'25GBase-SR'), 1879(1655,'25GBase-LR'), 1880(1656,'25Gbase-ER'), 1881(1660,'40GBase-FR'), 1882(1661,'40GBase-KR4'), 1883(1662,'40GBase-ER4'), 1884(1663,'40GBase-SR4'), 1885(1664,'40GBase-LR4'), 1886(1668,'empty CFP'), 1887(1669,'100GBase-SR10'), 1888(1670,'100GBase-LR4'), 1889(1671,'100GBase-ER4'), 1890(1672,'100GBase-SR4'), 1891(1673,'100GBase-KR4'), 1892(1674,'100GBase-KP4'), 1893 1894(1675,'100GBase-LR10'), 1895(1676,'100GBase-ER10'), 1896(1677,'100GBase-CR4'), 1897(1678,'100GBase-CR10'), 1898 1899(1999,'10GBase-KR') 1900"; 1901// Add new outer interface types with id < 2000. Values 2000 and up are for 1902// users' local types. 1903 1904 $query[] = "INSERT INTO PatchCableOIFCompat (pctype_id, oif_id) VALUES 1905(13,18),(14,18),(15,18),(16,18),(17,18),(999,18), -- 10Base-T: Cat.3+ TP 1906(11,1198),(12,1198),(11,1199),(12,1199), -- 100Base-BX10: 1xSMF 1907(5,1197),(6,1197), -- 100Base-LX10: 2xSMF 1908(5,1200),(6,1200), -- 100Base-EX: 2xSMF 1909(5,1201),(6,1201), -- 100Base-ZX: 2xSMF 1910(1,1195),(2,1195),(3,1195),(4,1195), -- 100Base-FX: 2xMMF 1911(1,1196),(2,1196),(3,1196),(4,1196), -- 100Base-SX: 2xMMF 1912(13,19),(14,19),(15,19),(16,19),(17,19), -- 100Base-TX: Cat.5+ TP 1913(11,1206),(12,1206),(11,1207),(12,1207), -- 1000Base-BX10: 1xSMF 1914(11,1088),(12,1088),(11,1089),(12,1089), -- 1000Base-BX40: 1xSMF 1915(11,1090),(12,1090),(11,1091),(12,1091), -- 1000Base-BX80: 1xSMF 1916(5,1204),(6,1204), -- 1000Base-LX: 2xSMF 1917(5,1205),(6,1205), -- 1000Base-LX10: 2xSMF 1918(1,1202),(2,1202),(3,1202),(4,1202), -- 1000Base-SX: 2xMMF 1919(1,1203),(2,1203),(3,1203),(4,1203), -- 1000Base-SX+: 2xMMF 1920(13,24),(14,24),(15,24),(16,24),(17,24), -- 1000Base-T: Cat.5+ TP 1921(5,34),(6,34), -- 1000Base-ZX: 2xSMF 1922(23,1077), -- 1000Base direct attach: shielded 1923(1,30),(2,30),(3,30),(4,30), -- 10GBase-SR: 2xMMF 1924(5,36),(6,36), -- 10GBase-LR: 2xSMF 1925(5,35),(6,35), -- 10GBase-ER: 2xSMF 1926(5,38),(6,38), -- 10GBase-ZR: 2xSMF 1927(1,39),(2,39),(3,39),(4,39),(5,39),(6,39), -- 10GBase-LX4: 2xMMF/2xSMF 1928(1,37),(2,37),(3,37),(4,37), -- 10GBase-LRM: 2xMMF 1929(14,1642),(15,1642),(16,1642),(17,1642), -- 10GBase-T: Cat.6+ TP 1930(20,40), -- 10GBase-CX4: coax 1931(24,1084),(25,1084),(26,1084),(27,1084), -- 10GBase direct attach: twinax 1932(18,1663),(19,1663), -- 40GBase-SR4: 8xMMF 1933(5,1664),(6,1664), -- 40GBase-LR4: 2xSMF 1934(5,1662),(6,1662), -- 40GBase-ER4: 2xSMF 1935(5,1660),(6,1660), -- 40GBase-FR: 2xSMF 1936(21,1669),(22,1669), -- 100GBase-SR10: 20xMMF 1937(18,1672),(19,1672), -- 100GBase-SR4: 8xMMF 1938(5,1670),(6,1670), -- 100GBase-LR4: 2xSMF 1939(5,1671),(6,1671), -- 100GBase-ER4: 2xSMF 1940(5,1675),(6,1675), -- 100GBase-LR10: 2xSMF 1941(5,1676),(6,1676) -- 100GBase-ER10: 2xSMF"; 1942 1943 $query[] = "INSERT INTO `ObjectParentCompat` VALUES 1944(3,13), 1945(4,1504), 1946(4,1507), 1947(1397,1398), 1948(1502,4), 1949(1503,8), 1950(1505,4), 1951(1505,1504), 1952(1505,1506), 1953(1505,1507), 1954(1506,4), 1955(1506,1504), 1956(1787,4), 1957(1787,8), 1958(1787,1502)"; 1959 1960 $query[] = "INSERT INTO `PortInterfaceCompat` VALUES 1961-- SFP-100: empty SFP-100, 100Base-FX, 100Base-SX, 100Base-LX10, 100Base-BX10-D, 100Base-BX10-U, 100Base-EX, 100Base-ZX 1962(2,1208),(2,1195),(2,1196),(2,1197),(2,1198),(2,1199),(2,1200),(2,1201), 1963-- GBIC: empty GBIC, 1000Base-T, 1000Base-ZX, 1000Base-EX, 1000Base-SX, 1000Base-SX+, 1000Base-LX, 1000Base-LX10, 1000Base-BX10-D, 1000Base-BX10-U 1964(3,1078),(3,24),(3,34),(3,42),(3,1202),(3,1203),(3,1204),(3,1205),(3,1206),(3,1207), 1965-- SFP-1000: empty SFP-1000, 1000Base-T, 1000Base-ZX, 1000Base-EX, 1000Base-SX, 1000Base-SX+, 1000Base-LX, 1000Base-LX10, 1000Base-BX10-D, 1000Base-BX10-U 1966(4,1077),(4,24),(4,34),(4,42),(4,1202),(4,1203),(4,1204),(4,1205),(4,1206),(4,1207), 1967-- SFP-1000: 1000Base-BX40-D, 1000Base-BX40-U, 1000Base-BX80-D, 1000Base-BX80-U 1968(4,1088),(4,1089),(4,1090),(4,1091), 1969-- XENPAK: empty XENPAK, 10GBase-SR, 10GBase-ER, 10GBase-LR, 10GBase-LRM, 10GBase-ZR, 10GBase-LX4, 10GBase-CX4 1970(5,1079),(5,30),(5,35),(5,36),(5,37),(5,38),(5,39),(5,40), 1971-- X2: empty X2, 10GBase-SR, 10GBase-ER, 10GBase-LR, 10GBase-LRM, 10GBase-ZR, 10GBase-LX4, 10GBase-CX4 1972(6,1080),(6,30),(6,35),(6,36),(6,37),(6,38),(6,39),(6,40), 1973-- XPAK: empty XPAK, 10GBase-SR, 10GBase-ER, 10GBase-LR, 10GBase-LRM, 10GBase-ZR, 10GBase-LX4, 10GBase-CX4 1974(7,1081),(7,30),(7,35),(7,36),(7,37),(7,38),(7,39),(7,40), 1975-- XFP: empty XFP, 10GBase-SR, 10GBase-ER, 10GBase-LR, 10GBase-LRM, 10GBase-ZR, 10GBase-LX4, 10GBase-CX4 1976(8,1082),(8,30),(8,35),(8,36),(8,37),(8,38),(8,39),(8,40), 1977-- SFP+: empty SFP+, 10GBase-SR, 10GBase-ER, 10GBase-LR, 10GBase-LRM, 10GBase-ZR, 10GBase-LX4, 10GBase-CX4 1978(9,1084),(9,30),(9,35),(9,36),(9,37),(9,38),(9,39),(9,40), 1979-- QSFP+: empty QSFP, 40GBase-FR, 40GBase-ER4, 40GBase-SR4, 40GBase-LR4 1980(10,1588),(10,1660),(10,1662),(10,1663),(10,1664), 1981-- CFP: empty CFP, 100GBase-SR10, 100GBase-LR4, 100GBase-ER4, 100GBase-SR4, 100GBase-KR4, 100GBase-KP4, 100GBase-LR10, 100GBase-ER10 1982(11,1668),(11,1669),(11,1670),(11,1671),(11,1672),(11,1673),(11,1674),(11,1675),(11,1676), 1983-- CFP2: empty CFP2, 100GBase-SR10, 100GBase-LR4, 100GBase-ER4, 100GBase-SR4, 100GBase-KR4, 100GBase-KP4, 100GBase-LR10, 100GBase-ER10 1984(12,1589),(12,1669),(12,1670),(12,1671),(12,1672),(12,1673),(12,1674),(12,1675),(12,1676), 1985-- CPAK: empty CPAK, 100GBase-SR10, 100GBase-LR4, 100GBase-ER4, 100GBase-SR4, 100GBase-KR4, 100GBase-KP4, 100GBase-LR10, 100GBase-ER10 1986(13,1590),(13,1669),(13,1670),(13,1671),(13,1672),(13,1673),(13,1674),(13,1675),(13,1676), 1987-- CXP: empty CXP, 100GBase-CR4, 100GBase-CR10 1988(14,1591),(14,1677),(14,1678), 1989-- QSFP28: empty QSFP, 40GBase-FR, 40GBase-ER4, 40GBase-SR4, 40GBase-LR4, 100GBase-LR4, 100GBase-ER4, 100GBase-SR4, 100GBase-KR4, 100GBase-KP4 1990(15,1588),(15,1660),(15,1662),(15,1663),(15,1664),(15,1670),(15,1671),(15,1672),(15,1673),(15,1674), 1991-- SFP28: empty SFP28, 25Gbase-KR, 25GBase-CR, 25Gbase-SR, 25GBase-LR, 25GBase-ER 1992(16,1592),(16,1651),(16,1653),(16,1654),(16,1655),(16,1656), 1993-- SFP28: 10GBase-SR, 10GBase-ER, 10GBase-LR, 10GBase-LRM, 10GBase-ZR, 10GBase-LX4, 10GBase-CX4 1994(16,30),(16,35),(16,36),(16,37),(16,38),(16,39),(16,40), 1995-- hardwired: AC-in, 100Base-TX, 1000Base-T, RS-232 (RJ-45), virtual bridge, KVM (host), KVM (console), RS-232 (DB-9), RS-232 (DB-25), AC-out, DC, virtual port 1996(1,16),(1,19),(1,24),(1,29),(1,31),(1,33),(1,446),(1,681),(1,682),(1,1322),(1,1399),(1,1469)"; 1997 1998 $query[] = "INSERT INTO `PortCompat` (`type1`, `type2`) VALUES 1999(17,17), 2000(18,18), 2001(19,19), 2002(24,24), 2003(18,19), 2004(18,24), 2005(19,24), 2006(29,29), 2007(30,30), 2008(16,1322), 2009(29,681), 2010(29,682), 2011(32,32), 2012(33,446), 2013(34,34), 2014(35,35), 2015(36,36), 2016(37,37), 2017(38,38), 2018(39,39), 2019(40,40), 2020(41,41), 2021(42,42), 2022(439,439), 2023(681,681), 2024(681,682), 2025(682,682), 2026(1077,1077), 2027(1084,1084), 2028(1087,1087), 2029(1088,1089), 2030(1090,1091), 2031(1195,1195), 2032(1196,1196), 2033(1197,1197), 2034(1198,1199), 2035(1200,1200), 2036(1201,1201), 2037(1202,1202), 2038(1203,1203), 2039(1204,1204), 2040(1205,1205), 2041(1206,1207), 2042(1209,1209), 2043(1210,1210), 2044(1211,1211), 2045(1212,1212), 2046(1213,1213), 2047(1214,1214), 2048(1215,1215), 2049(1216,1216), 2050(1217,1217), 2051(1218,1218), 2052(1219,1219), 2053(1220,1220), 2054(1221,1221), 2055(1222,1222), 2056(1223,1223), 2057(1224,1224), 2058(1225,1225), 2059(1226,1226), 2060(1227,1227), 2061(1228,1228), 2062(1229,1229), 2063(1230,1230), 2064(1231,1231), 2065(1232,1232), 2066(1233,1233), 2067(1234,1234), 2068(1235,1235), 2069(1236,1236), 2070(1237,1237), 2071(1238,1238), 2072(1239,1239), 2073(1240,1240), 2074(1241,1241), 2075(1242,1242), 2076(1243,1243), 2077(1244,1244), 2078(1245,1245), 2079(1246,1246), 2080(1247,1247), 2081(1248,1248), 2082(1249,1249), 2083(1250,1250), 2084(1251,1251), 2085(1252,1252), 2086(1253,1253), 2087(1254,1254), 2088(1255,1255), 2089(1256,1256), 2090(1257,1257), 2091(1258,1258), 2092(1259,1259), 2093(1260,1260), 2094(1261,1261), 2095(1262,1262), 2096(1263,1263), 2097(1264,1264), 2098(1265,1265), 2099(1266,1266), 2100(1267,1267), 2101(1268,1268), 2102(1269,1269), 2103(1270,1270), 2104(1271,1271), 2105(1272,1272), 2106(1273,1273), 2107(1274,1274), 2108(1275,1275), 2109(1276,1276), 2110(1277,1277), 2111(1278,1278), 2112(1279,1279), 2113(1280,1280), 2114(1281,1281), 2115(1282,1282), 2116(1283,1283), 2117(1284,1284), 2118(1285,1285), 2119(1286,1286), 2120(1287,1287), 2121(1288,1288), 2122(1289,1289), 2123(1290,1290), 2124(1291,1291), 2125(1292,1292), 2126(1293,1293), 2127(1294,1294), 2128(1295,1295), 2129(1296,1296), 2130(1297,1297), 2131(1298,1298), 2132(1299,1299), 2133(1300,1300), 2134(1316,1316), 2135(1424,1424), 2136(1425,1425), 2137(1426,1426), 2138(1427,1427), 2139(1428,1428), 2140(1429,1429), 2141(1430,1430), 2142(1431,1431), 2143(1432,1432), 2144(1433,1433), 2145(1434,1434), 2146(1435,1435), 2147(1436,1436), 2148(1437,1437), 2149(1438,1438), 2150(1439,1439), 2151(1440,1440), 2152(1441,1441), 2153(1442,1442), 2154(1443,1443), 2155(1444,1444), 2156(1445,1445), 2157(1446,1446), 2158(1447,1447), 2159(1448,1448), 2160(1449,1449), 2161(1450,1450), 2162(1451,1451), 2163(1452,1452), 2164(1453,1453), 2165(1454,1454), 2166(1455,1455), 2167(1456,1456), 2168(1457,1457), 2169(1458,1458), 2170(1459,1459), 2171(1460,1460), 2172(1461,1461), 2173(1462,1462), 2174(1463,1463), 2175(1464,1464), 2176(1465,1465), 2177(1466,1466), 2178(1469,1469), 2179(1399,1399), 2180(1588,1588), 2181(1588,1589), 2182(1588,1590), 2183(1589,1589), 2184(1589,1590), 2185(1590,1590), 2186(1591,1591), 2187(1592,1592), 2188(1592,1084), 2189(1603,1603), 2190(1651,1651), 2191(1652,1652), 2192(1653,1653), 2193(1654,1654), 2194(1655,1655), 2195(1656,1656), 2196(1660,1660), 2197(1661,1661), 2198(1662,1662), 2199(1663,1663), 2200(1664,1664), 2201(1668,1668), 2202(1669,1669), 2203(1670,1670), 2204(1671,1671), 2205(1672,1672), 2206(1673,1673), 2207(1674,1674), 2208(1675,1675), 2209(1676,1676), 2210(1677,1677), 2211(1678,1678), 2212(1642,1642), 2213(1999,1999)"; 2214 2215 // make PortCompat symmetric (insert missing reversed-order pairs) 2216 $query[] = "INSERT INTO PortCompat SELECT pc1.type2, pc1.type1 FROM PortCompat pc1 LEFT JOIN PortCompat pc2 ON pc1.type1 = pc2.type2 AND pc1.type2 = pc2.type1 WHERE pc2.type1 IS NULL"; 2217 2218 $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, is_userdefined, description) VALUES 2219('IPV4_TREE_SHOW_UNALLOCATED', 'yes', 'string', 'no', 'no', 'yes', 'Show unallocated networks in IPv4 tree'), 2220('MASSCOUNT','8','uint','no','no','yes','"Fast" form is this many records tall'), 2221('MAXSELSIZE','30','uint','no','no','yes','<SELECT> lists height'), 2222('enterprise','MyCompanyName','string','no','no','no','Organization name'), 2223('ROW_SCALE','2','uint','no','no','yes','Picture scale for rack row display'), 2224('IPV4_ADDRS_PER_PAGE','256','uint','no','no','yes','IPv4 addresses per page'), 2225('DEFAULT_RACK_HEIGHT','42','uint','yes','no','yes','Default rack height'), 2226('DEFAULT_SLB_VS_PORT','','uint','yes','no','yes','Default port of SLB virtual service'), 2227('DEFAULT_SLB_RS_PORT','','uint','yes','no','yes','Default port of SLB real server'), 2228('DETECT_URLS','no','string','yes','no','yes','Detect URLs in text fields'), 2229('RACK_PRESELECT_THRESHOLD','1','uint','no','no','yes','Rack pre-selection threshold'), 2230('DEFAULT_IPV4_RS_INSERVICE','no','string','no','no','yes','Inservice status for new SLB real servers'), 2231('AUTOPORTS_CONFIG','4 = 1*33*kvm + 2*24*eth%u;15 = 1*446*kvm','string','yes','no','no','AutoPorts configuration'), 2232('DEFAULT_OBJECT_TYPE','4','uint','yes','no','yes','Default object type for new objects'), 2233('SHOW_EXPLICIT_TAGS','yes','string','no','no','yes','Show explicit tags'), 2234('SHOW_IMPLICIT_TAGS','yes','string','no','no','yes','Show implicit tags'), 2235('SHOW_AUTOMATIC_TAGS','no','string','no','no','yes','Show automatic tags'), 2236('IPV4_AUTO_RELEASE','1','uint','no','no','yes','Auto-release IPv4 addresses on allocation'), 2237('SHOW_LAST_TAB','yes','string','yes','no','yes','Remember last tab shown for each page'), 2238('EXT_IPV4_VIEW','yes','string','no','no','yes','Extended IPv4 view'), 2239('TREE_THRESHOLD','25','uint','yes','no','yes','Tree view auto-collapse threshold'), 2240('IPV4_JAYWALK','no','string','no','no','no','Enable IPv4 address allocations w/o covering network'), 2241('ADDNEW_AT_TOP','yes','string','no','no','yes','Render \"add new\" line at top of the list'), 2242('IPV4_TREE_SHOW_USAGE','no','string','no','no','yes','Show address usage in IPv4 tree'), 2243('PREVIEW_TEXT_MAXCHARS','10240','uint','yes','no','yes','Max chars for text file preview'), 2244('PREVIEW_TEXT_ROWS','25','uint','yes','no','yes','Rows for text file preview'), 2245('PREVIEW_TEXT_COLS','80','uint','yes','no','yes','Columns for text file preview'), 2246('PREVIEW_IMAGE_MAXPXS','320','uint','yes','no','yes','Max pixels per axis for image file preview'), 2247('VENDOR_SIEVE','','string','yes','no','yes','Vendor sieve configuration'), 2248('IPV4LB_LISTSRC','false','string','yes','no','no','List source: IPv4 load balancers'), 2249('IPV4OBJ_LISTSRC','not ({\$typeid_3} or {\$typeid_9} or {\$typeid_10} or {\$typeid_11})','string','yes','no','no','List source: IPv4-enabled objects'), 2250('IPV4NAT_LISTSRC','{\$typeid_4} or {\$typeid_7} or {\$typeid_8} or {\$typeid_798}','string','yes','no','no','List source: IPv4 NAT performers'), 2251('ASSETWARN_LISTSRC','{\$typeid_4} or {\$typeid_7} or {\$typeid_8}','string','yes','no','no','List source: objects for that asset tag should be set'), 2252('NAMEWARN_LISTSRC','{\$typeid_4} or {\$typeid_7} or {\$typeid_8}','string','yes','no','no','List source: objects for that common name should be set'), 2253('RACKS_PER_ROW','12','uint','yes','no','yes','Racks per row'), 2254('FILTER_PREDICATE_SIEVE','','string','yes','no','yes','Predicate sieve regex(7)'), 2255('FILTER_DEFAULT_ANDOR','and','string','no','no','yes','Default list filter boolean operation (or/and)'), 2256('FILTER_SUGGEST_ANDOR','yes','string','no','no','yes','Suggest and/or selector in list filter'), 2257('FILTER_SUGGEST_TAGS','yes','string','no','no','yes','Suggest tags in list filter'), 2258('FILTER_SUGGEST_PREDICATES','yes','string','no','no','yes','Suggest predicates in list filter'), 2259('FILTER_SUGGEST_EXTRA','yes','string','no','no','yes','Suggest extra expression in list filter'), 2260('DEFAULT_SNMP_COMMUNITY','public','string','no','no','no','Default SNMP Community string'), 2261('IPV4_ENABLE_KNIGHT','yes','string','no','no','yes','Enable IPv4 knight feature'), 2262('TAGS_TOPLIST_SIZE','50','uint','yes','no','yes','Tags top list size'), 2263('TAGS_QUICKLIST_SIZE','20','uint','no','no','yes','Tags quick list size'), 2264('TAGS_QUICKLIST_THRESHOLD','50','uint','yes','no','yes','Tags quick list threshold'), 2265('ENABLE_MULTIPORT_FORM','no','string','no','no','yes','Enable \"Add/update multiple ports\" form'), 2266('DEFAULT_PORT_IIF_ID','1','uint','no','no','no','Default port inner interface ID'), 2267('DEFAULT_PORT_OIF_IDS','1=24; 3=1078; 4=1077; 5=1079; 6=1080; 8=1082; 9=1084; 10=1588; 11=1668; 12=1589; 13=1590; 14=1591; 15=1588; 16=1592','string','no','no','no','Default port outer interface IDs'), 2268('IPV4_TREE_RTR_AS_CELL','no','string','no','no','yes','Show full router info for each network in IPv4 tree view'), 2269('PROXIMITY_RANGE','0','uint','yes','no','yes','Proximity range (0 is current rack only)'), 2270('VLANSWITCH_LISTSRC', '', 'string', 'yes', 'no', 'yes', 'List of VLAN running switches'), 2271('VLANNET_LISTSRC', '', 'string', 'yes', 'no', 'yes', 'List of VLAN-related IPv4/IPv6 networks'), 2272('IPV4_TREE_SHOW_VLAN','yes','string','no','no','yes','Show VLAN for each network in IPv4 tree'), 2273('DEFAULT_VDOM_ID','','uint','yes','no','yes','Default VLAN domain ID'), 2274('DEFAULT_VST_ID','','uint','yes','no','yes','Default VLAN switch template ID'), 2275('8021Q_DEPLOY_MINAGE','300','uint','no','no','no','802.1Q deploy minimum age'), 2276('8021Q_DEPLOY_MAXAGE','3600','uint','no','no','no','802.1Q deploy maximum age'), 2277('8021Q_DEPLOY_RETRY','10800','uint','no','no','no','802.1Q deploy retry timer'), 2278('8021Q_WRI_AFTER_CONFT_LISTSRC','false','string','no','no','no','802.1Q: save device configuration after deploy (RackCode)'), 2279('8021Q_INSTANT_DEPLOY','no','string','no','no','yes','802.1Q: instant deploy'), 2280('STATIC_FILTER','yes','string','no','no','yes','Enable Filter Caching'), 2281('ENABLE_BULKPORT_FORM','yes','string','no','no','yes','Enable \"Bulk Port\" form'), 2282('CDP_RUNNERS_LISTSRC', '', 'string', 'yes', 'no', 'no', 'List of devices running CDP'), 2283('LLDP_RUNNERS_LISTSRC', '', 'string', 'yes', 'no', 'no', 'List of devices running LLDP'), 2284('SHRINK_TAG_TREE_ON_CLICK','yes','string','no','no','yes','Dynamically hide useless tags in tagtree'), 2285('MAX_UNFILTERED_ENTITIES','0','uint','no','no','yes','Max item count to display on unfiltered result page'), 2286('SYNCDOMAIN_MAX_PROCESSES','0','uint','yes','no', 'no', 'How many worker proceses syncdomain cron script should create'), 2287('PORT_EXCLUSION_LISTSRC','{\$typeid_3} or {\$typeid_10} or {\$typeid_11} or {\$typeid_1505} or {\$typeid_1506}','string','yes','no','no','List source: objects without ports'), 2288('FILTER_RACKLIST_BY_TAGS','yes','string','yes','no','yes','Rackspace: show only racks matching the current object\'s tags'), 2289('MGMT_PROTOS','ssh: {\$typeid_4}; telnet: {\$typeid_8}','string','yes','no','yes','Mapping of management protocol to devices'), 2290('SYNC_8021Q_LISTSRC','','string','yes','no','no','List of VLAN switches sync is enabled on'), 2291('QUICK_LINK_PAGES','depot,ipv4space,rackspace','string','yes','no','yes','List of pages to display in quick links'), 2292('VIRTUAL_OBJ_CSV','1504,1505,1506,1507','string','no','no','no','List source: virtual objects'), 2293('DATETIME_ZONE','UTC','string','yes','no','yes','Timezone to use for displaying/calculating dates'), 2294('DATETIME_FORMAT','%Y-%m-%d','string','no','no','yes','PHP strftime() format for date+time'), 2295('DATEONLY_FORMAT','%Y-%m-%d','string','no','no','yes','PHP strftime() format for dates'), 2296('SEARCH_DOMAINS','','string','yes','no','yes','DNS domain list (comma-separated) to search in FQDN attributes'), 2297('8021Q_EXTSYNC_LISTSRC','false','string','yes','no','no','List source: objects with extended 802.1Q sync'), 2298('8021Q_MULTILINK_LISTSRC','false','string','yes','no','no','List source: IPv4/IPv6 networks allowing multiple VLANs from same domain'), 2299('REVERSED_RACKS_LISTSRC', 'false', 'string', 'yes', 'no', 'no', 'List of racks with reversed (top to bottom) units order'), 2300('NEAREST_RACKS_CHECKBOX', 'yes', 'string', 'yes', 'no', 'yes', 'Enable nearest racks in port list filter by default'), 2301('SHOW_OBJECTTYPE', 'yes', 'string', 'no', 'no', 'yes', 'Show object type column on depot page'), 2302('OBJECTLOG_PREVIEW_ENTRIES','5','uint','no','no','yes','Object log preview maximum entries (0 disables the preview)'), 2303('DB_VERSION','${db_version}','string','no','yes','no','Database version.')"; 2304 2305 $query[] = "INSERT INTO `Script` VALUES ('RackCode','allow {\$userid_1}')"; 2306 2307 $tmpstr = 'INSERT INTO VLANValidID (vlan_id) VALUES '; 2308 $sep = ''; 2309 for ($i = 1; $i <= 4094; $i++) 2310 { 2311 $tmpstr .= "${sep}(${i})"; 2312 $sep = ', '; 2313 } 2314 $query[] = $tmpstr; 2315 unset ($i); 2316 unset ($sep); 2317 unset ($tmpstr); 2318 2319 return $query; 2320 } 2321} 2322