Initial preparation for zoning support
authorVictor Kirhenshtein <victor@netxms.org>
Mon, 16 May 2005 11:52:41 +0000 (11:52 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Mon, 16 May 2005 11:52:41 +0000 (11:52 +0000)
16 files changed:
include/netxmsdb.h
include/nms_cscp.h
sql/schema.in
sql/setup.in
src/console/win32/nxcon.clw
src/server/core/entirenet.cpp
src/server/core/main.cpp
src/server/core/node.cpp
src/server/core/np.cpp
src/server/core/nxcore.dsp
src/server/core/poll.cpp
src/server/core/rootobj.cpp
src/server/core/subnet.cpp
src/server/include/nms_core.h
src/server/include/nms_objects.h
src/server/tools/nxdbmgr/upgrade.cpp

index 1b67030..39a9006 100644 (file)
@@ -23,6 +23,6 @@
 #ifndef _netxms_db_h
 #define _netxms_db_h
 
-#define DB_FORMAT_VERSION      28
+#define DB_FORMAT_VERSION      29
 
 #endif
index a35f548..8279c7f 100644 (file)
@@ -444,6 +444,8 @@ typedef struct
 #define VID_NUM_VARIABLES           ((DWORD)144)
 #define VID_COMMAND                 ((DWORD)145)
 #define VID_PROTOCOL_VERSION        ((DWORD)146)
+#define VID_ZONE_GUID               ((DWORD)147)
+#define VID_ZONE_TYPE               ((DWORD)148)
 
 // Variable ranges for object's ACL
 #define VID_ACL_USER_BASE           ((DWORD)0x00001000)
index 7b3915b..e1c82d0 100644 (file)
@@ -121,6 +121,33 @@ CREATE TABLE object_properties
 
 
 /*
+** Zone object
+*/
+
+CREATE TABLE zones
+(
+       id integer not null,            // Zone object's ID
+       zone_guid integer not null,     // Globally unique ID for zone
+       zone_type integer not null,     // Active or passive zone
+       controller_ip varchar(15) not null,
+       description SQL_TEXT,
+       PRIMARY KEY(id)
+) TABLE_TYPE;
+
+
+/*
+** Zone IP address list
+*/
+
+CREATE TABLE zone_ip_addr_list
+(
+       zone_id integer not null,       // Zone object's ID
+       ip_addr varchar(15) not null,
+       PRIMARY KEY(zone_id,ip_addr)
+) TABLE_TYPE;
+
+
+/*
 ** Nodes information
 */
 
@@ -142,6 +169,7 @@ CREATE TABLE nodes
        agent_version varchar(63),
        platform_name varchar(63),
        poller_node_id integer not null,
+       zone_guid integer not null,
        PRIMARY KEY(id)
 ) TABLE_TYPE;
 
@@ -155,6 +183,7 @@ CREATE TABLE subnets
        id integer not null,
        ip_addr varchar(15),
        ip_netmask varchar(15),
+       zone_guid integer not null,
        PRIMARY KEY(id)
 ) TABLE_TYPE;
 
index 205d4ae..edaabc8 100644 (file)
@@ -15,6 +15,8 @@ INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
        VALUES ('ServerID','',0,1);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
+       VALUES ('EnableZoning','0',1,1);
+INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
        VALUES ('SyncInterval','60',1,1);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
        VALUES ('NewNodePollingInterval','60',1,1);
@@ -25,7 +27,7 @@ INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
        VALUES ('ConfigurationPollingInterval','3600',1,1);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
-       VALUES ('ResolveNodeNames','0',1,0);
+       VALUES ('ResolveNodeNames','1',1,0);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
        VALUES ('NumberOfEventProcessors','1',1,1);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
index 71952a9..10c388a 100644 (file)
@@ -16,9 +16,9 @@ Class7=CEventBrowser
 Class9=CMapView
 
 ResourceCount=117
-Resource1=IDD_CREATE_TEMPLATE (English (U.S.))
+Resource1=IDD_SELECT_ACTION (English (U.S.))
 Resource2=IDD_OBJECT_NODE_GENERAL
-Resource3=IDD_SELECT_AGENT_PARAM (English (U.S.))
+Resource3=IDD_CREATE_TEMPLATE (English (U.S.))
 Resource4=IDD_SELECT_OBJECT
 Resource5=IDD_SELECT_ACTION
 Class2=CChildView
@@ -32,9 +32,9 @@ Resource7=IDD_NEW_USER
 Class12=CObjectBrowser
 Resource8=IDD_CREATE_CONTAINER
 Class13=CObjectPropDlg
