- Improved handling of interface names for Nortel switches
authorVictor Kirhenshtein <victor@netxms.org>
Thu, 24 Aug 2006 21:19:58 +0000 (21:19 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Thu, 24 Aug 2006 21:19:58 +0000 (21:19 +0000)
- Version number changed to 0.2.13
- Object tools improved

15 files changed:
ChangeLog
doc/internal/db_format_change.txt
include/netxms-version.h
include/netxmsdb.h
include/nxnt.h
include/nxtools.h
sql/objtools.in
sql/setup.in
src/console/win32/nxcon.cpp
src/server/core/node.cpp
src/server/core/objtools.cpp
src/server/core/snmp.cpp
src/server/include/nms_objects.h
src/server/include/nxsrvapi.h
src/server/tools/nxdbmgr/upgrade.cpp

index 314aca9..6a9b43b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,12 +6,13 @@
 - Agent ported to IPSO
 - Added installer command line options for unattended installation of
   Windows agent
-- New MIBs added: S5-ETH-MULTISEG-TOPOLOGY-MIB
+- New MIBs added: S5-ETH-MULTISEG-TOPOLOGY-MIB, BN-IF-EXTENSIONS-MIB
 - Server startup and shutdown procedures improved
 - Added detection of lost database connections and automatic reconnect
 - Native operating system read/write locks used whenever possible
 - Added possibility to use alarm message text in actions (if action executed by
   the same event processing rule as alarm)
+- Better handling of interface names of Nortel ethernet switches
 - Windows binaries built against OpenSSL 0.9.8b
 - Windows console:
        - DCI history data viewer improved
index 7423939..975f0ac 100644 (file)
@@ -1,4 +1,33 @@
 *************
+* 45 ==> 46 *
+*************
+
+- Object tool "Switch FDB" updated:
+      UPDATE object_tools_table_columns SET col_format=5 WHERE tool_id=5 AND col_number=1
+- New OID to type translations added:
+          INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+             VALUES (2,'.1.3.6.1.4.1.45.3.26.*',3,0)
+          INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+             VALUES (3,'.1.3.6.1.4.1.45.3.30.*',3,0)
+          INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+             VALUES (4,'.1.3.6.1.4.1.45.3.31.*',3,0)
+          INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+             VALUES (5,'.1.3.6.1.4.1.45.3.32.*',3,0)
+          INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+             VALUES (6,'.1.3.6.1.4.1.45.3.33.*',3,0)
+          INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+             VALUES (7,'.1.3.6.1.4.1.45.3.34.*',3,0)
+          INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+             VALUES (8,'.1.3.6.1.4.1.45.3.35.*',3,0)
+          INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+             VALUES (9,'.1.3.6.1.4.1.45.3.36.*',3,0)
+          INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+             VALUES (10,'.1.3.6.1.4.1.45.3.40.*',3,0)
+          INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+             VALUES (11,'.1.3.6.1.4.1.45.3.61.*',3,0)
+
+
+*************
 * 44 ==> 45 *
 *************
 
index f7c7c68..11f7cf2 100644 (file)
@@ -31,7 +31,7 @@
 #define NETXMS_VERSION_MAJOR        0
 #define NETXMS_VERSION_MINOR        2
 #define NETXMS_VERSION_BUILD        13
-#define NETXMS_VERSION_STRING       _T("0.2.13-rc2")
+#define NETXMS_VERSION_STRING       _T("0.2.13")
 
 
 //
index 67006ad..823c05a 100644 (file)
@@ -23,6 +23,6 @@
 #ifndef _netxms_db_h
 #define _netxms_db_h
 
-#define DB_FORMAT_VERSION      45
+#define DB_FORMAT_VERSION      46
 
 #endif
index e829d51..b2cd7ed 100644 (file)
@@ -26,5 +26,6 @@
 #define NODE_TYPE_GENERIC           0
 #define NODE_TYPE_NORTEL_ACCELAR    1
 #define NODE_TYPE_NETSCREEN         2
+#define NODE_TYPE_NORTEL_BAYSTACK   3
 
 #endif
index 3ed0b0a..83d31de 100644 (file)
@@ -55,6 +55,7 @@
 #define CFMT_FLOAT      2
 #define CFMT_IP_ADDR    3
 #define CFMT_MAC_ADDR   4
+#define CFMT_IFINDEX    5
 
 
 #endif
index cdb9cad..6079085 100644 (file)
@@ -17,7 +17,7 @@ INSERT INTO object_tools (tool_id,tool_name,tool_type,tool_data,flags,matching_o
 INSERT INTO object_tools_table_columns (tool_id,col_number,col_name,col_oid,col_format,col_substr)
        VALUES (5,0,'MAC Address','.1.3.6.1.2.1.17.4.3.1.1',CFMT_MAC_ADDR,0);
 INSERT INTO object_tools_table_columns (tool_id,col_number,col_name,col_oid,col_format,col_substr)
-       VALUES (5,1,'Port','.1.3.6.1.2.1.17.4.3.1.2',CFMT_INTEGER,0);
+       VALUES (5,1,'Port','.1.3.6.1.2.1.17.4.3.1.2',CFMT_IFINDEX,0);
 
 INSERT INTO object_tools (tool_id,tool_name,tool_type,tool_data,flags,matching_oid,description)
        VALUES (6,'&Connect->Open &web browser',TOOL_TYPE_URL,'http://%OBJECT_IP_ADDR%',0,'','Open embedded web browser to node');
index 29188b1..f37d4e4 100644 (file)
@@ -212,3 +212,23 @@ INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
    VALUES (0,'.1.3.6.1.4.1.2272.*',NODE_TYPE_NORTEL_ACCELAR,0);
 INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
    VALUES (1,'.1.3.6.1.4.1.3224.1.*',NODE_TYPE_NETSCREEN,0);
+INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+   VALUES (2,'.1.3.6.1.4.1.45.3.26.*',NODE_TYPE_NORTEL_BAYSTACK,0);
+INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+   VALUES (3,'.1.3.6.1.4.1.45.3.30.*',NODE_TYPE_NORTEL_BAYSTACK,0);
+INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+   VALUES (4,'.1.3.6.1.4.1.45.3.31.*',NODE_TYPE_NORTEL_BAYSTACK,0);
+INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+   VALUES (5,'.1.3.6.1.4.1.45.3.32.*',NODE_TYPE_NORTEL_BAYSTACK,0);
+INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+   VALUES (6,'.1.3.6.1.4.1.45.3.33.*',NODE_TYPE_NORTEL_BAYSTACK,0);
+INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+   VALUES (7,'.1.3.6.1.4.1.45.3.34.*',NODE_TYPE_NORTEL_BAYSTACK,0);
+INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+   VALUES (8,'.1.3.6.1.4.1.45.3.35.*',NODE_TYPE_NORTEL_BAYSTACK,0);
+INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+   VALUES (9,'.1.3.6.1.4.1.45.3.36.*',NODE_TYPE_NORTEL_BAYSTACK,0);
+INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+   VALUES (10,'.1.3.6.1.4.1.45.3.40.*',NODE_TYPE_NORTEL_BAYSTACK,0);
+INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags)
+   VALUES (11,'.1.3.6.1.4.1.45.3.61.*',NODE_TYPE_NORTEL_BAYSTACK,0);
index 838acec..466a79f 100644 (file)
@@ -888,8 +888,11 @@ void CConsoleApp::EventHandler(DWORD dwEvent, DWORD dwCode, void *pArg)
          if (!m_bIgnoreErrors)
          {
             m_bIgnoreErrors = TRUE;
-            m_pMainWnd->MessageBox(_T("Connection with the management server terminated unexpectedly"), _T("Error"), MB_OK | MB_ICONSTOP);
-            m_pMainWnd->PostMessage(WM_CLOSE, 0, 0);
+            if (IsWindow(m_pMainWnd->m_hWnd))
+            {
+               m_pMainWnd->MessageBox(_T("Connection with the management server terminated unexpectedly"), _T("Error"), MB_OK | MB_ICONSTOP);
+               m_pMainWnd->PostMessage(WM_CLOSE, 0, 0);
+            }
          }
          break;
       case NXC_EVENT_NEW_ELOG_RECORD:
index 956c12d..e5921d2 100644 (file)
@@ -427,6 +427,7 @@ void Node::NewNodePoll(DWORD dwNetMask)
 
       if (pIfList != NULL)
       {
+         CheckInterfaceNames(pIfList);
          for(i = 0; i < pIfList->iNumEntries; i++)
             CreateNewInterface(pIfList->pInterfaces[i].dwIpAddr, 
                                pIfList->pInterfaces[i].dwIpNetMask,
@@ -535,6 +536,9 @@ INTERFACE_LIST *Node::GetInterfaceList(void)
                                      m_szCommunityString, m_dwNodeType);
    }
 
+   if (pIfList != NULL)
+      CheckInterfaceNames(pIfList);
+
    return pIfList;
 }
 
