From 3714da1bb5ae70a7f23b4359aaa5d98631103a68 Mon Sep 17 00:00:00 2001 From: Dmitrijs Goloscapovs Date: Tue, 14 Jan 2025 13:48:34 +0200 Subject: [PATCH] .......... [ZBX-25824] patched --- src/libs/zbxpoller/checks_snmp.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/libs/zbxpoller/checks_snmp.c b/src/libs/zbxpoller/checks_snmp.c index dd32c4a4c88..c3031886ecc 100644 --- a/src/libs/zbxpoller/checks_snmp.c +++ b/src/libs/zbxpoller/checks_snmp.c @@ -1456,7 +1456,8 @@ static int zbx_snmp_walk(zbx_snmp_sess_t ssp, const zbx_dc_item_t *item, const c size_t anOID_len = MAX_OID_LEN, rootOID_len = MAX_OID_LEN, root_string_len, root_numeric_len; char oid_index[MAX_STRING_LEN], root_oid[MAX_STRING_LEN]; struct variable_list *var; - int status, level, running, num_vars, check_oid_increase = 1, ret = SUCCEED; + int status, level, running, num_vars, got_values = 0, retries_add = 0, + check_oid_increase = 1, ret = SUCCEED; AGENT_RESULT snmp_result; zbx_hashset_t oids_seen; struct snmp_session *ss; @@ -1529,7 +1530,7 @@ static int zbx_snmp_walk(zbx_snmp_sess_t ssp, const zbx_dc_item_t *item, const c } ss = snmp_sess_session(ssp); - ss->retries = (0 == bulk || (1 == max_vars && 0 == level) ? 1 : 0); + ss->retries = (0 == bulk || (1 == max_vars && 0 == level) ? 1 + retries_add : 0); /* communicate with agent */ status = snmp_sess_synch_response(ssp, pdu, &response); @@ -1554,6 +1555,9 @@ reduce_max_vars: else if (1 == level) { max_vars = 1; + + if (0 != got_values && STAT_TIMEOUT == status) + retries_add = 5; } level++; @@ -1588,6 +1592,8 @@ reduce_max_vars: char **str_res; unsigned char val_type; + got_values = 1; + /* verify if we are in the same subtree */ if (SNMP_ENDOFMIBVIEW == var->type || var->name_length < rootOID_len || 0 != memcmp(rootOID, var->name, rootOID_len * sizeof(oid))) @@ -1701,6 +1707,12 @@ next: if (0 == check_oid_increase) zbx_hashset_destroy(&oids_seen); out: + if (NETWORK_ERROR == ret && 0 != got_values) + { + zbx_strlcpy(error, "Timed out during data retrieval.", max_error_len); + ret = NOTSUPPORTED; + } + zabbix_log(LOG_LEVEL_DEBUG, "End of %s():%s", __func__, zbx_result_string(ret)); return ret; -- 2.39.2