-Resource9=IDD_OBJECT_RELATIONS (English (U.S.))
-Resource10=IDR_MAINFRAME (English (U.S.))
-Resource11=IDD_GRAPH_PROP_SETTINGS (English (U.S.))
+Resource9=IDD_SELECT_AGENT_PARAM (English (U.S.))
+Resource10=IDD_OBJECT_NETSRV_GENERAL (English (U.S.))
+Resource11=IDD_CREATE_NETSRV (English (U.S.))
 Resource12=IDR_CTRLPANEL (English (U.S.))
 Resource13=IDR_EVENTS (English (U.S.))
 Resource14=IDR_MAPFRAME (English (U.S.))
@@ -42,17 +42,17 @@ Resource15=IDR_OBJECTS (English (U.S.))
 Resource16=IDD_DUMMY (English (U.S.))
 Class14=CEventEditor
 Class15=CEditEventDlg
-Resource17=IDD_NEW_ACTION (English (U.S.))
+Resource17=IDD_SELECT_EVENT (English (U.S.))
 Class16=CDebugFrame
-Resource18=IDD_DATA_QUERY (English (U.S.))
+Resource18=IDD_CREATE_CONTAINER (English (U.S.))
 Resource19=IDD_OBJECT_PROPERTIES (English (U.S.))
 Resource20=IDD_SELECT_EVENT
 Class17=CObjectPreview
-Resource21=IDD_ABOUTBOX (English (U.S.))
+Resource21=IDA_ACTION_EDITOR (English (U.S.))
 Class18=CToolBox
 Class19=CObjectInfoBox
 Class20=CObjectSearchBox
-Resource22=IDD_SET_PASSWORD (English (U.S.))
+Resource22=IDD_OBJECT_SECURITY (English (U.S.))
 Class21=CEditBox
 Class22=COPGeneral
 Class23=CNodePropsGeneral
@@ -61,14 +61,14 @@ Class24=CObjectPropCaps
 Class25=CObjectPropSheet
 Resource24=IDA_MDI_DEFAULT
 Class26=CRequestProcessingDlg
-Resource25=IDA_LAST_VALUES (English (U.S.))
+Resource25=IDA_EVENT_EDITOR (English (U.S.))
 Resource26=IDD_PROGRESS (English (U.S.))
 Resource27=IDD_EDIT_RULE_ALARM
-Resource28=IDA_ALARM_BROWSER (English (U.S.))
+Resource28=IDD_GRAPH_PROP_SETTINGS (English (U.S.))
 Class27=CObjectPropsGeneral
-Resource29=IDD_OBJECT_NODE_POLL (English (U.S.))
+Resource29=IDD_SELECT_INTERNAL_ITEM (English (U.S.))
 Class28=CObjectPropsSecurity
-Resource30=IDD_CP_GENERAL (English (U.S.))
+Resource30=IDD_EDIT_RULE_COMMENT (English (U.S.))
 Resource31=IDD_SELECT_USER
 Resource32=IDD_OBJECT_SECURITY
 Class29=CUserSelectDlg
@@ -79,36 +79,36 @@ Class31=CNewUserDlg
 Resource35=IDD_THRESHOLD
 Resource36=IDA_EPP
 Class32=CUserPropDlg
-Resource37=IDD_OBJECT_GENERAL (English (U.S.))
+Resource37=IDD_LOGIN (English (U.S.))
 Resource38=IDD_ABOUTBOX
 Class33=CGroupPropDlg
 Resource39=IDD_CP_GENERAL
 Resource40=IDA_TRAP_EDITOR
 Resource41=IDM_VIEW_SPECIFIC
-Resource42=IDM_CONTEXT (English (U.S.))
+Resource42=IDM_VIEW_SPECIFIC (English (U.S.))
 Class34=CPasswordChangeDlg
 Class35=CNodeSummary
 Class36=CNetSummaryFrame
 Class37=CDataCollectionEditor
-Resource43=IDD_SELECT_OBJECT (English (U.S.))
+Resource43=IDD_SET_PASSWORD (English (U.S.))
 Class38=CDCIPropPage
-Resource44=IDD_EDIT_RULE_SEVERITY (English (U.S.))
+Resource44=IDD_MIB_BROWSER (English (U.S.))
 Class39=CDCIDataView
-Resource45=IDA_EPP (English (U.S.))
+Resource45=IDD_DESKTOP_SAVE_AS (English (U.S.))
 Class40=CGraph
 Class41=CGraphFrame
 Class42=CDCIThresholdsPage
-Resource46=IDD_CREATE_NETSRV (English (U.S.))
-Resource47=IDD_CREATE_CONTAINER (English (U.S.))
+Resource46=IDD_EDIT_TRAP (English (U.S.))
+Resource47=IDD_EDIT_RULE_ALARM (English (U.S.))
 Resource48=IDM_CONTEXT
 Class43=CThresholdDlg
