Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/zabbix/zabbix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'include/zbxcacheconfig.h')
-rw-r--r--include/zbxcacheconfig.h1044
1 files changed, 1044 insertions, 0 deletions
diff --git a/include/zbxcacheconfig.h b/include/zbxcacheconfig.h
new file mode 100644
index 00000000000..347131dffb7
--- /dev/null
+++ b/include/zbxcacheconfig.h
@@ -0,0 +1,1044 @@
+/*
+** Zabbix
+** Copyright (C) 2001-2022 Zabbix SIA
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+**/
+
+#ifndef ZABBIX_CACHECONFIG_H
+#define ZABBIX_CACHECONFIG_H
+
+#include "zbxdbhigh.h"
+#include "zbxcomms.h"
+#include "zbxeval.h"
+#include "zbxavailability.h"
+#include "zbxversion.h"
+
+#define ZBX_NO_POLLER 255
+#define ZBX_POLLER_TYPE_NORMAL 0
+#define ZBX_POLLER_TYPE_UNREACHABLE 1
+#define ZBX_POLLER_TYPE_IPMI 2
+#define ZBX_POLLER_TYPE_PINGER 3
+#define ZBX_POLLER_TYPE_JAVA 4
+#define ZBX_POLLER_TYPE_HISTORY 5
+#define ZBX_POLLER_TYPE_ODBC 6
+#define ZBX_POLLER_TYPE_COUNT 7 /* number of poller types */
+
+typedef enum
+{
+ ZBX_SESSION_TYPE_DATA = 0,
+ ZBX_SESSION_TYPE_CONFIG,
+ ZBX_SESSION_TYPE_COUNT,
+}
+zbx_session_type_t;
+
+#define MAX_JAVA_ITEMS 32
+#define MAX_SNMP_ITEMS 128
+#define MAX_POLLER_ITEMS 128 /* MAX(MAX_JAVA_ITEMS, MAX_SNMP_ITEMS) */
+#define MAX_PINGER_ITEMS 128
+
+#define ZBX_TRIGGER_DEPENDENCY_LEVELS_MAX 32
+
+#define ZBX_TRIGGER_DEPENDENCY_FAIL 1
+#define ZBX_TRIGGER_DEPENDENCY_UNRESOLVED 2
+
+#define ZBX_SNMPTRAP_LOGGING_ENABLED 1
+
+#define ZBX_AGENT_ZABBIX (INTERFACE_TYPE_AGENT - 1)
+#define ZBX_AGENT_SNMP (INTERFACE_TYPE_SNMP - 1)
+#define ZBX_AGENT_IPMI (INTERFACE_TYPE_IPMI - 1)
+#define ZBX_AGENT_JMX (INTERFACE_TYPE_JMX - 1)
+#define ZBX_AGENT_UNKNOWN 255
+#define ZBX_AGENT_MAX INTERFACE_TYPE_COUNT
+
+extern int CONFIG_TIMEOUT;
+
+extern zbx_uint64_t CONFIG_CONF_CACHE_SIZE;
+
+extern int CONFIG_POLLER_FORKS;
+extern int CONFIG_UNREACHABLE_POLLER_FORKS;
+extern int CONFIG_IPMIPOLLER_FORKS;
+extern int CONFIG_JAVAPOLLER_FORKS;
+extern int CONFIG_PINGER_FORKS;
+extern int CONFIG_UNREACHABLE_PERIOD;
+extern int CONFIG_UNREACHABLE_DELAY;
+extern int CONFIG_PROXYCONFIG_FREQUENCY;
+extern int CONFIG_PROXYDATA_FREQUENCY;
+extern int CONFIG_HISTORYPOLLER_FORKS;
+extern int CONFIG_ODBCPOLLER_FORKS;
+
+typedef struct
+{
+ zbx_uint64_t interfaceid;
+ char ip_orig[ZBX_INTERFACE_IP_LEN_MAX];
+ char dns_orig[ZBX_INTERFACE_DNS_LEN_MAX];
+ char port_orig[ZBX_INTERFACE_PORT_LEN_MAX];
+ char *addr;
+ unsigned short port;
+ unsigned char useip;
+ unsigned char type;
+ unsigned char main;
+ unsigned char available;
+ int disable_until;
+ char error[ZBX_INTERFACE_ERROR_LEN_MAX];
+ int errors_from;
+}
+DC_INTERFACE;
+
+typedef struct
+{
+ zbx_uint64_t interfaceid;
+ char *addr;
+ unsigned char type;
+ unsigned char main;
+ unsigned char bulk;
+ unsigned char snmp_version;
+ unsigned char useip;
+ char ip_orig[ZBX_INTERFACE_IP_LEN_MAX];
+ char dns_orig[ZBX_INTERFACE_DNS_LEN_MAX];
+ char port_orig[ZBX_INTERFACE_PORT_LEN_MAX];
+}
+DC_INTERFACE2;
+
+#define HOST_IPMI_USERNAME_LEN 16
+#define HOST_IPMI_USERNAME_LEN_MAX (HOST_IPMI_USERNAME_LEN + 1)
+#define HOST_IPMI_PASSWORD_LEN 20
+#define HOST_IPMI_PASSWORD_LEN_MAX (HOST_IPMI_PASSWORD_LEN + 1)
+#define HOST_PROXY_ADDRESS_LEN 255
+#define HOST_PROXY_ADDRESS_LEN_MAX (HOST_PROXY_ADDRESS_LEN + 1)
+
+typedef struct
+{
+ zbx_uint64_t hostid;
+ zbx_uint64_t proxy_hostid;
+ char host[ZBX_HOSTNAME_BUF_LEN];
+ char name[ZBX_MAX_HOSTNAME_LEN * ZBX_MAX_BYTES_IN_UTF8_CHAR + 1];
+ unsigned char maintenance_status;
+ unsigned char maintenance_type;
+ int maintenance_from;
+ signed char ipmi_authtype;
+ unsigned char ipmi_privilege;
+ char ipmi_username[HOST_IPMI_USERNAME_LEN_MAX];
+ char ipmi_password[HOST_IPMI_PASSWORD_LEN_MAX];
+ signed char inventory_mode;
+ unsigned char status;
+ unsigned char tls_connect;
+ unsigned char tls_accept;
+#if defined(HAVE_GNUTLS) || defined(HAVE_OPENSSL)
+ char tls_issuer[HOST_TLS_ISSUER_LEN_MAX];
+ char tls_subject[HOST_TLS_SUBJECT_LEN_MAX];
+ char tls_psk_identity[HOST_TLS_PSK_IDENTITY_LEN_MAX];
+ char tls_psk[HOST_TLS_PSK_LEN_MAX];
+#endif
+}
+DC_HOST;
+
+typedef struct
+{
+ DC_HOST host;
+ DC_INTERFACE interface;
+ zbx_uint64_t itemid;
+ zbx_uint64_t lastlogsize;
+ zbx_uint64_t valuemapid;
+ unsigned char type;
+ unsigned char snmp_version;
+ unsigned char value_type;
+ unsigned char state;
+ unsigned char snmpv3_securitylevel;
+ unsigned char authtype;
+ unsigned char flags;
+ unsigned char snmpv3_authprotocol;
+ unsigned char snmpv3_privprotocol;
+ unsigned char inventory_link;
+ unsigned char status;
+ unsigned char history;
+ unsigned char trends;
+ unsigned char follow_redirects;
+ unsigned char post_type;
+ unsigned char retrieve_mode;
+ unsigned char request_method;
+ unsigned char output_format;
+ unsigned char verify_peer;
+ unsigned char verify_host;
+ unsigned char allow_traps;
+ char key_orig[ZBX_ITEM_KEY_LEN * ZBX_MAX_BYTES_IN_UTF8_CHAR + 1], *key;
+ char *units;
+ char *delay;
+ int history_sec;
+ int trends_sec;
+ int mtime;
+ char trapper_hosts[ZBX_ITEM_TRAPPER_HOSTS_LEN_MAX];
+ char logtimefmt[ZBX_ITEM_LOGTIMEFMT_LEN_MAX];
+ char snmp_community_orig[ZBX_ITEM_SNMP_COMMUNITY_LEN_MAX], *snmp_community;
+ char snmp_oid_orig[ZBX_ITEM_SNMP_OID_LEN_MAX], *snmp_oid;
+ char snmpv3_securityname_orig[ZBX_ITEM_SNMPV3_SECURITYNAME_LEN_MAX], *snmpv3_securityname;
+ char snmpv3_authpassphrase_orig[ZBX_ITEM_SNMPV3_AUTHPASSPHRASE_LEN_MAX],
+ *snmpv3_authpassphrase;
+ char snmpv3_privpassphrase_orig[ZBX_ITEM_SNMPV3_PRIVPASSPHRASE_LEN_MAX],
+ *snmpv3_privpassphrase;
+ char ipmi_sensor[ZBX_ITEM_IPMI_SENSOR_LEN_MAX];
+ char *params;
+ char username_orig[ZBX_ITEM_USERNAME_LEN_MAX], *username;
+ char publickey_orig[ZBX_ITEM_PUBLICKEY_LEN_MAX], *publickey;
+ char privatekey_orig[ZBX_ITEM_PRIVATEKEY_LEN_MAX], *privatekey;
+ char password_orig[ZBX_ITEM_PASSWORD_LEN_MAX], *password;
+ char snmpv3_contextname_orig[ZBX_ITEM_SNMPV3_CONTEXTNAME_LEN_MAX], *snmpv3_contextname;
+ char jmx_endpoint_orig[ZBX_ITEM_JMX_ENDPOINT_LEN_MAX], *jmx_endpoint;
+ char timeout_orig[ZBX_ITEM_TIMEOUT_LEN_MAX], *timeout;
+ char url_orig[ZBX_ITEM_URL_LEN_MAX], *url;
+ char query_fields_orig[ZBX_ITEM_QUERY_FIELDS_LEN_MAX], *query_fields;
+ char *posts;
+ char status_codes_orig[ZBX_ITEM_STATUS_CODES_LEN_MAX], *status_codes;
+ char http_proxy_orig[ZBX_ITEM_HTTP_PROXY_LEN_MAX], *http_proxy;
+ char *headers;
+ char ssl_cert_file_orig[ZBX_ITEM_SSL_CERT_FILE_LEN_MAX], *ssl_cert_file;
+ char ssl_key_file_orig[ZBX_ITEM_SSL_KEY_FILE_LEN_MAX], *ssl_key_file;
+ char ssl_key_password_orig[ZBX_ITEM_SSL_KEY_PASSWORD_LEN_MAX], *ssl_key_password;
+ char *script_params;
+ char *error;
+ unsigned char *formula_bin;
+ char *history_period, *trends_period;
+}
+DC_ITEM;
+
+typedef struct
+{
+ zbx_uint64_t functionid;
+ zbx_uint64_t triggerid;
+ zbx_uint64_t itemid;
+ char *function;
+ char *parameter;
+ unsigned char type;
+}
+DC_FUNCTION;
+
+typedef struct
+{
+ zbx_uint64_t hostid;
+ zbx_uint64_t itemid;
+ zbx_tag_t tag;
+}
+zbx_item_tag_t;
+
+#define ZBX_DC_TRIGGER_PROBLEM_EXPRESSION 0x1 /* this flag shows that trigger value recalculation is */
+ /* initiated by a time-based function or a new value of */
+ /* an item in problem expression */
+
+typedef struct _DC_TRIGGER
+{
+ zbx_uint64_t triggerid;
+ char *description;
+ char *expression;
+ char *recovery_expression;
+
+ char *error;
+ char *new_error;
+ char *correlation_tag;
+ char *opdata;
+ char *event_name;
+ unsigned char *expression_bin;
+ unsigned char *recovery_expression_bin;
+ zbx_timespec_t timespec;
+ int lastchange;
+ unsigned char topoindex;
+ unsigned char priority;
+ unsigned char type;
+ unsigned char value;
+ unsigned char state;
+ unsigned char new_value;
+ unsigned char status;
+ unsigned char recovery_mode;
+ unsigned char correlation_mode;
+
+ unsigned char flags;
+
+ zbx_vector_ptr_t tags;
+ zbx_vector_uint64_t itemids;
+
+ zbx_eval_context_t *eval_ctx;
+ zbx_eval_context_t *eval_ctx_r;
+}
+DC_TRIGGER;
+
+typedef struct
+{
+ zbx_uint64_t hostid;
+ char host[ZBX_HOSTNAME_BUF_LEN];
+ int proxy_config_nextcheck;
+ int proxy_data_nextcheck;
+ int proxy_tasks_nextcheck;
+ int last_cfg_error_time; /* time when passive proxy misconfiguration error was */
+ /* seen or 0 if no error */
+ char version_str[ZBX_VERSION_BUF_LEN];
+ int version_int;
+ zbx_proxy_compatibility_t compatibility;
+ int lastaccess;
+ char addr_orig[ZBX_INTERFACE_ADDR_LEN_MAX];
+ char port_orig[ZBX_INTERFACE_PORT_LEN_MAX];
+ char *addr;
+ unsigned short port;
+
+ unsigned char auto_compress;
+ unsigned char tls_connect;
+ unsigned char tls_accept;
+
+#if defined(HAVE_GNUTLS) || defined(HAVE_OPENSSL)
+ char tls_issuer[HOST_TLS_ISSUER_LEN_MAX];
+ char tls_subject[HOST_TLS_SUBJECT_LEN_MAX];
+ char tls_psk_identity[HOST_TLS_PSK_IDENTITY_LEN_MAX];
+ char tls_psk[HOST_TLS_PSK_LEN_MAX];
+#endif
+ zbx_uint64_t revision;
+ zbx_uint64_t macro_revision;
+
+ char proxy_address[HOST_PROXY_ADDRESS_LEN_MAX];
+ int last_version_error_time;
+}
+DC_PROXY;
+
+
+#define ZBX_ACTION_OPCLASS_NONE 0
+#define ZBX_ACTION_OPCLASS_NORMAL 1
+#define ZBX_ACTION_OPCLASS_RECOVERY 2
+#define ZBX_ACTION_OPCLASS_ACKNOWLEDGE 4
+
+typedef struct
+{
+ zbx_uint64_t actionid;
+ char *formula;
+ unsigned char eventsource;
+ unsigned char evaltype;
+ unsigned char opflags;
+ zbx_vector_ptr_t conditions;
+}
+zbx_action_eval_t;
+
+typedef struct
+{
+ char *host;
+ char *key;
+}
+zbx_host_key_t;
+
+/* housekeeping related configuration data */
+typedef struct
+{
+ int events_trigger;
+ int events_internal;
+ int events_discovery;
+ int events_autoreg;
+ int events_service;
+ int services;
+ int audit;
+ int sessions;
+ int trends;
+ int history;
+
+ unsigned char services_mode;
+ unsigned char audit_mode;
+ unsigned char sessions_mode;
+ unsigned char events_mode;
+ unsigned char trends_mode;
+ unsigned char trends_global;
+ unsigned char history_mode;
+ unsigned char history_global;
+}
+zbx_config_hk_t;
+
+typedef struct
+{
+ char *extension;
+ unsigned char history_compression_status;
+ int history_compress_older;
+}
+zbx_config_db_t;
+
+/* global configuration data (loaded from config table) */
+typedef struct
+{
+ /* the fields set by zbx_config_get() function, see ZBX_CONFIG_FLAGS_ defines */
+ zbx_uint64_t flags;
+
+ char **severity_name;
+ zbx_uint64_t discovery_groupid;
+ int default_inventory_mode;
+ unsigned char snmptrap_logging;
+ unsigned char autoreg_tls_accept;
+ char *default_timezone;
+ int auditlog_enabled;
+
+ /* database configuration data for ZBX_CONFIG_DB_EXTENSION_* extensions */
+ zbx_config_db_t db;
+
+ /* housekeeping related configuration data */
+ zbx_config_hk_t hk;
+}
+zbx_config_t;
+
+#define ZBX_CONFIG_FLAGS_SEVERITY_NAME __UINT64_C(0x0000000000000001)
+#define ZBX_CONFIG_FLAGS_DISCOVERY_GROUPID __UINT64_C(0x0000000000000002)
+#define ZBX_CONFIG_FLAGS_DEFAULT_INVENTORY_MODE __UINT64_C(0x0000000000000004)
+#define ZBX_CONFIG_FLAGS_SNMPTRAP_LOGGING __UINT64_C(0x0000000000000010)
+#define ZBX_CONFIG_FLAGS_HOUSEKEEPER __UINT64_C(0x0000000000000020)
+#define ZBX_CONFIG_FLAGS_DB_EXTENSION __UINT64_C(0x0000000000000040)
+#define ZBX_CONFIG_FLAGS_AUTOREG_TLS_ACCEPT __UINT64_C(0x0000000000000080)
+#define ZBX_CONFIG_FLAGS_DEFAULT_TIMEZONE __UINT64_C(0x0000000000000100)
+#define ZBX_CONFIG_FLAGS_AUDITLOG_ENABLED __UINT64_C(0x0000000000000200)
+
+typedef struct
+{
+ zbx_uint64_t hostid;
+ unsigned char idx;
+ const char *field_name;
+ char *value;
+}
+zbx_inventory_value_t;
+
+typedef struct
+{
+ char *tag;
+}
+zbx_corr_condition_tag_t;
+
+typedef struct
+{
+ char *tag;
+ char *value;
+ unsigned char op;
+}
+zbx_corr_condition_tag_value_t;
+
+typedef struct
+{
+ zbx_uint64_t groupid;
+ unsigned char op;
+}
+zbx_corr_condition_group_t;
+
+typedef struct
+{
+ char *oldtag;
+ char *newtag;
+}
+zbx_corr_condition_tag_pair_t;
+
+typedef union
+{
+ zbx_corr_condition_tag_t tag;
+ zbx_corr_condition_tag_value_t tag_value;
+ zbx_corr_condition_group_t group;
+ zbx_corr_condition_tag_pair_t tag_pair;
+}
+zbx_corr_condition_data_t;
+
+typedef struct
+{
+ zbx_uint64_t corr_conditionid;
+ int type;
+ zbx_corr_condition_data_t data;
+}
+zbx_corr_condition_t;
+
+typedef struct
+{
+ unsigned char type;
+}
+zbx_corr_operation_t;
+
+typedef struct
+{
+ zbx_uint64_t correlationid;
+ char *name;
+ char *formula;
+ unsigned char evaltype;
+
+ zbx_vector_ptr_t conditions;
+ zbx_vector_ptr_t operations;
+}
+zbx_correlation_t;
+
+typedef struct
+{
+ zbx_vector_ptr_t correlations;
+ zbx_hashset_t conditions;
+
+ /* Configuration synchronization timestamp of the rules. */
+ /* Update the cache if this timesamp is less than the */
+ /* current configuration synchronization timestamp. */
+ int sync_ts;
+}
+zbx_correlation_rules_t;
+
+/* item queue data */
+typedef struct
+{
+ zbx_uint64_t itemid;
+ zbx_uint64_t proxy_hostid;
+ int type;
+ int nextcheck;
+}
+zbx_queue_item_t;
+
+typedef union
+{
+ zbx_uint64_t ui64;
+ double dbl;
+}
+zbx_counter_value_t;
+
+typedef struct
+{
+ zbx_uint64_t proxyid;
+ zbx_counter_value_t counter_value;
+}
+zbx_proxy_counter_t;
+
+typedef struct
+{
+ unsigned char type;
+ unsigned char error_handler;
+ char *params;
+ char *error_handler_params;
+}
+zbx_preproc_op_t;
+
+typedef struct
+{
+ zbx_uint64_t itemid;
+ zbx_uint64_t hostid;
+ unsigned char type;
+ unsigned char value_type;
+
+ int dep_itemids_num;
+ int preproc_ops_num;
+ zbx_uint64_t revision;
+ zbx_uint64_t preproc_revision;
+
+ zbx_uint64_pair_t *dep_itemids;
+ zbx_preproc_op_t *preproc_ops;
+}
+zbx_preproc_item_t;
+
+/* the configuration cache statistics */
+typedef struct
+{
+ zbx_uint64_t hosts;
+ zbx_uint64_t items;
+ zbx_uint64_t items_unsupported;
+ double requiredperformance;
+}
+zbx_config_cache_info_t;
+
+int is_item_processed_by_server(unsigned char type, const char *key);
+int zbx_is_counted_in_item_queue(unsigned char type, const char *key);
+int in_maintenance_without_data_collection(unsigned char maintenance_status, unsigned char maintenance_type,
+ unsigned char type);
+void dc_add_history(zbx_uint64_t itemid, unsigned char item_value_type, unsigned char item_flags,
+ AGENT_RESULT *result, const zbx_timespec_t *ts, unsigned char state, const char *error);
+void dc_flush_history(void);
+
+#define ZBX_SYNC_NONE 0
+#define ZBX_SYNC_ALL 1
+
+/* initial sync, get all data */
+#define ZBX_DBSYNC_INIT 0
+/* update sync, get changed data */
+#define ZBX_DBSYNC_UPDATE 1
+
+#define ZBX_DBSYNC_STATUS_INITIALIZED 0
+#define ZBX_DBSYNC_STATUS_UNKNOWN -1
+
+typedef enum
+{
+ ZBX_SYNCED_NEW_CONFIG_NO,
+ ZBX_SYNCED_NEW_CONFIG_YES
+}
+zbx_synced_new_config_t;
+
+#define ZBX_ITEM_GET_MISC 0x0001
+#define ZBX_ITEM_GET_DELAY 0x0002
+#define ZBX_ITEM_GET_EMPTY_ERROR 0x0004
+#define ZBX_ITEM_GET_NUM 0x0008
+#define ZBX_ITEM_GET_EMPTY_UNITS 0x0010
+#define ZBX_ITEM_GET_LOGTIMEFMT 0x0020
+#define ZBX_ITEM_GET_POLLINFO 0x0040
+#define ZBX_ITEM_GET_INTERFACE 0x0080
+#define ZBX_ITEM_GET_HOSTNAME 0x0100
+#define ZBX_ITEM_GET_HOSTINFO 0x0200
+#define ZBX_ITEM_GET_MAINTENANCE 0x0400
+#define ZBX_ITEM_GET_INVENTORY 0x0800
+#define ZBX_ITEM_GET_HOUSEKEEPING 0x1000
+
+#define ZBX_ITEM_GET_DEFAULT (~(unsigned int)ZBX_ITEM_GET_HOUSEKEEPING)
+#define ZBX_ITEM_GET_ALL (~(unsigned int)0)
+
+#define ZBX_ITEM_GET_SYNC (ZBX_ITEM_GET_INVENTORY | ZBX_ITEM_GET_NUM | ZBX_ITEM_GET_HOUSEKEEPING)
+#define ZBX_ITEM_GET_SYNC_EXPORT (ZBX_ITEM_GET_INVENTORY | ZBX_ITEM_GET_NUM | ZBX_ITEM_GET_HOSTNAME | \
+ ZBX_ITEM_GET_HOUSEKEEPING)
+
+#define ZBX_ITEM_GET_PROCESS (ZBX_ITEM_GET_MAINTENANCE|ZBX_ITEM_GET_MISC|ZBX_ITEM_GET_LOGTIMEFMT)
+
+#define ZBX_TRIGGER_GET_ITEMIDS 0x0001
+
+#define ZBX_TRIGGER_GET_DEFAULT (~(unsigned int)ZBX_TRIGGER_GET_ITEMIDS)
+#define ZBX_TRIGGER_GET_ALL (~(unsigned int)0)
+
+void DCsync_configuration(unsigned char mode, zbx_synced_new_config_t synced, zbx_vector_uint64_t *deleted_itemids);
+void DCsync_kvs_paths(const struct zbx_json_parse *jp_kvs_paths);
+int init_configuration_cache(char **error);
+void free_configuration_cache(void);
+
+void DCconfig_get_triggers_by_triggerids(DC_TRIGGER *triggers, const zbx_uint64_t *triggerids, int *errcode,
+ size_t num);
+void DCconfig_clean_items(DC_ITEM *items, int *errcodes, size_t num);
+int DCget_host_by_hostid(DC_HOST *host, zbx_uint64_t hostid);
+int DCconfig_get_hostid_by_name(const char *host, zbx_uint64_t *hostid);
+void DCconfig_get_hosts_by_itemids(DC_HOST *hosts, const zbx_uint64_t *itemids, int *errcodes, size_t num);
+void DCconfig_get_hosts_by_hostids(DC_HOST *hosts, const zbx_uint64_t *hostids, int *errcodes, int num);
+void DCconfig_get_items_by_keys(DC_ITEM *items, zbx_host_key_t *keys, int *errcodes, size_t num);
+void DCconfig_get_items_by_itemids(DC_ITEM *items, const zbx_uint64_t *itemids, int *errcodes, size_t num);
+void DCconfig_get_items_by_itemids_partial(DC_ITEM *items, const zbx_uint64_t *itemids, int *errcodes, int num,
+ unsigned int mode);
+int DCconfig_get_active_items_count_by_hostid(zbx_uint64_t hostid);
+void DCconfig_get_active_items_by_hostid(DC_ITEM *items, zbx_uint64_t hostid, int *errcodes, size_t num);
+void DCconfig_get_preprocessable_items(zbx_hashset_t *items, zbx_uint64_t *revision);
+void DCconfig_get_functions_by_functionids(DC_FUNCTION *functions,
+ zbx_uint64_t *functionids, int *errcodes, size_t num);
+void DCconfig_clean_functions(DC_FUNCTION *functions, int *errcodes, size_t num);
+void DCconfig_clean_triggers(DC_TRIGGER *triggers, int *errcodes, size_t num);
+int DCconfig_lock_triggers_by_history_items(zbx_vector_ptr_t *history_items, zbx_vector_uint64_t *triggerids);
+void DCconfig_lock_triggers_by_triggerids(zbx_vector_uint64_t *triggerids_in, zbx_vector_uint64_t *triggerids_out);
+void DCconfig_unlock_triggers(const zbx_vector_uint64_t *triggerids);
+void DCconfig_unlock_all_triggers(void);
+void DCconfig_get_triggers_by_itemids(zbx_hashset_t *trigger_info, zbx_vector_ptr_t *trigger_order,
+ const zbx_uint64_t *itemids, const zbx_timespec_t *timespecs, int itemids_num);
+int DCconfig_trigger_exists(zbx_uint64_t triggerid);
+void DCfree_triggers(zbx_vector_ptr_t *triggers);
+void DCconfig_update_interface_snmp_stats(zbx_uint64_t interfaceid, int max_snmp_succeed, int min_snmp_fail);
+int DCconfig_get_suggested_snmp_vars(zbx_uint64_t interfaceid, int *bulk);
+int DCconfig_get_interface_by_type(DC_INTERFACE *interface, zbx_uint64_t hostid, unsigned char type);
+int DCconfig_get_interface(DC_INTERFACE *interface, zbx_uint64_t hostid, zbx_uint64_t itemid);
+int DCconfig_get_poller_nextcheck(unsigned char poller_type);
+int DCconfig_get_poller_items(unsigned char poller_type, DC_ITEM **items);
+int DCconfig_get_ipmi_poller_items(int now, DC_ITEM *items, int items_num, int *nextcheck);
+int DCconfig_get_snmp_interfaceids_by_addr(const char *addr, zbx_uint64_t **interfaceids);
+size_t DCconfig_get_snmp_items_by_interfaceid(zbx_uint64_t interfaceid, DC_ITEM **items);
+
+void DCconfig_update_autoreg_host(const char *host, const char *listen_ip, const char *listen_dns,
+ unsigned short listen_port, const char *host_metadata, zbx_conn_flags_t flags, int now);
+void DCconfig_delete_autoreg_host(const zbx_vector_ptr_t *autoreg_hosts);
+
+#define ZBX_HK_OPTION_DISABLED 0
+#define ZBX_HK_OPTION_ENABLED 1
+
+/* options for hk.history_mode, trends_mode */
+#define ZBX_HK_MODE_DISABLED ZBX_HK_OPTION_DISABLED
+#define ZBX_HK_MODE_REGULAR ZBX_HK_OPTION_ENABLED
+#define ZBX_HK_MODE_PARTITION 2
+
+#define ZBX_HK_HISTORY_MIN SEC_PER_HOUR
+#define ZBX_HK_TRENDS_MIN SEC_PER_DAY
+#define ZBX_HK_PERIOD_MAX (25 * SEC_PER_YEAR)
+
+void DCrequeue_items(const zbx_uint64_t *itemids, const int *lastclocks,
+ const int *errcodes, size_t num);
+void DCpoller_requeue_items(const zbx_uint64_t *itemids, const int *lastclocks,
+ const int *errcodes, size_t num, unsigned char poller_type, int *nextcheck);
+void zbx_dc_requeue_unreachable_items(zbx_uint64_t *itemids, size_t itemids_num);
+
+int DCconfig_check_trigger_dependencies(zbx_uint64_t triggerid);
+
+void DCconfig_triggers_apply_changes(zbx_vector_ptr_t *trigger_diff);
+void DCconfig_items_apply_changes(const zbx_vector_ptr_t *item_diff);
+
+void DCconfig_update_inventory_values(const zbx_vector_ptr_t *inventory_values);
+int DCget_host_inventory_value_by_itemid(zbx_uint64_t itemid, char **replace_to, int value_idx);
+int DCget_host_inventory_value_by_hostid(zbx_uint64_t hostid, char **replace_to, int value_idx);
+
+#define ZBX_CONFSTATS_BUFFER_TOTAL 1
+#define ZBX_CONFSTATS_BUFFER_USED 2
+#define ZBX_CONFSTATS_BUFFER_FREE 3
+#define ZBX_CONFSTATS_BUFFER_PUSED 4
+#define ZBX_CONFSTATS_BUFFER_PFREE 5
+void *DCconfig_get_stats(int request);
+
+int DCconfig_get_last_sync_time(void);
+int DCconfig_get_proxypoller_hosts(DC_PROXY *proxies, int max_hosts);
+int DCconfig_get_proxypoller_nextcheck(void);
+
+#define ZBX_PROXY_CONFIG_NEXTCHECK 0x01
+#define ZBX_PROXY_DATA_NEXTCHECK 0x02
+#define ZBX_PROXY_TASKS_NEXTCHECK 0x04
+void DCrequeue_proxy(zbx_uint64_t hostid, unsigned char update_nextcheck, int proxy_conn_err);
+int DCcheck_proxy_permissions(const char *host, const zbx_socket_t *sock, zbx_uint64_t *hostid, char **error);
+int DCcheck_host_permissions(const char *host, const zbx_socket_t *sock, zbx_uint64_t *hostid,
+ zbx_uint64_t *revision, char **error);
+int DCis_autoreg_host_changed(const char *host, unsigned short port, const char *host_metadata,
+ zbx_conn_flags_t flag, const char *interface, int now, int heartbeat);
+
+#if defined(HAVE_GNUTLS) || defined(HAVE_OPENSSL)
+size_t DCget_psk_by_identity(const unsigned char *psk_identity, unsigned char *psk_buf, unsigned int *psk_usage);
+#endif
+void DCget_autoregistration_psk(char *psk_identity_buf, size_t psk_identity_buf_len,
+ unsigned char *psk_buf, size_t psk_buf_len);
+
+#define ZBX_MACRO_ENV_SECURE 0
+#define ZBX_MACRO_ENV_NONSECURE 1
+#define ZBX_MACRO_ENV_DEFAULT 2
+
+#define ZBX_MACRO_VALUE_TEXT 0
+#define ZBX_MACRO_VALUE_SECRET 1
+#define ZBX_MACRO_VALUE_VAULT 2
+
+#define ZBX_MACRO_SECRET_MASK "******"
+
+int DCinterface_activate(zbx_uint64_t interfaceid, const zbx_timespec_t *ts, zbx_agent_availability_t *in,
+ zbx_agent_availability_t *out);
+
+int DCinterface_deactivate(zbx_uint64_t interfaceid, const zbx_timespec_t *ts, zbx_agent_availability_t *in,
+ zbx_agent_availability_t *out, const char *error_msg);
+
+#define ZBX_QUEUE_FROM_DEFAULT 6 /* default lower limit for delay (in seconds) */
+#define ZBX_QUEUE_TO_INFINITY -1 /* no upper limit for delay */
+void DCfree_item_queue(zbx_vector_ptr_t *queue);
+int DCget_item_queue(zbx_vector_ptr_t *queue, int from, int to);
+
+zbx_uint64_t DCget_item_count(zbx_uint64_t hostid);
+zbx_uint64_t DCget_item_unsupported_count(zbx_uint64_t hostid);
+zbx_uint64_t DCget_trigger_count(void);
+double DCget_required_performance(void);
+zbx_uint64_t DCget_host_count(void);
+void DCget_count_stats_all(zbx_config_cache_info_t *stats);
+
+void DCget_status(zbx_vector_ptr_t *hosts_monitored, zbx_vector_ptr_t *hosts_not_monitored,
+ zbx_vector_ptr_t *items_active_normal, zbx_vector_ptr_t *items_active_notsupported,
+ zbx_vector_ptr_t *items_disabled, zbx_uint64_t *triggers_enabled_ok,
+ zbx_uint64_t *triggers_enabled_problem, zbx_uint64_t *triggers_disabled,
+ zbx_vector_ptr_t *required_performance);
+
+void DCget_expressions_by_names(zbx_vector_ptr_t *expressions, const char * const *names, int names_num);
+void DCget_expressions_by_name(zbx_vector_ptr_t *expressions, const char *name);
+
+int DCget_data_expected_from(zbx_uint64_t itemid, int *seconds);
+
+void DCget_hostids_by_functionids(zbx_vector_uint64_t *functionids, zbx_vector_uint64_t *hostids);
+void DCget_hosts_by_functionids(const zbx_vector_uint64_t *functionids, zbx_hashset_t *hosts);
+
+int DCget_proxy_nodata_win(zbx_uint64_t hostid, zbx_proxy_suppress_t *nodata_win, int *lastaccess);
+int DCget_proxy_delay_by_name(const char *name, int *delay, char **error);
+int DCget_proxy_lastaccess_by_name(const char *name, int *lastaccess, char **error);
+int zbx_proxy_discovery_get(char **data, char **error);
+
+unsigned int DCget_internal_action_count(void);
+unsigned int DCget_auto_registration_action_count(void);
+
+/* global configuration support */
+#define ZBX_DISCOVERY_GROUPID_UNDEFINED 0
+void zbx_config_get(zbx_config_t *cfg, zbx_uint64_t flags);
+void zbx_config_clean(zbx_config_t *cfg);
+void zbx_config_get_hk_mode(unsigned char *history_mode, unsigned char *trends_mode);
+
+int DCset_interfaces_availability(zbx_vector_availability_ptr_t *availabilities);
+
+int DCreset_interfaces_availability(zbx_vector_availability_ptr_t *interfaces);
+
+void zbx_dc_get_actions_eval(zbx_vector_ptr_t *actions, unsigned char opflags);
+
+int DCget_interfaces_availability(zbx_vector_ptr_t *interfaces, int *ts);
+void DCtouch_interfaces_availability(const zbx_vector_uint64_t *interfaceids);
+
+void zbx_set_availability_diff_ts(int ts);
+
+void zbx_dc_correlation_rules_init(zbx_correlation_rules_t *rules);
+void zbx_dc_correlation_rules_clean(zbx_correlation_rules_t *rules);
+void zbx_dc_correlation_rules_free(zbx_correlation_rules_t *rules);
+void zbx_dc_correlation_rules_get(zbx_correlation_rules_t *rules);
+
+void zbx_dc_get_nested_hostgroupids(zbx_uint64_t *groupids, int groupids_num, zbx_vector_uint64_t *nested_groupids);
+void zbx_dc_get_hostids_by_group_name(const char *name, zbx_vector_uint64_t *hostids);
+
+#define ZBX_HC_ITEM_STATUS_NORMAL 0
+#define ZBX_HC_ITEM_STATUS_BUSY 1
+
+#define ZBX_DC_FLAG_META 0x01 /* contains meta information (lastlogsize and mtime) */
+#define ZBX_DC_FLAG_NOVALUE 0x02 /* entry contains no value */
+#define ZBX_DC_FLAG_LLD 0x04 /* low-level discovery value */
+#define ZBX_DC_FLAG_UNDEF 0x08 /* unsupported or undefined (delta calculation failed) value */
+#define ZBX_DC_FLAG_NOHISTORY 0x10 /* values should not be kept in history */
+#define ZBX_DC_FLAG_NOTRENDS 0x20 /* values should not be kept in trends */
+
+typedef struct zbx_hc_data
+{
+ history_value_t value;
+ zbx_uint64_t lastlogsize;
+ zbx_timespec_t ts;
+ int mtime;
+ unsigned char value_type;
+ unsigned char flags;
+ unsigned char state;
+
+ struct zbx_hc_data *next;
+}
+zbx_hc_data_t;
+
+typedef struct
+{
+ zbx_uint64_t itemid;
+ unsigned char status;
+ int values_num;
+
+ zbx_hc_data_t *tail;
+ zbx_hc_data_t *head;
+}
+zbx_hc_item_t;
+
+void zbx_free_item_tag(zbx_item_tag_t *item_tag);
+
+int zbx_dc_get_active_proxy_by_name(const char *name, DC_PROXY *proxy, char **error);
+
+typedef struct
+{
+ zbx_timespec_t ts;
+ char *value; /* NULL in case of meta record (see "meta" field below) */
+ char *source;
+ zbx_uint64_t lastlogsize;
+ zbx_uint64_t id;
+ int mtime;
+ int timestamp;
+ int severity;
+ int logeventid;
+ unsigned char state;
+ unsigned char meta; /* non-zero if contains meta information (lastlogsize and mtime) */
+}
+zbx_agent_value_t;
+
+void zbx_dc_items_update_nextcheck(DC_ITEM *items, zbx_agent_value_t *values, int *errcodes, size_t values_num);
+int zbx_dc_get_host_interfaces(zbx_uint64_t hostid, DC_INTERFACE2 **interfaces, int *n);
+
+void zbx_dc_update_proxy(zbx_proxy_diff_t *diff);
+void zbx_dc_get_proxy_lastaccess(zbx_vector_uint64_pair_t *lastaccess);
+void zbx_dc_proxy_update_nodata(zbx_vector_uint64_pair_t *subscriptions);
+
+typedef struct
+{
+ zbx_uint64_t triggerid;
+ unsigned char status;
+ zbx_vector_uint64_t masterids;
+}
+zbx_trigger_dep_t;
+
+void zbx_dc_get_trigger_dependencies(const zbx_vector_uint64_t *triggerids, zbx_vector_ptr_t *deps);
+
+void zbx_dc_reschedule_items(const zbx_vector_uint64_t *itemids, int nextcheck, zbx_uint64_t *proxy_hostids);
+
+/* data session support */
+
+typedef struct
+{
+ zbx_uint64_t hostid;
+ zbx_uint64_t last_id;
+ const char *token;
+ time_t lastaccess;
+}
+zbx_session_t;
+
+typedef struct
+{
+ zbx_uint64_t config; /* configuration cache revision, increased every sync */
+ zbx_uint64_t expression; /* global expression revision */
+ zbx_uint64_t autoreg_tls; /* autoregistration tls revision */
+ zbx_uint64_t upstream; /* configuration revision received from server */
+ zbx_uint64_t config_table; /* the global configuration revision (config table) */
+}
+zbx_dc_revision_t;
+
+const char *zbx_dc_get_session_token(void);
+zbx_session_t *zbx_dc_get_or_create_session(zbx_uint64_t hostid, const char *token, zbx_session_type_t session_type);
+
+int zbx_dc_register_config_session(zbx_uint64_t hostid, const char *token, zbx_uint64_t session_config_revision,
+ zbx_dc_revision_t *dc_revision);
+
+void zbx_dc_cleanup_sessions(void);
+
+void zbx_dc_cleanup_autoreg_host(void);
+
+/* maintenance support */
+
+typedef struct
+{
+ zbx_uint64_t hostid;
+ zbx_uint64_t maintenanceid;
+ int maintenance_from;
+ unsigned char maintenance_type;
+ unsigned char maintenance_status;
+
+ unsigned int flags;
+#define ZBX_FLAG_HOST_MAINTENANCE_UPDATE_MAINTENANCEID 0x0001
+#define ZBX_FLAG_HOST_MAINTENANCE_UPDATE_MAINTENANCE_FROM 0x0002
+#define ZBX_FLAG_HOST_MAINTENANCE_UPDATE_MAINTENANCE_TYPE 0x0003
+#define ZBX_FLAG_HOST_MAINTENANCE_UPDATE_MAINTENANCE_STATUS 0x0004
+}
+zbx_host_maintenance_diff_t;
+
+/* event maintenance query data, used to get event maintenances from cache */
+typedef struct
+{
+ zbx_uint64_t eventid; /* [IN] eventid */
+ zbx_uint64_t r_eventid; /* [-] recovery eventid */
+ zbx_uint64_t triggerid; /* [-] triggerid */
+ zbx_vector_uint64_t functionids; /* [IN] associated functionids */
+ zbx_vector_ptr_t tags; /* [IN] event tags */
+ zbx_vector_uint64_pair_t maintenances; /* [OUT] actual maintenance data for the event in */
+ /* (maintenanceid, suppress_until) pairs */
+}
+zbx_event_suppress_query_t;
+
+#define ZBX_MAINTENANCE_UPDATE_TRUE 1
+#define ZBX_MAINTENANCE_UPDATE_FALSE 0
+
+void zbx_event_suppress_query_free(zbx_event_suppress_query_t *query);
+int zbx_dc_update_maintenances(void);
+void zbx_dc_get_host_maintenance_updates(const zbx_vector_uint64_t *maintenanceids, zbx_vector_ptr_t *updates);
+void zbx_dc_flush_host_maintenance_updates(const zbx_vector_ptr_t *updates);
+int zbx_dc_get_event_maintenances(zbx_vector_ptr_t *event_queries, const zbx_vector_uint64_t *maintenanceids);
+int zbx_dc_get_running_maintenanceids(zbx_vector_uint64_t *maintenanceids);
+
+void zbx_dc_maintenance_set_update_flags(void);
+void zbx_dc_maintenance_reset_update_flag(int timer);
+int zbx_dc_maintenance_check_update_flag(int timer);
+int zbx_dc_maintenance_check_update_flags(void);
+
+int zbx_dc_maintenance_has_tags(void);
+
+typedef struct
+{
+ char *lld_macro;
+ char *path;
+}
+zbx_lld_macro_path_t;
+
+int zbx_lld_macro_paths_get(zbx_uint64_t lld_ruleid, zbx_vector_ptr_t *lld_macro_paths, char **error);
+void zbx_lld_macro_path_free(zbx_lld_macro_path_t *lld_macro_path);
+int zbx_lld_macro_value_by_name(const struct zbx_json_parse *jp_row, const zbx_vector_ptr_t *lld_macro_paths,
+ const char *macro, char **value);
+int zbx_lld_macro_paths_compare(const void *d1, const void *d2);
+
+void zbx_dc_get_item_tags(zbx_uint64_t itemid, zbx_vector_ptr_t *item_tags);
+void zbx_dc_get_item_tags_by_functionids(const zbx_uint64_t *functionids, size_t functionids_num,
+ zbx_vector_ptr_t *item_tags);
+
+const char *zbx_dc_get_instanceid(void);
+
+typedef struct
+{
+ zbx_uint64_t objectid;
+ zbx_uint64_t triggerid;
+ zbx_uint64_t hostid;
+ zbx_uint32_t type;
+ unsigned char lock; /* 1 if the timer has locked trigger, 0 otherwise */
+ zbx_uint64_t revision; /* revision */
+ time_t lastcheck;
+ zbx_timespec_t eval_ts; /* the history time for which trigger must be recalculated */
+ zbx_timespec_t check_ts; /* time when timer must be checked */
+ zbx_timespec_t exec_ts; /* real time when the timer must be executed */
+ const char *parameter; /* function parameters (for trend functions) */
+}
+zbx_trigger_timer_t;
+
+void zbx_dc_reschedule_trigger_timers(zbx_vector_ptr_t *timers, int now);
+void zbx_dc_get_trigger_timers(zbx_vector_ptr_t *timers, int now, int soft_limit, int hard_limit);
+void zbx_dc_clear_timer_queue(zbx_vector_ptr_t *timers);
+void zbx_dc_get_triggers_by_timers(zbx_hashset_t *trigger_info, zbx_vector_ptr_t *trigger_order,
+ const zbx_vector_ptr_t *timers);
+void zbx_dc_free_timers(zbx_vector_ptr_t *timers);
+
+void zbx_get_host_interfaces_availability(zbx_uint64_t hostid, zbx_agent_availability_t *agents);
+
+/* external user macro cache API */
+
+typedef struct zbx_dc_um_handle_t zbx_dc_um_handle_t;
+
+zbx_dc_um_handle_t *zbx_dc_open_user_macros(void);
+zbx_dc_um_handle_t *zbx_dc_open_user_macros_secure(void);
+zbx_dc_um_handle_t *zbx_dc_open_user_macros_masked(void);
+
+void zbx_dc_close_user_macros(zbx_dc_um_handle_t *um_handle);
+
+void zbx_dc_get_user_macro(const zbx_dc_um_handle_t *um_handle, const char *macro, const zbx_uint64_t *hostids,
+ int hostids_num, char **value);
+
+int zbx_dc_expand_user_macros(const zbx_dc_um_handle_t *um_handle, char **text, const zbx_uint64_t *hostids,
+ int hostids_num, char **error);
+
+char *zbx_dc_expand_user_macros_in_func_params(const char *params, zbx_uint64_t hostid);
+
+int zbx_dc_get_proxyid_by_name(const char *name, zbx_uint64_t *proxyid, unsigned char *type);
+int zbx_dc_update_passive_proxy_nextcheck(zbx_uint64_t proxyid);
+
+typedef struct
+{
+ zbx_uint64_t hostid;
+ unsigned char status;
+ char *name;
+}
+zbx_cached_proxy_t;
+
+ZBX_PTR_VECTOR_DECL(cached_proxy_ptr, zbx_cached_proxy_t *)
+
+void zbx_dc_get_all_proxies(zbx_vector_cached_proxy_ptr_t *proxies);
+void zbx_cached_proxy_free(zbx_cached_proxy_t *proxy);
+
+int zbx_dc_get_proxy_name_type_by_id(zbx_uint64_t proxyid, int *status, char **name);
+
+/* item snmpv3 security levels */
+#define ZBX_ITEM_SNMPV3_SECURITYLEVEL_NOAUTHNOPRIV 0
+#define ZBX_ITEM_SNMPV3_SECURITYLEVEL_AUTHNOPRIV 1
+#define ZBX_ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV 2
+
+/* maintenance tag operators */
+#define ZBX_MAINTENANCE_TAG_OPERATOR_EQUAL 0
+#define ZBX_MAINTENANCE_TAG_OPERATOR_LIKE 2
+
+/* maintenance tag evaluation types */
+/* SYNC WITH PHP! */
+#define ZBX_MAINTENANCE_TAG_EVAL_TYPE_AND_OR 0
+#define ZBX_MAINTENANCE_TAG_EVAL_TYPE_OR 2
+
+/* special item key used for ICMP pings */
+#define ZBX_SERVER_ICMPPING_KEY "icmpping"
+/* special item key used for ICMP ping latency */
+#define ZBX_SERVER_ICMPPINGSEC_KEY "icmppingsec"
+/* special item key used for ICMP ping loss packages */
+#define ZBX_SERVER_ICMPPINGLOSS_KEY "icmppingloss"
+
+int zbx_dc_drule_next(time_t now, zbx_uint64_t *druleid, time_t *nextcheck);
+void zbx_dc_drule_queue(time_t now, zbx_uint64_t druleid, int delay);
+
+int zbx_dc_httptest_next(time_t now, zbx_uint64_t *httptestid, time_t *nextcheck);
+void zbx_dc_httptest_queue(time_t now, zbx_uint64_t httptestid, int delay);
+
+zbx_uint64_t zbx_dc_get_received_revision(void);
+void zbx_dc_update_received_revision(zbx_uint64_t revision);
+
+void zbx_dc_get_proxy_config_updates(zbx_uint64_t proxy_hostid, zbx_uint64_t revision, zbx_vector_uint64_t *hostids,
+ zbx_vector_uint64_t *updated_hostids, zbx_vector_uint64_t *removed_hostids,
+ zbx_vector_uint64_t *httptestids);
+
+void zbx_dc_get_macro_updates(const zbx_vector_uint64_t *hostids, const zbx_vector_uint64_t *updated_hostids,
+ zbx_uint64_t revision, zbx_vector_uint64_t *macro_hostids, int *global,
+ zbx_vector_uint64_t *del_macro_hostids);
+void zbx_dc_get_unused_macro_templates(zbx_hashset_t *templates, const zbx_vector_uint64_t *hostids,
+ zbx_vector_uint64_t *templateids);
+#endif