r4781 declare trunk "0.19.9"
[racktables] / wwwroot / inc / snmp.php
index e0a5eec..1b295fe 100644 (file)
@@ -25,7 +25,7 @@ $iftable_processors['catalyst-chassis-25-to-26-100FX/MT-RJ'] = array
 (
        'pattern' => '@^FastEthernet([[:digit:]]+/)?(25|26)$@',
        'replacement' => 'fa\\1\\2',
-       'dict_key' => 1083,
+       'dict_key' => 1195,
        'label' => '\\2',
        'try_next_proc' => FALSE,
 );
@@ -219,6 +219,51 @@ $iftable_processors['nexus-any-10000SFP+'] = array
        'try_next_proc' => FALSE,
 );
 
+$iftable_processors['ftos-any-1000T'] = array
+(
+       'pattern' => '@^GigabitEthernet 0/(\d+)$@',
+       'replacement' => 'gi0/\\1',
+       'dict_key' => '1-24',
+       'label' => '\\1',
+       'try_next_proc' => FALSE,
+);
+
+$iftable_processors['ftos-44-to-47-1000SFP'] = array
+(
+       'pattern' => '@^GigabitEthernet 0/(44|45|46|47)$@',
+       'replacement' => 'gi0/\\1',
+       'dict_key' => '4-1077',
+       'label' => '\\1',
+       'try_next_proc' => FALSE,
+);
+
+$iftable_processors['ftos-any-10000SFP+'] = array
+(
+       'pattern' => '@^TenGigabitEthernet 0/(\d+)$@',
+       'replacement' => 'te0/\\1',
+       'dict_key' => '9-1084',
+       'label' => '\\1',
+       'try_next_proc' => FALSE,
+);
+
+$iftable_processors['ftos-any-QSFP+'] = array
+(
+       'pattern' => '@^fortyGigE 0/(\d+)$@',
+       'replacement' => 'fo0/\\1',
+       'dict_key' => '10-1588',
+       'label' => '\\1',
+       'try_next_proc' => FALSE,
+);
+
+$iftable_processors['ftos-mgmt'] = array
+(
+       'pattern' => '@^ManagementEthernet 0/0$@',
+       'replacement' => 'ma0/0',
+       'dict_key' => '1-19',
+       'label' => 'ethernet',
+       'try_next_proc' => FALSE,
+);
+
 $iftable_processors['nexus-mgmt'] = array
 (
        'pattern' => '@^(mgmt[[:digit:]]+)$@',
@@ -255,6 +300,15 @@ $iftable_processors['procurve-45-to-48-combo-1000SFP'] = array
        'try_next_proc' => TRUE,
 );
 
+$iftable_processors['procurve-21-to-24-combo-1000SFP'] = array
+(
+       'pattern' => '@^(21|22|23|24)$@',
+       'replacement' => '\\1',
+       'dict_key' => '4-1077',
+       'label' => '\\1',
+       'try_next_proc' => TRUE,
+);
+
 $iftable_processors['procurve-modular-100TX'] = array
 (
        'pattern' => '@^([A-Z][[:digit:]]+)$@',
@@ -282,6 +336,15 @@ $iftable_processors['procurve-49-to-50-1000T'] = array
        'try_next_proc' => FALSE,
 );
 
+$iftable_processors['procurve-51-to-52-1000SFP'] = array
+(
+       'pattern' => '@^(51|52)$@',
+       'replacement' => '\\1',
+       'dict_key' => '4-1077',
+       'label' => '\\1',
+       'try_next_proc' => FALSE,
+);
+
 $iftable_processors['netgear-chassis-any-1000T'] = array
 (
        'pattern' => '@^Unit: 1 Slot: 0 Port: ([[:digit:]]+) Gigabit - Level$@',
@@ -327,6 +390,60 @@ $iftable_processors['smc-combo-45-to-48'] = array
        'try_next_proc' => TRUE,
 );
 