-Resource49=IDD_OBJECT_NETSRV_GENERAL (English (U.S.))
+Resource49=IDD_EDIT_TRAP_ARG (English (U.S.))
 Resource50=IDD_EDIT_TRAP_ARG
 Class44=CMIBBrowserDlg
 Class45=CEventPolicyEditor
 Class46=CRuleList
 Class47=CRuleHeader
-Resource51=IDA_OBJECT_BROWSER (English (U.S.))
+Resource51=IDD_OBJECT_RELATIONS (English (U.S.))
 Resource52=IDD_CREATE_NODE
 Class48=CObjectSelDlg
 Resource53=IDD_OBJECT_CAPS
@@ -117,22 +117,22 @@ Class49=CRuleCommentDlg
 Resource55=IDD_DCI_COLLECTION
 Class50=CEventSelDlg
 Resource56=IDD_DATA_QUERY
-Resource57=IDD_REQUEST_PROCESSING (English (U.S.))
+Resource57=IDD_ABOUTBOX (English (U.S.))
 Resource58=IDD_CREATE_TG
-Resource59=IDD_CREATE_TG (English (U.S.))
-Resource60=IDD_MIB_BROWSER (English (U.S.))
+Resource59=IDD_ACTION_PROPERTIES (English (U.S.))
+Resource60=IDD_GROUP_PROPERTIES (English (U.S.))
 Class51=CObjectPropsPresentation
-Resource61=IDD_EDIT_EVENT (English (U.S.))
+Resource61=IDA_GRAPH (English (U.S.))
 Resource62=IDD_EDIT_RULE_COMMENT
 Class52=CRuleSeverityDlg
 Resource63=IDD_ACTION_PROPERTIES
 Class53=CRuleAlarmDlg
 Class54=CAlarmBrowser
-Resource64=IDD_ACTION_PROPERTIES (English (U.S.))
+Resource64=IDD_OBJECT_PRESENTATION (English (U.S.))
 Resource65=IDD_DCI_TRANSFORM
-Resource66=IDA_TRAP_EDITOR (English (U.S.))
-Resource67=IDD_OBJECT_CAPS (English (U.S.))
-Resource68=IDD_CREATE_NODE (English (U.S.))
+Resource66=IDA_EPP (English (U.S.))
+Resource67=IDA_LAST_VALUES (English (U.S.))
+Resource68=IDD_CP_GENERAL (English (U.S.))
 Class55=CConsolePropsGeneral
 Class56=CActionEditor
 Resource69=IDA_ACTION_EDITOR
@@ -143,18 +143,18 @@ Class58=CEditActionDlg
 Resource72=IDA_NETMAP
 Class59=CActionSelDlg
 Resource73=IDD_MIB_BROWSER
-Resource74=IDD_OBJECT_SECURITY (English (U.S.))
-Resource75=IDD_NEW_USER (English (U.S.))
+Resource74=IDD_EDIT_EVENT (English (U.S.))
+Resource75=IDD_OBJECT_CAPS (English (U.S.))
 Resource76=IDD_USER_PROPERTIES
 Class60=CCreateObjectDlg
 Class61=CCreateContainerDlg
 Resource77=IDR_MAINFRAME
 Class62=CCreateNodeDlg
-Resource78=IDD_LOGIN (English (U.S.))
-Resource79=IDA_MDI_DEFAULT (English (U.S.))
-Resource80=IDD_GROUP_PROPERTIES (English (U.S.))
+Resource78=IDA_TRAP_EDITOR (English (U.S.))
+Resource79=IDD_OBJECT_NODE_POLL (English (U.S.))
+Resource80=IDD_OBJECT_GENERAL (English (U.S.))
 Class63=CDCITransformPage
-Resource81=IDD_EDIT_TRAP (English (U.S.))
+Resource81=IDD_CREATE_NODE (English (U.S.))
 Class64=CPollNodeDlg
 Resource82=IDD_POLL_NODE (English (U.S.))
 Class65=CNodePoller
@@ -179,40 +179,40 @@ Class72=CGraphPropDlg
 Class73=CColorSelector
 Class74=CPackageMgr
 Resource94=IDD_GROUP_PROPERTIES