@@ -2473,3 +2477,38 @@ BOOL Node::CheckSNMPIntegerValue(char *pszOID, int nValue)
       return (int)dwTemp == nValue;
    return FALSE;
 }
+
+
+//
+// Check and update if needed interface names
+//
+
+void Node::CheckInterfaceNames(INTERFACE_LIST *pIfList)
+{
+   int i;
+   TCHAR *ptr;
+
+   if (m_dwNodeType == NODE_TYPE_NORTEL_BAYSTACK)
+   {
+      // Translate interface names
+      for(i = 0; i < pIfList->iNumEntries; i++)
+      {
+         if ((_tcsstr(pIfList->pInterfaces[i].szName, _T("BayStack")) != NULL) ||
+             (_tcsstr(pIfList->pInterfaces[i].szName, _T("Nortel Ethernet Switch")) != NULL))
+         {
+            ptr = _tcsrchr(pIfList->pInterfaces[i].szName, _T('-'));
+            if (ptr != NULL)
+            {
+               ptr++;
+               while(*ptr == _T(' '))
+                  ptr++;
+               memmove(pIfList->pInterfaces[i].szName, ptr, _tcslen(ptr) + 1);
+            }
+         }
+      }
+   }
+
+   // Cut interface names
+   for(i = 0; i < pIfList->iNumEntries; i++)
+      pIfList->pInterfaces[i].szName[MAX_OBJECT_NAME - 1] = 0;
+}
index 313982c..953298c 100644 (file)
@@ -55,6 +55,7 @@ struct SNMP_ENUM_ARGS
    LONG *pnFormatList;
    DWORD dwFlags;
    NETXMS_VALUES_LIST values;