+$iftable_processors['smc2-combo-21-to-24'] = array
+(
+       'pattern' => '@^Port #(21|22|23|24)$@',
+       'replacement' => '\\1',
+       'dict_key' => '4-1077',
+       'label' => '\\1',
+       'try_next_proc' => TRUE,
+);
+
+$iftable_processors['smc2-combo-23-to-24'] = array
+(
+       'pattern' => '@^Port #(23|24)$@',
+       'replacement' => '\\1',
+       'dict_key' => '4-1077',
+       'label' => '\\1',
+       'try_next_proc' => TRUE,
+);
+
+$iftable_processors['smc2-combo-25-to-28'] = array
+(
+       'pattern' => '@^Port #(25|26|27|28)$@',
+       'replacement' => '\\1',
+       'dict_key' => '4-1077',
+       'label' => '\\1',
+       'try_next_proc' => TRUE,
+);
+
+$iftable_processors['smc2-1000T-25-to-28'] = array
+(
+       'pattern' => '@^Port #(25|26|27|28)$@',
+       'replacement' => '\\1',
+       'dict_key' => '1-24',
+       'label' => '\\1',
+       'try_next_proc' => FALSE,
+);
+
+$iftable_processors['smc2-any-1000T'] = array
+(
+       'pattern' => '@^Port #(\d+)$@',
+       'replacement' => '\\1',
+       'dict_key' => '1-24',
+       'label' => '\\1',
+       'try_next_proc' => FALSE,
+);
+
+$iftable_processors['smc2-any-100TX'] = array
+(
+       'pattern' => '@^Port #(\d+)$@',
+       'replacement' => '\\1',
+       'dict_key' => '1-19',
+       'label' => '\\1',
+       'try_next_proc' => FALSE,
+);
+
 $iftable_processors['juniper-DPCE-R-4XGE-XFP'] = array
 (
        'pattern' => '@^xe-([[:digit:]]+)/([[:digit:]]+/[[:digit:]]+)$@',
@@ -554,6 +671,24 @@ $iftable_processors['summit-management'] = array
        'try_next_proc' => FALSE,
 );
 
+$iftable_processors['C3KX-NM-10000'] = array
+(
+       'pattern' => '@^TenGigabitEthernet1/(\d+)$@',
+       'replacement' => 'te1/\\1',
+       'dict_key' => '9-1084',
+       'label' => 'NM TE\\1',
+       'try_next_proc' => FALSE,
+);
+
+$iftable_processors['C3KX-NM-1000'] = array
+(
+       'pattern' => '@^GigabitEthernet1/(\d+)$@',
+       'replacement' => 'gi1/\\1',
+       'dict_key' => '4-1077',
+       'label' => 'NM G\\1',
+       'try_next_proc' => FALSE,
+);
+
 global $known_switches;
 $known_switches = array // key is system OID w/o "enterprises" prefix
 (
@@ -575,12 +710,42 @@ $known_switches = array // key is system OID w/o "enterprises" prefix
                'text' => 'WS-C2950C-24: 24 RJ-45/10-100TX + 2 MT-RJ/100FX fiber',
                'processors' => array ('catalyst-chassis-25-to-26-100FX/MT-RJ', 'catalyst-chassis-any-100TX'),
        ),
+       '9.1.559' => array
+       (
+               'dict_key' => 387,
+               'text' => 'WS-C2950T-48: 48 RJ-45/10-100TX + 2 1000T uplinks',
+               'processors' => array ('catalyst-chassis-uplinks-1000T', 'catalyst-chassis-any-100TX'),
+       ),
        '9.1.695' => array
        (
-               'dict_key' => 140,
+               'dict_key' => 1590,
                'text' => 'WS-C2960-48TC-L: 48 RJ-45/10-100TX + 2 combo-gig',
                'processors' => array ('catalyst-chassis-1-to-2-combo-1000SFP', 'catalyst-chassis-any-1000T', 'catalyst-chassis-any-100TX'),
        ),