-Resource95=IDD_EDIT_RULE_ALARM (English (U.S.))
-Resource96=IDD_OBJECT_PRESENTATION (English (U.S.))
-Resource97=IDA_EVENT_EDITOR (English (U.S.))
-Resource98=IDM_VIEW_SPECIFIC (English (U.S.))
-Resource99=IDA_PACKAGE_MGR (English (U.S.))
-Resource100=IDA_GRAPH (English (U.S.))
-Resource101=IDD_SELECT_USER (English (U.S.))
-Resource102=IDD_SELECT_ACTION (English (U.S.))
-Resource103=IDD_INPUT_BOX (English (U.S.))
-Resource104=IDA_NETMAP (English (U.S.))
-Resource105=IDD_USER_PROPERTIES (English (U.S.))
-Resource106=IDD_EDIT_RULE_COMMENT (English (U.S.))
-Resource107=IDD_SELECT_EVENT (English (U.S.))
+Resource95=IDD_SELECT_OBJECT (English (U.S.))
+Resource96=IDD_THRESHOLD (English (U.S.))
+Resource97=IDA_MDI_DEFAULT (English (U.S.))
+Resource98=IDM_CONTEXT (English (U.S.))
+Resource99=IDA_NETMAP (English (U.S.))
+Resource100=IDA_ALARM_BROWSER (English (U.S.))
+Resource101=IDD_OBJECT_NODE_GENERAL (English (U.S.))
+Resource102=IDD_EDIT_RULE_SEVERITY (English (U.S.))
+Resource103=IDD_DATA_QUERY (English (U.S.))
+Resource104=IDR_MAINFRAME (English (U.S.))
+Resource105=IDD_REQUEST_PROCESSING (English (U.S.))
+Resource106=IDD_DCI_COLLECTION (English (U.S.))
+Resource107=IDD_DCI_THRESHOLDS (English (U.S.))
 Class75=CInternalItemSelDlg
-Resource108=IDD_DCI_THRESHOLDS (English (U.S.))
+Resource108=IDD_NEW_USER (English (U.S.))
 Class76=CAgentParamSelDlg
-Resource109=IDD_DCI_TRANSFORM (English (U.S.))
+Resource109=IDD_NEW_ACTION (English (U.S.))
 Class77=CInputBox
-Resource110=IDD_OBJECT_NODE_GENERAL (English (U.S.))
+Resource110=IDA_PACKAGE_MGR (English (U.S.))
 Class78=CCreateNetSrvDlg
-Resource111=IDA_ACTION_EDITOR (English (U.S.))
+Resource111=IDA_OBJECT_BROWSER (English (U.S.))
 Class79=CNetSrvPropsGeneral
-Resource112=IDD_DESKTOP_SAVE_AS (English (U.S.))
+Resource112=IDD_INPUT_BOX (English (U.S.))
 Class80=CNodePropsPolling
 Class81=CDeploymentView
 Class82=CLastValuesView
 Class83=CValueList
-Resource113=IDD_THRESHOLD (English (U.S.))
+Resource113=IDD_USER_PROPERTIES (English (U.S.))
 Class84=CObjectPropsRelations
-Resource114=IDD_DCI_COLLECTION (English (U.S.))
+Resource114=IDD_SELECT_USER (English (U.S.))
 Class85=CSaveDesktopDlg
-Resource115=IDD_SELECT_INTERNAL_ITEM (English (U.S.))
+Resource115=IDD_CREATE_TG (English (U.S.))
 Class86=CGraphSettingsPage
-Resource116=IDD_EDIT_TRAP_ARG (English (U.S.))
+Resource116=IDD_DCI_TRANSFORM (English (U.S.))
 Class87=CGraphDataPage
 Resource117=IDD_GRAPH_PROP_DATA (English (U.S.))
 
index 9b323fa..f6012e5 100644 (file)
@@ -30,7 +30,7 @@
 Network::Network()
         :NetObj()
 {
-   m_dwId = 1;
+   m_dwId = BUILTIN_OID_NETWORK;
    strcpy(m_szName, "Entire Network");
 }
 
index bc5c53d..b446d42 100644 (file)
@@ -178,6 +178,8 @@ static void LoadGlobalConfig()
       g_dwFlags |= AF_DELETE_EMPTY_SUBNETS;
    if (ConfigReadInt("EnableSNMPTraps", 1))
       g_dwFlags |= AF_ENABLE_SNMP_TRAPD;
+   if (ConfigReadInt("EnableZoning", 0))
+      g_dwFlags |= AF_ENABLE_ZONING;
    ConfigReadStr("DataDirectory", g_szDataDir, MAX_PATH, DEFAULT_DATA_DIR);
 }
 