+   Node *pNode;
 };
 
 
@@ -249,9 +250,12 @@ static THREAD_RESULT THREAD_CALL GetAgentTable(void *pArg)
 // Add SNMP variable value to results list
 //
 
-static void AddSNMPResult(NETXMS_VALUES_LIST *pValues, SNMP_Variable *pVar, LONG nFmt)
+static void AddSNMPResult(NETXMS_VALUES_LIST *pValues, SNMP_Variable *pVar,
+                          LONG nFmt, Node *pNode)
 {
    TCHAR szBuffer[4096];
+   Interface *pInterface;
+   DWORD dwIndex;
 
    if (pVar != NULL)
    {
@@ -260,6 +264,18 @@ static void AddSNMPResult(NETXMS_VALUES_LIST *pValues, SNMP_Variable *pVar, LONG
          case CFMT_MAC_ADDR:
             pVar->GetValueAsMACAddr(szBuffer);
             break;
+         case CFMT_IFINDEX:   // Column is an interface index, convert to interface name
+            dwIndex = pVar->GetValueAsUInt();
+            pInterface = pNode->FindInterface(dwIndex, INADDR_ANY);
+            if (pInterface != NULL)
+            {
+               nx_strncpy(szBuffer, pInterface->Name(), 4096);
+            }
+            else
+            {
+               _stprintf(szBuffer, _T("#%d"), dwIndex);
+            }
+            break;
          default:
             pVar->GetValueAsString(szBuffer, 4096);
             break;
@@ -318,17 +334,20 @@ static DWORD TableHandler(DWORD dwVersion, DWORD dwAddr, WORD wPort,
    if (dwResult == SNMP_ERR_SUCCESS)
    {
       if ((pRespPDU->GetNumVariables() > 0) &&
-       (pRespPDU->GetErrorCode() == SNMP_PDU_ERR_SUCCESS))
+          (pRespPDU->GetErrorCode() == SNMP_PDU_ERR_SUCCESS))
       {
          ((SNMP_ENUM_ARGS *)pArg)->dwNumRows++;
 
          // Add first column to results
-         AddSNMPResult(&((SNMP_ENUM_ARGS *)pArg)->values, pVar, ((SNMP_ENUM_ARGS *)pArg)->pnFormatList[0]);
+         AddSNMPResult(&((SNMP_ENUM_ARGS *)pArg)->values, pVar,
+                       ((SNMP_ENUM_ARGS *)pArg)->pnFormatList[0],
+                       ((SNMP_ENUM_ARGS *)pArg)->pNode);
 
          for(i = 1; i < ((SNMP_ENUM_ARGS *)pArg)->dwNumCols; i++)
             AddSNMPResult(&((SNMP_ENUM_ARGS *)pArg)->values, 
                           pRespPDU->GetVariable(i - 1), 
-                          ((SNMP_ENUM_ARGS *)pArg)->pnFormatList[i]);
+                          ((SNMP_ENUM_ARGS *)pArg)->pnFormatList[i],
+                          ((SNMP_ENUM_ARGS *)pArg)->pNode);
       }
       delete pRespPDU;
    }
@@ -367,6 +386,7 @@ static THREAD_RESULT THREAD_CALL GetSNMPTable(void *pArg)
          args.dwFlags = ((TOOL_STARTUP_INFO *)pArg)->dwFlags;
          args.values.dwNumStrings = 0;
          args.values.ppStringList = NULL;
+         args.pNode = ((TOOL_STARTUP_INFO *)pArg)->pNode;
          for(i = 0; i < dwNumCols; i++)
          {
             nx_strncpy(szBuffer, DBGetField(hResult, i, 0), 256);
index 8d2fdb7..73bf6e9 100644 (file)
@@ -437,7 +437,7 @@ INTERFACE_LIST *SnmpGetInterfaceList(DWORD dwVersion, DWORD dwAddr, WORD wPort,
          // Interface name
          sprintf(szOid, ".1.3.6.1.2.1.2.2.1.2.%d", pIfList->pInterfaces[i].dwIndex);
          if (SnmpGet(dwVersion, dwAddr, wPort, szCommunity, szOid, NULL, 0,
-                      pIfList->pInterfaces[i].szName, MAX_OBJECT_NAME,
+                      pIfList->pInterfaces[i].szName, MAX_DB_STRING,
                       FALSE, FALSE) != SNMP_ERR_SUCCESS)
             break;
 
index fff29a3..458ada2 100644 (file)
@@ -540,6 +540,8 @@ protected:
 
    DWORD GetInterfaceCount(Interface **ppInterface);
 
+   void CheckInterfaceNames(INTERFACE_LIST *pIfList);
+
    virtual void PrepareForDeletion(void);
    virtual void OnObjectDelete(DWORD dwObjectId);
 
index c7c33de..f92dd52 100644 (file)
@@ -172,7 +172,7 @@ typedef struct
 
 typedef struct
 {
-   TCHAR szName[MAX_OBJECT_NAME];
+   TCHAR szName[MAX_DB_STRING];
    DWORD dwIndex;
    DWORD dwType;
    DWORD dwIpAddr;
index 6376c47..1594961 100644 (file)
@@ -78,6 +78,48 @@ static BOOL CreateConfigParam(TCHAR *pszName, TCHAR *pszValue, int iVisible, int
 
 
 //
+// Upgrade from V45 to V46
+//
+
+static BOOL H_UpgradeFromV45(void)
+{
+   static TCHAR m_szBatch[] =
+      "UPDATE object_tools_table_columns SET col_format=5 WHERE tool_id=5 AND col_number=1\n"
+          "INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags) "
+             "VALUES (2,'.1.3.6.1.4.1.45.3.26.*',3,0)\n"
+          "INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags) "
+             "VALUES (3,'.1.3.6.1.4.1.45.3.30.*',3,0)\n"
+          "INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags) "
+             "VALUES (4,'.1.3.6.1.4.1.45.3.31.*',3,0)\n"
+          "INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags) "
+             "VALUES (5,'.1.3.6.1.4.1.45.3.32.*',3,0)\n"
+          "INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags) "
+             "VALUES (6,'.1.3.6.1.4.1.45.3.33.*',3,0)\n"
+          "INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags) "
+             "VALUES (7,'.1.3.6.1.4.1.45.3.34.*',3,0)\n"
+          "INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags) "
+             "VALUES (8,'.1.3.6.1.4.1.45.3.35.*',3,0)\n"
+          "INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags) "
+             "VALUES (9,'.1.3.6.1.4.1.45.3.36.*',3,0)\n"
+          "INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags) "
+             "VALUES (10,'.1.3.6.1.4.1.45.3.40.*',3,0)\n"
+          "INSERT INTO oid_to_type (pair_id,snmp_oid,node_type,node_flags) "
+             "VALUES (11,'.1.3.6.1.4.1.45.3.61.*',3,0)\n"
+      "<END>";
+
+   if (!SQLBatch(m_szBatch))
+      if (!g_bIgnoreErrors)
+         return FALSE;
+
+   if (!SQLQuery(_T("UPDATE config SET var_value='46' WHERE var_name='DBFormatVersion'")))
+      if (!g_bIgnoreErrors)
+         return FALSE;
+
+   return TRUE;
+}
+
+
+//
 // Upgrade from V44 to V45
 //
 
@@ -1990,6 +2032,7 @@ static struct
    { 42, H_UpgradeFromV42 },
    { 43, H_UpgradeFromV43 },
    { 44, H_UpgradeFromV44 },
+   { 45, H_UpgradeFromV45 },
    { 0, NULL }
 };