+       '9.1.793' => array
+       (
+               'dict_key' => 1575,
+               'text' => 'WS-C3560E-24TD: 24 RJ-45/10-100-1000T(X) + 2 X2/10000 w/TwinGig + OOBM',
+               'processors' => array
+               (
+                       'catalyst-chassis-25-to-28-1000SFP', // TwinGig
+                       'catalyst-chassis-any-1000T',
+                       'catalyst-chassis-uplinks-10000X2',
+                       'catalyst-chassis-mgmt',
+               ),
+       ),
+       '9.1.794' => array
+       (
+               'dict_key' => 1574,
+               'text' => 'WS-C3560E-48TD: 48 RJ-45/10-100-1000T(X) + 2 X2/10000 w/TwinGig + OOBM',
+               'processors' => array
+               (
+                       'catalyst-chassis-49-to-52-1000SFP', // TwinGig
+                       'catalyst-chassis-any-1000T',
+                       'catalyst-chassis-uplinks-10000X2',
+                       'catalyst-chassis-mgmt',
+               ),
+       ),
        '9.1.799' => array
        (
                'dict_key' => 168,
@@ -607,7 +772,7 @@ $known_switches = array // key is system OID w/o "enterprises" prefix
        ),
        '9.1.717' => array
        (
-               'dict_key' => 162,
+               'dict_key' => 1572,
                'text' => 'WS-C2960-48TT-L: 48 RJ-45/10-100TX + 2 RJ-45/10-100-1000T(X)',
                'processors' => array ('catalyst-chassis-any-100TX', 'catalyst-chassis-any-1000T'),
        ),
@@ -617,6 +782,18 @@ $known_switches = array // key is system OID w/o "enterprises" prefix
                'text' => 'WS-C2960-24PC: 44 RJ-45/10-100TX + 2 combo-gig',
                'processors' => array ('catalyst-chassis-1-to-2-combo-1000SFP', 'catalyst-chassis-any-1000T', 'catalyst-chassis-any-100TX'),
        ),
+       '9.1.927' => array
+       (
+               'dict_key' => 140,
+               'text' => 'WS-C2960-48TC-S: 48 RJ-45/10-100TX + 2 combo-gig',
+               'processors' => array ('catalyst-chassis-1-to-2-combo-1000SFP', 'catalyst-chassis-any-1000T', 'catalyst-chassis-any-100TX'),
+       ),
+       '9.1.1005' => array
+       (
+               'dict_key' => 1573,
+               'text' => 'WS-C2960-48TT-S: 48 RJ-45/10-100TX + 2 RJ-45/10-100-1000T(X)',
+               'processors' => array ('catalyst-chassis-any-100TX', 'catalyst-chassis-any-1000T'),
+       ),
        '9.1.527' => array
        (
                'dict_key' => 210,
@@ -766,6 +943,18 @@ $known_switches = array // key is system OID w/o "enterprises" prefix
                        'catalyst-chassis-uplinks-1000T',
                ),
        ),
+       '9.1.1227' => array
+       (
+               'dict_key' => 1577,
+               'text' => 'WS-C3560X-48T: 48 RJ-45/10-100-1000T(X) + network module + OOBM',
+               'processors' => array
+               (
+                       'C3KX-NM-10000',
+                       'C3KX-NM-1000',
+                       'catalyst-chassis-any-1000T',
+                       'catalyst-chassis-mgmt',
+               ),
+       ),
        '9.12.3.1.3.719' => array
        (
                'dict_key' => 960,
@@ -778,6 +967,12 @@ $known_switches = array // key is system OID w/o "enterprises" prefix
                'text' => 'N5K-C5010: 20 SFP+/10000',
                'processors' => array ('nexus-any-10000SFP+', 'nexus-mgmt'),
        ),
+       '11.2.3.7.11.19' => array
+       (
+               'dict_key' => 859,
+               'text' => 'J4813A: 24 RJ-45/10-100TX + 2 modules of varying type',
+               'processors' => array ('procurve-chassis-100TX'),
+       ),
        '11.2.3.7.11.32' => array
        (
                'dict_key' => 871,
@@ -802,12 +997,36 @@ $known_switches = array // key is system OID w/o "enterprises" prefix
                'text' => 'J4121A: modular system',
                'processors' => array ('procurve-modular-100TX'),
        ),