@@ -523,7 +525,29 @@ BOOL ProcessConsoleCommand(char *pszCmdLine, CONSOLE_CTX pCtx)
 
       if (IsCommand("FLAGS", szBuffer, 1))
       {
-         ConsolePrintf(pCtx, "Flags: 0x%08X\n\n", g_dwFlags);
+         ConsolePrintf(pCtx, "Flags: 0x%08X\n", g_dwFlags);
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_STANDALONE));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_USE_EVENT_LOG));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_ENABLE_ACCESS_CONTROL));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_ENABLE_EVENTS_ACCESS_CONTROL));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_LOG_SQL_ERRORS));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_DELETE_EMPTY_SUBNETS));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_ENABLE_SNMP_TRAPD));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_ENABLE_ZONING));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_DEBUG_EVENTS));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_DEBUG_CSCP));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_DEBUG_DISCOVERY));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_DEBUG_DC));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_DEBUG_HOUSEKEEPER));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_DEBUG_LOCKS));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_DEBUG_ACTIONS));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_DEBUG_MISC));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_DEBUG_SQL));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_DEBUG_SNMP));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_DEBUG_OBJECTS));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_DB_LOCKED));
+         ConsolePrintf(pCtx, SHOW_FLAG_VALUE(AF_SHUTDOWN));
+         ConsolePrintf(pCtx, "\n");
       }
       else if (IsCommand("MUTEX", szBuffer, 1))
       {
index 4bff9ed..42e044e 100644 (file)
@@ -33,6 +33,7 @@ Node::Node()
    m_dwFlags = 0;
    m_dwDiscoveryFlags = 0;
    m_dwDynamicFlags = 0;
+   m_dwZoneGUID = 0;
    m_dwNodeType = NODE_TYPE_GENERIC;
    m_wAgentPort = AGENT_LISTEN_PORT;
    m_wAuthMethod = AUTH_NONE;
@@ -60,12 +61,13 @@ Node::Node()
 // Constructor for new node object
 //
 
-Node::Node(DWORD dwAddr, DWORD dwFlags, DWORD dwDiscoveryFlags)
+Node::Node(DWORD dwAddr, DWORD dwFlags, DWORD dwDiscoveryFlags, DWORD dwZone)
      :Template()
 {
    m_dwIpAddr = dwAddr;
    m_dwFlags = dwFlags;
    m_dwDynamicFlags = 0;
+   m_dwZoneGUID = dwZone;
    m_dwNodeType = NODE_TYPE_GENERIC;
    m_dwDiscoveryFlags = dwDiscoveryFlags;
    m_wAgentPort = AGENT_LISTEN_PORT;
@@ -128,7 +130,8 @@ BOOL Node::CreateFromDB(DWORD dwId)
                             "snmp_version,discovery_flags,auth_method,secret,"
                             "agent_port,status_poll_type,community,snmp_oid,"
                             "description,node_type,agent_version,"
-                            "platform_name,poller_node_id FROM nodes WHERE id=%ld", dwId);
+                            "platform_name,poller_node_id,zone_guid"
+                            " FROM nodes WHERE id=%ld", dwId);
    hResult = DBSelect(g_hCoreDB, szQuery);
    if (hResult == 0)
       return FALSE;     // Query failed
@@ -157,6 +160,7 @@ BOOL Node::CreateFromDB(DWORD dwId)
    _tcsncpy(m_szPlatformName, CHECK_NULL_EX(DBGetField(hResult, 0, 13)), MAX_PLATFORM_NAME_LEN);
    DecodeSQLString(m_szPlatformName);
    m_dwPollerNode = DBGetFieldULong(hResult, 0, 14);
+   m_dwZoneGUID = DBGetFieldULong(hResult, 0, 15);
 
    DBFreeResult(hResult);
 
@@ -252,24 +256,26 @@ BOOL Node::SaveToDB(void)
                "node_flags,snmp_version,community,discovery_flags,status_poll_type,"
                "agent_port,auth_method,secret,snmp_oid,"
                "description,node_type,agent_version,platform_name,"
-               "poller_node_id) VALUES (%ld,'%s',%ld,%d,'%s',%ld,%d,%d,%d,"
-               "'%s','%s','%s',%ld,'%s','%s',%ld)",
+               "poller_node_id,zone_guid) VALUES (%ld,'%s',%ld,%d,'%s',%ld,%d,%d,%d,"
+               "'%s','%s','%s',%ld,'%s','%s',%ld,%ld)",
                m_dwId, IpToStr(m_dwIpAddr, szIpAddr), m_dwFlags,
                m_iSNMPVersion, m_szCommunityString, m_dwDiscoveryFlags, m_iStatusPollType,
                m_wAgentPort, m_wAuthMethod, m_szSharedSecret, m_szObjectId,
-               pszEscDescr, m_dwNodeType, pszEscVersion, pszEscPlatform, m_dwPollerNode);
+               pszEscDescr, m_dwNodeType, pszEscVersion, pszEscPlatform,
+               m_dwPollerNode, m_dwZoneGUID);
    else
       snprintf(szQuery, 4096,
                "UPDATE nodes SET primary_ip='%s',"
                "node_flags=%ld,snmp_version=%d,community='%s',discovery_flags=%d,"
                "status_poll_type=%d,agent_port=%d,auth_method=%d,secret='%s',"
                "snmp_oid='%s',description='%s',node_type=%ld,"
-               "agent_version='%s',platform_name='%s',poller_node_id=%ld WHERE id=%ld",
+               "agent_version='%s',platform_name='%s',poller_node_id=%ld,zone_guid=%ld"
+               " WHERE id=%ld",
                IpToStr(m_dwIpAddr, szIpAddr), 
                m_dwFlags, m_iSNMPVersion, m_szCommunityString, m_dwDiscoveryFlags, 
                m_iStatusPollType, m_wAgentPort, m_wAuthMethod, m_szSharedSecret, 
                m_szObjectId, pszEscDescr, m_dwNodeType, 
-               pszEscVersion, pszEscPlatform, m_dwPollerNode, m_dwId);
+               pszEscVersion, pszEscPlatform, m_dwPollerNode, m_dwZoneGUID, m_dwId);
    bResult = DBQuery(g_hCoreDB, szQuery);
    free(pszEscDescr);
    free(pszEscVersion);
