You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
829 lines
24 KiB
829 lines
24 KiB
/*
|
|
** Zabbix
|
|
** Copyright (C) 2001-2023 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_COMMON_H
|
|
#define ZABBIX_COMMON_H
|
|
|
|
#include "zbxsysinc.h"
|
|
#include "module.h"
|
|
#include "version.h"
|
|
|
|
#if defined(__MINGW32__)
|
|
# define __try
|
|
# define __except(x) if (0)
|
|
#endif
|
|
|
|
#ifndef va_copy
|
|
# if defined(__va_copy)
|
|
# define va_copy(d, s) __va_copy(d, s)
|
|
# else
|
|
# define va_copy(d, s) memcpy(&d, &s, sizeof(va_list))
|
|
# endif
|
|
#endif
|
|
|
|
#ifdef snprintf
|
|
# undef snprintf
|
|
#endif
|
|
#define snprintf ERROR_DO_NOT_USE_SNPRINTF_FUNCTION_TRY_TO_USE_ZBX_SNPRINTF
|
|
|
|
#ifdef sprintf
|
|
# undef sprintf
|
|
#endif
|
|
#define sprintf ERROR_DO_NOT_USE_SPRINTF_FUNCTION_TRY_TO_USE_ZBX_SNPRINTF
|
|
|
|
#ifdef strncpy
|
|
# undef strncpy
|
|
#endif
|
|
#define strncpy ERROR_DO_NOT_USE_STRNCPY_FUNCTION_TRY_TO_USE_ZBX_STRLCPY
|
|
|
|
#ifdef strcpy
|
|
# undef strcpy
|
|
#endif
|
|
#define strcpy ERROR_DO_NOT_USE_STRCPY_FUNCTION_TRY_TO_USE_ZBX_STRLCPY
|
|
|
|
#ifdef vsprintf
|
|
# undef vsprintf
|
|
#endif
|
|
#define vsprintf ERROR_DO_NOT_USE_VSPRINTF_FUNCTION_TRY_TO_USE_ZBX_VSNPRINTF
|
|
|
|
#ifdef strncat
|
|
# undef strncat
|
|
#endif
|
|
#define strncat ERROR_DO_NOT_USE_STRNCAT_FUNCTION_TRY_TO_USE_ZBX_STRLCAT
|
|
|
|
#ifdef strncasecmp
|
|
# undef strncasecmp
|
|
#endif
|
|
#define strncasecmp ERROR_DO_NOT_USE_STRNCASECMP_FUNCTION_TRY_TO_USE_ZBX_STRNCASECMP
|
|
|
|
#define ON 1
|
|
#define OFF 0
|
|
|
|
#if defined(_WINDOWS)
|
|
# define ZBX_SERVICE_NAME_LEN 64
|
|
extern char ZABBIX_SERVICE_NAME[ZBX_SERVICE_NAME_LEN];
|
|
extern char ZABBIX_EVENT_SOURCE[ZBX_SERVICE_NAME_LEN];
|
|
|
|
# pragma warning (disable: 4996) /* warning C4996: <function> was declared deprecated */
|
|
#endif
|
|
|
|
#if defined(__GNUC__) && __GNUC__ >= 7
|
|
# define ZBX_FALLTHROUGH __attribute__ ((fallthrough))
|
|
#else
|
|
# define ZBX_FALLTHROUGH
|
|
#endif
|
|
|
|
#define SUCCEED_OR_FAIL(result) (FAIL != (result) ? SUCCEED : FAIL)
|
|
const char *zbx_sysinfo_ret_string(int ret);
|
|
const char *zbx_result_string(int result);
|
|
|
|
#define MAX_ID_LEN 21
|
|
#define MAX_STRING_LEN 2048
|
|
#define MAX_BUFFER_LEN 65536
|
|
#define ZBX_MAX_HOSTNAME_LEN 128
|
|
#define ZBX_HOSTNAME_BUF_LEN (ZBX_MAX_HOSTNAME_LEN + 1)
|
|
#define ZBX_MAX_DNSNAME_LEN 255 /* maximum host DNS name length from RFC 1035 */
|
|
/*(without terminating '\0') */
|
|
#define MAX_EXECUTE_OUTPUT_LEN (512 * ZBX_KIBIBYTE)
|
|
|
|
#define ZBX_MAX_UINT64 (~__UINT64_C(0))
|
|
#define ZBX_MAX_UINT64_LEN 21
|
|
#define ZBX_MAX_DOUBLE_LEN 24
|
|
|
|
#define ZBX_SIZE_T_MAX (~(size_t)0)
|
|
|
|
/******************************************************************************
|
|
* *
|
|
* Macro: ZBX_UNUSED *
|
|
* *
|
|
* Purpose: silences compiler warning about unused function parameter *
|
|
* *
|
|
* Parameters: *
|
|
* var - [IN] the unused parameter *
|
|
* *
|
|
* Comments: Use only on unused, non-volatile function parameters! *
|
|
* *
|
|
******************************************************************************/
|
|
#define ZBX_UNUSED(var) (void)(var)
|
|
|
|
/* item types */
|
|
typedef enum
|
|
{
|
|
ITEM_TYPE_ZABBIX = 0,
|
|
/* ITEM_TYPE_SNMPv1,*/
|
|
ITEM_TYPE_TRAPPER = 2,
|
|
ITEM_TYPE_SIMPLE,
|
|
/* ITEM_TYPE_SNMPv2c,*/
|
|
ITEM_TYPE_INTERNAL = 5,
|
|
/* ITEM_TYPE_SNMPv3,*/
|
|
ITEM_TYPE_ZABBIX_ACTIVE = 7,
|
|
/* ITEM_TYPE_AGGREGATE, */
|
|
ITEM_TYPE_HTTPTEST = 9,
|
|
ITEM_TYPE_EXTERNAL,
|
|
ITEM_TYPE_DB_MONITOR,
|
|
ITEM_TYPE_IPMI,
|
|
ITEM_TYPE_SSH,
|
|
ITEM_TYPE_TELNET,
|
|
ITEM_TYPE_CALCULATED,
|
|
ITEM_TYPE_JMX,
|
|
ITEM_TYPE_SNMPTRAP,
|
|
ITEM_TYPE_DEPENDENT,
|
|
ITEM_TYPE_HTTPAGENT,
|
|
ITEM_TYPE_SNMP,
|
|
ITEM_TYPE_SCRIPT /* 21 */
|
|
}
|
|
zbx_item_type_t;
|
|
|
|
typedef enum
|
|
{
|
|
INTERFACE_TYPE_UNKNOWN = 0,
|
|
INTERFACE_TYPE_AGENT,
|
|
INTERFACE_TYPE_SNMP,
|
|
INTERFACE_TYPE_IPMI,
|
|
INTERFACE_TYPE_JMX,
|
|
INTERFACE_TYPE_OPT = 254,
|
|
INTERFACE_TYPE_ANY = 255
|
|
}
|
|
zbx_interface_type_t;
|
|
const char *zbx_interface_type_string(zbx_interface_type_t type);
|
|
|
|
#define INTERFACE_TYPE_COUNT 4 /* number of interface types */
|
|
extern const int INTERFACE_TYPE_PRIORITY[INTERFACE_TYPE_COUNT];
|
|
|
|
#define SNMP_BULK_DISABLED 0
|
|
#define SNMP_BULK_ENABLED 1
|
|
|
|
#define ZBX_IF_SNMP_VERSION_1 1
|
|
#define ZBX_IF_SNMP_VERSION_2 2
|
|
#define ZBX_IF_SNMP_VERSION_3 3
|
|
|
|
#define ZBX_FLAG_DISCOVERY_NORMAL 0x00
|
|
#define ZBX_FLAG_DISCOVERY_RULE 0x01
|
|
#define ZBX_FLAG_DISCOVERY_PROTOTYPE 0x02
|
|
#define ZBX_FLAG_DISCOVERY_CREATED 0x04
|
|
|
|
#define ZBX_HOST_PROT_INTERFACES_INHERIT 0
|
|
#define ZBX_HOST_PROT_INTERFACES_CUSTOM 1
|
|
|
|
typedef enum
|
|
{
|
|
ITEM_AUTHTYPE_PASSWORD = 0,
|
|
ITEM_AUTHTYPE_PUBLICKEY
|
|
}
|
|
zbx_item_authtype_t;
|
|
|
|
/* event status */
|
|
#define EVENT_STATUS_RESOLVED 0
|
|
#define EVENT_STATUS_PROBLEM 1
|
|
|
|
/* event sources */
|
|
#define EVENT_SOURCE_TRIGGERS 0
|
|
#define EVENT_SOURCE_DISCOVERY 1
|
|
#define EVENT_SOURCE_AUTOREGISTRATION 2
|
|
#define EVENT_SOURCE_INTERNAL 3
|
|
#define EVENT_SOURCE_SERVICE 4
|
|
#define EVENT_SOURCE_COUNT 5
|
|
|
|
/* event objects */
|
|
#define EVENT_OBJECT_TRIGGER 0
|
|
#define EVENT_OBJECT_DHOST 1
|
|
#define EVENT_OBJECT_DSERVICE 2
|
|
#define EVENT_OBJECT_ZABBIX_ACTIVE 3
|
|
#define EVENT_OBJECT_ITEM 4
|
|
#define EVENT_OBJECT_LLDRULE 5
|
|
#define EVENT_OBJECT_SERVICE 6
|
|
|
|
/* acknowledged flags */
|
|
#define EVENT_NOT_ACKNOWLEDGED 0
|
|
#define EVENT_ACKNOWLEDGED 1
|
|
|
|
typedef enum
|
|
{
|
|
DOBJECT_STATUS_UP = 0,
|
|
DOBJECT_STATUS_DOWN,
|
|
DOBJECT_STATUS_DISCOVER,
|
|
DOBJECT_STATUS_LOST
|
|
}
|
|
zbx_dstatus_t;
|
|
|
|
/* item value types */
|
|
typedef enum
|
|
{
|
|
ITEM_VALUE_TYPE_FLOAT = 0,
|
|
ITEM_VALUE_TYPE_STR,
|
|
ITEM_VALUE_TYPE_LOG,
|
|
ITEM_VALUE_TYPE_UINT64,
|
|
ITEM_VALUE_TYPE_TEXT,
|
|
ITEM_VALUE_TYPE_BIN, /* Last real value. In some places it is also used in size of array or */
|
|
/* upper bound for iteration. Do not forget to update when adding new types. */
|
|
ITEM_VALUE_TYPE_NONE /* Artificial value, not written into DB, used internally in server. */
|
|
}
|
|
zbx_item_value_type_t;
|
|
const char *zbx_item_value_type_string(zbx_item_value_type_t value_type);
|
|
|
|
typedef struct
|
|
{
|
|
int timestamp;
|
|
int logeventid;
|
|
int severity;
|
|
char *source;
|
|
char *value;
|
|
}
|
|
zbx_log_value_t;
|
|
|
|
/* value for not supported items */
|
|
#define ZBX_NOTSUPPORTED "ZBX_NOTSUPPORTED"
|
|
/* the error message for not supported items when reason is unknown */
|
|
#define ZBX_NOTSUPPORTED_MSG "Unknown error."
|
|
|
|
/* Zabbix Agent non-critical error (agents older than 2.0) */
|
|
#define ZBX_ERROR "ZBX_ERROR"
|
|
|
|
|
|
/* program type */
|
|
#define ZBX_PROGRAM_TYPE_SERVER 0x01
|
|
#define ZBX_PROGRAM_TYPE_PROXY_ACTIVE 0x02
|
|
#define ZBX_PROGRAM_TYPE_PROXY_PASSIVE 0x04
|
|
#define ZBX_PROGRAM_TYPE_PROXY 0x06 /* ZBX_PROGRAM_TYPE_PROXY_ACTIVE | ZBX_PROGRAM_TYPE_PROXY_PASSIVE */
|
|
#define ZBX_PROGRAM_TYPE_AGENTD 0x08
|
|
#define ZBX_PROGRAM_TYPE_SENDER 0x10
|
|
#define ZBX_PROGRAM_TYPE_GET 0x20
|
|
const char *get_program_type_string(unsigned char program_type);
|
|
|
|
/* process type */
|
|
#define ZBX_PROCESS_TYPE_POLLER 0
|
|
#define ZBX_PROCESS_TYPE_UNREACHABLE 1
|
|
#define ZBX_PROCESS_TYPE_IPMIPOLLER 2
|
|
#define ZBX_PROCESS_TYPE_PINGER 3
|
|
#define ZBX_PROCESS_TYPE_JAVAPOLLER 4
|
|
#define ZBX_PROCESS_TYPE_HTTPPOLLER 5
|
|
#define ZBX_PROCESS_TYPE_TRAPPER 6
|
|
#define ZBX_PROCESS_TYPE_SNMPTRAPPER 7
|
|
#define ZBX_PROCESS_TYPE_PROXYPOLLER 8
|
|
#define ZBX_PROCESS_TYPE_ESCALATOR 9
|
|
#define ZBX_PROCESS_TYPE_HISTSYNCER 10
|
|
#define ZBX_PROCESS_TYPE_DISCOVERER 11
|
|
#define ZBX_PROCESS_TYPE_ALERTER 12
|
|
#define ZBX_PROCESS_TYPE_TIMER 13
|
|
#define ZBX_PROCESS_TYPE_HOUSEKEEPER 14
|
|
#define ZBX_PROCESS_TYPE_DATASENDER 15
|
|
#define ZBX_PROCESS_TYPE_CONFSYNCER 16
|
|
#define ZBX_PROCESS_TYPE_SELFMON 17
|
|
#define ZBX_PROCESS_TYPE_VMWARE 18
|
|
#define ZBX_PROCESS_TYPE_COLLECTOR 19
|
|
#define ZBX_PROCESS_TYPE_LISTENER 20
|
|
#define ZBX_PROCESS_TYPE_ACTIVE_CHECKS 21
|
|
#define ZBX_PROCESS_TYPE_TASKMANAGER 22
|
|
#define ZBX_PROCESS_TYPE_IPMIMANAGER 23
|
|
#define ZBX_PROCESS_TYPE_ALERTMANAGER 24
|
|
#define ZBX_PROCESS_TYPE_PREPROCMAN 25
|
|
#define ZBX_PROCESS_TYPE_PREPROCESSOR 26
|
|
#define ZBX_PROCESS_TYPE_LLDMANAGER 27
|
|
#define ZBX_PROCESS_TYPE_LLDWORKER 28
|
|
#define ZBX_PROCESS_TYPE_ALERTSYNCER 29
|
|
#define ZBX_PROCESS_TYPE_HISTORYPOLLER 30
|
|
#define ZBX_PROCESS_TYPE_AVAILMAN 31
|
|
#define ZBX_PROCESS_TYPE_REPORTMANAGER 32
|
|
#define ZBX_PROCESS_TYPE_REPORTWRITER 33
|
|
#define ZBX_PROCESS_TYPE_SERVICEMAN 34
|
|
#define ZBX_PROCESS_TYPE_TRIGGERHOUSEKEEPER 35
|
|
#define ZBX_PROCESS_TYPE_ODBCPOLLER 36
|
|
#define ZBX_PROCESS_TYPE_CONNECTORMANAGER 37
|
|
#define ZBX_PROCESS_TYPE_CONNECTORWORKER 38
|
|
#define ZBX_PROCESS_TYPE_DISCOVERYMANAGER 39
|
|
#define ZBX_PROCESS_TYPE_HTTPAGENT_POLLER 40
|
|
#define ZBX_PROCESS_TYPE_AGENT_POLLER 41
|
|
#define ZBX_PROCESS_TYPE_SNMP_POLLER 42
|
|
#define ZBX_PROCESS_TYPE_COUNT 43 /* number of process types */
|
|
|
|
/* special processes that are not present worker list */
|
|
#define ZBX_PROCESS_TYPE_EXT_FIRST 126
|
|
#define ZBX_PROCESS_TYPE_HA_MANAGER 126
|
|
#define ZBX_PROCESS_TYPE_MAIN 127
|
|
#define ZBX_PROCESS_TYPE_EXT_LAST 127
|
|
|
|
#define ZBX_PROCESS_TYPE_UNKNOWN 255
|
|
|
|
const char *get_process_type_string(unsigned char proc_type);
|
|
int get_process_type_by_name(const char *proc_type_str);
|
|
|
|
/* user permissions */
|
|
typedef enum
|
|
{
|
|
USER_TYPE_ZABBIX_USER = 1,
|
|
USER_TYPE_ZABBIX_ADMIN,
|
|
USER_TYPE_SUPER_ADMIN
|
|
}
|
|
zbx_user_type_t;
|
|
|
|
typedef struct
|
|
{
|
|
zbx_uint64_t userid;
|
|
zbx_user_type_t type;
|
|
zbx_uint64_t roleid;
|
|
char *username;
|
|
}
|
|
zbx_user_t;
|
|
|
|
typedef enum
|
|
{
|
|
PERM_DENY = 0,
|
|
PERM_READ = 2,
|
|
PERM_READ_WRITE
|
|
}
|
|
zbx_user_permission_t;
|
|
|
|
typedef struct
|
|
{
|
|
unsigned char type;
|
|
unsigned char execute_on;
|
|
char *port;
|
|
unsigned char authtype;
|
|
char *username;
|
|
char *password;
|
|
char *publickey;
|
|
char *privatekey;
|
|
char *command;
|
|
char *command_orig;
|
|
zbx_uint64_t scriptid;
|
|
unsigned char host_access;
|
|
int timeout;
|
|
}
|
|
zbx_script_t;
|
|
|
|
#define ZBX_SCRIPT_TYPE_CUSTOM_SCRIPT 0
|
|
#define ZBX_SCRIPT_TYPE_IPMI 1
|
|
#define ZBX_SCRIPT_TYPE_SSH 2
|
|
#define ZBX_SCRIPT_TYPE_TELNET 3
|
|
#define ZBX_SCRIPT_TYPE_WEBHOOK 5
|
|
|
|
#define ZBX_SCRIPT_SCOPE_ACTION 1
|
|
#define ZBX_SCRIPT_SCOPE_HOST 2
|
|
#define ZBX_SCRIPT_SCOPE_EVENT 4
|
|
|
|
#define ZBX_SCRIPT_EXECUTE_ON_AGENT 0
|
|
#define ZBX_SCRIPT_EXECUTE_ON_SERVER 1
|
|
#define ZBX_SCRIPT_EXECUTE_ON_PROXY 2 /* fall back to execution on server if target not monitored by proxy */
|
|
|
|
#define POLLER_DELAY 5
|
|
#define DISCOVERER_DELAY 5
|
|
|
|
#define HOUSEKEEPER_STARTUP_DELAY 30 /* in minutes */
|
|
|
|
#define ZBX_DEFAULT_INTERVAL SEC_PER_MIN
|
|
|
|
#define GET_SENDER_TIMEOUT 60
|
|
|
|
#ifndef MAX
|
|
# define MAX(a, b) ((a) > (b) ? (a) : (b))
|
|
#endif
|
|
|
|
#ifndef MIN
|
|
# define MIN(a, b) ((a) < (b) ? (a) : (b))
|
|
#endif
|
|
|
|
#define zbx_calloc(old, nmemb, size) zbx_calloc2(__FILE__, __LINE__, old, nmemb, size)
|
|
#define zbx_malloc(old, size) zbx_malloc2(__FILE__, __LINE__, old, size)
|
|
#define zbx_realloc(src, size) zbx_realloc2(__FILE__, __LINE__, src, size)
|
|
#define zbx_strdup(old, str) zbx_strdup2(__FILE__, __LINE__, old, str)
|
|
|
|
#define ZBX_STRDUP(var, str) (var = zbx_strdup(var, str))
|
|
|
|
void *zbx_calloc2(const char *filename, int line, void *old, size_t nmemb, size_t size);
|
|
void *zbx_malloc2(const char *filename, int line, void *old, size_t size);
|
|
void *zbx_realloc2(const char *filename, int line, void *old, size_t size);
|
|
char *zbx_strdup2(const char *filename, int line, char *old, const char *str);
|
|
|
|
void *zbx_guaranteed_memset(void *v, int c, size_t n);
|
|
|
|
#if defined(_WINDOWS) || defined(__MINGW32__)
|
|
# define zbx_get_thread_id() (long int)GetCurrentThreadId()
|
|
#else
|
|
# define zbx_get_thread_id() (long int)getpid()
|
|
#endif
|
|
|
|
#define zbx_free(ptr) \
|
|
\
|
|
do \
|
|
{ \
|
|
if (ptr) \
|
|
{ \
|
|
free(ptr); \
|
|
ptr = NULL; \
|
|
} \
|
|
} \
|
|
while (0)
|
|
|
|
#define zbx_fclose(file) \
|
|
\
|
|
do \
|
|
{ \
|
|
if (file) \
|
|
{ \
|
|
fclose(file); \
|
|
file = NULL; \
|
|
} \
|
|
} \
|
|
while (0)
|
|
|
|
#define THIS_SHOULD_NEVER_HAPPEN \
|
|
\
|
|
do \
|
|
{ \
|
|
zbx_error("ERROR [file and function: <%s,%s>, revision:%s, line:%d] Something impossible has just" \
|
|
" happened.", __FILE__, __func__, ZABBIX_REVISION, __LINE__); \
|
|
zbx_backtrace(); \
|
|
} \
|
|
while (0)
|
|
|
|
/* to avoid dependency on libzbxnix.a */
|
|
#define THIS_SHOULD_NEVER_HAPPEN_NO_BACKTRACE \
|
|
zbx_error("ERROR [file and function: <%s,%s>, revision:%s, line:%d] Something impossible has just" \
|
|
" happened.", __FILE__, __func__, ZABBIX_REVISION, __LINE__)
|
|
|
|
extern const char *progname;
|
|
extern const char title_message[];
|
|
extern const char syslog_app_name[];
|
|
extern const char *usage_message[];
|
|
extern const char *help_message[];
|
|
|
|
#define ARRSIZE(a) (sizeof(a) / sizeof(*a))
|
|
|
|
void zbx_help(void);
|
|
void zbx_usage(void);
|
|
void zbx_version(void);
|
|
|
|
const char *get_program_name(const char *path);
|
|
typedef unsigned char (*zbx_get_program_type_f)(void);
|
|
typedef const char *(*zbx_get_progname_f)(void);
|
|
typedef int (*zbx_get_config_forks_f)(unsigned char process_type);
|
|
typedef const char *(*zbx_get_config_str_f)(void);
|
|
typedef int (*zbx_get_config_int_f)(void);
|
|
|
|
typedef enum
|
|
{
|
|
ZBX_TASK_START = 0,
|
|
ZBX_TASK_PRINT_SUPPORTED,
|
|
ZBX_TASK_TEST_METRIC,
|
|
ZBX_TASK_SHOW_USAGE,
|
|
ZBX_TASK_SHOW_VERSION,
|
|
ZBX_TASK_SHOW_HELP,
|
|
#ifdef _WINDOWS
|
|
ZBX_TASK_INSTALL_SERVICE,
|
|
ZBX_TASK_UNINSTALL_SERVICE,
|
|
ZBX_TASK_START_SERVICE,
|
|
ZBX_TASK_STOP_SERVICE
|
|
#else
|
|
ZBX_TASK_RUNTIME_CONTROL
|
|
#endif
|
|
}
|
|
zbx_task_t;
|
|
|
|
typedef enum
|
|
{
|
|
HTTPTEST_AUTH_NONE = 0,
|
|
HTTPTEST_AUTH_BASIC,
|
|
HTTPTEST_AUTH_NTLM,
|
|
HTTPTEST_AUTH_NEGOTIATE,
|
|
HTTPTEST_AUTH_DIGEST,
|
|
HTTPTEST_AUTH_BEARER
|
|
}
|
|
zbx_httptest_auth_t;
|
|
|
|
#define ZBX_TASK_FLAG_MULTIPLE_AGENTS 0x01
|
|
#define ZBX_TASK_FLAG_FOREGROUND 0x02
|
|
|
|
typedef struct
|
|
{
|
|
zbx_task_t task;
|
|
unsigned int flags;
|
|
int data;
|
|
char *opts;
|
|
}
|
|
ZBX_TASK_EX;
|
|
|
|
#define NET_DELAY_MAX (SEC_PER_MIN / 4)
|
|
|
|
typedef struct
|
|
{
|
|
int values_num;
|
|
int period_end;
|
|
#define ZBX_PROXY_SUPPRESS_DISABLE 0x00
|
|
#define ZBX_PROXY_SUPPRESS_ACTIVE 0x01
|
|
#define ZBX_PROXY_SUPPRESS_MORE 0x02
|
|
#define ZBX_PROXY_SUPPRESS_EMPTY 0x04
|
|
#define ZBX_PROXY_SUPPRESS_ENABLE ( \
|
|
ZBX_PROXY_SUPPRESS_ACTIVE | \
|
|
ZBX_PROXY_SUPPRESS_MORE | \
|
|
ZBX_PROXY_SUPPRESS_EMPTY)
|
|
int flags;
|
|
}
|
|
zbx_proxy_suppress_t;
|
|
|
|
#define ZBX_RTC_MSG_SHIFT 0
|
|
#define ZBX_RTC_SCOPE_SHIFT 8
|
|
#define ZBX_RTC_DATA_SHIFT 16
|
|
|
|
#define ZBX_RTC_MSG_MASK 0x000000ff
|
|
#define ZBX_RTC_SCOPE_MASK 0x0000ff00
|
|
#define ZBX_RTC_DATA_MASK 0xffff0000
|
|
|
|
#define ZBX_RTC_GET_MSG(task) (int)(((unsigned int)task & ZBX_RTC_MSG_MASK) >> ZBX_RTC_MSG_SHIFT)
|
|
#define ZBX_RTC_GET_SCOPE(task) (int)(((unsigned int)task & ZBX_RTC_SCOPE_MASK) >> ZBX_RTC_SCOPE_SHIFT)
|
|
#define ZBX_RTC_GET_DATA(task) (int)(((unsigned int)task & ZBX_RTC_DATA_MASK) >> ZBX_RTC_DATA_SHIFT)
|
|
|
|
#define ZBX_RTC_MAKE_MESSAGE(msg, scope, data) (((zbx_uint32_t)msg << ZBX_RTC_MSG_SHIFT) | \
|
|
((zbx_uint32_t)scope << ZBX_RTC_SCOPE_SHIFT) | \
|
|
((zbx_uint32_t)data << ZBX_RTC_DATA_SHIFT))
|
|
|
|
#define ZBX_KIBIBYTE 1024
|
|
#define ZBX_MEBIBYTE 1048576
|
|
#define ZBX_GIBIBYTE 1073741824
|
|
#define ZBX_TEBIBYTE __UINT64_C(1099511627776)
|
|
|
|
#define SEC_PER_MIN 60
|
|
#define SEC_PER_HOUR 3600
|
|
#define SEC_PER_DAY 86400
|
|
#define SEC_PER_WEEK (7 * SEC_PER_DAY)
|
|
#define SEC_PER_MONTH (30 * SEC_PER_DAY)
|
|
#define SEC_PER_YEAR (365 * SEC_PER_DAY)
|
|
#define ZBX_JAN_2038 2145916800
|
|
#define ZBX_JAN_1970_IN_SEC 2208988800.0 /* 1970 - 1900 in seconds */
|
|
|
|
#define ZBX_MAX_RECV_DATA_SIZE (1 * ZBX_GIBIBYTE)
|
|
#if defined(_WINDOWS)
|
|
#define ZBX_MAX_RECV_LARGE_DATA_SIZE (1 * ZBX_GIBIBYTE)
|
|
#else
|
|
#define ZBX_MAX_RECV_LARGE_DATA_SIZE (__UINT64_C(16) * ZBX_GIBIBYTE)
|
|
#endif
|
|
|
|
/* max length of base64 data */
|
|
#define ZBX_MAX_B64_LEN (16 * ZBX_KIBIBYTE)
|
|
|
|
/* string functions that could not be moved into libzbxstr.a because they */
|
|
/* are used by libzbxcommon.a */
|
|
|
|
/* used by log which will be part of common*/
|
|
#if defined(__GNUC__) || defined(__clang__)
|
|
# define __zbx_attr_format_printf(idx1, idx2) __attribute__((__format__(__printf__, (idx1), (idx2))))
|
|
#else
|
|
# define __zbx_attr_format_printf(idx1, idx2)
|
|
#endif
|
|
|
|
/* used by cuid and also by log */
|
|
size_t zbx_snprintf(char *str, size_t count, const char *fmt, ...) __zbx_attr_format_printf(3, 4);
|
|
|
|
/* could be moved into libzbxstr.a but it seems to be logically grouped with surrounding functions */
|
|
void zbx_snprintf_alloc(char **str, size_t *alloc_len, size_t *offset, const char *fmt, ...)
|
|
__zbx_attr_format_printf(4, 5);
|
|
|
|
/* used by log */
|
|
size_t zbx_vsnprintf(char *str, size_t count, const char *fmt, va_list args);
|
|
|
|
/* used by log */
|
|
char *zbx_dsprintf(char *dest, const char *f, ...) __zbx_attr_format_printf(2, 3);
|
|
|
|
/* used by zbxcommon, setproctitle */
|
|
size_t zbx_strlcpy(char *dst, const char *src, size_t siz);
|
|
|
|
/* used by dsprintf, which is used by log */
|
|
char *zbx_dvsprintf(char *dest, const char *f, va_list args);
|
|
|
|
#define VALUE_ERRMSG_MAX 128
|
|
#define ZBX_LENGTH_UNLIMITED 0x7fffffff
|
|
|
|
#if defined(_WINDOWS) || defined(__MINGW32__)
|
|
wchar_t *zbx_acp_to_unicode(const char *acp_string);
|
|
wchar_t *zbx_utf8_to_unicode(const char *utf8_string);
|
|
wchar_t *zbx_oemcp_to_unicode(const char *oemcp_string);
|
|
#endif
|
|
/* string functions that could not be moved into libzbxstr.a because they */
|
|
/* are used by libzbxcommon.a END */
|
|
|
|
char **zbx_setproctitle_init(int argc, char **argv);
|
|
void zbx_setproctitle(const char *fmt, ...) __zbx_attr_format_printf(1, 2);
|
|
void zbx_setproctitle_deinit(void);
|
|
|
|
void zbx_error(const char *fmt, ...) __zbx_attr_format_printf(1, 2);
|
|
|
|
/* misc functions */
|
|
int zbx_validate_hostname(const char *hostname);
|
|
|
|
void zbx_backtrace(void);
|
|
|
|
int get_nearestindex(const void *p, size_t sz, int num, zbx_uint64_t id);
|
|
int uint64_array_add(zbx_uint64_t **values, int *alloc, int *num, zbx_uint64_t value, int alloc_step);
|
|
void uint64_array_remove(zbx_uint64_t *values, int *num, const zbx_uint64_t *rm_values, int rm_num);
|
|
|
|
#if defined(_WINDOWS) || defined(__MINGW32__)
|
|
const OSVERSIONINFOEX *zbx_win_getversion(void);
|
|
void zbx_wmi_get(const char *wmi_namespace, const char *wmi_query, double timeout, char **utf8_value);
|
|
#endif
|
|
|
|
#if defined(_WINDOWS) || defined(__MINGW32__)
|
|
typedef struct __stat64 zbx_stat_t;
|
|
int __zbx_stat(const char *path, zbx_stat_t *buf);
|
|
#else
|
|
typedef struct stat zbx_stat_t;
|
|
#endif /* _WINDOWS */
|
|
|
|
int MAIN_ZABBIX_ENTRY(int flags);
|
|
|
|
unsigned char get_interface_type_by_item_type(unsigned char type);
|
|
|
|
#define ZBX_SESSION_ACTIVE 0
|
|
#define ZBX_SESSION_PASSIVE 1
|
|
#define ZBX_AUTH_TOKEN_ENABLED 0
|
|
#define ZBX_AUTH_TOKEN_DISABLED 1
|
|
#define ZBX_AUTH_TOKEN_NEVER_EXPIRES 0
|
|
|
|
#define ZBX_DO_NOT_SEND_RESPONSE 0
|
|
#define ZBX_SEND_RESPONSE 1
|
|
|
|
/* Do not forget to synchronize HOST_TLS_* definitions with DB schema ! */
|
|
#define HOST_TLS_ISSUER_LEN 4096 /* for up to 1024 UTF-8 characters */
|
|
#define HOST_TLS_ISSUER_LEN_MAX (HOST_TLS_ISSUER_LEN + 1)
|
|
#define HOST_TLS_SUBJECT_LEN 4096 /* for up to 1024 UTF-8 characters */
|
|
#define HOST_TLS_SUBJECT_LEN_MAX (HOST_TLS_SUBJECT_LEN + 1)
|
|
#define HOST_TLS_PSK_IDENTITY_LEN 512 /* for up to 128 UTF-8 characters */
|
|
#define HOST_TLS_PSK_IDENTITY_LEN_MAX (HOST_TLS_PSK_IDENTITY_LEN + 1)
|
|
#define HOST_TLS_PSK_LEN 512 /* for up to 256 hex-encoded bytes (ASCII) */
|
|
#define HOST_TLS_PSK_LEN_MAX (HOST_TLS_PSK_LEN + 1)
|
|
#define HOST_TLS_PSK_LEN_MIN 32 /* for 16 hex-encoded bytes (128-bit PSK) */
|
|
|
|
#define ZBX_PSK_FOR_HOST 0x01 /* PSK can be used for a known host */
|
|
#define ZBX_PSK_FOR_AUTOREG 0x02 /* PSK can be used for host autoregistration */
|
|
#define ZBX_PSK_FOR_PROXY 0x04 /* PSK is configured on proxy */
|
|
|
|
void zbx_alarm_flag_set(void);
|
|
void zbx_alarm_flag_clear(void);
|
|
|
|
#ifndef _WINDOWS
|
|
unsigned int zbx_alarm_on(unsigned int seconds);
|
|
unsigned int zbx_alarm_off(void);
|
|
#endif
|
|
|
|
int zbx_alarm_timed_out(void);
|
|
|
|
#define zbx_bsearch(key, base, nmemb, size, compar) (0 == (nmemb) ? NULL : bsearch(key, base, nmemb, size, compar))
|
|
|
|
#define ZBX_PREPROC_NONE 0
|
|
#define ZBX_PREPROC_MULTIPLIER 1
|
|
#define ZBX_PREPROC_RTRIM 2
|
|
#define ZBX_PREPROC_LTRIM 3
|
|
#define ZBX_PREPROC_TRIM 4
|
|
#define ZBX_PREPROC_REGSUB 5
|
|
#define ZBX_PREPROC_BOOL2DEC 6
|
|
#define ZBX_PREPROC_OCT2DEC 7
|
|
#define ZBX_PREPROC_HEX2DEC 8
|
|
#define ZBX_PREPROC_DELTA_VALUE 9
|
|
#define ZBX_PREPROC_DELTA_SPEED 10
|
|
#define ZBX_PREPROC_XPATH 11
|
|
#define ZBX_PREPROC_JSONPATH 12
|
|
#define ZBX_PREPROC_VALIDATE_RANGE 13
|
|
#define ZBX_PREPROC_VALIDATE_REGEX 14
|
|
#define ZBX_PREPROC_VALIDATE_NOT_REGEX 15
|
|
#define ZBX_PREPROC_ERROR_FIELD_JSON 16
|
|
#define ZBX_PREPROC_ERROR_FIELD_XML 17
|
|
#define ZBX_PREPROC_ERROR_FIELD_REGEX 18
|
|
#define ZBX_PREPROC_THROTTLE_VALUE 19
|
|
#define ZBX_PREPROC_THROTTLE_TIMED_VALUE 20
|
|
#define ZBX_PREPROC_SCRIPT 21
|
|
#define ZBX_PREPROC_PROMETHEUS_PATTERN 22
|
|
#define ZBX_PREPROC_PROMETHEUS_TO_JSON 23
|
|
#define ZBX_PREPROC_CSV_TO_JSON 24
|
|
#define ZBX_PREPROC_STR_REPLACE 25
|
|
#define ZBX_PREPROC_VALIDATE_NOT_SUPPORTED 26
|
|
#define ZBX_PREPROC_XML_TO_JSON 27
|
|
#define ZBX_PREPROC_SNMP_WALK_TO_VALUE 28
|
|
#define ZBX_PREPROC_SNMP_WALK_TO_JSON 29
|
|
|
|
/* custom on fail actions */
|
|
#define ZBX_PREPROC_FAIL_DEFAULT 0
|
|
#define ZBX_PREPROC_FAIL_DISCARD_VALUE 1
|
|
#define ZBX_PREPROC_FAIL_SET_VALUE 2
|
|
#define ZBX_PREPROC_FAIL_SET_ERROR 3
|
|
|
|
|
|
|
|
/* includes terminating '\0' */
|
|
#define CUID_LEN 26
|
|
void zbx_new_cuid(char *cuid);
|
|
|
|
typedef struct
|
|
{
|
|
char *tag;
|
|
char *value;
|
|
}
|
|
zbx_tag_t;
|
|
|
|
#define ZBX_STR2UCHAR(var, string) var = (unsigned char)atoi(string)
|
|
|
|
#define ZBX_CONST_STRING(str) "" str
|
|
#define ZBX_CONST_STRLEN(str) (sizeof(ZBX_CONST_STRING(str)) - 1)
|
|
|
|
/* time and memory size suffixes */
|
|
zbx_uint64_t suffix2factor(char c);
|
|
|
|
/******************************************************************************
|
|
* *
|
|
* CODE BELOW IS LIBC WRAPPERS WHICH COULD BE LATER MOVED TO SEPARATE LIBRARY *
|
|
* *
|
|
******************************************************************************/
|
|
|
|
#define ZBX_MESSAGE_BUF_SIZE 1024
|
|
|
|
char *zbx_strerror(int errnum);
|
|
|
|
#if !defined(_WINDOWS)
|
|
# if defined(HAVE_LIBPTHREAD)
|
|
# define zbx_sigmask pthread_sigmask
|
|
# else
|
|
# define zbx_sigmask sigprocmask
|
|
# endif
|
|
#endif
|
|
|
|
#define ZBX_GET_CONFIG_VAR(type, varname, defvalue) \
|
|
static type varname = defvalue; \
|
|
static type get_##varname(void) \
|
|
{ \
|
|
return varname; \
|
|
}
|
|
|
|
#define ZBX_GET_CONFIG_VAR2(type1, type2, varname, defvalue) \
|
|
static type1 varname = defvalue; \
|
|
static type2 get_##varname(void) \
|
|
{ \
|
|
return varname; \
|
|
}
|
|
|
|
#define LOG_LEVEL_EMPTY 0 /* printing nothing (if not LOG_LEVEL_INFORMATION set) */
|
|
#define LOG_LEVEL_CRIT 1
|
|
#define LOG_LEVEL_ERR 2
|
|
#define LOG_LEVEL_WARNING 3
|
|
#define LOG_LEVEL_DEBUG 4
|
|
#define LOG_LEVEL_TRACE 5
|
|
|
|
#define LOG_LEVEL_INFORMATION 127 /* printing in any case no matter what level set */
|
|
|
|
#define ZBX_CHECK_LOG_LEVEL(level) \
|
|
((LOG_LEVEL_INFORMATION != (level) && \
|
|
((level) > zbx_get_log_level() || LOG_LEVEL_EMPTY == (level))) ? FAIL : SUCCEED)
|
|
|
|
#ifdef HAVE___VA_ARGS__
|
|
# define ZBX_ZABBIX_LOG_CHECK
|
|
# define zabbix_log(level, ...) \
|
|
\
|
|
do \
|
|
{ \
|
|
if (SUCCEED == ZBX_CHECK_LOG_LEVEL(level)) \
|
|
zbx_log_handle(level, __VA_ARGS__); \
|
|
} \
|
|
while (0)
|
|
#else
|
|
# define zabbix_log zbx_log_handle
|
|
#endif
|
|
|
|
typedef void (*zbx_log_func_t)(int level, const char *fmt, va_list args);
|
|
|
|
void zbx_init_library_common(zbx_log_func_t log_func);
|
|
void zbx_log_handle(int level, const char *fmt, ...);
|
|
int zbx_get_log_level(void);
|
|
void zbx_set_log_level(int level);
|
|
const char *zbx_get_log_component_name(void);
|
|
|
|
#ifndef _WINDOWS
|
|
void zabbix_increase_log_level(void);
|
|
void zabbix_decrease_log_level(void);
|
|
void zabbix_report_log_level_change(void);
|
|
const char *zabbix_get_log_level_string(void);
|
|
|
|
typedef struct
|
|
{
|
|
int level;
|
|
const char *name;
|
|
}
|
|
zbx_log_component_t;
|
|
|
|
void zbx_set_log_component(const char *name, zbx_log_component_t *component);
|
|
void zbx_change_component_log_level(zbx_log_component_t *component, int direction);
|
|
#endif
|
|
|
|
#endif
|