minor fixes in Avaya ERS driver
authorVictor Kirhenshtein <victor@netxms.org>
Sun, 17 Jul 2011 21:49:50 +0000 (21:49 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Sun, 17 Jul 2011 21:49:50 +0000 (21:49 +0000)
ChangeLog
include/nms_util.h
src/libnetxms/strmap.cpp
src/server/drivers/ers8000/ers8000.cpp
src/server/drivers/ers8000/ers8000.h
src/server/libnxsrv/ndd.cpp

index 2c205ce..f095fb4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,8 @@
 *
 
 - Added integration script for HP EVA disk arrays
+- New MIBs added: ATM-TC-MIB, DVMRP-MIB, IGMP-MIB, IPV6-TC,
+  RAPID-CITY-BAY-STACK, RC-MLT-MIB
 - Fixed some problems with database export/import
 - Fixed issues: #328
 
index 4abae57..4258ae4 100644 (file)
@@ -322,6 +322,7 @@ public:
 
        const TCHAR *get(const TCHAR *key);
        DWORD getULong(const TCHAR *key, DWORD defaultValue);
+       bool getBoolean(const TCHAR *key, bool defaultValue);
 
        void remove(const TCHAR *key);
        void clear();
index 8d1a661..674ba75 100644 (file)
@@ -1,7 +1,7 @@
 /* 
 ** NetXMS - Network Management System
 ** NetXMS Foundation Library
-** Copyright (C) 2003-2010 Victor Kirhenshtein
+** Copyright (C) 2003-2011 Victor Kirhenshtein
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU Lesser General Public License as published
@@ -201,6 +201,18 @@ DWORD StringMap::getULong(const TCHAR *key, DWORD defaultValue)
        return _tcstoul(value, NULL, 0);
 }
 
+bool StringMap::getBoolean(const TCHAR *key, bool defaultValue)
+{
+       const TCHAR *value = get(key);
+       if (value == NULL)
+               return defaultValue;
+       if (!_tcsicmp(value, _T("false")))
+               return false;
+       if (!_tcsicmp(value, _T("true")))
+               return true;
+       return (_tcstoul(value, NULL, 0) != 0) ? true : false;
+}
+
 
 //
 // Delete value
index 0a2c763..f361318 100644 (file)
@@ -57,6 +57,32 @@ bool PassportDriver::isDeviceSupported(const TCHAR *oid)
        return _tcsncmp(oid, _T(".1.3.6.1.4.1.2272"), 17) == 0;\r
 }\r
 \r
+/**\r
+ * Do additional checks on the device required by driver.\r
+ * Driver can set device's custom attributes from within\r
+ * this function.\r
+ *\r
+ * @param snmp SNMP transport\r
+ * @param attributes Node's custom attributes\r
+ */\r
+void PassportDriver::analyzeDevice(SNMP_Transport *snmp, const TCHAR *oid, StringMap *attributes)\r
+{\r
+       int model = _tcstol(&oid[18], NULL, 10);\r
+       if ((model == 43) || (model == 44) || (model == 45))    // Passport 1600 series\r
+       {\r
+               attributes->set(_T(".rapidCity.is1600"), _T("true"));\r
+               attributes->set(_T(".rapidCity.maxSlot"), _T("1"));\r
+       }\r
+       else if ((model == 31) || (model == 33) || (model == 48) || (model == 50))\r
+       {\r
+               attributes->set(_T(".rapidCity.maxSlot"), _T("6"));\r
+       }\r
+       else if (model == 34)\r
+       {\r
+               attributes->set(_T(".rapidCity.maxSlot"), _T("3"));\r
+       }\r
+}\r
+\r
 /**\r
  * Get list of interfaces for given node\r
  *\r
@@ -66,15 +92,26 @@ bool PassportDriver::isDeviceSupported(const TCHAR *oid)
 InterfaceList *PassportDriver::getInterfaces(SNMP_Transport *snmp, StringMap *attributes, int useAliases, bool useIfXTable)\r
 {\r
        // Get interface list from standard MIB\r
-       InterfaceList *ifList = NetworkDeviceDriver::getInterfaces(snmp, attributes, useAliases, useIfXTable);\r
+       InterfaceList *ifList = AvayaERSDriver::getInterfaces(snmp, attributes, useAliases, useIfXTable);\r
        if (ifList == NULL)\r
                return NULL;\r
+\r
+       DWORD maxSlot = attributes->getULong(_T(".rapidCity.maxSlot"), 10);\r
+       bool is1600Series = attributes->getBoolean(_T(".rapidCity.is1600"), false);\r
        \r
        // Calculate slot/port pair from ifIndex\r
        for(int i = 0; i < ifList->getSize(); i++)\r
        {\r
                DWORD slot = ifList->get(i)->dwIndex / 64;\r
-               if ((slot > 0) && (slot <= 10))\r
+\r
+               // Some 1600 may report physical ports with indexes started at 1, not 64\r
+               if ((slot == 0) && is1600Series)\r
+               {\r
+                       ifList->get(i)->dwSlotNumber = slot;\r
+                       ifList->get(i)->dwPortNumber = ifList->get(i)->dwIndex;\r
+                       ifList->get(i)->isPhysicalPort = true;\r
+               }\r
+               else if ((slot > 0) && (slot <= maxSlot))\r
                {\r
                        ifList->get(i)->dwSlotNumber = slot;\r
                        ifList->get(i)->dwPortNumber = ifList->get(i)->dwIndex % 64 + 1;\r
@@ -92,7 +129,6 @@ InterfaceList *PassportDriver::getInterfaces(SNMP_Transport *snmp, StringMap *at
  */\r
 DECLARE_NDD_ENTRY_POINT(s_driverName, PassportDriver);\r
 \r
-\r
 /**\r
  * DLL entry point\r
  */\r
index e92c75c..aa4f802 100644 (file)
@@ -38,6 +38,7 @@ public:
        virtual const TCHAR *getVersion();\r
 \r
        virtual bool isDeviceSupported(const TCHAR *oid);\r
+       virtual void analyzeDevice(SNMP_Transport *snmp, const TCHAR *oid, StringMap *attributes);\r
        virtual InterfaceList *getInterfaces(SNMP_Transport *snmp, StringMap *attributes, int useAliases, bool useIfXTable);\r
 };\r
 \r
index fd24629..77ecfb6 100644 (file)
@@ -66,7 +66,6 @@ bool NetworkDeviceDriver::isDeviceSupported(const TCHAR *oid)
        return true;\r
 }\r
 \r
-\r
 /**\r
  * Do additional checks on the device required by driver.\r
  * Driver can set device's custom attributes from within\r