@@ -567,7 +573,7 @@ void Node::CreateNewInterface(DWORD dwIpAddr, DWORD dwNetMask, char *szName,
          // Create new subnet object
          if (dwIpAddr < 0xE0000000)
          {
-            pSubnet = new Subnet(dwIpAddr & dwNetMask, dwNetMask);
+            pSubnet = new Subnet(dwIpAddr & dwNetMask, dwNetMask, m_dwZoneGUID);
             NetObjInsert(pSubnet, TRUE);
             g_pEntireNet->AddSubnet(pSubnet);
          }
@@ -1390,6 +1396,7 @@ void Node::CreateMessage(CSCPMessage *pMsg)
    pMsg->SetVariable(VID_AGENT_VERSION, m_szAgentVersion);
    pMsg->SetVariable(VID_PLATFORM_NAME, m_szPlatformName);
    pMsg->SetVariable(VID_POLLER_NODE_ID, m_dwPollerNode);
+   pMsg->SetVariable(VID_ZONE_GUID, m_dwZoneGUID);
 }
 
 
index 01405ee..7c1f1ff 100644 (file)
@@ -44,7 +44,7 @@ NetObj *PollNewNode(DWORD dwIpAddr, DWORD dwNetMask, DWORD dwFlags, TCHAR *pszNa
       return NULL;
    }
 
-   pNode = new Node(dwIpAddr, 0, dwFlags);
+   pNode = new Node(dwIpAddr, 0, dwFlags, 0);
    NetObjInsert(pNode, TRUE);
    pNode->NewNodePoll(dwNetMask);
    if (pszName != NULL)
index ef7a0dd..b8ee5f3 100644 (file)
@@ -292,6 +292,10 @@ SOURCE=.\users.cpp
 
 SOURCE=.\watchdog.cpp
 # End Source File
+# Begin Source File
+
+SOURCE=.\zone.cpp
+# End Source File
 # End Group
 # Begin Group "Header Files"
 