+       '11.2.3.7.11.63' => array
+       (
+               'dict_key' => 868,
+               'text' => 'J9021A: 20 RJ-45/10-100-1000T(X) + 4 combo-gig',
+               'processors' => array ('procurve-21-to-24-combo-1000SFP', 'procurve-chassis-1000T'),
+       ),
+       '11.2.3.7.11.65' => array
+       (
+               'dict_key' => 850,
+               'text' => 'J9028A: 22 RJ-45/10-100-1000T(X) + 2 combo-gig',
+               'processors' => array ('smc2-combo-23-to-24', 'smc2-any-1000T'),
+       ),
+       '11.2.3.7.11.86' => array
+       (
+               'dict_key' => 1571,
+               'text' => 'J9145A: 20 RJ-45/10-100-1000T(X) + 4 combo-gig + varying uplinks',
+               'processors' => array ('procurve-21-to-24-combo-1000SFP', 'procurve-chassis-1000T'),
+       ),
        '11.2.3.7.11.87' => array
        (
                'dict_key' => 1349,
-               'text' => 'J9147A: 44 RJ-45/10-100-1000T(X) + 4 combo-gig)',
+               'text' => 'J9147A: 44 RJ-45/10-100-1000T(X) + 4 combo-gig + varying uplinks',
                'processors' => array ('procurve-45-to-48-combo-1000SFP', 'procurve-chassis-1000T'),
        ),
+       '11.2.3.7.11.79' => array
+       (
+               'dict_key' => 863,
+               'text' => 'J9089A: 48 RJ-45/10-100TX PoE + 2 1000T + 2 SFP-1000',
+               'processors' => array ('procurve-49-to-50-1000T', 'procurve-51-to-52-1000SFP', 'procurve-chassis-100TX'),
+       ),
        '4526.100.2.2' => array
        (
                'dict_key' => 562,
@@ -887,6 +1106,12 @@ $known_switches = array // key is system OID w/o "enterprises" prefix
                'text' => 'FLS 648: 44 RJ-45/10-100-1000T(X) + 4 combo-gig + 2 optional 10G modules',
                'processors' => array ('fls648-combo', 'fgs-any-1000T', 'fls-uplinks'),
        ),
+       '1991.1.3.52.2.2.1.1' => array
+       (
+               'dict_key' => 1032,
+               'text' => 'FWS648G: 4 combo-gig + 44 RJ-45/10-100-1000T(X)',
+               'processors' => array ('fgs-1-to-4-comboSFP', 'fgs-any-1000T'),
+       ),
        '1916.2.71' => array
        (
                'dict_key' => 694,
@@ -912,6 +1137,36 @@ $known_switches = array // key is system OID w/o "enterprises" prefix
                'text' => 'SMC8150L2: 46 RJ-45/10-100-1000T(X) + 4 combo ports',
                'processors' => array ('smc-combo-45-to-48', 'nortel-any-1000T'),
        ),
+       '6027.1.3.12' => array
+       (
+               'dict_key' => 1471,
+               'text' => 'Force10 S60: 44 RJ-45/10-100-1000T(X) + 4 SFP-1000 ports + 0/2/4 SFP+ ports',
+               'processors' => array ('ftos-44-to-47-1000SFP', 'ftos-any-1000T', 'ftos-any-10000SFP+', 'ftos-mgmt'),
+       ),
+       '6027.1.3.13' => array
+       (
+               'dict_key' => 1470,
+               'text' => 'Force10 S55: 44 RJ-45/10-100-1000T(X) + 4 SFP-1000 ports + 0/2/4 SFP+ ports',
+               'processors' => array ('ftos-44-to-47-1000SFP', 'ftos-any-1000T', 'ftos-any-10000SFP+', 'ftos-mgmt'),
+       ),
+       '6027.1.3.14' => array
+       (
+               'dict_key' => 1472,
+               'text' => 'Force10 S4810: 48 SFP+-1000/10000 + 4 QSFP-40000 ports',
+               'processors' => array ('ftos-any-10000SFP+', 'ftos-any-QSFP+', 'ftos-mgmt'),
+       ),
+       '202.20.59' => array
+       (
+               'dict_key' => 1371,
+               'text' => 'SMC8124L2: 20 RJ-45/10-100-1000T(X) + 4 combo ports',
+               'processors' => array ('smc2-combo-21-to-24', 'smc2-any-1000T'),
+       ),
+       '202.20.66' => array
+       (
+               'dict_key' => 1567,
+               'text' => 'SMC6128L2: 24 RJ-45/10-100TX + 4 combo-gig ports',
+               'processors' => array ('smc2-combo-25-to-28', 'smc2-1000T-25-to-28', 'smc2-any-100TX'),
+       ),
 );
 
 global $swtype_pcre;
