node LLDP ID saved in database (issue #NX-1242)
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 25 Apr 2017 12:33:15 +0000 (15:33 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 25 Apr 2017 21:16:00 +0000 (00:16 +0300)
ChangeLog
sql/schema.in
src/server/core/node.cpp
src/server/tools/nxdbmgr/upgrade.cpp

index 9ccbc80..3952c98 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,7 +8,7 @@
 - Network device database (allows some device specific information to be provided without drivers)
 - Management console:
        - Node's zone name shown in alarm browser and object overview when zoning is enabled
-- Fixed issues: NX-1222, NX-1239
+- Fixed issues: NX-1222, NX-1239, NX-1242
 
 
 *
index 9508813..553e127 100644 (file)
@@ -308,6 +308,7 @@ CREATE TABLE nodes
   snmp_sys_contact varchar(127) null,
   snmp_sys_location varchar(127) null,
   bridge_base_addr varchar(15) null,
+  lldp_id varchar(63) null,
   down_since integer not null,
   boot_time integer not null,
   driver_name varchar(32) null,
index e0051c9..5b7e872 100644 (file)
@@ -304,7 +304,7 @@ bool Node::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
       _T("last_agent_comm_time,syslog_msg_count,snmp_trap_count,")
       _T("node_type,node_subtype,ssh_login,ssh_password,ssh_proxy,")
       _T("port_rows,port_numbering_scheme,agent_comp_mode,")
-      _T("tunnel_id FROM nodes WHERE id=?"));
+      _T("tunnel_id,lldp_id FROM nodes WHERE id=?"));
    if (hStmt == NULL)
       return false;
 
@@ -398,6 +398,9 @@ bool Node::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
    m_portNumberingScheme = DBGetFieldULong(hResult, 0, 46);
    m_agentCompressionMode = (INT16)DBGetFieldLong(hResult, 0, 47);
    m_tunnelId = DBGetFieldGUID(hResult, 0, 48);
+   m_lldpNodeId = DBGetField(hResult, 0, 49, NULL, 0);
+   if ((m_lldpNodeId != NULL) && (*m_lldpNodeId == 0))
+      safe_free_and_null(m_lldpNodeId);
 
    DBFreeResult(hResult);
    DBFreeStatement(hStmt);
@@ -495,7 +498,8 @@ BOOL Node::saveToDatabase(DB_HANDLE hdb)
          _T("runtime_flags=?,down_since=?,driver_name=?,rack_image=?,rack_position=?,rack_height=?,rack_id=?,boot_time=?,")
          _T("agent_cache_mode=?,snmp_sys_contact=?,snmp_sys_location=?,last_agent_comm_time=?,")
          _T("syslog_msg_count=?,snmp_trap_count=?,node_type=?,node_subtype=?,ssh_login=?,ssh_password=?,")
-         _T("ssh_proxy=?,chassis_id=?,port_rows=?,port_numbering_scheme=?,agent_comp_mode=?,tunnel_id=? WHERE id=?"));
+         _T("ssh_proxy=?,chassis_id=?,port_rows=?,port_numbering_scheme=?,agent_comp_mode=?,tunnel_id=?,")
+         _T("lldp_id=? WHERE id=?"));
    }
    else
    {
@@ -505,8 +509,9 @@ BOOL Node::saveToDatabase(DB_HANDLE hdb)
         _T("proxy_node,snmp_proxy,icmp_proxy,required_polls,use_ifxtable,usm_auth_password,usm_priv_password,usm_methods,")
         _T("snmp_sys_name,bridge_base_addr,runtime_flags,down_since,driver_name,rack_image,rack_position,rack_height,rack_id,boot_time,")
         _T("agent_cache_mode,snmp_sys_contact,snmp_sys_location,last_agent_comm_time,syslog_msg_count,snmp_trap_count,")
-        _T("node_type,node_subtype,ssh_login,ssh_password,ssh_proxy,chassis_id,port_rows,port_numbering_scheme,agent_comp_mode,tunnel_id,id) ")
-        _T("VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"));
+        _T("node_type,node_subtype,ssh_login,ssh_password,ssh_proxy,chassis_id,port_rows,port_numbering_scheme,agent_comp_mode,")
+        _T("tunnel_id,lldp_id,id) ")
+        _T("VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"));
    }
    if (hStmt == NULL)
    {
@@ -575,7 +580,8 @@ BOOL Node::saveToDatabase(DB_HANDLE hdb)
    DBBind(hStmt, 48, DB_SQLTYPE_INTEGER, m_portNumberingScheme);
    DBBind(hStmt, 49, DB_SQLTYPE_VARCHAR, _itot(m_agentCompressionMode, compressionMode, 10), DB_BIND_STATIC, 1);
    DBBind(hStmt, 50, DB_SQLTYPE_VARCHAR, m_tunnelId);
-   DBBind(hStmt, 51, DB_SQLTYPE_INTEGER, m_id);
+   DBBind(hStmt, 51, DB_SQLTYPE_VARCHAR, m_lldpNodeId, DB_BIND_STATIC);
+   DBBind(hStmt, 52, DB_SQLTYPE_INTEGER, m_id);
 
    BOOL bResult = DBExecute(hStmt);
    DBFreeStatement(hStmt);
@@ -2853,7 +2859,7 @@ bool Node::confPollSnmp(UINT32 dwRqId)
          lockProperties();
          if ((m_lldpNodeId == NULL) || _tcscmp(m_lldpNodeId, szBuffer))
          {
-            safe_free(m_lldpNodeId);
+            free(m_lldpNodeId);
             m_lldpNodeId = _tcsdup(szBuffer);
             hasChanges = true;
             sendPollerMsg(dwRqId, _T("   LLDP node ID changed to %s\r\n"), m_lldpNodeId);
index 04f9925..3a0df4a 100644 (file)
@@ -759,6 +759,8 @@ static BOOL H_UpgradeFromV446(int currVersion, int newVersion)
       _T("  layout_data varchar(4000) null,")
       _T("PRIMARY KEY(device_oid))")));
 
+   CHK_EXEC(_T("ALTER TABLE nodes ADD lldp_id varchar(63)"));
+
    CHK_EXEC(SetSchemaVersion(447));
    return TRUE;
 }