index 87a18ec..471f1b5 100644 (file)
@@ -80,7 +80,7 @@ void CheckForMgmtNode(void)
          for(i = 0; i < pIfList->iNumEntries; i++)
             if (pIfList->pInterfaces[i].dwIpAddr != 0)
             {
-               pNode = new Node(pIfList->pInterfaces[i].dwIpAddr, NF_IS_LOCAL_MGMT, DF_DEFAULT);
+               pNode = new Node(pIfList->pInterfaces[i].dwIpAddr, NF_IS_LOCAL_MGMT, DF_DEFAULT, 0);
                NetObjInsert(pNode, TRUE);
                pNode->NewNodePoll(0);
                pNode->Unhide();
index 8c9bb2e..81bb998 100644 (file)
@@ -30,7 +30,7 @@
 ServiceRoot::ServiceRoot()
             :UniversalRoot()
 {
-   m_dwId = 2;
+   m_dwId = BUILTIN_OID_SERVICEROOT;
    strcpy(m_szName, "All Services");
 }
 
@@ -51,7 +51,7 @@ ServiceRoot::~ServiceRoot()
 TemplateRoot::TemplateRoot()
              :UniversalRoot()
 {
-   m_dwId = 3;
+   m_dwId = BUILTIN_OID_TEMPLATEROOT;
    strcpy(m_szName, "Templates");
 }
 
index 16c9538..268a4e8 100644 (file)
@@ -31,6 +31,7 @@ Subnet::Subnet()
        :NetObj()
 {
    m_dwIpNetMask = 0;
+   m_dwZoneGUID = 0;
 }
 
 
@@ -38,13 +39,14 @@ Subnet::Subnet()
 // Subnet class constructor
 //
 
-Subnet::Subnet(DWORD dwAddr, DWORD dwNetMask)
+Subnet::Subnet(DWORD dwAddr, DWORD dwNetMask, DWORD dwZone)
 {
    char szBuffer[32];
 
    m_dwIpAddr = dwAddr;
    m_dwIpNetMask = dwNetMask;
    sprintf(m_szName, "%s/%d", IpToStr(dwAddr, szBuffer), BitsInMask(dwNetMask));
+   m_dwZoneGUID = dwZone;
 }
 
 
@@ -71,7 +73,7 @@ BOOL Subnet::CreateFromDB(DWORD dwId)
    if (!LoadCommonProperties())
       return FALSE;
 
-   sprintf(szQuery, "SELECT ip_addr,ip_netmask FROM subnets WHERE id=%d", dwId);
+   sprintf(szQuery, "SELECT ip_addr,ip_netmask,zone_guid FROM subnets WHERE id=%d", dwId);
    hResult = DBSelect(g_hCoreDB, szQuery);
    if (hResult == 0)
       return FALSE;     // Query failed
@@ -84,6 +86,7 @@ BOOL Subnet::CreateFromDB(DWORD dwId)
 
    m_dwIpAddr = DBGetFieldIPAddr(hResult, 0, 0);
    m_dwIpNetMask = DBGetFieldIPAddr(hResult, 0, 1);
+   m_dwZoneGUID = DBGetFieldULong(hResult, 0, 2);
 
    DBFreeResult(hResult);
 
@@ -122,15 +125,15 @@ BOOL Subnet::SaveToDB(void)
 
    // Form and execute INSERT or UPDATE query
    if (bNewObject)
-      sprintf(szQuery, "INSERT INTO subnets (id,ip_addr,ip_netmask) "
-                       "VALUES (%ld,'%s','%s')",
+      sprintf(szQuery, "INSERT INTO subnets (id,ip_addr,ip_netmask,zone_guid) "
+                       "VALUES (%ld,'%s','%s',%ld)",
               m_dwId, IpToStr(m_dwIpAddr, szIpAddr),
-              IpToStr(m_dwIpNetMask, szNetMask));
+              IpToStr(m_dwIpNetMask, szNetMask), m_dwZoneGUID);
    else
       sprintf(szQuery, "UPDATE subnets SET ip_addr='%s',"
-                       "ip_netmask='%s' WHERE id=%ld",
+                       "ip_netmask='%s',zone_guid=%ld WHERE id=%ld",
               IpToStr(m_dwIpAddr, szIpAddr),
-              IpToStr(m_dwIpNetMask, szNetMask), m_dwId);
+              IpToStr(m_dwIpNetMask, szNetMask), m_dwZoneGUID, m_dwId);
    DBQuery(g_hCoreDB, szQuery);
 
    // Update node to subnet mapping
@@ -182,4 +185,5 @@ void Subnet::CreateMessage(CSCPMessage *pMsg)
 {
    NetObj::CreateMessage(pMsg);
    pMsg->SetVariable(VID_IP_NETMASK, m_dwIpNetMask);
+   pMsg->SetVariable(VID_ZONE_GUID, m_dwZoneGUID);
 }
index 2b2c0dd..277b08b 100644 (file)
@@ -61,6 +61,8 @@
 #define HAVE_SOCKLEN_T  /* Prevent defining socklen_t in net-snmp */
 #endif   /* _WIN32 */
 
+#define SHOW_FLAG_VALUE(x) _T("  %-32s = %d\n"), _T(#x), (g_dwFlags & x) ? 1 : 0
+
 
 //
 // Common includes
@@ -178,6 +180,7 @@ typedef void * HSNMPSESSION;
 #define AF_LOG_SQL_ERRORS                 0x00000010
 #define AF_DELETE_EMPTY_SUBNETS           0x00000020
 #define AF_ENABLE_SNMP_TRAPD              0x00000040
+#define AF_ENABLE_ZONING                  0x00000080
 #define AF_DEBUG_EVENTS                   0x00000100
 #define AF_DEBUG_CSCP                     0x00000200
 #define AF_DEBUG_DISCOVERY                0x00000400
index 5059d51..fa3df5b 100644 (file)
@@ -63,6 +63,16 @@ extern DWORD g_dwConfigurationPollingInterval;
 
 
 //
+// Built-in object IDs
+//
+
+#define BUILTIN_OID_NETWORK         1
+#define BUILTIN_OID_SERVICEROOT     2
+#define BUILTIN_OID_TEMPLATEROOT    3
+#define BUILTIN_OID_ZONE0           4
+
+
+//
 // Discovery flags
 //
 
@@ -93,6 +103,14 @@ extern DWORD g_dwConfigurationPollingInterval;
 
 
 //
+// Zone types
+//
+
+#define ZONE_TYPE_PASSIVE     0
+#define ZONE_TYPE_ACTIVE      1
+
+
+//
 // Queued template update information
 //
 
@@ -383,6 +401,7 @@ protected:
    DWORD m_dwFlags;
    DWORD m_dwDiscoveryFlags;
    DWORD m_dwDynamicFlags;       // Flags used at runtime by server