@@ -958,25 +1213,24 @@ function checkPIC ($port_type_id)
 
 $msgcode['doSNMPmining']['ERR1'] = 161;
 $msgcode['doSNMPmining']['ERR2'] = 162;
-$msgcode['doSNMPmining']['OK'] = 81;
 function doSNMPmining ($object_id, $snmpsetup)
 {
        $objectInfo = spotEntity ('object', $object_id);
        $objectInfo['attrs'] = getAttrValues ($object_id);
        $endpoints = findAllEndpoints ($object_id, $objectInfo['name']);
        if (count ($endpoints) == 0)
-               return buildRedirectURL (__FUNCTION__, 'ERR1'); // endpoint not found
+               return showFuncMessage (__FUNCTION__, 'ERR1'); // endpoint not found
        if (count ($endpoints) > 1)
-               return buildRedirectURL (__FUNCTION__, 'ERR2'); // can't pick an address
-
-       $device = new SNMPDevice($endpoints[0], $snmpsetup);
+               return showFuncMessage (__FUNCTION__, 'ERR2'); // can't pick an address
 
        switch ($objectInfo['objtype_id'])
        {
        case 7:
        case 8:
+               $device = new RTSNMPDevice ($endpoints[0], $snmpsetup);
                return doSwitchSNMPmining ($objectInfo, $device);
        case 2:
+               $device = new APCPowerSwitch ($endpoints[0], $snmpsetup);
                return doPDUSNMPmining ($objectInfo, $device);
        }       
 }
