2 ** NetXMS - Network Management System
3 ** Copyright (C) 2003-2017 Victor Kirhenshtein
5 ** This program is free software; you can redistribute it and/or modify
6 ** it under the terms of the GNU General Public License as published by
7 ** the Free Software Foundation; either version 2 of the License, or
8 ** (at your option) any later version.
10 ** This program is distributed in the hope that it will be useful,
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 ** GNU General Public License for more details.
15 ** You should have received a copy of the GNU General Public License
16 ** along with this program; if not, write to the Free Software
17 ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 ** File: nms_objects.h
23 #ifndef _nms_objects_h_
24 #define _nms_objects_h_
26 #include <nms_agent.h>
27 #include <netxms_maps.h>
28 #include <geolocation.h>
30 #include "nxcore_jobs.h"
34 * Forward declarations of classes
38 class DataCollectionTarget
;
41 * Global variables used by inline methods
43 extern UINT32 g_dwDiscoveryPollingInterval
;
44 extern UINT32 g_dwStatusPollingInterval
;
45 extern UINT32 g_dwConfigurationPollingInterval
;
46 extern UINT32 g_dwRoutingTableUpdateInterval
;
47 extern UINT32 g_dwTopologyPollingInterval
;
48 extern UINT32 g_dwConditionPollingInterval
;
49 extern UINT32 g_instancePollingInterval
;
50 extern INT16 g_defaultAgentCacheMode
;
53 * Utility functions used by inline methods
55 bool NXCORE_EXPORTABLE
ExecuteQueryOnObject(DB_HANDLE hdb
, UINT32 objectId
, const TCHAR
*query
);
60 #define MAX_INTERFACES 4096
61 #define MAX_ATTR_NAME_LEN 128
62 #define INVALID_INDEX 0xFFFFFFFF
67 #define MAX_LAST_EVENTS 8
69 #define LAST_EVENT_NODE_DOWN 0
70 #define LAST_EVENT_AGENT_DOWN 1
75 #define BUILTIN_OID_NETWORK 1
76 #define BUILTIN_OID_SERVICEROOT 2
77 #define BUILTIN_OID_TEMPLATEROOT 3
78 #define BUILTIN_OID_ZONE0 4
79 #define BUILTIN_OID_POLICYROOT 5
80 #define BUILTIN_OID_NETWORKMAPROOT 6
81 #define BUILTIN_OID_DASHBOARDROOT 7
82 #define BUILTIN_OID_BUSINESSSERVICEROOT 9
85 * "All zones" pseudo-ID
87 #define ALL_ZONES ((UINT32)0xFFFFFFFF)
92 * Extended agent connection
94 class NXCORE_EXPORTABLE AgentConnectionEx
: public AgentConnection
98 AgentTunnel
*m_tunnel
;
99 AgentTunnel
*m_proxyTunnel
;
101 virtual AbstractCommChannel
*createChannel();
102 virtual void onTrap(NXCPMessage
*msg
);
103 virtual void onSyslogMessage(NXCPMessage
*pMsg
);
104 virtual void onDataPush(NXCPMessage
*msg
);
105 virtual void onFileMonitoringData(NXCPMessage
*msg
);
106 virtual void onSnmpTrap(NXCPMessage
*pMsg
);
107 virtual UINT32
processCollectedData(NXCPMessage
*msg
);
108 virtual UINT32
processBulkCollectedData(NXCPMessage
*request
, NXCPMessage
*response
);
109 virtual bool processCustomMessage(NXCPMessage
*msg
);
111 virtual ~AgentConnectionEx();
114 AgentConnectionEx(UINT32 nodeId
, const InetAddress
& ipAddr
, WORD port
= AGENT_LISTEN_PORT
, int authMethod
= AUTH_NONE
, const TCHAR
*secret
= NULL
, bool allowCompression
= true);
115 AgentConnectionEx(UINT32 nodeId
, AgentTunnel
*tunnel
, int authMethod
= AUTH_NONE
, const TCHAR
*secret
= NULL
, bool allowCompression
= true);
117 UINT32
deployPolicy(AgentPolicy
*policy
);
118 UINT32
uninstallPolicy(AgentPolicy
*policy
);
120 void setTunnel(AgentTunnel
*tunnel
);
122 using AgentConnection
::setProxy
;
123 void setProxy(AgentTunnel
*tunnel
, int authMethod
, const TCHAR
*secret
);
131 POLLER_TYPE_STATUS
= 0,
132 POLLER_TYPE_CONFIGURATION
= 1,
133 POLLER_TYPE_INSTANCE_DISCOVERY
= 2,
134 POLLER_TYPE_ROUTING_TABLE
= 3,
135 POLLER_TYPE_DISCOVERY
= 4,
136 POLLER_TYPE_BUSINESS_SERVICE
= 5,
137 POLLER_TYPE_CONDITION
= 6,
138 POLLER_TYPE_TOPOLOGY
= 7
144 class NXCORE_EXPORTABLE PollerInfo
152 PollerInfo(PollerType type
, NetObj
*object
) { m_type
= type
; m_object
= object
; _tcscpy(m_status
, _T("awaiting execution")); }
155 PollerType
getType() const { return m_type
; }
156 NetObj
*getObject() const { return m_object
; }
157 const TCHAR
*getStatus() const { return m_status
; }
159 void startExecution() { _tcscpy(m_status
, _T("started")); }
160 void setStatus(const TCHAR
*status
) { nx_strncpy(m_status
, status
, 128); }
174 * Auto bind/apply decisions
176 enum AutoBindDecision
178 AutoBindDecision_Ignore
= -1,
179 AutoBindDecision_Unbind
= 0,
180 AutoBindDecision_Bind
= 1
186 #define ZONE_TYPE_PASSIVE 0
187 #define ZONE_TYPE_ACTIVE 1
190 * Template update types
192 #define APPLY_TEMPLATE 0
193 #define REMOVE_TEMPLATE 1
196 * Queued template update information
198 struct TEMPLATE_UPDATE_INFO
207 * Object index element
218 class NXCORE_EXPORTABLE ObjectIndex
223 INDEX_ELEMENT
*m_elements
;
226 int findElement(QWORD key
);
232 bool put(QWORD key
, NetObj
*object
);
233 void remove(QWORD key
);
234 NetObj
*get(QWORD key
);
235 NetObj
*find(bool (*comparator
)(NetObj
*, void *), void *data
);
236 ObjectArray
<NetObj
> *findObjects(bool (*comparator
)(NetObj
*, void *), void *data
);
239 ObjectArray
<NetObj
> *getObjects(bool updateRefCount
, bool (*filter
)(NetObj
*, void *) = NULL
, void *userData
= NULL
);
241 void forEach(void (*callback
)(NetObj
*, void *), void *data
);
244 struct InetAddressIndexEntry
;
247 * Object index by IP address
249 class NXCORE_EXPORTABLE InetAddressIndex
252 InetAddressIndexEntry
*m_root
;
259 bool put(const InetAddress
& addr
, NetObj
*object
);
260 bool put(const InetAddressList
*addrList
, NetObj
*object
);
261 void remove(const InetAddress
& addr
);
262 void remove(const InetAddressList
*addrList
);
263 NetObj
*get(const InetAddress
& addr
);
264 NetObj
*find(bool (*comparator
)(NetObj
*, void *), void *data
);
267 ObjectArray
<NetObj
> *getObjects(bool updateRefCount
, bool (*filter
)(NetObj
*, void *) = NULL
, void *userData
= NULL
);
269 void forEach(void (*callback
)(const InetAddress
&, NetObj
*, void *), void *data
);
282 TCHAR
*m_description
;
287 UINT32 m_parentIndex
;
288 ObjectArray
<Component
> m_childs
;
291 Component(UINT32 index
, const TCHAR
*name
);
292 virtual ~Component();
294 UINT32
updateFromSnmp(SNMP_Transport
*snmp
);
295 void buildTree(ObjectArray
<Component
> *elements
);
297 UINT32
getIndex() { return m_index
; }
298 UINT32
getParentIndex() { return m_parentIndex
; }
299 NXSL_Array
*getChildrenForNXSL();
301 UINT32
getClass() { return m_class
; }
302 const TCHAR
*getFirmware() { return m_firmware
; }
303 const TCHAR
*getModel() { return m_model
; }
304 const TCHAR
*getName() { return m_name
; }
305 const TCHAR
*getSerial() { return m_serial
; }
306 const TCHAR
*getVendor() { return m_vendor
; }
308 UINT32
fillMessage(NXCPMessage
*msg
, UINT32 baseId
);
310 void print(CONSOLE_CTX console
, int level
);
314 * Node component tree
316 class ComponentTree
: public RefCountObject
322 ComponentTree(Component
*root
);
323 virtual ~ComponentTree();
325 void fillMessage(NXCPMessage
*msg
, UINT32 baseId
);
326 void print(CONSOLE_CTX console
) { if (m_root
!= NULL
) m_root
->print(console
, 0); }
328 bool isEmpty() { return m_root
== NULL
; }
329 Component
*getRoot() { return m_root
; }
333 * Software package information
335 class SoftwarePackage
343 TCHAR
*m_description
;
350 void fillMessage(NXCPMessage
*msg
, UINT32 baseId
) const;
352 const TCHAR
*getName() const { return m_name
; }
353 const TCHAR
*getVersion() const { return m_version
; }
355 static SoftwarePackage
*createFromTableRow(const Table
*table
, int row
);
359 * Summary table flags
361 #define SUMMARY_TABLE_MULTI_INSTANCE 0x0001
362 #define SUMMARY_TABLE_TABLE_DCI_SOURCE 0x0002
365 * Summary table column flags
367 #define COLUMN_DEFINITION_REGEXP_MATCH 0x0001
368 #define COLUMN_DEFINITION_MULTIVALUED 0x0002
371 * Object modification flags
373 #define MODIFY_RUNTIME 0x0000
374 #define MODIFY_OTHER 0x0001
375 #define MODIFY_CUSTOM_ATTRIBUTES 0x0002
376 #define MODIFY_DATA_COLLECTION 0x0004
377 #define MODIFY_RELATIONS 0x0008
378 #define MODIFY_COMMON_PROPERTIES 0x0010
379 #define MODIFY_ACCESS_LIST 0x0020
380 #define MODIFY_NODE_PROPERTIES 0x0040
381 #define MODIFY_INTERFACE_PROPERTIES 0x0080
382 #define MODIFIED_CLUSTER_RESOURCES 0x0100
383 #define MODIFY_MAP_CONTENT 0x0200
384 #define MODIFY_SENSOR_PROPERTIES 0x0400
385 #define MODIFY_ALL 0xFFFF
388 * Column definition for DCI summary table
390 class NXCORE_EXPORTABLE SummaryTableColumn
393 TCHAR m_name
[MAX_DB_STRING
];
394 TCHAR m_dciName
[MAX_PARAM_NAME
];
396 TCHAR m_separator
[16];
398 SummaryTableColumn(NXCPMessage
*msg
, UINT32 baseId
);
399 SummaryTableColumn(TCHAR
*configStr
);
401 void createExportRecord(String
&xml
, int id
);
405 * DCI summary table class
407 class NXCORE_EXPORTABLE SummaryTable
412 TCHAR m_title
[MAX_DB_STRING
];
414 ObjectArray
<SummaryTableColumn
> *m_columns
;
415 TCHAR
*m_filterSource
;
417 AggregationFunction m_aggregationFunction
;
418 time_t m_periodStart
;
420 TCHAR m_menuPath
[MAX_DB_STRING
];
421 TCHAR m_tableDciName
[MAX_PARAM_NAME
];
423 SummaryTable(INT32 id
, DB_RESULT hResult
);
426 static SummaryTable
*loadFromDB(INT32 id
, UINT32
*rcc
);
428 SummaryTable(NXCPMessage
*msg
);
431 bool filter(DataCollectionTarget
*node
);
432 Table
*createEmptyResultTable();
434 int getNumColumns() const { return m_columns
->size(); }
435 SummaryTableColumn
*getColumn(int index
) const { return m_columns
->get(index
); }
436 AggregationFunction
getAggregationFunction() const { return m_aggregationFunction
; }
437 const TCHAR
*getTableDciName() const { return m_tableDciName
; }
438 time_t getPeriodStart() const { return m_periodStart
; }
439 time_t getPeriodEnd() const { return m_periodEnd
; }
440 bool isMultiInstance() const { return (m_flags
& SUMMARY_TABLE_MULTI_INSTANCE
) ?
true : false; }
441 bool isTableDciSource() const { return (m_flags
& SUMMARY_TABLE_TABLE_DCI_SOURCE
) ?
true : false; }
443 void createExportRecord(String
&xml
) const;
447 * Object-associated URL
449 class NXCORE_EXPORTABLE ObjectUrl
454 TCHAR
*m_description
;
457 ObjectUrl(NXCPMessage
*msg
, UINT32 baseId
);
458 ObjectUrl(DB_RESULT hResult
, int row
);
461 void fillMessage(NXCPMessage
*msg
, UINT32 baseId
);
463 UINT32
getId() const { return m_id
; }
464 const TCHAR
*getUrl() const { return m_url
; }
465 const TCHAR
*getDescription() const { return m_description
; }
467 json_t
*toJson() const;
471 * Base class for network objects
473 class NXCORE_EXPORTABLE NetObj
475 DISABLE_COPY_CTOR(NetObj
)
478 static void onObjectDeleteCallback(NetObj
*object
, void *data
);
480 void getFullChildListInternal(ObjectIndex
*list
, bool eventSourceOnly
);
485 time_t m_timestamp
; // Last change time stamp
486 UINT32 m_dwRefCount
; // Number of references. Object can be destroyed only when this counter is zero
487 TCHAR m_name
[MAX_OBJECT_NAME
];
488 TCHAR
*m_comments
; // User comments
490 int m_statusCalcAlg
; // Status calculation algorithm
491 int m_statusPropAlg
; // Status propagation algorithm
492 int m_fixedStatus
; // Status if propagation is "Fixed"
493 int m_statusShift
; // Shift value for "shifted" status propagation
494 int m_statusTranslation
[4];
495 int m_statusSingleThreshold
;
496 int m_statusThresholds
[4];
498 UINT32 m_runtimeFlags
;
504 bool m_maintenanceMode
;
505 UINT64 m_maintenanceEventId
;
507 MUTEX m_mutexProperties
; // Object data access mutex
508 MUTEX m_mutexRefCount
; // Reference counter access mutex
509 RWLOCK m_rwlockParentList
; // Lock for parent list
510 RWLOCK m_rwlockChildList
; // Lock for child list
511 GeoLocation m_geoLocation
;
512 PostalAddress
*m_postalAddress
;
513 ClientSession
*m_pollRequestor
;
514 UINT32 m_submapId
; // Map object which should be open on drill-down request
515 IntegerArray
<UINT32
> *m_dashboards
; // Dashboards associated with this object
516 ObjectArray
<ObjectUrl
> *m_urls
; // URLs associated with this object
518 ObjectArray
<NetObj
> *m_childList
; // Array of pointers to child objects
519 ObjectArray
<NetObj
> *m_parentList
; // Array of pointers to parent objects
521 AccessList
*m_accessList
;
522 bool m_inheritAccessRights
;
525 IntegerArray
<UINT32
> *m_trustedNodes
;
527 StringMap m_customAttributes
;
528 StringObjectMap
<ModuleData
> *m_moduleData
;
530 void lockProperties() const { MutexLock(m_mutexProperties
); }
531 void unlockProperties() const { MutexUnlock(m_mutexProperties
); }
532 void lockACL() { MutexLock(m_mutexACL
); }
533 void unlockACL() { MutexUnlock(m_mutexACL
); }
534 void lockParentList(bool writeLock
)
537 RWLockWriteLock(m_rwlockParentList
, INFINITE
);
539 RWLockReadLock(m_rwlockParentList
, INFINITE
);
541 void unlockParentList() { RWLockUnlock(m_rwlockParentList
); }
542 void lockChildList(bool writeLock
)
545 RWLockWriteLock(m_rwlockChildList
, INFINITE
);
547 RWLockReadLock(m_rwlockChildList
, INFINITE
);
549 void unlockChildList() { RWLockUnlock(m_rwlockChildList
); }
551 void setModified(UINT32 flags
, bool notify
= true); // Used to mark object as modified
553 bool loadACLFromDB(DB_HANDLE hdb
);
554 bool saveACLToDB(DB_HANDLE hdb
);
555 bool loadCommonProperties(DB_HANDLE hdb
);
556 bool saveCommonProperties(DB_HANDLE hdb
);
557 bool loadTrustedNodes(DB_HANDLE hdb
);
558 bool saveTrustedNodes(DB_HANDLE hdb
);
559 bool executeQueryOnObject(DB_HANDLE hdb
, const TCHAR
*query
) { return ExecuteQueryOnObject(hdb
, m_id
, query
); }
561 virtual void prepareForDeletion();
562 virtual void onObjectDelete(UINT32 dwObjectId
);
564 virtual void fillMessageInternal(NXCPMessage
*msg
);
565 virtual void fillMessageInternalStage2(NXCPMessage
*msg
);
566 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*msg
);
568 void addLocationToHistory();
569 bool isLocationTableExists(DB_HANDLE hdb
);
570 bool createLocationHistoryTable(DB_HANDLE hdb
);
576 virtual int getObjectClass() const { return OBJECT_GENERIC
; }
577 virtual const TCHAR
*getObjectClassName() const;
579 UINT32
getId() const { return m_id
; }
580 const TCHAR
*getName() const { return m_name
; }
581 int getStatus() const { return m_status
; }
582 UINT32
getState() const { return m_state
; }
583 UINT32
getRuntimeFlags() const { return m_runtimeFlags
; }
584 UINT32
getFlags() const { return m_flags
; }
585 int getPropagatedStatus();
586 time_t getTimeStamp() const { return m_timestamp
; }
587 const uuid
& getGuid() const { return m_guid
; }
588 const TCHAR
*getComments() const { return CHECK_NULL_EX(m_comments
); }
590 const GeoLocation
& getGeoLocation() const { return m_geoLocation
; }
591 void setGeoLocation(const GeoLocation
& geoLocation
);
593 const PostalAddress
*getPostalAddress() const { return m_postalAddress
; }
594 void setPostalAddress(PostalAddress
* addr
) { lockProperties(); delete m_postalAddress
; m_postalAddress
= addr
; setModified(MODIFY_COMMON_PROPERTIES
); unlockProperties(); }
596 const uuid
& getMapImage() { return m_image
; }
597 void setMapImage(const uuid
& image
) { lockProperties(); m_image
= image
; setModified(MODIFY_COMMON_PROPERTIES
); unlockProperties(); }
599 bool isModified() const { return m_modified
!= 0; }
600 bool isDeleted() const { return m_isDeleted
; }
601 bool isOrphaned() const { return m_parentList
->size() == 0; }
602 bool isEmpty() const { return m_childList
->size() == 0; }
604 bool isSystem() const { return m_isSystem
; }
605 void setSystemFlag(bool flag
) { m_isSystem
= flag
; }
606 void setFlag(UINT32 flag
) { lockProperties(); m_flags
|= flag
; setModified(MODIFY_COMMON_PROPERTIES
); unlockProperties(); }
607 void clearFlag(UINT32 flag
) { lockProperties(); m_flags
&= ~flag
; setModified(MODIFY_COMMON_PROPERTIES
); unlockProperties(); }
609 UINT32
getRefCount();
613 bool isChild(UINT32 id
);
614 bool isTrustedNode(UINT32 id
);
616 void addChild(NetObj
*object
); // Add reference to child object
617 void addParent(NetObj
*object
); // Add reference to parent object
619 void deleteChild(NetObj
*object
); // Delete reference to child object
620 void deleteParent(NetObj
*object
); // Delete reference to parent object
622 void deleteObject(NetObj
*initiator
= NULL
); // Prepare object for deletion
624 bool isHidden() { return m_isHidden
; }
627 void markAsModified(UINT32 flags
) { lockProperties(); setModified(flags
); unlockProperties(); } // external API to mark object as modified
629 virtual bool saveToDatabase(DB_HANDLE hdb
);
630 virtual bool saveRuntimeData(DB_HANDLE hdb
);
631 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
632 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
633 virtual void linkObjects();
635 void setId(UINT32 dwId
) { m_id
= dwId
; setModified(MODIFY_ALL
); }
636 void generateGuid() { m_guid
= uuid
::generate(); }
637 void setName(const TCHAR
*pszName
) { lockProperties(); _tcslcpy(m_name
, pszName
, MAX_OBJECT_NAME
); setModified(MODIFY_COMMON_PROPERTIES
); unlockProperties(); }
638 void resetStatus() { m_status
= STATUS_UNKNOWN
; setModified(MODIFY_RUNTIME
); }
639 void setComments(TCHAR
*text
); /* text must be dynamically allocated */
641 bool isInMaintenanceMode() const { return m_maintenanceMode
; }
642 UINT64
getMaintenanceEventId() const { return m_maintenanceEventId
; }
643 virtual void enterMaintenanceMode();
644 virtual void leaveMaintenanceMode();
646 void fillMessage(NXCPMessage
*msg
);
647 UINT32
modifyFromMessage(NXCPMessage
*msg
);
649 virtual void postModify();
651 void commentsToMessage(NXCPMessage
*pMsg
);
653 virtual void setMgmtStatus(BOOL bIsManaged
);
654 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
656 UINT32
getUserRights(UINT32 dwUserId
);
657 BOOL
checkAccessRights(UINT32 dwUserId
, UINT32 dwRequiredRights
);
658 void dropUserAccess(UINT32 dwUserId
);
660 void addChildNodesToList(ObjectArray
<Node
> *nodeList
, UINT32 dwUserId
);
661 void addChildDCTargetsToList(ObjectArray
<DataCollectionTarget
> *dctList
, UINT32 dwUserId
);
663 TCHAR
*getCustomAttribute(const TCHAR
*name
, TCHAR
*buffer
, size_t size
) const;
664 TCHAR
*getCustomAttributeCopy(const TCHAR
*name
) const;
665 NXSL_Value
*getCustomAttributeForNXSL(const TCHAR
*name
) const;
666 NXSL_Value
*getCustomAttributesForNXSL() const;
667 void setCustomAttribute(const TCHAR
*name
, const TCHAR
*value
);
668 void setCustomAttributePV(const TCHAR
*name
, TCHAR
*value
);
669 void deleteCustomAttribute(const TCHAR
*name
);
671 virtual NXSL_Value
*createNXSLObject();
673 ModuleData
*getModuleData(const TCHAR
*module
);
674 void setModuleData(const TCHAR
*module
, ModuleData
*data
);
676 ObjectArray
<NetObj
> *getParentList(int typeFilter
);
677 ObjectArray
<NetObj
> *getChildList(int typeFilter
);
678 ObjectArray
<NetObj
> *getFullChildList(bool eventSourceOnly
, bool updateRefCount
);
680 NetObj
*findChildObject(const TCHAR
*name
, int typeFilter
);
681 Node
*findChildNode(const InetAddress
& addr
);
683 int getChildCount() { return m_childList
->size(); }
684 int getParentCount() { return m_parentList
->size(); }
686 virtual NXSL_Array
*getParentsForNXSL();
687 virtual NXSL_Array
*getChildrenForNXSL();
689 virtual bool showThresholdSummary();
690 virtual bool isEventSource();
691 virtual bool isDataCollectionTarget();
693 void setStatusCalculation(int method
, int arg1
= 0, int arg2
= 0, int arg3
= 0, int arg4
= 0);
694 void setStatusPropagation(int method
, int arg1
= 0, int arg2
= 0, int arg3
= 0, int arg4
= 0);
696 void sendPollerMsg(UINT32 dwRqId
, const TCHAR
*pszFormat
, ...);
698 virtual json_t
*toJson();
701 const TCHAR
*dbgGetParentList(TCHAR
*szBuffer
);
702 const TCHAR
*dbgGetChildList(TCHAR
*szBuffer
);
704 static const TCHAR
*getObjectClassName(int objectClass
);
705 TCHAR
*expandText(const TCHAR
*textTemplate
, const Alarm
*alarm
, const Event
*event
, const TCHAR
*userName
, const StringMap
*inputFields
);
709 * Get object's reference count
711 inline UINT32 NetObj
::getRefCount()
715 MutexLock(m_mutexRefCount
);
716 dwRefCount
= m_dwRefCount
;
717 MutexUnlock(m_mutexRefCount
);
722 * Increment object's reference count
724 inline void NetObj
::incRefCount()
726 MutexLock(m_mutexRefCount
);
728 MutexUnlock(m_mutexRefCount
);
732 * Decrement object's reference count
734 inline void NetObj
::decRefCount()
736 MutexLock(m_mutexRefCount
);
737 if (m_dwRefCount
> 0)
739 MutexUnlock(m_mutexRefCount
);
743 * Data collection template class
745 class NXCORE_EXPORTABLE Template
: public NetObj
748 ObjectArray
<DCObject
> *m_dcObjects
;
751 bool m_dciListModified
;
752 TCHAR m_szCurrDCIOwner
[MAX_SESSION_NAME
];
753 TCHAR
*m_applyFilterSource
;
754 NXSL_Program
*m_applyFilter
;
755 RWLOCK m_dciAccessLock
;
757 virtual void prepareForDeletion();
759 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
760 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
762 virtual void onDataCollectionChange();
764 void loadItemsFromDB(DB_HANDLE hdb
);
766 void updateInstanceDiscoveryItems(DCItem
*dci
);
768 void lockDciAccess(bool writeLock
) { if (writeLock
) { RWLockWriteLock(m_dciAccessLock
, INFINITE
); } else { RWLockReadLock(m_dciAccessLock
, INFINITE
); } }
769 void unlockDciAccess() { RWLockUnlock(m_dciAccessLock
); }
771 void deleteChildDCIs(UINT32 dcObjectId
);
772 void destroyItem(DCObject
*object
, int index
);
776 Template(const TCHAR
*pszName
);
777 Template(ConfigEntry
*config
);
780 virtual int getObjectClass() const { return OBJECT_TEMPLATE
; }
782 virtual bool saveToDatabase(DB_HANDLE hdb
);
783 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
784 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
786 virtual json_t
*toJson();
788 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
790 int getVersionMajor() { return m_dwVersion
>> 16; }
791 int getVersionMinor() { return m_dwVersion
& 0xFFFF; }
793 int getItemCount() { return m_dcObjects
->size(); }
794 bool addDCObject(DCObject
*object
, bool alreadyLocked
= false);
795 bool updateDCObject(UINT32 dwItemId
, NXCPMessage
*pMsg
, UINT32
*pdwNumMaps
, UINT32
**ppdwMapIndex
, UINT32
**ppdwMapId
);
796 bool deleteDCObject(UINT32 dcObjectId
, bool needLock
);
797 bool setItemStatus(UINT32 dwNumItems
, UINT32
*pdwItemList
, int iStatus
);
798 int getItemType(UINT32 dwItemId
);
799 DCObject
*getDCObjectById(UINT32 itemId
, bool lock
= true);
800 DCObject
*getDCObjectByGUID(const uuid
& guid
, bool lock
= true);
801 DCObject
*getDCObjectByTemplateId(UINT32 tmplItemId
);
802 DCObject
*getDCObjectByIndex(int index
);
803 DCObject
*getDCObjectByName(const TCHAR
*name
);
804 DCObject
*getDCObjectByDescription(const TCHAR
*description
);
805 NXSL_Value
*getAllDCObjectsForNXSL(const TCHAR
*name
, const TCHAR
*description
);
806 bool lockDCIList(int sessionId
, const TCHAR
*pszNewOwner
, TCHAR
*pszCurrOwner
);
807 bool unlockDCIList(int sessionId
);
808 void setDCIModificationFlag() { m_dciListModified
= true; }
809 void sendItemsToClient(ClientSession
*pSession
, UINT32 dwRqId
);
810 bool isLockedBySession(int sessionId
) { return m_dciLockStatus
== sessionId
; }
811 IntegerArray
<UINT32
> *getDCIEventsList();
812 StringSet
*getDCIScriptList();
814 BOOL
applyToTarget(DataCollectionTarget
*pNode
);
815 AutoBindDecision
isApplicable(DataCollectionTarget
*object
);
816 bool isAutoApplyEnabled() { return (m_flags
& TF_AUTO_APPLY
) ?
true : false; }
817 bool isAutoRemoveEnabled() { return ((m_flags
& (TF_AUTO_APPLY
| TF_AUTO_REMOVE
)) == (TF_AUTO_APPLY
| TF_AUTO_REMOVE
)) ?
true : false; }
818 void setAutoApplyFilter(const TCHAR
*filter
);
820 void queueRemoveFromTarget(UINT32 targetId
, bool removeDCI
);
822 void createExportRecord(String
&str
);
823 void updateFromImport(ConfigEntry
*config
);
825 bool enumDCObjects(bool (* pfCallback
)(DCObject
*, UINT32
, void *), void *pArg
);
826 void associateItems();
828 UINT32
getLastValues(NXCPMessage
*msg
, bool objectTooltipOnly
, bool overviewOnly
, bool includeNoValueObjects
);
836 class NXCORE_EXPORTABLE Interface
: public NetObj
839 UINT32 m_parentInterfaceId
;
841 BYTE m_macAddr
[MAC_ADDR_LENGTH
];
842 InetAddressList m_ipAddressList
;
843 TCHAR m_description
[MAX_DB_STRING
]; // Interface description - value of ifDescr for SNMP, equals to name for NetXMS agent
844 TCHAR m_alias
[MAX_DB_STRING
]; // Interface alias - value of ifAlias for SNMP, empty for NetXMS agent
848 UINT32 m_bridgePortNumber
; // 802.1D port number
849 UINT32 m_slotNumber
; // Vendor/device specific slot number
850 UINT32 m_portNumber
; // Vendor/device specific port number
851 UINT32 m_peerNodeId
; // ID of peer node object, or 0 if unknown
852 UINT32 m_peerInterfaceId
; // ID of peer interface object, or 0 if unknown
853 LinkLayerProtocol m_peerDiscoveryProtocol
; // Protocol used to discover peer node
854 INT16 m_adminState
; // interface administrative state
855 INT16 m_operState
; // interface operational state
856 INT16 m_pendingOperState
;
857 INT16 m_confirmedOperState
;
858 INT16 m_dot1xPaeAuthState
; // 802.1x port auth state
859 INT16 m_dot1xBackendAuthState
; // 802.1x backend auth state
860 UINT64 m_lastDownEventId
;
862 int m_statusPollCount
;
863 int m_operStatePollCount
;
864 int m_requiredPollCount
;
867 time_t m_pingLastTimeStamp
;
868 int m_ifTableSuffixLen
;
869 UINT32
*m_ifTableSuffix
;
871 void icmpStatusPoll(UINT32 rqId
, UINT32 nodeIcmpProxy
, Cluster
*cluster
, InterfaceAdminState
*adminState
, InterfaceOperState
*operState
);
872 void paeStatusPoll(UINT32 rqId
, SNMP_Transport
*pTransport
, Node
*node
);
875 virtual void onObjectDelete(UINT32 dwObjectId
);
877 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
878 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
880 void setExpectedStateInternal(int state
);
884 Interface(const InetAddressList
& addrList
, UINT32 zoneUIN
, bool bSyntheticMask
);
885 Interface(const TCHAR
*name
, const TCHAR
*descr
, UINT32 index
, const InetAddressList
& addrList
, UINT32 ifType
, UINT32 zoneUIN
);
886 virtual ~Interface();
888 virtual int getObjectClass() const { return OBJECT_INTERFACE
; }
889 virtual bool saveToDatabase(DB_HANDLE hdb
);
890 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
891 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
893 virtual NXSL_Value
*createNXSLObject();
895 virtual json_t
*toJson();
897 Node
*getParentNode();
898 UINT32
getParentNodeId();
899 UINT32
getParentInterfaceId() const { return m_parentInterfaceId
; }
901 const InetAddressList
*getIpAddressList() { return &m_ipAddressList
; }
902 const InetAddress
& getFirstIpAddress();
903 UINT32
getZoneUIN() const { return m_zoneUIN
; }
904 UINT32
getIfIndex() const { return m_index
; }
905 UINT32
getIfType() const { return m_type
; }
906 UINT32
getMTU() const { return m_mtu
; }
907 UINT64
getSpeed() const { return m_speed
; }
908 UINT32
getBridgePortNumber() const { return m_bridgePortNumber
; }
909 UINT32
getSlotNumber() const { return m_slotNumber
; }
910 UINT32
getPortNumber() const { return m_portNumber
; }
911 UINT32
getPeerNodeId() const { return m_peerNodeId
; }
912 UINT32
getPeerInterfaceId() const { return m_peerInterfaceId
; }
913 LinkLayerProtocol
getPeerDiscoveryProtocol() const { return m_peerDiscoveryProtocol
; }
914 int getExpectedState() const { return (int)((m_flags
& IF_EXPECTED_STATE_MASK
) >> 28); }
915 int getAdminState() const { return (int)m_adminState
; }
916 int getOperState() const { return (int)m_operState
; }
917 int getConfirmedOperState() const { return (int)m_confirmedOperState
; }
918 int getDot1xPaeAuthState() const { return (int)m_dot1xPaeAuthState
; }
919 int getDot1xBackendAuthState() const { return (int)m_dot1xBackendAuthState
; }
920 const TCHAR
*getDescription() const { return m_description
; }
921 const TCHAR
*getAlias() const { return m_alias
; }
922 const BYTE
*getMacAddr() const { return m_macAddr
; }
923 int getIfTableSuffixLen() const { return m_ifTableSuffixLen
; }
924 const UINT32
*getIfTableSuffix() const { return m_ifTableSuffix
; }
925 UINT32
getPingTime();
926 bool isSyntheticMask() const { return (m_flags
& IF_SYNTHETIC_MASK
) ?
true : false; }
927 bool isPhysicalPort() const { return (m_flags
& IF_PHYSICAL_PORT
) ?
true : false; }
928 bool isLoopback() const { return (m_flags
& IF_LOOPBACK
) ?
true : false; }
929 bool isManuallyCreated() const { return (m_flags
& IF_CREATED_MANUALLY
) ?
true : false; }
930 bool isExcludedFromTopology() const { return (m_flags
& (IF_EXCLUDE_FROM_TOPOLOGY
| IF_LOOPBACK
)) ?
true : false; }
931 bool isFake() const { return (m_index
== 1) &&
932 (m_type
== IFTYPE_OTHER
) &&
933 !_tcscmp(m_name
, _T("unknown")); }
934 bool isSubInterface() const { return m_parentInterfaceId
!= 0; }
936 UINT64
getLastDownEventId() const { return m_lastDownEventId
; }
937 void setLastDownEventId(UINT64 id
) { m_lastDownEventId
= id
; }
939 void setMacAddr(const BYTE
*macAddr
, bool updateMacDB
);
940 void setIpAddress(const InetAddress
& addr
);
941 void setBridgePortNumber(UINT32 bpn
) { m_bridgePortNumber
= bpn
; setModified(MODIFY_INTERFACE_PROPERTIES
); }
942 void setSlotNumber(UINT32 slot
) { m_slotNumber
= slot
; setModified(MODIFY_INTERFACE_PROPERTIES
); }
943 void setPortNumber(UINT32 port
) { m_portNumber
= port
; setModified(MODIFY_INTERFACE_PROPERTIES
); }
944 void setPhysicalPortFlag(bool isPhysical
) { if (isPhysical
) m_flags
|= IF_PHYSICAL_PORT
; else m_flags
&= ~IF_PHYSICAL_PORT
; setModified(MODIFY_INTERFACE_PROPERTIES
); }
945 void setManualCreationFlag(bool isManual
) { if (isManual
) m_flags
|= IF_CREATED_MANUALLY
; else m_flags
&= ~IF_CREATED_MANUALLY
; setModified(MODIFY_INTERFACE_PROPERTIES
); }
946 void setPeer(Node
*node
, Interface
*iface
, LinkLayerProtocol protocol
, bool reflection
);
947 void clearPeer() { lockProperties(); m_peerNodeId
= 0; m_peerInterfaceId
= 0; m_peerDiscoveryProtocol
= LL_PROTO_UNKNOWN
; setModified(MODIFY_INTERFACE_PROPERTIES
); unlockProperties(); }
948 void setDescription(const TCHAR
*descr
) { lockProperties(); nx_strncpy(m_description
, descr
, MAX_DB_STRING
); setModified(MODIFY_INTERFACE_PROPERTIES
); unlockProperties(); }
949 void setAlias(const TCHAR
*alias
) { lockProperties(); nx_strncpy(m_alias
, alias
, MAX_DB_STRING
); setModified(MODIFY_INTERFACE_PROPERTIES
); unlockProperties(); }
950 void addIpAddress(const InetAddress
& addr
);
951 void deleteIpAddress(InetAddress addr
);
952 void setNetMask(const InetAddress
& addr
);
953 void setMTU(int mtu
) { m_mtu
= mtu
; setModified(MODIFY_INTERFACE_PROPERTIES
); }
954 void setSpeed(UINT64 speed
) { m_speed
= speed
; setModified(MODIFY_INTERFACE_PROPERTIES
); }
955 void setIfTableSuffix(int len
, const UINT32
*suffix
) { lockProperties(); free(m_ifTableSuffix
); m_ifTableSuffixLen
= len
; m_ifTableSuffix
= (len
> 0) ?
(UINT32
*)nx_memdup(suffix
, len
* sizeof(UINT32
)) : NULL
; setModified(MODIFY_INTERFACE_PROPERTIES
); unlockProperties(); }
956 void setParentInterface(UINT32 parentInterfaceId
) { m_parentInterfaceId
= parentInterfaceId
; setModified(MODIFY_INTERFACE_PROPERTIES
); }
958 void updateZoneUIN();
960 void statusPoll(ClientSession
*session
, UINT32 rqId
, Queue
*eventQueue
, Cluster
*cluster
, SNMP_Transport
*snmpTransport
, UINT32 nodeIcmpProxy
);
963 void setExpectedState(int state
) { lockProperties(); setExpectedStateInternal(state
); unlockProperties(); }
964 void setExcludeFromTopology(bool excluded
);
965 void updatePingData();
969 * Network service class
971 class NXCORE_EXPORTABLE NetworkService
: public NetObj
974 int m_serviceType
; // SSH, POP3, etc.
975 Node
*m_hostNode
; // Pointer to node object which hosts this service
976 UINT32 m_pollerNode
; // ID of node object which is used for polling
977 // If 0, m_pHostNode->m_dwPollerNode will be used
978 UINT16 m_proto
; // Protocol (TCP, UDP, etc.)
979 UINT16 m_port
; // TCP or UDP port number
980 InetAddress m_ipAddress
;
981 TCHAR
*m_request
; // Service-specific request
982 TCHAR
*m_response
; // Service-specific expected response
985 int m_requiredPollCount
;
986 UINT32 m_responseTime
; // Response time from last poll
988 virtual void onObjectDelete(UINT32 dwObjectId
);
990 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
991 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
995 NetworkService(int iServiceType
, WORD wProto
, WORD wPort
,
996 TCHAR
*pszRequest
, TCHAR
*pszResponse
,
997 Node
*pHostNode
= NULL
, UINT32 dwPollerNode
= 0);
998 virtual ~NetworkService();
1000 virtual int getObjectClass() const { return OBJECT_NETWORKSERVICE
; }
1002 virtual json_t
*toJson();
1004 virtual bool saveToDatabase(DB_HANDLE hdb
);
1005 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
1006 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
1008 void statusPoll(ClientSession
*session
, UINT32 rqId
, Node
*pollerNode
, Queue
*eventQueue
);
1010 UINT32
getResponseTime() { return m_responseTime
; }
1014 * VPN connector class
1016 class NXCORE_EXPORTABLE VPNConnector
: public NetObj
1019 UINT32 m_dwPeerGateway
; // Object ID of peer gateway
1020 ObjectArray
<InetAddress
> *m_localNetworks
;
1021 ObjectArray
<InetAddress
> *m_remoteNetworks
;
1023 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
1024 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
1026 Node
*getParentNode();
1030 VPNConnector(bool hidden
);
1031 virtual ~VPNConnector();
1033 virtual int getObjectClass() const { return OBJECT_VPNCONNECTOR
; }
1035 virtual json_t
*toJson();
1037 virtual bool saveToDatabase(DB_HANDLE hdb
);
1038 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
1039 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
1041 bool isLocalAddr(const InetAddress
& addr
);
1042 bool isRemoteAddr(const InetAddress
& addr
);
1043 UINT32
getPeerGatewayId() const { return m_dwPeerGateway
; }
1044 InetAddress
getPeerGatewayAddr();
1048 * Data collection proxy information structure
1056 UINT32 nodeInfoFieldId
;
1057 UINT32 nodeInfoCount
;
1061 * Common base class for all objects capable of collecting data
1063 class NXCORE_EXPORTABLE DataCollectionTarget
: public Template
1066 IntegerArray
<UINT32
> *m_deletedItems
;
1067 IntegerArray
<UINT32
> *m_deletedTables
;
1069 time_t m_pingLastTimeStamp
;
1070 time_t m_lastConfigurationPoll
;
1071 time_t m_lastStatusPoll
;
1072 time_t m_lastInstancePoll
;
1073 MUTEX m_hPollerMutex
;
1075 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
1076 virtual void fillMessageInternalStage2(NXCPMessage
*pMsg
);
1077 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
1079 virtual bool isDataCollectionDisabled();
1080 virtual void updatePingData();
1082 virtual void statusPoll(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1083 virtual void configurationPoll(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1084 virtual void instanceDiscoveryPoll(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1086 virtual StringMap
*getInstanceList(DCObject
*dco
);
1087 void doInstanceDiscovery(UINT32 requestId
);
1088 bool updateInstances(DCObject
*root
, StringMap
*instances
, UINT32 requestId
);
1090 void pollerLock() { MutexLock(m_hPollerMutex
); }
1091 void pollerUnlock() { MutexUnlock(m_hPollerMutex
); }
1093 NetObj
*objectFromParameter(const TCHAR
*param
);
1095 NXSL_VM
*runDataCollectionScript(const TCHAR
*param
, DataCollectionTarget
*targetObject
);
1097 void applyUserTemplates();
1098 void updateContainerMembership();
1100 void getItemDciValuesSummary(SummaryTable
*tableDefinition
, Table
*tableData
);
1101 void getTableDciValuesSummary(SummaryTable
*tableDefinition
, Table
*tableData
);
1103 void addProxyDataCollectionElement(ProxyInfo
*info
, const DCObject
*dco
);
1104 void addProxySnmpTarget(ProxyInfo
*info
, const Node
*node
);
1105 virtual void collectProxyInfo(ProxyInfo
*info
);
1106 static void collectProxyInfoCallback(NetObj
*object
, void *data
);
1109 DataCollectionTarget();
1110 DataCollectionTarget(const TCHAR
*name
);
1111 virtual ~DataCollectionTarget();
1113 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
1115 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
1116 virtual bool isDataCollectionTarget();
1118 virtual void enterMaintenanceMode();
1119 virtual void leaveMaintenanceMode();
1121 virtual UINT32
getInternalItem(const TCHAR
*param
, size_t bufSize
, TCHAR
*buffer
);
1122 virtual UINT32
getScriptItem(const TCHAR
*param
, size_t bufSize
, TCHAR
*buffer
, DataCollectionTarget
*targetObject
);
1123 virtual UINT32
getScriptTable(const TCHAR
*param
, Table
**result
, DataCollectionTarget
*targetObject
);
1125 virtual UINT32
getEffectiveSourceNode(DCObject
*dco
);
1127 virtual json_t
*toJson();
1129 UINT32
getListFromScript(const TCHAR
*param
, StringList
**list
, DataCollectionTarget
*targetObject
);
1130 UINT32
getStringMapFromScript(const TCHAR
*param
, StringMap
**map
, DataCollectionTarget
*targetObject
);
1132 UINT32
getTableLastValues(UINT32 dciId
, NXCPMessage
*msg
);
1133 UINT32
getThresholdSummary(NXCPMessage
*msg
, UINT32 baseId
);
1134 UINT32
getPerfTabDCIList(NXCPMessage
*pMsg
);
1135 void getDciValuesSummary(SummaryTable
*tableDefinition
, Table
*tableData
);
1137 void updateDciCache();
1138 void updateDCItemCacheSize(UINT32 dciId
, UINT32 conditionId
= 0);
1139 void cleanDCIData(DB_HANDLE hdb
);
1140 void queueItemsForPolling();
1141 bool processNewDCValue(DCObject
*dco
, time_t currTime
, const void *value
);
1142 void scheduleItemDataCleanup(UINT32 dciId
);
1143 void scheduleTableDataCleanup(UINT32 dciId
);
1145 bool applyTemplateItem(UINT32 dwTemplateId
, DCObject
*dcObject
);
1146 void cleanDeletedTemplateItems(UINT32 dwTemplateId
, UINT32 dwNumItems
, UINT32
*pdwItemList
);
1147 virtual void unbindFromTemplate(UINT32 dwTemplateId
, bool removeDCI
);
1149 virtual bool isEventSource();
1151 int getMostCriticalDCIStatus();
1153 UINT32
getPingTime();
1155 void statusPollWorkerEntry(PollerInfo
*poller
);
1156 void statusPollWorkerEntry(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1157 void statusPollPollerEntry(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1158 virtual bool isReadyForStatusPoll();
1159 void lockForStatusPoll();
1160 void unlockForStatusPoll();
1162 void configurationPollWorkerEntry(PollerInfo
*poller
);
1163 void configurationPollWorkerEntry(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1164 virtual bool isReadyForConfigurationPoll();
1165 void lockForConfigurationPoll();
1166 void unlockForConfigurationPoll();
1168 void instanceDiscoveryPollWorkerEntry(PollerInfo
*poller
);
1169 void instanceDiscoveryPollWorkerEntry(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1170 virtual bool isReadyForInstancePoll();
1171 void lockForInstancePoll();
1172 void unlockForInstancePoll();
1174 void executeHookScript(const TCHAR
*hookName
);
1177 inline bool DataCollectionTarget
::isReadyForInstancePoll()
1181 return (m_status
!= STATUS_UNMANAGED
) &&
1182 (!(m_flags
& DCF_DISABLE_CONF_POLL
)) &&
1183 (!(m_runtimeFlags
& DCDF_QUEUED_FOR_INSTANCE_POLL
)) &&
1184 (!(m_runtimeFlags
& DCDF_DELETE_IN_PROGRESS
)) &&
1185 (m_runtimeFlags
& DCDF_CONFIGURATION_POLL_PASSED
) &&
1186 ((UINT32
)(time(NULL
) - m_lastInstancePoll
) > g_instancePollingInterval
);
1190 inline void DataCollectionTarget
::lockForInstancePoll()
1193 m_runtimeFlags
|= DCDF_QUEUED_FOR_INSTANCE_POLL
;
1197 inline void DataCollectionTarget
::unlockForInstancePoll()
1200 m_runtimeFlags
&= ~DCDF_QUEUED_FOR_INSTANCE_POLL
;
1204 inline bool DataCollectionTarget
::isReadyForConfigurationPoll()
1209 if (m_runtimeFlags
& DCDF_FORCE_CONFIGURATION_POLL
)
1211 m_runtimeFlags
&= ~DCDF_FORCE_CONFIGURATION_POLL
;
1214 return (m_status
!= STATUS_UNMANAGED
) &&
1215 (!(m_flags
& DCF_DISABLE_CONF_POLL
)) &&
1216 (!(m_runtimeFlags
& DCDF_QUEUED_FOR_CONFIGURATION_POLL
)) &&
1217 (!(m_runtimeFlags
& DCDF_DELETE_IN_PROGRESS
)) &&
1218 ((UINT32
)(time(NULL
) - m_lastConfigurationPoll
) > g_dwConfigurationPollingInterval
);
1221 inline void DataCollectionTarget
::lockForConfigurationPoll()
1224 m_runtimeFlags
|= DCDF_QUEUED_FOR_CONFIGURATION_POLL
;
1228 inline void DataCollectionTarget
::unlockForConfigurationPoll()
1231 m_runtimeFlags
&= ~DCDF_QUEUED_FOR_CONFIGURATION_POLL
;
1235 inline bool DataCollectionTarget
::isReadyForStatusPoll()
1239 if (m_runtimeFlags
& DCDF_FORCE_STATUS_POLL
)
1241 m_runtimeFlags
&= ~DCDF_FORCE_STATUS_POLL
;
1244 return (m_status
!= STATUS_UNMANAGED
) &&
1245 (!(m_flags
& DCF_DISABLE_STATUS_POLL
)) &&
1246 (!(m_runtimeFlags
& DCDF_QUEUED_FOR_STATUS_POLL
)) &&
1247 (!(m_runtimeFlags
& DCDF_DELETE_IN_PROGRESS
)) &&
1248 (!(m_runtimeFlags
& DCDF_CONFIGURATION_POLL_PENDING
)) &&
1249 ((UINT32
)(time(NULL
) - m_lastStatusPoll
) > g_dwStatusPollingInterval
);
1251 inline void DataCollectionTarget
::lockForStatusPoll()
1254 m_runtimeFlags
|= DCDF_QUEUED_FOR_STATUS_POLL
;
1258 inline void DataCollectionTarget
::unlockForStatusPoll()
1261 m_runtimeFlags
&= ~DCDF_QUEUED_FOR_STATUS_POLL
;
1266 * Mobile device class
1268 class NXCORE_EXPORTABLE MobileDevice
: public DataCollectionTarget
1271 time_t m_lastReportTime
;
1275 TCHAR
*m_serialNumber
;
1279 LONG m_batteryLevel
;
1280 InetAddress m_ipAddress
;
1282 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
1283 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
1287 MobileDevice(const TCHAR
*name
, const TCHAR
*deviceId
);
1288 virtual ~MobileDevice();
1290 virtual int getObjectClass() const { return OBJECT_MOBILEDEVICE
; }
1292 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
1293 virtual bool saveToDatabase(DB_HANDLE hdb
);
1294 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
1296 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
1298 virtual NXSL_Value
*createNXSLObject();
1300 virtual json_t
*toJson();
1302 void updateSystemInfo(NXCPMessage
*msg
);
1303 void updateStatus(NXCPMessage
*msg
);
1305 const TCHAR
*getDeviceId() { return CHECK_NULL_EX(m_deviceId
); }
1306 const TCHAR
*getVendor() { return CHECK_NULL_EX(m_vendor
); }
1307 const TCHAR
*getModel() { return CHECK_NULL_EX(m_model
); }
1308 const TCHAR
*getSerialNumber() { return CHECK_NULL_EX(m_serialNumber
); }
1309 const TCHAR
*getOsName() { return CHECK_NULL_EX(m_osName
); }
1310 const TCHAR
*getOsVersion() { return CHECK_NULL_EX(m_osVersion
); }
1311 const TCHAR
*getUserId() { return CHECK_NULL_EX(m_userId
); }
1312 const LONG
getBatteryLevel() { return m_batteryLevel
; }
1314 virtual UINT32
getInternalItem(const TCHAR
*param
, size_t bufSize
, TCHAR
*buffer
);
1316 virtual bool isReadyForStatusPoll() { return false; }
1317 virtual bool isReadyForConfigurationPoll() { return false; }
1318 virtual bool isReadyForInstancePoll() { return false; }
1322 * Access point class
1324 class NXCORE_EXPORTABLE AccessPoint
: public DataCollectionTarget
1328 InetAddress m_ipAddress
;
1330 BYTE m_macAddr
[MAC_ADDR_LENGTH
];
1333 TCHAR
*m_serialNumber
;
1334 ObjectArray
<RadioInterfaceInfo
> *m_radioInterfaces
;
1335 AccessPointState m_apState
;
1336 AccessPointState m_prevState
;
1338 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
1339 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
1341 virtual void updatePingData();
1345 AccessPoint(const TCHAR
*name
, UINT32 index
, const BYTE
*macAddr
);
1346 virtual ~AccessPoint();
1348 virtual int getObjectClass() const { return OBJECT_ACCESSPOINT
; }
1350 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
1351 virtual bool saveToDatabase(DB_HANDLE hdb
);
1352 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
1354 virtual json_t
*toJson();
1356 void statusPollFromController(ClientSession
*session
, UINT32 rqId
, Queue
*eventQueue
, Node
*controller
, SNMP_Transport
*snmpTransport
);
1358 UINT32
getIndex() { return m_index
; }
1359 const BYTE
*getMacAddr() { return m_macAddr
; }
1360 const InetAddress
& getIpAddress() { return m_ipAddress
; }
1361 bool isMyRadio(int rfIndex
);
1362 bool isMyRadio(const BYTE
*macAddr
);
1363 void getRadioName(int rfIndex
, TCHAR
*buffer
, size_t bufSize
);
1364 AccessPointState
getState() { return m_apState
; }
1365 Node
*getParentNode();
1367 void attachToNode(UINT32 nodeId
);
1368 void setIpAddress(const InetAddress
& addr
) { lockProperties(); m_ipAddress
= addr
; setModified(MODIFY_OTHER
); unlockProperties(); }
1369 void updateRadioInterfaces(const ObjectArray
<RadioInterfaceInfo
> *ri
);
1370 void updateInfo(const TCHAR
*vendor
, const TCHAR
*model
, const TCHAR
*serialNumber
);
1371 void updateState(AccessPointState state
);
1373 virtual bool isReadyForStatusPoll() { return false; }
1374 virtual bool isReadyForConfigurationPoll() { return false; }
1375 virtual bool isReadyForInstancePoll() { return false; }
1381 class NXCORE_EXPORTABLE Cluster
: public DataCollectionTarget
1384 UINT32 m_dwClusterType
;
1385 ObjectArray
<InetAddress
> *m_syncNetworks
;
1386 UINT32 m_dwNumResources
;
1387 CLUSTER_RESOURCE
*m_pResourceList
;
1390 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
1391 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
1393 virtual void onDataCollectionChange();
1395 virtual void statusPoll(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1396 virtual void configurationPoll(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1398 UINT32
getResourceOwnerInternal(UINT32 id
, const TCHAR
*name
);
1402 Cluster(const TCHAR
*pszName
, UINT32 zoneUIN
);
1405 virtual int getObjectClass() const { return OBJECT_CLUSTER
; }
1406 virtual bool saveToDatabase(DB_HANDLE hdb
);
1407 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
1408 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
1409 virtual bool showThresholdSummary();
1411 virtual bool isReadyForInstancePoll() { return false; }
1413 virtual void unbindFromTemplate(UINT32 dwTemplateId
, bool removeDCI
);
1415 virtual NXSL_Value
*createNXSLObject();
1417 virtual json_t
*toJson();
1419 bool isSyncAddr(const InetAddress
& addr
);
1420 bool isVirtualAddr(const InetAddress
& addr
);
1421 bool isResourceOnNode(UINT32 dwResource
, UINT32 dwNode
);
1422 UINT32
getResourceOwner(UINT32 resourceId
) { return getResourceOwnerInternal(resourceId
, NULL
); }
1423 UINT32
getResourceOwner(const TCHAR
*resourceName
) { return getResourceOwnerInternal(0, resourceName
); }
1424 UINT32
getZoneUIN() const { return m_zoneUIN
; }
1426 UINT32
collectAggregatedData(DCItem
*item
, TCHAR
*buffer
);
1427 UINT32
collectAggregatedData(DCTable
*table
, Table
**result
);
1429 NXSL_Array
*getNodesForNXSL();
1433 * Chassis (represents physical chassis)
1435 class NXCORE_EXPORTABLE Chassis
: public DataCollectionTarget
1438 UINT32 m_controllerId
;
1440 INT16 m_rackPosition
;
1444 virtual void fillMessageInternal(NXCPMessage
*msg
);
1445 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*request
);
1447 virtual void onDataCollectionChange();
1448 virtual void collectProxyInfo(ProxyInfo
*info
);
1450 void updateRackBinding();
1451 void updateControllerBinding();
1455 Chassis(const TCHAR
*name
, UINT32 controllerId
);
1458 virtual int getObjectClass() const { return OBJECT_CHASSIS
; }
1459 virtual bool saveToDatabase(DB_HANDLE hdb
);
1460 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
1461 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
1462 virtual void linkObjects();
1463 virtual bool showThresholdSummary();
1464 virtual UINT32
getEffectiveSourceNode(DCObject
*dco
);
1466 virtual bool isReadyForStatusPoll() { return false; }
1467 virtual bool isReadyForConfigurationPoll() { return false; }
1468 virtual bool isReadyForInstancePoll() { return false; }
1470 virtual NXSL_Value
*createNXSLObject();
1472 virtual json_t
*toJson();
1474 UINT32
getControllerId() const { return m_controllerId
; }
1475 UINT32
getRackId() const { return m_rackId
; }
1476 INT16
getRackHeight() const { return m_rackHeight
; }
1477 INT16
getRackPosition() const { return m_rackPosition
; }
1478 bool bindUnderController() { return (m_flags
& CHF_BIND_UNDER_CONTROLLER
) ?
true : false; }
1480 void setBindUnderController(bool doBind
);
1484 * Sensor communication protocol type
1486 #define SENSOR_PROTO_UNKNOWN 0
1487 #define COMM_LORAWAN 1
1491 * Sensor device class
1493 #define SENSOR_CLASS_UNKNOWN 0
1494 #define SENSOR_UPS 1
1495 #define SENSOR_WATER_METER 2
1496 #define SENSOR_ELECTR_METER 3
1499 * Mobile device class
1501 class NXCORE_EXPORTABLE Sensor
: public DataCollectionTarget
1504 MacAddress m_macAddress
;
1505 UINT32 m_deviceClass
; // Internal device class UPS, meeter
1506 TCHAR
*m_vendor
; //Vendoer name lorawan...
1507 UINT32 m_commProtocol
; // lorawan, dlms, dlms throuht other protocols
1508 TCHAR
*m_xmlConfig
; //protocol specific configuration
1509 TCHAR
*m_xmlRegConfig
; //protocol specific registration configuration (cannot be changed afterwards)
1510 TCHAR
*m_serialNumber
; //Device serial number
1511 TCHAR
*m_deviceAddress
; //in case lora - lorawan id
1512 TCHAR
*m_metaType
;//brief type hot water, elecrticety
1513 TCHAR
*m_description
; //brief description
1514 time_t m_lastConnectionTime
;
1515 UINT32 m_frameCount
; //zero when no info
1516 INT32 m_signalStrenght
; //+1 when no information(cannot be +)
1517 INT32 m_signalNoise
; //*10 from origin number //MAX_INT32 when no value
1518 UINT32 m_frequency
; //*10 from origin number // 0 when no value
1519 UINT32 m_proxyNodeId
;
1521 virtual void fillMessageInternal(NXCPMessage
*msg
);
1522 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*request
);
1524 virtual void statusPoll(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1525 virtual void configurationPoll(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1527 virtual StringMap
*getInstanceList(DCObject
*dco
);
1529 void calculateStatus(BOOL bForcedRecalc
= FALSE
);
1531 Sensor(TCHAR
*name
, UINT32 flags
, MacAddress macAddress
, UINT32 deviceClass
, TCHAR
*vendor
,
1532 UINT32 commProtocol
, TCHAR
*xmlRegConfig
, TCHAR
*xmlConfig
, TCHAR
*serialNumber
, TCHAR
*deviceAddress
,
1533 TCHAR
*metaType
, TCHAR
*description
, UINT32 proxyNode
);
1534 static Sensor
*registerLoraDevice(Sensor
*sensor
);
1540 static Sensor
*createSensor(TCHAR
*name
, NXCPMessage
*msg
);
1542 virtual int getObjectClass() const { return OBJECT_SENSOR
; }
1544 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
1545 virtual bool saveToDatabase(DB_HANDLE hdb
);
1546 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
1547 virtual void prepareForDeletion();
1549 virtual NXSL_Value
*createNXSLObject();
1550 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
1552 const TCHAR
*getXmlConfig() const { return m_xmlConfig
; }
1553 const TCHAR
*getXmlRegConfig() const { return m_xmlRegConfig
; }
1554 UINT32
getProxyNodeId() const { return m_proxyNodeId
; }
1555 const TCHAR
*getDeviceAddress() const { return m_deviceAddress
; }
1556 const MacAddress
getMacAddress() const { return m_macAddress
; }
1557 time_t getLastContact() const { return m_lastConnectionTime
; }
1558 UINT32
getSensorClass() const { return m_deviceClass
; }
1559 const TCHAR
*getVendor() const { return m_vendor
; }
1560 UINT32
getCommProtocol() const { return m_commProtocol
; }
1561 const TCHAR
*getSerialNumber() const { return m_serialNumber
; }
1562 const TCHAR
*getMetaType() const { return m_metaType
; }
1563 const TCHAR
*getDescription() const { return m_description
; }
1564 UINT32
getFrameCount() const { return m_frameCount
; }
1566 UINT32
getItemFromAgent(const TCHAR
*szParam
, UINT32 dwBufSize
, TCHAR
*szBuffer
);
1567 UINT32
getListFromAgent(const TCHAR
*name
, StringList
**list
);
1569 void setProvisoned() { m_state
|= SSF_PROVISIONED
; }
1571 virtual json_t
*toJson();
1573 AgentConnectionEx
*getAgentConnection();
1575 void checkDlmsConverterAccessibility();
1576 void prepareDlmsDciParameters(String
¶meter
);
1577 void prepareLoraDciParameters(String
¶meter
);
1588 NODE_TYPE_UNKNOWN
= 0,
1589 NODE_TYPE_PHYSICAL
= 1,
1590 NODE_TYPE_VIRTUAL
= 2,
1591 NODE_TYPE_CONTROLLER
= 3
1595 * Node agent compression modes
1597 enum NodeAgentCompressionMode
1599 NODE_AGENT_COMPRESSION_DEFAULT
= 0,
1600 NODE_AGENT_COMPRESSION_ENABLED
= 1,
1601 NODE_AGENT_COMPRESSION_DISABLED
= 2
1605 * Routing loop event information
1607 class RoutingLoopEvent
1610 InetAddress m_address
;
1615 RoutingLoopEvent(const InetAddress
& address
, UINT32 nodeId
, UINT64 eventId
)
1617 m_address
= address
;
1619 m_eventId
= eventId
;
1622 const InetAddress
& getAddress() const { return m_address
; }
1623 UINT32
getNodeId() const { return m_nodeId
; }
1624 UINT64
getEventId() const { return m_eventId
; }
1641 class NXCORE_EXPORTABLE Node
: public DataCollectionTarget
1643 friend class Subnet
;
1647 * Delete agent connection
1649 void deleteAgentConnection()
1651 if (m_agentConnection
!= NULL
)
1653 m_agentConnection
->decRefCount();
1654 m_agentConnection
= NULL
;
1658 void onSnmpProxyChange(UINT32 oldProxy
);
1660 static void onDataCollectionChangeAsyncCallback(void *arg
);
1663 InetAddress m_ipAddress
;
1664 TCHAR m_primaryName
[MAX_DNS_NAME
];
1666 UINT32 m_capabilities
;
1668 TCHAR m_subType
[MAX_NODE_SUBTYPE_LENGTH
];
1670 UINT32 m_pollCountAgent
;
1671 UINT32 m_pollCountSNMP
;
1672 UINT32 m_pollCountAllDown
;
1673 UINT32 m_requiredPollCount
;
1676 INT16 m_agentAuthMethod
;
1677 INT16 m_agentCacheMode
;
1678 INT16 m_agentCompressionMode
; // agent compression mode (enabled/disabled/default)
1679 TCHAR m_szSharedSecret
[MAX_SECRET_LENGTH
];
1680 INT16 m_iStatusPollType
;
1681 INT16 m_snmpVersion
;
1683 UINT16 m_nUseIfXTable
;
1684 SNMP_SecurityContext
*m_snmpSecurity
;
1685 TCHAR m_agentVersion
[MAX_AGENT_VERSION_LEN
];
1686 TCHAR m_platformName
[MAX_PLATFORM_NAME_LEN
];
1687 TCHAR m_snmpObjectId
[MAX_OID_LEN
* 4];
1688 TCHAR
*m_sysDescription
; // Agent's System.Uname or SNMP sysDescr
1689 TCHAR
*m_sysName
; // SNMP sysName
1690 TCHAR
*m_sysLocation
; // SNMP sysLocation
1691 TCHAR
*m_sysContact
; // SNMP sysContact
1692 TCHAR
*m_lldpNodeId
; // lldpLocChassisId combined with lldpLocChassisIdSubtype, or NULL for non-LLDP nodes
1693 ObjectArray
<LLDP_LOCAL_PORT_INFO
> *m_lldpLocalPortInfo
;
1694 NetworkDeviceDriver
*m_driver
;
1695 DriverData
*m_driverData
;
1696 ObjectArray
<AgentParameterDefinition
> *m_paramList
; // List of supported parameters
1697 ObjectArray
<AgentTableDefinition
> *m_tableList
; // List of supported tables
1698 time_t m_lastDiscoveryPoll
;
1699 time_t m_lastTopologyPoll
;
1700 time_t m_lastRTUpdate
;
1701 time_t m_failTimeSNMP
;
1702 time_t m_failTimeAgent
;
1705 time_t m_agentUpTime
;
1706 time_t m_lastAgentCommTime
;
1707 time_t m_lastAgentConnectAttempt
;
1708 MUTEX m_hAgentAccessMutex
;
1709 MUTEX m_hSmclpAccessMutex
;
1710 MUTEX m_mutexRTAccess
;
1711 MUTEX m_mutexTopoAccess
;
1712 AgentConnectionEx
*m_agentConnection
;
1713 ObjectLock
<AgentConnectionEx
> *m_proxyConnections
;
1714 SMCLP_Connection
*m_smclpConnection
;
1715 UINT64 m_lastAgentTrapId
; // ID of last received agent trap
1716 UINT64 m_lastAgentPushRequestId
; // ID of last received agent push request
1717 UINT32 m_lastSNMPTrapId
;
1718 UINT64 m_lastSyslogMessageId
; // ID of last received syslog message
1719 UINT32 m_pollerNode
; // Node used for network service polling
1720 UINT32 m_agentProxy
; // Node used as proxy for agent connection
1721 UINT32 m_snmpProxy
; // Node used as proxy for SNMP requests
1722 UINT32 m_icmpProxy
; // Node used as proxy for ICMP ping
1723 UINT64 m_lastEvents
[MAX_LAST_EVENTS
];
1724 ObjectArray
<RoutingLoopEvent
> *m_routingLoopEvents
;
1725 ROUTING_TABLE
*m_pRoutingTable
;
1726 ForwardingDatabase
*m_fdb
;
1727 LinkLayerNeighbors
*m_linkLayerNeighbors
;
1729 VrrpInfo
*m_vrrpInfo
;
1730 ObjectArray
<WirelessStationInfo
> *m_wirelessStations
;
1731 int m_adoptedApCount
;
1733 BYTE m_baseBridgeAddress
[MAC_ADDR_LENGTH
]; // Bridge base address (dot1dBaseBridgeAddress in bridge MIB)
1734 NetworkMapObjectList
*m_topology
;
1735 time_t m_topologyRebuildTimestamp
;
1736 ServerJobQueue
*m_jobQueue
;
1737 ComponentTree
*m_components
; // Hardware components
1738 ObjectArray
<SoftwarePackage
> *m_softwarePackages
; // installed software packages
1739 ObjectArray
<WinPerfObject
> *m_winPerfObjects
; // Windows performance objects
1740 AgentConnection
*m_fileUpdateConn
;
1742 INT16 m_rackPosition
;
1746 INT64 m_syslogMessageCount
;
1747 INT64 m_snmpTrapCount
;
1748 TCHAR m_sshLogin
[MAX_SSH_LOGIN_LEN
];
1749 TCHAR m_sshPassword
[MAX_SSH_PASSWORD_LEN
];
1751 UINT32 m_portNumberingScheme
;
1752 UINT32 m_portRowCount
;
1754 virtual void statusPoll(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1755 virtual void configurationPoll(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1756 virtual void topologyPoll(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1757 virtual void routingTablePoll(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1759 virtual bool isDataCollectionDisabled();
1760 virtual void collectProxyInfo(ProxyInfo
*info
);
1762 virtual void prepareForDeletion();
1763 virtual void onObjectDelete(UINT32 dwObjectId
);
1765 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
1766 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
1768 virtual void updatePingData();
1770 virtual void onDataCollectionChange();
1772 virtual StringMap
*getInstanceList(DCObject
*dco
);
1774 void agentLock() { MutexLock(m_hAgentAccessMutex
); }
1775 void agentUnlock() { MutexUnlock(m_hAgentAccessMutex
); }
1777 void smclpLock() { MutexLock(m_hSmclpAccessMutex
); }
1778 void smclpUnlock() { MutexUnlock(m_hSmclpAccessMutex
); }
1780 void routingTableLock() { MutexLock(m_mutexRTAccess
); }
1781 void routingTableUnlock() { MutexUnlock(m_mutexRTAccess
); }
1783 BOOL
checkSNMPIntegerValue(SNMP_Transport
*pTransport
, const TCHAR
*pszOID
, int nValue
);
1784 void checkOSPFSupport(SNMP_Transport
*pTransport
);
1785 void addVrrpInterfaces(InterfaceList
*ifList
);
1786 BOOL
resolveName(BOOL useOnlyDNS
);
1787 void setPrimaryIPAddress(const InetAddress
& addr
);
1789 bool setAgentProxy(AgentConnectionEx
*conn
);
1790 bool isAgentCompressionAllowed();
1792 UINT32
getInterfaceCount(Interface
**ppInterface
);
1794 void checkInterfaceNames(InterfaceList
*pIfList
);
1795 bool filterInterface(InterfaceInfo
*info
);
1796 Subnet
*createSubnet(InetAddress
& baseAddr
, bool syntheticMask
);
1797 void checkAgentPolicyBinding(AgentConnection
*conn
);
1798 void updatePrimaryIpAddr();
1799 bool confPollAgent(UINT32 dwRqId
);
1800 bool confPollSnmp(UINT32 dwRqId
);
1801 NodeType
detectNodeType();
1802 bool updateSoftwarePackages(PollerInfo
*poller
, UINT32 requestId
);
1803 bool querySnmpSysProperty(SNMP_Transport
*snmp
, const TCHAR
*oid
, const TCHAR
*propName
, UINT32 pollRqId
, TCHAR
**value
);
1804 void checkBridgeMib(SNMP_Transport
*pTransport
);
1805 void checkIfXTable(SNMP_Transport
*pTransport
);
1806 bool checkNetworkPath(UINT32 requestId
);
1807 bool checkNetworkPathLayer2(UINT32 requestId
, bool secondPass
);
1808 bool checkNetworkPathLayer3(UINT32 requestId
, bool secondPass
);
1809 bool checkNetworkPathElement(UINT32 nodeId
, const TCHAR
*nodeType
, bool isProxy
, UINT32 requestId
, bool secondPass
);
1811 void syncDataCollectionWithAgent(AgentConnectionEx
*conn
);
1813 bool updateInterfaceConfiguration(UINT32 rqid
, int maskBits
);
1814 bool deleteDuplicateInterfaces(UINT32 rqid
);
1815 void updatePhysicalContainerBinding(int containerClass
, UINT32 containerId
);
1817 bool connectToAgent(UINT32
*error
= NULL
, UINT32
*socketError
= NULL
, bool *newConnection
= NULL
, bool forceConnect
= false);
1818 void setLastAgentCommTime() { m_lastAgentCommTime
= time(NULL
); }
1820 void buildIPTopologyInternal(NetworkMapObjectList
&topology
, int nDepth
, UINT32 seedObject
, bool vpnLink
, bool includeEndNodes
);
1824 Node(const InetAddress
& addr
, UINT32 flags
, UINT32 capabilities
, UINT32 agentProxy
, UINT32 snmpProxy
, UINT32 icmpProxy
, UINT32 sshProxy
, UINT32 zoneUIN
);
1827 virtual int getObjectClass() const { return OBJECT_NODE
; }
1829 virtual bool saveToDatabase(DB_HANDLE hdb
);
1830 virtual bool saveRuntimeData(DB_HANDLE hdb
);
1831 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
1832 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
1834 virtual bool isReadyForStatusPoll();
1835 virtual bool isReadyForDiscoveryPoll();
1836 virtual bool isReadyForRoutePoll();
1837 virtual bool isReadyForTopologyPoll();
1839 virtual NXSL_Value
*createNXSLObject();
1841 virtual json_t
*toJson();
1843 Cluster
*getMyCluster();
1845 const InetAddress
& getIpAddress() const { return m_ipAddress
; }
1846 UINT32
getZoneUIN() const { return m_zoneUIN
; }
1847 NodeType
getType() const { return m_type
; }
1848 const TCHAR
*getSubType() const { return m_subType
; }
1850 UINT32
getCapabilities() { return m_capabilities
; }
1851 void setCapabilities(UINT32 flag
) { lockProperties(); m_capabilities
|= flag
; setModified(MODIFY_NODE_PROPERTIES
); unlockProperties(); }
1852 void clearCapabilities(UINT32 flag
) { lockProperties(); m_capabilities
&= ~flag
; setModified(MODIFY_NODE_PROPERTIES
); unlockProperties(); }
1853 void setLocalMgmtFlag() { setCapabilities(NC_IS_LOCAL_MGMT
); }
1854 void clearLocalMgmtFlag() { clearCapabilities(NC_IS_LOCAL_MGMT
); }
1856 void setType(NodeType type
, const TCHAR
*subType
) { lockProperties(); m_type
= type
; nx_strncpy(m_subType
, subType
, MAX_NODE_SUBTYPE_LENGTH
); unlockProperties(); }
1858 bool isSNMPSupported() const { return m_capabilities
& NC_IS_SNMP ?
true : false; }
1859 bool isNativeAgent() const { return m_capabilities
& NC_IS_NATIVE_AGENT ?
true : false; }
1860 bool isBridge() const { return m_capabilities
& NC_IS_BRIDGE ?
true : false; }
1861 bool isRouter() const { return m_capabilities
& NC_IS_ROUTER ?
true : false; }
1862 bool isLocalManagement() const { return m_capabilities
& NC_IS_LOCAL_MGMT ?
true : false; }
1863 bool isPerVlanFdbSupported() const { return (m_driver
!= NULL
) ? m_driver
->isPerVlanFdbSupported() : false; }
1864 bool isWirelessController() const { return m_capabilities
& NC_IS_WIFI_CONTROLLER ?
true : false; }
1866 const TCHAR
*getAgentVersion() const { return m_agentVersion
; }
1867 const TCHAR
*getPlatformName() const { return m_platformName
; }
1868 INT16
getSNMPVersion() const { return m_snmpVersion
; }
1869 UINT16
getSNMPPort() const { return m_snmpPort
; }
1870 const TCHAR
*getSNMPObjectId() const { return m_snmpObjectId
; }
1871 const TCHAR
*getSysName() const { return CHECK_NULL_EX(m_sysName
); }
1872 const TCHAR
*getSysDescription() const { return CHECK_NULL_EX(m_sysDescription
); }
1873 const TCHAR
*getSysContact() const { return CHECK_NULL_EX(m_sysContact
); }
1874 const TCHAR
*getSysLocation() const { return CHECK_NULL_EX(m_sysLocation
); }
1875 time_t getBootTime() const { return m_bootTime
; }
1876 const TCHAR
*getLLDPNodeId() const { return m_lldpNodeId
; }
1877 const BYTE
*getBridgeId() const { return m_baseBridgeAddress
; }
1878 const TCHAR
*getDriverName() const { return (m_driver
!= NULL
) ? m_driver
->getName() : _T("GENERIC"); }
1879 UINT16
getAgentPort() const { return m_agentPort
; }
1880 INT16
getAgentAuthMethod() const { return m_agentAuthMethod
; }
1881 INT16
getAgentCacheMode() const { return (m_state
& NSF_CACHE_MODE_NOT_SUPPORTED
) ? AGENT_CACHE_OFF
: ((m_agentCacheMode
== AGENT_CACHE_DEFAULT
) ? g_defaultAgentCacheMode
: m_agentCacheMode
); }
1882 const TCHAR
*getSharedSecret() const { return m_szSharedSecret
; }
1883 UINT32
getRackId() const { return m_rackId
; }
1884 INT16
getRackHeight() const { return m_rackHeight
; }
1885 INT16
getRackPosition() const { return m_rackPosition
; }
1886 bool hasFileUpdateConnection() const { lockProperties(); bool result
= (m_fileUpdateConn
!= NULL
); unlockProperties(); return result
; }
1887 UINT32
getIcmpProxy() const { return m_icmpProxy
; }
1888 const TCHAR
*getSshLogin() const { return m_sshLogin
; }
1889 const TCHAR
*getSshPassword() const { return m_sshPassword
; }
1890 UINT32
getSshProxy() const { return m_sshProxy
; }
1891 time_t getLastAgentCommTime() const { return m_lastAgentCommTime
; }
1892 const TCHAR
*getPrimaryName() const { return m_primaryName
; }
1893 const uuid
& getTunnelId() const { return m_tunnelId
; }
1894 void setNewTunnelBindFlag() { m_runtimeFlags
|= NDF_NEW_TUNNEL_BIND
; }
1895 void removeNewTunnelBindFlag() { m_runtimeFlags
&= ~NDF_NEW_TUNNEL_BIND
; }
1897 bool isDown() { return (m_state
& DCSF_UNREACHABLE
) ?
true : false; }
1898 time_t getDownTime() const { return m_downSince
; }
1900 void addInterface(Interface
*pInterface
) { addChild(pInterface
); pInterface
->addParent(this); }
1901 Interface
*createNewInterface(InterfaceInfo
*ifInfo
, bool manuallyCreated
, bool fakeInterface
);
1902 Interface
*createNewInterface(const InetAddress
& ipAddr
, BYTE
*macAddr
, bool fakeInterface
);
1903 void deleteInterface(Interface
*iface
);
1905 void setPrimaryName(const TCHAR
*name
) { nx_strncpy(m_primaryName
, name
, MAX_DNS_NAME
); }
1906 void setAgentPort(UINT16 port
) { m_agentPort
= port
; }
1907 void setSnmpPort(UINT16 port
) { m_snmpPort
= port
; }
1908 void setSshCredentials(const TCHAR
*login
, const TCHAR
*password
);
1909 void changeIPAddress(const InetAddress
& ipAddr
);
1910 void changeZone(UINT32 newZone
);
1911 void setTunnelId(const uuid
& tunnelId
);
1912 void setFileUpdateConnection(AgentConnection
*conn
);
1913 void clearDataCollectionConfigFromAgent(AgentConnectionEx
*conn
);
1914 void forceSyncDataCollectionConfig();
1915 void relatedNodeDataCollectionChanged() { onDataCollectionChange(); }
1917 ARP_CACHE
*getArpCache();
1918 InterfaceList
*getInterfaceList();
1919 Interface
*findInterfaceByIndex(UINT32 ifIndex
);
1920 Interface
*findInterfaceByName(const TCHAR
*name
);
1921 Interface
*findInterfaceByMAC(const BYTE
*macAddr
);
1922 Interface
*findInterfaceByIP(const InetAddress
& addr
);
1923 Interface
*findInterfaceBySlotAndPort(UINT32 slot
, UINT32 port
);
1924 Interface
*findBridgePort(UINT32 bridgePortNumber
);
1925 AccessPoint
*findAccessPointByMAC(const BYTE
*macAddr
);
1926 AccessPoint
*findAccessPointByBSSID(const BYTE
*bssid
);
1927 AccessPoint
*findAccessPointByRadioId(int rfIndex
);
1928 ObjectArray
<WirelessStationInfo
> *getWirelessStations();
1929 bool isMyIP(const InetAddress
& addr
);
1930 void getInterfaceStatusFromSNMP(SNMP_Transport
*pTransport
, UINT32 dwIndex
, int ifTableSuffixLen
, UINT32
*ifTableSuffix
, InterfaceAdminState
*adminState
, InterfaceOperState
*operState
);
1931 void getInterfaceStatusFromAgent(UINT32 dwIndex
, InterfaceAdminState
*adminState
, InterfaceOperState
*operState
);
1932 ROUTING_TABLE
*getRoutingTable();
1933 ROUTING_TABLE
*getCachedRoutingTable() { return m_pRoutingTable
; }
1934 LinkLayerNeighbors
*getLinkLayerNeighbors();
1935 VlanList
*getVlans();
1936 bool getNextHop(const InetAddress
& srcAddr
, const InetAddress
& destAddr
, InetAddress
*nextHop
, InetAddress
*route
, UINT32
*ifIndex
, bool *isVpn
, TCHAR
*name
);
1937 bool getOutwardInterface(const InetAddress
& destAddr
, InetAddress
*srcAddr
, UINT32
*srcIfIndex
);
1938 ComponentTree
*getComponents();
1939 bool getLldpLocalPortInfo(UINT32 idType
, BYTE
*id
, size_t idLen
, LLDP_LOCAL_PORT_INFO
*port
);
1940 void showLLDPInfo(CONSOLE_CTX console
);
1942 void setRecheckCapsFlag() { m_runtimeFlags
|= NDF_RECHECK_CAPABILITIES
; }
1943 void setDiscoveryPollTimeStamp();
1944 void topologyPollWorkerEntry(PollerInfo
*poller
);
1945 void topologyPollWorkerEntry(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1946 void resolveVlanPorts(VlanList
*vlanList
);
1947 void updateInterfaceNames(ClientSession
*pSession
, UINT32 dwRqId
);
1948 void routingTablePollWorkerEntry(PollerInfo
*poller
);
1949 void routingTablePollWorkerEntry(PollerInfo
*poller
, ClientSession
*session
, UINT32 rqId
);
1950 void checkSubnetBinding();
1951 AccessPointState
getAccessPointState(AccessPoint
*ap
, SNMP_Transport
*snmpTransport
);
1952 void setChassis(UINT32 chassisId
);
1954 void lockForDiscoveryPoll();
1955 void lockForRoutePoll();
1956 void lockForTopologyPoll();
1957 void forceConfigurationPoll() { m_runtimeFlags
|= DCDF_FORCE_CONFIGURATION_POLL
; }
1959 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
1961 bool checkAgentTrapId(UINT64 id
);
1962 bool checkSNMPTrapId(UINT32 id
);
1963 bool checkSyslogMessageId(UINT64 id
);
1964 bool checkAgentPushRequestId(UINT64 id
);
1966 bool connectToSMCLP();
1968 virtual UINT32
getInternalItem(const TCHAR
*param
, size_t bufSize
, TCHAR
*buffer
);
1970 UINT32
getItemFromSNMP(WORD port
, const TCHAR
*param
, size_t bufSize
, TCHAR
*buffer
, int interpretRawValue
);
1971 UINT32
getTableFromSNMP(WORD port
, const TCHAR
*oid
, ObjectArray
<DCTableColumn
> *columns
, Table
**table
);
1972 UINT32
getListFromSNMP(WORD port
, const TCHAR
*oid
, StringList
**list
);
1973 UINT32
getOIDSuffixListFromSNMP(WORD port
, const TCHAR
*oid
, StringMap
**values
);
1974 UINT32
getItemFromCheckPointSNMP(const TCHAR
*szParam
, UINT32 dwBufSize
, TCHAR
*szBuffer
);
1975 UINT32
getItemFromAgent(const TCHAR
*szParam
, UINT32 dwBufSize
, TCHAR
*szBuffer
);
1976 UINT32
getTableFromAgent(const TCHAR
*name
, Table
**table
);
1977 UINT32
getListFromAgent(const TCHAR
*name
, StringList
**list
);
1978 UINT32
getItemForClient(int iOrigin
, UINT32 userId
, const TCHAR
*pszParam
, TCHAR
*pszBuffer
, UINT32 dwBufSize
);
1979 UINT32
getTableForClient(const TCHAR
*name
, Table
**table
);
1980 UINT32
getItemFromSMCLP(const TCHAR
*param
, UINT32 bufSize
, TCHAR
*buffer
);
1982 virtual NXSL_Array
*getParentsForNXSL();
1983 virtual NXSL_Array
*getTemplatesForNXSL();
1984 NXSL_Array
*getInterfacesForNXSL();
1986 void openParamList(ObjectArray
<AgentParameterDefinition
> **paramList
);
1987 void closeParamList() { unlockProperties(); }
1989 void openTableList(ObjectArray
<AgentTableDefinition
> **tableList
);
1990 void closeTableList() { unlockProperties(); }
1992 AgentConnectionEx
*createAgentConnection(bool sendServerId
= false);
1993 AgentConnectionEx
*getAgentConnection();
1994 AgentConnectionEx
*acquireProxyConnection(ProxyType type
, bool validate
= false);
1995 AgentConnectionEx
*getConnectionToZoneNodeProxy(bool validate
= false);
1996 SNMP_Transport
*createSnmpTransport(WORD port
= 0, const TCHAR
*context
= NULL
);
1997 SNMP_SecurityContext
*getSnmpSecurityContext() const;
1998 UINT32
getEffectiveSnmpProxy() const;
2000 void writeParamListToMessage(NXCPMessage
*pMsg
, WORD flags
);
2001 void writeWinPerfObjectsToMessage(NXCPMessage
*msg
);
2002 void writePackageListToMessage(NXCPMessage
*msg
);
2003 void writeWsListToMessage(NXCPMessage
*msg
);
2007 void addService(NetworkService
*pNetSrv
) { addChild(pNetSrv
); pNetSrv
->addParent(this); }
2008 UINT32
checkNetworkService(UINT32
*pdwStatus
, const InetAddress
& ipAddr
, int iServiceType
, WORD wPort
= 0,
2009 WORD wProto
= 0, TCHAR
*pszRequest
= NULL
, TCHAR
*pszResponse
= NULL
, UINT32
*responseTime
= NULL
);
2011 UINT64
getLastEventId(int index
) { return ((index
>= 0) && (index
< MAX_LAST_EVENTS
)) ? m_lastEvents
[index
] : 0; }
2012 void setLastEventId(int index
, UINT64 eventId
) { if ((index
>= 0) && (index
< MAX_LAST_EVENTS
)) m_lastEvents
[index
] = eventId
; }
2013 void setRoutingLoopEvent(const InetAddress
& address
, UINT32 nodeId
, UINT64 eventId
);
2015 UINT32
callSnmpEnumerate(const TCHAR
*pszRootOid
,
2016 UINT32 (* pHandler
)(SNMP_Variable
*, SNMP_Transport
*, void *), void *pArg
, const TCHAR
*context
= NULL
);
2018 NetworkMapObjectList
*getL2Topology();
2019 NetworkMapObjectList
*buildL2Topology(UINT32
*pdwStatus
, int radius
, bool includeEndNodes
);
2020 ForwardingDatabase
*getSwitchForwardingDatabase();
2021 NetObj
*findConnectionPoint(UINT32
*localIfId
, BYTE
*localMacAddr
, int *type
);
2022 void addHostConnections(LinkLayerNeighbors
*nbs
);
2023 void addExistingConnections(LinkLayerNeighbors
*nbs
);
2025 NetworkMapObjectList
*buildIPTopology(UINT32
*pdwStatus
, int radius
, bool includeEndNodes
);
2027 ServerJobQueue
*getJobQueue() { return m_jobQueue
; }
2028 int getJobCount(const TCHAR
*type
= NULL
) { return m_jobQueue
->getJobCount(type
); }
2030 DriverData
*getDriverData() { return m_driverData
; }
2031 void setDriverData(DriverData
*data
) { m_driverData
= data
; }
2033 void incSyslogMessageCount();
2034 void incSnmpTrapCount();
2036 static const TCHAR
*typeName(NodeType type
);
2038 UINT32
getRequiredPolls() const { return m_requiredPollCount
; }
2042 * Set timestamp of last discovery poll to current time
2044 inline void Node
::setDiscoveryPollTimeStamp()
2046 m_lastDiscoveryPoll
= time(NULL
);
2047 m_runtimeFlags
&= ~NDF_QUEUED_FOR_DISCOVERY_POLL
;
2050 inline bool Node
::isReadyForStatusPoll()
2054 if (m_runtimeFlags
& DCDF_FORCE_STATUS_POLL
)
2056 m_runtimeFlags
&= ~DCDF_FORCE_STATUS_POLL
;
2059 return (m_status
!= STATUS_UNMANAGED
) &&
2060 (!(m_flags
& DCF_DISABLE_STATUS_POLL
)) &&
2061 (!(m_runtimeFlags
& DCDF_QUEUED_FOR_STATUS_POLL
)) &&
2062 (!(m_runtimeFlags
& DCDF_DELETE_IN_PROGRESS
)) &&
2063 (getMyCluster() == NULL
) &&
2064 (!(m_runtimeFlags
& DCDF_CONFIGURATION_POLL_PENDING
)) &&
2065 ((UINT32
)(time(NULL
) - m_lastStatusPoll
) > g_dwStatusPollingInterval
);
2068 inline bool Node
::isReadyForDiscoveryPoll()
2072 return (g_flags
& AF_ENABLE_NETWORK_DISCOVERY
) &&
2073 (m_status
!= STATUS_UNMANAGED
) &&
2074 (!(m_flags
& NF_DISABLE_DISCOVERY_POLL
)) &&
2075 (!(m_runtimeFlags
& NDF_QUEUED_FOR_DISCOVERY_POLL
)) &&
2076 (!(m_runtimeFlags
& DCDF_DELETE_IN_PROGRESS
)) &&
2077 (m_runtimeFlags
& DCDF_CONFIGURATION_POLL_PASSED
) &&
2078 ((UINT32
)(time(NULL
) - m_lastDiscoveryPoll
) > g_dwDiscoveryPollingInterval
);
2081 inline bool Node
::isReadyForRoutePoll()
2085 return (m_status
!= STATUS_UNMANAGED
) &&
2086 (!(m_flags
& NF_DISABLE_ROUTE_POLL
)) &&
2087 (!(m_runtimeFlags
& NDF_QUEUED_FOR_ROUTE_POLL
)) &&
2088 (!(m_runtimeFlags
& DCDF_DELETE_IN_PROGRESS
)) &&
2089 (m_runtimeFlags
& DCDF_CONFIGURATION_POLL_PASSED
) &&
2090 ((UINT32
)(time(NULL
) - m_lastRTUpdate
) > g_dwRoutingTableUpdateInterval
);
2093 inline bool Node
::isReadyForTopologyPoll()
2097 return (m_status
!= STATUS_UNMANAGED
) &&
2098 (!(m_flags
& NF_DISABLE_TOPOLOGY_POLL
)) &&
2099 (!(m_runtimeFlags
& NDF_QUEUED_FOR_TOPOLOGY_POLL
)) &&
2100 (!(m_runtimeFlags
& DCDF_DELETE_IN_PROGRESS
)) &&
2101 (m_runtimeFlags
& DCDF_CONFIGURATION_POLL_PASSED
) &&
2102 ((UINT32
)(time(NULL
) - m_lastTopologyPoll
) > g_dwTopologyPollingInterval
);
2105 inline void Node
::lockForDiscoveryPoll()
2108 m_runtimeFlags
|= NDF_QUEUED_FOR_DISCOVERY_POLL
;
2112 inline void Node
::lockForTopologyPoll()
2115 m_runtimeFlags
|= NDF_QUEUED_FOR_TOPOLOGY_POLL
;
2119 inline void Node
::lockForRoutePoll()
2122 m_runtimeFlags
|= NDF_QUEUED_FOR_ROUTE_POLL
;
2129 class NXCORE_EXPORTABLE Subnet
: public NetObj
2131 friend void Node
::buildIPTopologyInternal(NetworkMapObjectList
&topology
, int nDepth
, UINT32 seedSubnet
, bool vpnLink
, bool includeEndNodes
);
2134 InetAddress m_ipAddress
;
2136 bool m_bSyntheticMask
;
2138 virtual void prepareForDeletion();
2140 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
2142 void buildIPTopologyInternal(NetworkMapObjectList
&topology
, int nDepth
, UINT32 seedNode
, bool includeEndNodes
);
2146 Subnet(const InetAddress
& addr
, UINT32 zoneUIN
, bool bSyntheticMask
);
2149 virtual int getObjectClass() const { return OBJECT_SUBNET
; }
2151 virtual bool saveToDatabase(DB_HANDLE hdb
);
2152 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
2153 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
2155 virtual json_t
*toJson();
2157 void addNode(Node
*node
) { addChild(node
); node
->addParent(this); calculateCompoundStatus(TRUE
); }
2159 virtual bool showThresholdSummary();
2161 const InetAddress
& getIpAddress() const { return m_ipAddress
; }
2162 UINT32
getZoneUIN() const { return m_zoneUIN
; }
2163 bool isSyntheticMask() const { return m_bSyntheticMask
; }
2165 void setCorrectMask(const InetAddress
& addr
);
2167 bool findMacAddress(const InetAddress
& ipAddr
, BYTE
*macAddr
);
2169 UINT32
*buildAddressMap(int *length
);
2173 * Universal root object
2175 class NXCORE_EXPORTABLE UniversalRoot
: public NetObj
2177 using NetObj
::loadFromDatabase
;
2181 virtual ~UniversalRoot();
2183 virtual bool saveToDatabase(DB_HANDLE hdb
);
2184 void loadFromDatabase(DB_HANDLE hdb
);
2185 virtual void linkObjects();
2186 void linkObject(NetObj
*pObject
) { addChild(pObject
); pObject
->addParent(this); }
2192 class NXCORE_EXPORTABLE ServiceRoot
: public UniversalRoot
2196 virtual ~ServiceRoot();
2198 virtual int getObjectClass() const { return OBJECT_SERVICEROOT
; }
2200 virtual bool showThresholdSummary();
2206 class NXCORE_EXPORTABLE TemplateRoot
: public UniversalRoot
2210 virtual ~TemplateRoot();
2212 virtual int getObjectClass() const { return OBJECT_TEMPLATEROOT
; }
2213 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
2217 * Generic container object
2219 class NXCORE_EXPORTABLE Container
: public NetObj
2222 UINT32
*m_pdwChildIdList
;
2223 UINT32 m_dwChildIdListSize
;
2226 NXSL_Program
*m_bindFilter
;
2227 TCHAR
*m_bindFilterSource
;
2229 virtual void fillMessageInternal(NXCPMessage
*msg
);
2230 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*request
);
2232 void setAutoBindFilterInternal(const TCHAR
*script
);
2236 Container(const TCHAR
*pszName
, UINT32 dwCategory
);
2237 virtual ~Container();
2239 virtual int getObjectClass() const { return OBJECT_CONTAINER
; }
2241 virtual bool saveToDatabase(DB_HANDLE hdb
);
2242 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
2243 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
2244 virtual void linkObjects();
2246 virtual bool showThresholdSummary();
2248 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
2250 virtual json_t
*toJson();
2252 virtual NXSL_Value
*createNXSLObject();
2254 void linkObject(NetObj
*pObject
) { addChild(pObject
); pObject
->addParent(this); }
2256 AutoBindDecision
isSuitableForObject(NetObj
*object
);
2257 bool isAutoBindEnabled() const { return (m_flags
& CF_AUTO_BIND
) ?
true : false; }
2258 bool isAutoUnbindEnabled() const { return ((m_flags
& (CF_AUTO_BIND
| CF_AUTO_UNBIND
)) == (CF_AUTO_BIND
| CF_AUTO_UNBIND
)) ?
true : false; }
2259 const TCHAR
*getAutoBindScriptSource() const { return m_bindFilterSource
; }
2261 void setAutoBindFilter(const TCHAR
*script
) { lockProperties(); setAutoBindFilterInternal(script
); unlockProperties(); }
2262 void setAutoBindMode(bool doBind
, bool doUnbind
);
2266 * Template group object
2268 class NXCORE_EXPORTABLE TemplateGroup
: public Container
2271 TemplateGroup() : Container() { }
2272 TemplateGroup(const TCHAR
*pszName
) : Container(pszName
, 0) { m_status
= STATUS_NORMAL
; }
2273 virtual ~TemplateGroup() { }
2275 virtual int getObjectClass() const { return OBJECT_TEMPLATEGROUP
; }
2276 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
2278 virtual bool showThresholdSummary();
2284 class NXCORE_EXPORTABLE Rack
: public Container
2287 int m_height
; // Rack height in units
2288 bool m_topBottomNumbering
;
2290 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
2291 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
2295 Rack(const TCHAR
*name
, int height
);
2298 virtual int getObjectClass() const { return OBJECT_RACK
; }
2300 virtual bool saveToDatabase(DB_HANDLE hdb
);
2301 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
2302 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
2304 virtual json_t
*toJson();
2310 class NXCORE_EXPORTABLE Zone
: public NetObj
2314 UINT32 m_proxyNodeId
;
2315 InetAddressIndex
*m_idxNodeByAddr
;
2316 InetAddressIndex
*m_idxInterfaceByAddr
;
2317 InetAddressIndex
*m_idxSubnetByAddr
;
2318 StringList m_snmpPorts
;
2320 virtual void fillMessageInternal(NXCPMessage
*msg
);
2321 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*request
);
2325 Zone(UINT32 uin
, const TCHAR
*name
);
2328 virtual int getObjectClass() const { return OBJECT_ZONE
; }
2330 virtual bool saveToDatabase(DB_HANDLE hdb
);
2331 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
2332 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
2334 virtual bool showThresholdSummary();
2336 virtual NXSL_Value
*createNXSLObject();
2338 virtual json_t
*toJson();
2340 UINT32
getUIN() const { return m_uin
; }
2341 UINT32
getProxyNodeId() const { return m_proxyNodeId
; }
2343 void addSubnet(Subnet
*pSubnet
) { addChild(pSubnet
); pSubnet
->addParent(this); }
2345 const StringList
*getSnmpPortList() const { return &m_snmpPorts
; }
2347 void addToIndex(Subnet
*subnet
) { m_idxSubnetByAddr
->put(subnet
->getIpAddress(), subnet
); }
2348 void addToIndex(Interface
*iface
) { m_idxInterfaceByAddr
->put(iface
->getIpAddressList(), iface
); }
2349 void addToIndex(const InetAddress
& addr
, Interface
*iface
) { m_idxInterfaceByAddr
->put(addr
, iface
); }
2350 void addToIndex(Node
*node
) { m_idxNodeByAddr
->put(node
->getIpAddress(), node
); }
2351 void removeFromIndex(Subnet
*subnet
) { m_idxSubnetByAddr
->remove(subnet
->getIpAddress()); }
2352 void removeFromIndex(Interface
*iface
);
2353 void removeFromInterfaceIndex(const InetAddress
& addr
) { m_idxInterfaceByAddr
->remove(addr
); }
2354 void removeFromIndex(Node
*node
) { m_idxNodeByAddr
->remove(node
->getIpAddress()); }
2355 void updateInterfaceIndex(const InetAddress
& oldIp
, const InetAddress
& newIp
, Interface
*iface
);
2356 Subnet
*getSubnetByAddr(const InetAddress
& ipAddr
) { return (Subnet
*)m_idxSubnetByAddr
->get(ipAddr
); }
2357 Interface
*getInterfaceByAddr(const InetAddress
& ipAddr
) { return (Interface
*)m_idxInterfaceByAddr
->get(ipAddr
); }
2358 Node
*getNodeByAddr(const InetAddress
& ipAddr
) { return (Node
*)m_idxNodeByAddr
->get(ipAddr
); }
2359 Subnet
*findSubnet(bool (*comparator
)(NetObj
*, void *), void *data
) { return (Subnet
*)m_idxSubnetByAddr
->find(comparator
, data
); }
2360 Interface
*findInterface(bool (*comparator
)(NetObj
*, void *), void *data
) { return (Interface
*)m_idxInterfaceByAddr
->find(comparator
, data
); }
2361 Node
*findNode(bool (*comparator
)(NetObj
*, void *), void *data
) { return (Node
*)m_idxNodeByAddr
->find(comparator
, data
); }
2362 void forEachSubnet(void (*callback
)(const InetAddress
& addr
, NetObj
*, void *), void *data
) { m_idxSubnetByAddr
->forEach(callback
, data
); }
2363 ObjectArray
<NetObj
> *getSubnets(bool updateRefCount
) { return m_idxSubnetByAddr
->getObjects(updateRefCount
); }
2364 void dumpInterfaceIndex(CONSOLE_CTX console
);
2365 void dumpNodeIndex(CONSOLE_CTX console
);
2366 void dumpSubnetIndex(CONSOLE_CTX console
);
2372 class NXCORE_EXPORTABLE Network
: public NetObj
2374 using NetObj
::loadFromDatabase
;
2380 virtual int getObjectClass() const { return OBJECT_NETWORK
; }
2381 virtual bool saveToDatabase(DB_HANDLE hdb
);
2383 virtual bool showThresholdSummary();
2385 void AddSubnet(Subnet
*pSubnet
) { addChild(pSubnet
); pSubnet
->addParent(this); }
2386 void AddZone(Zone
*pZone
) { addChild(pZone
); pZone
->addParent(this); }
2387 void loadFromDatabase(DB_HANDLE hdb
);
2393 class NXCORE_EXPORTABLE ConditionObject
: public NetObj
2397 INPUT_DCI
*m_dciList
;
2398 TCHAR
*m_scriptSource
;
2400 UINT32 m_activationEventCode
;
2401 UINT32 m_deactivationEventCode
;
2402 UINT32 m_sourceObject
;
2404 int m_inactiveStatus
;
2407 bool m_queuedForPolling
;
2409 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
2410 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
2414 ConditionObject(bool hidden
);
2415 virtual ~ConditionObject();
2417 virtual int getObjectClass() const { return OBJECT_CONDITION
; }
2419 virtual bool saveToDatabase(DB_HANDLE hdb
);
2420 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
2421 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
2423 virtual json_t
*toJson();
2426 void doPoll(PollerInfo
*poller
);
2429 bool isReadyForPoll()
2431 return ((m_status
!= STATUS_UNMANAGED
) &&
2432 (!m_queuedForPolling
) && (!m_isDeleted
) &&
2433 ((UINT32
)time(NULL
) - (UINT32
)m_lastPoll
> g_dwConditionPollingInterval
));
2436 int getCacheSizeForDCI(UINT32 itemId
, bool noLock
);
2440 * Generic agent policy object
2442 class NXCORE_EXPORTABLE AgentPolicy
: public NetObj
2448 bool savePolicyCommonProperties(DB_HANDLE hdb
);
2450 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
2451 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
2454 AgentPolicy(int type
);
2455 AgentPolicy(const TCHAR
*name
, int type
);
2457 virtual int getObjectClass() const { return OBJECT_AGENTPOLICY
; }
2459 virtual bool saveToDatabase(DB_HANDLE hdb
);
2460 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
2461 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
2463 virtual json_t
*toJson();
2465 virtual bool createDeploymentMessage(NXCPMessage
*msg
);
2466 virtual bool createUninstallMessage(NXCPMessage
*msg
);
2468 void linkNode(Node
*node
) { addChild(node
); node
->addParent(this); }
2469 void unlinkNode(Node
*node
) { deleteChild(node
); node
->deleteParent(this); }
2473 * Agent config policy object
2475 class NXCORE_EXPORTABLE AgentPolicyConfig
: public AgentPolicy
2478 TCHAR
*m_fileContent
;
2480 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
2481 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
2484 AgentPolicyConfig();
2485 AgentPolicyConfig(const TCHAR
*name
);
2486 virtual ~AgentPolicyConfig();
2488 virtual int getObjectClass() const { return OBJECT_AGENTPOLICY_CONFIG
; }
2490 virtual bool saveToDatabase(DB_HANDLE hdb
);
2491 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
2492 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
2494 virtual json_t
*toJson();
2496 virtual bool createDeploymentMessage(NXCPMessage
*msg
);
2497 virtual bool createUninstallMessage(NXCPMessage
*msg
);
2501 * Log parser configuration policy object
2503 class NXCORE_EXPORTABLE AgentPolicyLogParser
: public AgentPolicy
2506 TCHAR
*m_fileContent
;
2508 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
2509 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
2511 AgentPolicyLogParser();
2512 AgentPolicyLogParser(const TCHAR
*name
);
2513 virtual ~AgentPolicyLogParser();
2515 virtual int getObjectClass() const { return OBJECT_AGENTPOLICY_LOGPARSER
; }
2517 virtual bool saveToDatabase(DB_HANDLE hdb
);
2518 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
2519 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
2521 virtual json_t
*toJson();
2523 virtual bool createDeploymentMessage(NXCPMessage
*msg
);
2524 virtual bool createUninstallMessage(NXCPMessage
*msg
);
2528 * Policy group object
2530 class NXCORE_EXPORTABLE PolicyGroup
: public Container
2533 PolicyGroup() : Container() { }
2534 PolicyGroup(const TCHAR
*pszName
) : Container(pszName
, 0) { }
2535 virtual ~PolicyGroup() { }
2537 virtual int getObjectClass() const { return OBJECT_POLICYGROUP
; }
2538 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
2540 virtual bool showThresholdSummary();
2546 class NXCORE_EXPORTABLE PolicyRoot
: public UniversalRoot
2550 virtual ~PolicyRoot();
2552 virtual int getObjectClass() const { return OBJECT_POLICYROOT
; }
2553 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
2559 class NXCORE_EXPORTABLE NetworkMapRoot
: public UniversalRoot
2563 virtual ~NetworkMapRoot();
2565 virtual int getObjectClass() const { return OBJECT_NETWORKMAPROOT
; }
2566 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
2570 * Network map group object
2572 class NXCORE_EXPORTABLE NetworkMapGroup
: public Container
2575 NetworkMapGroup() : Container() { }
2576 NetworkMapGroup(const TCHAR
*pszName
) : Container(pszName
, 0) { }
2577 virtual ~NetworkMapGroup() { }
2579 virtual int getObjectClass() const { return OBJECT_NETWORKMAPGROUP
; }
2580 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
2582 virtual bool showThresholdSummary();
2586 * Network map object
2588 class NXCORE_EXPORTABLE NetworkMap
: public NetObj
2592 IntegerArray
<UINT32
> *m_seedObjects
;
2593 int m_discoveryRadius
;
2595 int m_backgroundColor
;
2596 int m_defaultLinkColor
;
2597 int m_defaultLinkRouting
;
2598 int m_objectDisplayMode
;
2600 double m_backgroundLatitude
;
2601 double m_backgroundLongitude
;
2602 int m_backgroundZoom
;
2603 UINT32 m_nextElementId
;
2604 ObjectArray
<NetworkMapElement
> *m_elements
;
2605 ObjectArray
<NetworkMapLink
> *m_links
;
2606 TCHAR
*m_filterSource
;
2609 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
2610 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
2612 void updateObjects(NetworkMapObjectList
*objects
);
2613 UINT32
objectIdFromElementId(UINT32 eid
);
2614 UINT32
elementIdFromObjectId(UINT32 eid
);
2616 void setFilter(const TCHAR
*filter
);
2620 NetworkMap(int type
, IntegerArray
<UINT32
> *seeds
);
2621 virtual ~NetworkMap();
2623 virtual int getObjectClass() const { return OBJECT_NETWORKMAP
; }
2624 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
2626 virtual bool saveToDatabase(DB_HANDLE hdb
);
2627 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
2628 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
2630 virtual void onObjectDelete(UINT32 dwObjectId
);
2632 virtual json_t
*toJson();
2634 void updateContent();
2636 int getBackgroundColor() { return m_backgroundColor
; }
2637 void setBackgroundColor(int color
) { m_backgroundColor
= color
; }
2639 bool isAllowedOnMap(NetObj
*object
);
2643 * Dashboard tree root
2645 class NXCORE_EXPORTABLE DashboardRoot
: public UniversalRoot
2649 virtual ~DashboardRoot();
2651 virtual int getObjectClass() const { return OBJECT_DASHBOARDROOT
; }
2652 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
2658 class NXCORE_EXPORTABLE DashboardElement
2665 DashboardElement() { m_data
= NULL
; m_layout
= NULL
; }
2666 ~DashboardElement() { free(m_data
); free(m_layout
); }
2670 json_t
*root
= json_object();
2671 json_object_set_new(root
, "type", json_integer(m_type
));
2672 json_object_set_new(root
, "data", json_string_t(m_data
));
2673 json_object_set_new(root
, "layout", json_string_t(m_layout
));
2681 class NXCORE_EXPORTABLE Dashboard
: public Container
2686 ObjectArray
<DashboardElement
> *m_elements
;
2688 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
2689 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
2693 Dashboard(const TCHAR
*name
);
2694 virtual ~Dashboard();
2696 virtual int getObjectClass() const { return OBJECT_DASHBOARD
; }
2697 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
2699 virtual bool saveToDatabase(DB_HANDLE hdb
);
2700 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
2701 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
2703 virtual json_t
*toJson();
2705 virtual bool showThresholdSummary();
2709 * Dashboard group object
2711 class NXCORE_EXPORTABLE DashboardGroup
: public Container
2714 DashboardGroup() : Container() { }
2715 DashboardGroup(const TCHAR
*pszName
) : Container(pszName
, 0) { }
2716 virtual ~DashboardGroup() { }
2718 virtual int getObjectClass() const { return OBJECT_DASHBOARDGROUP
; }
2719 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
2721 virtual bool showThresholdSummary();
2727 class NXCORE_EXPORTABLE SlmCheck
: public NetObj
2730 static NXSL_VariableSystem m_nxslConstants
;
2732 Threshold
*m_threshold
;
2733 enum CheckType
{ check_undefined
= 0, check_script
= 1, check_threshold
= 2 } m_type
;
2735 NXSL_VM
*m_pCompiledScript
;
2736 TCHAR m_reason
[256];
2738 UINT32 m_templateId
;
2739 UINT32 m_currentTicketId
;
2741 virtual void onObjectDelete(UINT32 objectId
);
2743 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
2744 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
2746 void setScript(const TCHAR
*script
);
2747 UINT32
getOwnerId();
2748 NXSL_Value
*getNodeObjectForNXSL();
2749 bool insertTicket();
2751 void setReason(const TCHAR
*reason
) { nx_strncpy(m_reason
, CHECK_NULL_EX(reason
), 256); }
2752 void compileScript();
2756 SlmCheck(const TCHAR
*name
, bool isTemplate
);
2757 SlmCheck(SlmCheck
*tmpl
);
2758 virtual ~SlmCheck();
2762 virtual int getObjectClass() const { return OBJECT_SLMCHECK
; }
2764 virtual bool saveToDatabase(DB_HANDLE hdb
);
2765 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
2766 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
2768 virtual void postModify();
2771 void updateFromTemplate(SlmCheck
*tmpl
);
2773 bool isTemplate() { return m_isTemplate
; }
2774 UINT32
getTemplateId() { return m_templateId
; }
2775 const TCHAR
*getReason() { return m_reason
; }
2779 * Service container - common logic for BusinessService, NodeLink and BusinessServiceRoot
2781 class NXCORE_EXPORTABLE ServiceContainer
: public Container
2783 enum Period
{ DAY
, WEEK
, MONTH
};
2786 time_t m_prevUptimeUpdateTime
;
2787 int m_prevUptimeUpdateStatus
;
2789 double m_uptimeWeek
;
2790 double m_uptimeMonth
;
2791 INT32 m_downtimeDay
;
2792 INT32 m_downtimeWeek
;
2793 INT32 m_downtimeMonth
;
2794 INT32 m_prevDiffDay
;
2795 INT32 m_prevDiffWeek
;
2796 INT32 m_prevDiffMonth
;
2798 static INT32 logRecordId
;
2799 static INT32
getSecondsInMonth();
2800 static INT32
getSecondsInPeriod(Period period
) { return period
== MONTH ?
getSecondsInMonth() : (period
== WEEK ?
(3600 * 24 * 7) : (3600 * 24)); }
2801 static INT32
getSecondsSinceBeginningOf(Period period
, time_t *beginTime
= NULL
);
2803 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
2804 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
2806 void initServiceContainer();
2807 BOOL
addHistoryRecord();
2808 double getUptimeFromDBFor(Period period
, INT32
*downtime
);
2812 ServiceContainer(const TCHAR
*pszName
);
2814 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
2815 virtual bool saveToDatabase(DB_HANDLE hdb
);
2816 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
2818 virtual void calculateCompoundStatus(BOOL bForcedRecalc
= FALSE
);
2819 virtual void setStatus(int newStatus
);
2821 virtual bool showThresholdSummary();
2823 void initUptimeStats();
2824 void updateUptimeStats(time_t currentTime
= 0, BOOL updateChilds
= FALSE
);
2828 * Business service root
2830 class NXCORE_EXPORTABLE BusinessServiceRoot
: public ServiceContainer
2832 using ServiceContainer
::loadFromDatabase
;
2835 BusinessServiceRoot();
2836 virtual ~BusinessServiceRoot();
2838 virtual int getObjectClass() const { return OBJECT_BUSINESSSERVICEROOT
; }
2840 virtual bool saveToDatabase(DB_HANDLE hdb
);
2841 void loadFromDatabase(DB_HANDLE hdb
);
2843 virtual void linkObjects();
2845 void linkObject(NetObj
*pObject
) { addChild(pObject
); pObject
->addParent(this); }
2849 * Business service object
2851 class NXCORE_EXPORTABLE BusinessService
: public ServiceContainer
2855 bool m_pollingDisabled
;
2856 time_t m_lastPollTime
;
2857 int m_lastPollStatus
;
2859 virtual void prepareForDeletion();
2861 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
2862 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
2866 BusinessService(const TCHAR
*name
);
2867 virtual ~BusinessService();
2869 virtual int getObjectClass() const { return OBJECT_BUSINESSSERVICE
; }
2871 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
2872 virtual bool saveToDatabase(DB_HANDLE hdb
);
2873 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
2875 bool isReadyForPolling();
2876 void lockForPolling();
2877 void poll(PollerInfo
*poller
);
2878 void poll(ClientSession
*pSession
, UINT32 dwRqId
, PollerInfo
*poller
);
2880 void getApplicableTemplates(ServiceContainer
*target
, ObjectArray
<SlmCheck
> *templates
);
2884 * Node link object for business service
2886 class NXCORE_EXPORTABLE NodeLink
: public ServiceContainer
2891 virtual void onObjectDelete(UINT32 dwObjectId
);
2893 virtual void fillMessageInternal(NXCPMessage
*pMsg
);
2894 virtual UINT32
modifyFromMessageInternal(NXCPMessage
*pRequest
);
2896 void applyTemplate(SlmCheck
*tmpl
);
2900 NodeLink(const TCHAR
*name
, UINT32 nodeId
);
2901 virtual ~NodeLink();
2903 virtual int getObjectClass() const { return OBJECT_NODELINK
; }
2905 virtual bool saveToDatabase(DB_HANDLE hdb
);
2906 virtual bool deleteFromDatabase(DB_HANDLE hdb
);
2907 virtual bool loadFromDatabase(DB_HANDLE hdb
, UINT32 id
);
2910 void applyTemplates();
2912 UINT32
getNodeId() { return m_nodeId
; }
2916 * Get IP address for object
2918 inline const InetAddress
& GetObjectIpAddress(NetObj
*object
)
2920 if (object
->getObjectClass() == OBJECT_NODE
)
2921 return ((Node
*)object
)->getIpAddress();
2922 if (object
->getObjectClass() == OBJECT_SUBNET
)
2923 return ((Subnet
*)object
)->getIpAddress();
2924 if (object
->getObjectClass() == OBJECT_ACCESSPOINT
)
2925 return ((AccessPoint
*)object
)->getIpAddress();
2926 if (object
->getObjectClass() == OBJECT_INTERFACE
)
2927 return ((Interface
*)object
)->getIpAddressList()->getFirstUnicastAddress();
2928 return InetAddress
::INVALID
;
2936 void NXCORE_EXPORTABLE
NetObjInsert(NetObj
*object
, bool newObject
, bool importedObject
);
2937 void NetObjDeleteFromIndexes(NetObj
*object
);
2938 void NetObjDelete(NetObj
*object
);
2940 void UpdateInterfaceIndex(const InetAddress
& oldIpAddr
, const InetAddress
& newIpAddr
, Interface
*iface
);
2941 ComponentTree
*BuildComponentTree(Node
*node
, SNMP_Transport
*snmp
);
2943 void NXCORE_EXPORTABLE
MacDbAddAccessPoint(AccessPoint
*ap
);
2944 void NXCORE_EXPORTABLE
MacDbAddInterface(Interface
*iface
);
2945 void NXCORE_EXPORTABLE
MacDbAddObject(const BYTE
*macAddr
, NetObj
*object
);
2946 void NXCORE_EXPORTABLE
MacDbRemove(const BYTE
*macAddr
);
2947 NetObj NXCORE_EXPORTABLE
*MacDbFind(const BYTE
*macAddr
);
2949 NetObj NXCORE_EXPORTABLE
*FindObjectById(UINT32 dwId
, int objClass
= -1);
2950 NetObj NXCORE_EXPORTABLE
*FindObjectByName(const TCHAR
*name
, int objClass
= -1);
2951 NetObj NXCORE_EXPORTABLE
*FindObjectByGUID(const uuid
& guid
, int objClass
= -1);
2952 NetObj NXCORE_EXPORTABLE
*FindObject(bool (* comparator
)(NetObj
*, void *), void *userData
, int objClass
= -1);
2953 const TCHAR NXCORE_EXPORTABLE
*GetObjectName(DWORD id
, const TCHAR
*defaultName
);
2954 Template NXCORE_EXPORTABLE
*FindTemplateByName(const TCHAR
*pszName
);
2955 Node NXCORE_EXPORTABLE
*FindNodeByIP(UINT32 zoneUIN
, const InetAddress
& ipAddr
);
2956 Node NXCORE_EXPORTABLE
*FindNodeByIP(UINT32 zoneUIN
, const InetAddressList
*ipAddrList
);
2957 Node NXCORE_EXPORTABLE
*FindNodeByMAC(const BYTE
*macAddr
);
2958 Node NXCORE_EXPORTABLE
*FindNodeByBridgeId(const BYTE
*bridgeId
);
2959 Node NXCORE_EXPORTABLE
*FindNodeByLLDPId(const TCHAR
*lldpId
);
2960 Node NXCORE_EXPORTABLE
*FindNodeBySysName(const TCHAR
*sysName
);
2961 ObjectArray
<NetObj
> *FindNodesByHostname(TCHAR
*hostname
, UINT32 zoneUIN
);
2962 Interface NXCORE_EXPORTABLE
*FindInterfaceByIP(UINT32 zoneUIN
, const InetAddress
& ipAddr
);
2963 Interface NXCORE_EXPORTABLE
*FindInterfaceByMAC(const BYTE
*macAddr
);
2964 Interface NXCORE_EXPORTABLE
*FindInterfaceByDescription(const TCHAR
*description
);
2965 Subnet NXCORE_EXPORTABLE
*FindSubnetByIP(UINT32 zoneUIN
, const InetAddress
& ipAddr
);
2966 Subnet NXCORE_EXPORTABLE
*FindSubnetForNode(UINT32 zoneUIN
, const InetAddress
& nodeAddr
);
2967 MobileDevice NXCORE_EXPORTABLE
*FindMobileDeviceByDeviceID(const TCHAR
*deviceId
);
2968 AccessPoint NXCORE_EXPORTABLE
*FindAccessPointByMAC(const BYTE
*macAddr
);
2969 UINT32 NXCORE_EXPORTABLE
FindLocalMgmtNode();
2970 Zone NXCORE_EXPORTABLE
*FindZoneByUIN(UINT32 zoneUIN
);
2971 UINT32
FindUnusedZoneUIN();
2972 bool NXCORE_EXPORTABLE
IsClusterIP(UINT32 zoneUIN
, const InetAddress
& ipAddr
);
2973 bool NXCORE_EXPORTABLE
IsParentObject(UINT32 object1
, UINT32 object2
);
2976 void DumpObjects(CONSOLE_CTX pCtx
, const TCHAR
*filter
);
2978 bool NXCORE_EXPORTABLE
CreateObjectAccessSnapshot(UINT32 userId
, int objClass
);
2980 void DeleteUserFromAllObjects(UINT32 dwUserId
);
2982 bool IsValidParentClass(int childClass
, int parentClass
);
2983 bool IsAgentPolicyObject(NetObj
*object
);
2984 bool IsEventSource(int objectClass
);
2986 int DefaultPropagatedStatus(int iObjectStatus
);
2987 int GetDefaultStatusCalculation(int *pnSingleThreshold
, int **ppnThresholds
);
2989 PollerInfo
*RegisterPoller(PollerType type
, NetObj
*object
);
2990 void ShowPollers(CONSOLE_CTX console
);
2995 extern Network NXCORE_EXPORTABLE
*g_pEntireNet
;
2996 extern ServiceRoot NXCORE_EXPORTABLE
*g_pServiceRoot
;
2997 extern TemplateRoot NXCORE_EXPORTABLE
*g_pTemplateRoot
;
2998 extern PolicyRoot NXCORE_EXPORTABLE
*g_pPolicyRoot
;
2999 extern NetworkMapRoot NXCORE_EXPORTABLE
*g_pMapRoot
;
3000 extern DashboardRoot NXCORE_EXPORTABLE
*g_pDashboardRoot
;
3001 extern BusinessServiceRoot NXCORE_EXPORTABLE
*g_pBusinessServiceRoot
;
3003 extern UINT32 NXCORE_EXPORTABLE g_dwMgmtNode
;
3004 extern BOOL g_bModificationsLocked
;
3005 extern Queue g_templateUpdateQueue
;
3007 extern ObjectIndex NXCORE_EXPORTABLE g_idxObjectById
;
3008 extern InetAddressIndex NXCORE_EXPORTABLE g_idxSubnetByAddr
;
3009 extern InetAddressIndex NXCORE_EXPORTABLE g_idxInterfaceByAddr
;
3010 extern InetAddressIndex NXCORE_EXPORTABLE g_idxNodeByAddr
;
3011 extern ObjectIndex NXCORE_EXPORTABLE g_idxZoneByUIN
;
3012 extern ObjectIndex NXCORE_EXPORTABLE g_idxNodeById
;
3013 extern ObjectIndex NXCORE_EXPORTABLE g_idxNetMapById
;
3014 extern ObjectIndex NXCORE_EXPORTABLE g_idxChassisById
;
3015 extern ObjectIndex NXCORE_EXPORTABLE g_idxClusterById
;
3016 extern ObjectIndex NXCORE_EXPORTABLE g_idxMobileDeviceById
;
3017 extern ObjectIndex NXCORE_EXPORTABLE g_idxAccessPointById
;
3018 extern ObjectIndex NXCORE_EXPORTABLE g_idxConditionById
;
3019 extern ObjectIndex NXCORE_EXPORTABLE g_idxServiceCheckById
;
3020 extern ObjectIndex NXCORE_EXPORTABLE g_idxSensorById
;
3022 #endif /* _nms_objects_h_ */