+   DWORD m_dwZoneGUID;
    WORD m_wAgentPort;
    WORD m_wAuthMethod;
    DWORD m_dwNodeType;
@@ -416,7 +435,7 @@ protected:
 
 public:
    Node();
-   Node(DWORD dwAddr, DWORD dwFlags, DWORD dwDiscoveryFlags);
+   Node(DWORD dwAddr, DWORD dwFlags, DWORD dwDiscoveryFlags, DWORD dwZone);
    virtual ~Node();
 
    virtual int Type(void) { return OBJECT_NODE; }
@@ -547,10 +566,11 @@ class NXCORE_EXPORTABLE Subnet : public NetObj
 {
 protected:
    DWORD m_dwIpNetMask;
+   DWORD m_dwZoneGUID;
 
 public:
    Subnet();
-   Subnet(DWORD dwAddr, DWORD dwNetMask);
+   Subnet(DWORD dwAddr, DWORD dwNetMask, DWORD dwZone);
    virtual ~Subnet();
 
    virtual int Type(void) { return OBJECT_SUBNET; }
@@ -685,6 +705,34 @@ public:
 
 
 //
+// Zone object
+//
+
+class Zone : public NetObj
+{
+protected:
+   DWORD m_dwZoneGUID;
+   int m_iZoneType;
+   DWORD m_dwControllerIpAddr;
+   DWORD m_dwAddrListSize;
+   DWORD *m_pdwIpAddrList;
+   TCHAR *m_pszDescription;
+
+public:
+   Zone();
+   virtual ~Zone();
+
+   virtual int Type(void) { return OBJECT_ZONE; }
+
+   virtual BOOL SaveToDB(void);
+   virtual BOOL DeleteFromDB(void);
+   virtual BOOL CreateFromDB(DWORD dwId);
+
+   virtual void CreateMessage(CSCPMessage *pMsg);
+};
+
+
+//
 // Object index structure
 //
 
index 298ea9e..d967166 100644 (file)
@@ -75,6 +75,52 @@ static BOOL CreateConfigParam(TCHAR *pszName, TCHAR *pszValue, int iVisible, int
 
 
 //
+// Upgrade from V28 to V29
+//
+
+static BOOL H_UpgradeFromV28(void)
+{
+   static TCHAR m_szBatch[] =
+      "ALTER TABLE nodes ADD zone_guid integer\n"
+      "ALTER TABLE subnets ADD zone_guid integer\n"
+      "UPDATE nodes SET zone_guid=0\n"
+      "UPDATE subnets SET zone_guid=0\n"
+      "<END>";
+
+   if (!CreateTable(_T("CREATE TABLE zones ("
+                           "id integer not null,"
+                           "zone_guid integer not null,"
+                           "zone_type integer not null,"
+                           "controller_ip varchar(15) not null,"
+                           "description $SQL:TEXT,"
+                           "PRIMARY KEY(id))")))
+      if (!g_bIgnoreErrors)
+         return FALSE;
+
+   if (!CreateTable(_T("CREATE TABLE zone_ip_addr_list ("
+                           "zone_id integer not null,"
+                           "ip_addr varchar(15) not null,"
+                           "PRIMARY KEY(zone_id,ip_addr))")))
+      if (!g_bIgnoreErrors)
+         return FALSE;
+
+   if (!SQLBatch(m_szBatch))
+      if (!g_bIgnoreErrors)
+         return FALSE;
+
+   if (!CreateConfigParam(_T("EnableZoning"), _T("0"), 1, 1))
+      if (!g_bIgnoreErrors)
+         return FALSE;
+
+   if (!SQLQuery(_T("UPDATE config SET var_value='29' WHERE var_name='DBFormatVersion'")))
+      if (!g_bIgnoreErrors)
+         return FALSE;
+
+   return TRUE;
+}
+
+
+//
 // Upgrade from V27 to V28
 //
 
@@ -345,13 +391,8 @@ static BOOL H_UpgradeFromV25(void)
 
    if (!CreateConfigParam(_T("IDataIndexCreationCommand_1"), 
                           _T("CREATE INDEX idx_timestamp ON idata_%ld(idata_timestamp)"), 0, 1))
-   {
       if (!g_bIgnoreErrors)
-      {
-         DBFreeResult(hResult);
          return FALSE;
-      }
-   }
 
    if (!SQLQuery(_T("UPDATE config SET var_value='26' WHERE var_name='DBFormatVersion'")))
       if (!g_bIgnoreErrors)
@@ -1091,6 +1132,7 @@ static struct
    { 25, H_UpgradeFromV25 },
    { 26, H_UpgradeFromV26 },
    { 27, H_UpgradeFromV27 },
+   { 28, H_UpgradeFromV28 },
    { 0, NULL }
 };