@@ -985,26 +1239,25 @@ $msgcode['doSwitchSNMPmining']['ERR3'] = 188;
 $msgcode['doSwitchSNMPmining']['ERR4'] = 189;
 function doSwitchSNMPmining ($objectInfo, $device)
 {
-       $log = emptyLog();
        global $known_switches, $iftable_processors;
        
        if (FALSE === ($sysObjectID = $device->snmpget ('sysObjectID.0')))
-               return buildRedirectURL (__FUNCTION__, 'ERR3'); // // fatal SNMP failure
+               return showFuncMessage (__FUNCTION__, 'ERR3'); // // fatal SNMP failure
        $sysObjectID = preg_replace ('/^.*(enterprises\.)([\.[:digit:]]+)$/', '\\2', $sysObjectID);
        $sysName = substr ($device->snmpget ('sysName.0'), strlen ('STRING: '));
        $sysDescr = substr ($device->snmpget ('sysDescr.0'), strlen ('STRING: '));
        $sysDescr = str_replace (array ("\n", "\r"), " ", $sysDescr);  // Make it one line
        if (!isset ($known_switches[$sysObjectID]))
-               return buildRedirectURL (__FUNCTION__, 'ERR4', array ($sysObjectID)); // unknown OID
+               return showFuncMessage (__FUNCTION__, 'ERR4', array ($sysObjectID)); // unknown OID
+       showSuccess ($known_switches[$sysObjectID]['text']);
        foreach (array_keys ($known_switches[$sysObjectID]['processors']) as $pkey)
                if (!array_key_exists ($known_switches[$sysObjectID]['processors'][$pkey], $iftable_processors))
                {
-                       $log = mergeLogs ($log, oneLiner (200, array ('processor "' . $known_switches[$sysObjectID]['processors'][$pkey] . '" not found')));
+                       showWarning ('processor "' . $known_switches[$sysObjectID]['processors'][$pkey] . '" not found');
                        unset ($known_switches[$sysObjectID]['processors'][$pkey]);
                }
        updateStickerForCell ($objectInfo, 2, $known_switches[$sysObjectID]['dict_key']);
        updateStickerForCell ($objectInfo, 3, $sysName);
-       $log = mergeLogs ($log, oneLiner (81, array ('generic')));
        switch (1)
        {
        case preg_match ('/^9\.1\./', $sysObjectID): // Catalyst
@@ -1030,7 +1283,6 @@ function doSwitchSNMPmining ($objectInfo, $device)
                        checkPIC ('1-16'); // AC input
                        commitAddPort ($objectInfo['id'], 'AC-in', '1-16', '', '');
                }
-               $log = mergeLogs ($log, oneLiner (81, array ('catalyst-generic')));
                break;
        case preg_match ('/^9\.12\.3\.1\.3\./', $sysObjectID): // Nexus
                $exact_release = preg_replace ('/^.*, Version ([^ ]+), .*$/', '\\1', $sysDescr);
@@ -1048,23 +1300,32 @@ function doSwitchSNMPmining ($objectInfo, $device)
                checkPIC ('1-16'); // AC input
                commitAddPort ($objectInfo['id'], 'AC-in-1', '1-16', 'AC1', '');
                commitAddPort ($objectInfo['id'], 'AC-in-2', '1-16', 'AC2', '');
-               $log = mergeLogs ($log, oneLiner (81, array ('nexus-generic')));
                break;
-       case preg_match ('/^11\.2\.3\.7\.11\./', $sysObjectID): // ProCurve
+       case preg_match ('/^11\.2\.3\.7\.11\.(\d+)$/', $sysObjectID, $matches): // ProCurve
+               $console_per_product = array
+               (
+                       79 => '1-29', # RJ-45 RS-232
+                       86 => '1-29',
+                       87 => '1-29',
+                       63 => '1-29',
+                       19 => '1-681', # DB-9 RS-232
+               );
+               if (array_key_exists ($matches[1], $console_per_product))
+               {
+                       checkPIC ($console_per_product[$matches[1]]);
+                       commitAddPort ($objectInfo['id'], '', $console_per_product[$matches[1]], 'Console', '');
+               }
                $exact_release = preg_replace ('/^.* revision ([^ ]+), .*$/', '\\1', $sysDescr);
                updateStickerForCell ($objectInfo, 5, $exact_release);
-               $log = mergeLogs ($log, oneLiner (81, array ('procurve-generic')));
                break;
        case preg_match ('/^4526\.100\.2\./', $sysObjectID): // NETGEAR
                checkPIC ('1-681');
                commitAddPort ($objectInfo['id'], 'console', '1-681', 'console', ''); // DB-9 RS-232 console
-               $log = mergeLogs ($log, oneLiner (81, array ('netgear-generic')));
                break;
        case preg_match ('/^2011\.2\.23\./', $sysObjectID): // Huawei
                detectSoftwareType ($objectInfo, $sysDescr);
                checkPIC ('1-681');
                commitAddPort ($objectInfo['id'], 'con0', '1-681', 'console', ''); // DB-9 RS-232 console
-               $log = mergeLogs ($log, oneLiner (81, array ('huawei-generic')));
                break;
        case '2636.1.1.1.2.31' == $sysObjectID: // Juniper EX4200
                detectSoftwareType ($objectInfo, $sysDescr);
@@ -1073,13 +1334,11 @@ function doSwitchSNMPmining ($objectInfo, $device)
                // EX4200-24T is already in DB
                if (preg_match ('/^Juniper Networks, Inc. ex4200-48t internet router/', $sysDescr))
                        updateStickerForCell ($objectInfo, 2, 907);
-               $log = mergeLogs ($log, oneLiner (81, array ('juniper-ex')));
                break;
        case preg_match ('/^2636\.1\.1\.1\.2\./', $sysObjectID): // Juniper
                detectSoftwareType ($objectInfo, $sysDescr);
                checkPIC ('1-681');
                commitAddPort ($objectInfo['id'], 'console', '1-681', 'console', ''); // DB-9 RS-232 console
-               $log = mergeLogs ($log, oneLiner (81, array ('juniper-generic')));
                break;
        case preg_match ('/^1991\.1\.3\.45\./', $sysObjectID): // snFGSFamily
        case preg_match ('/^1991\.1\.3\.46\./', $sysObjectID): // snFLSFamily
@@ -1128,7 +1387,6 @@ function doSwitchSNMPmining ($objectInfo, $device)
                # fixed console port
                checkPIC ('1-681');
                commitAddPort ($objectInfo['id'], 'console', '1-681', 'console', ''); // DB-9 RS-232 console
-               $log = mergeLogs ($log, oneLiner (81, array ('brocade-generic')));
                break;
        case preg_match ('/^1916\.2\./', $sysObjectID): // Extreme Networks Summit
                $xos_release = preg_replace ('/^ExtremeXOS version ([[:digit:]]+)\..*$/', '\\1', $sysDescr);
@@ -1144,7 +1402,45 @@ function doSwitchSNMPmining ($objectInfo, $device)
                commitAddPort ($objectInfo['id'], 'console', '1-681', 'console', ''); // DB-9 RS-232
                checkPIC ('1-16');
                commitAddPort ($objectInfo['id'], 'AC-in', '1-16', '', '');
-               $log = mergeLogs ($log, oneLiner (81, array ('summit-generic')));
+               break;
+       case preg_match ('/^6027\.1\./', $sysObjectID): # Force10
+               commitAddPort ($objectInfo['id'], 'aux0', '1-29', 'RS-232', ''); // RJ-45 RS-232 console
+               $m = array();
+               if (preg_match ('/Force10 Application Software Version: ([\d\.]+)/', $sysDescr, $m))
+               {
+                       updateStickerForCell ($objectInfo, 5, $m[1]);
+                       $ftos_release = preg_replace ('/^([678])\..+$/', '\\1', $m[1]);
+                       $ftos_codes = array
+                       (
+                               '6' => 1592,
+                               '7' => 1593,
+                               '8' => 1594,
+                       );
+                       if (array_key_exists ($ftos_release, $ftos_codes))
+                               updateStickerForCell ($objectInfo, 4, $ftos_codes[$ftos_release]);
+               }
+               # F10-S-SERIES-CHASSIS-MIB::chStackUnitSerialNumber.1
+               $serialNo = $device->snmpget ('enterprises.6027.3.10.1.2.2.1.12.1');
+               # F10-S-SERIES-CHASSIS-MIB::chSysPowerSupplyType.1.1
+               if ($device->snmpget ('enterprises.6027.3.10.1.2.3.1.3.1.1') == 'INTEGER: 1')
+               {
+                       checkPIC ('1-16');
+                       commitAddPort ($objectInfo['id'], 'PSU0', '1-16', 'PSU0', '');
+               }
+               # F10-S-SERIES-CHASSIS-MIB::chSysPowerSupplyType.1.2
+               if ($device->snmpget ('enterprises.6027.3.10.1.2.3.1.3.1.2') == 'INTEGER: 1')
+               {
+                       checkPIC ('1-16');
+                       commitAddPort ($objectInfo['id'], 'PSU1', '1-16', 'PSU1', '');
+               }
+               if (strlen ($serialNo))
+                       updateStickerForCell ($objectInfo, 1, str_replace ('"', '', substr ($serialNo, strlen ('STRING: '))));
+               break;
+       case preg_match ('/^202\.20\./', $sysObjectID): // SMC TigerSwitch
+               checkPIC ('1-681');
+               commitAddPort ($objectInfo['id'], 'console', '1-681', '', ''); // DB-9 RS-232
+               checkPIC ('1-16');
+               commitAddPort ($objectInfo['id'], 'AC-in', '1-16', '', '');
                break;
        default: // Nortel...
                break;
@@ -1188,7 +1484,7 @@ function doSwitchSNMPmining ($objectInfo, $device)
                        $newname = preg_replace ($iftable_processors[$processor_name]['pattern'], $iftable_processors[$processor_name]['replacement'], $iface['ifDescr'], 1, $count);
                        if ($newname === NULL)
                        {
-                               $log = mergeLogs ($log, oneLiner (100, array ('PCRE pattern error, terminating')));
+                               showError ('PCRE pattern error, terminating');
                                break 2;
                        }
                        if (!$count)
@@ -1199,18 +1495,13 @@ function doSwitchSNMPmining ($objectInfo, $device)
                        if (!$iftable_processors[$processor_name]['try_next_proc']) // done with this port
                                continue 2;
                }
-       foreach ($known_switches[$sysObjectID]['processors'] as $processor_name)
-               $log = mergeLogs ($log, oneLiner (81, array ($processor_name)));
        // No failure up to this point, thus leave current tab for the "Ports" one.
-       return buildWideRedirectURL ($log, NULL, 'ports');
+       return buildRedirectURL (NULL, 'ports');
 }
 
-$msgcode['doPDUSNMPmining']['OK'] = 0;
-function doPDUSNMPmining ($objectInfo, $hostname, $snmpsetup)
+function doPDUSNMPmining ($objectInfo, $switch)
 {
-       $log = emptyLog();
        global $known_APC_SKUs;
-       $switch = new APCPowerSwitch ($hostname, $snmpsetup);
        if (FALSE !== ($dict_key = array_search ($switch->getHWModel(), $known_APC_SKUs)))
                updateStickerForCell ($objectInfo, 2, $dict_key);
        updateStickerForCell ($objectInfo, 1, $switch->getHWSerial());
@@ -1226,8 +1517,8 @@ function doPDUSNMPmining ($objectInfo, $hostname, $snmpsetup)
                commitAddPort ($objectInfo['id'], $portno, '1-1322', $port[0], '');
                $portno++;
        }
-       $log = mergeLogs ($log, oneLiner (0, array ("Added ${portno} port(s)")));
-       return buildWideRedirectURL ($log, NULL, 'ports');
+       showSuccess ("Added ${portno} port(s)");
+       return buildRedirectURL (NULL, 'ports');
 }
 
 // APC SNMP code by Russ Garrett
@@ -1235,15 +1526,15 @@ define('APC_STATUS_ON', 1);
 define('APC_STATUS_OFF', 2);
 define('APC_STATUS_REBOOT', 3);
 
-class SNMPDevice {
+class RTSNMPDevice {
     protected $snmp;
 
     function __construct($hostname, $snmpsetup) {
        if( isset($snmpsetup['community']) ) {
-           $this->snmp = new SNMPv2($hostname, $snmpsetup);
+           $this->snmp = new RTSNMPv2($hostname, $snmpsetup);
        }
        else {
-           $this->snmp = new SNMPv3($hostname, $snmpsetup);
+           $this->snmp = new RTSNMPv3($hostname, $snmpsetup);
        }
 
     }
@@ -1273,7 +1564,7 @@ class SNMPDevice {
     }
 }
 
-abstract class SNMP {
+abstract class RTSNMP {
     protected $hostname;
     protected $snmpsetup;
 
@@ -1287,7 +1578,7 @@ abstract class SNMP {
     abstract function snmpwalkoid($oid);
 }
 
-class SNMPv2 extends SNMP {
+class RTSNMPv2 extends RTSNMP {
     function snmpget($oid) {
        return snmpget($this->hostname, $this->snmpsetup['community'], $oid);
     }
@@ -1301,7 +1592,7 @@ class SNMPv2 extends SNMP {
     }
 }
 
-class SNMPv3 extends SNMP {
+class RTSNMPv3 extends RTSNMP {
     function snmpget($oid) {
        return snmp3_get($this->hostname, $this->snmpsetup['sec_name'], $this->snmpsetup['sec_level'], $this->snmpsetup['auth_protocol'], $this->snmpsetup['auth_passphrase'], $this->snmpsetup['priv_protocol'], $this->snmpsetup['priv_passphrase'], $oid);
     }
@@ -1315,7 +1606,7 @@ class SNMPv3 extends SNMP {
     }
 }
 
-class APCPowerSwitch extends SNMPDevice {
+class APCPowerSwitch extends RTSNMPDevice {
     protected $snmpMib = 'SNMPv2-SMI::enterprises.318';
 
     function getPorts() {