diff options
author | Micael Karlberg <bmk@erlang.org> | 2019-10-23 12:39:30 +0200 |
---|---|---|
committer | Micael Karlberg <bmk@erlang.org> | 2019-10-23 12:39:30 +0200 |
commit | 90b0f7f4b3b66e5820cc229b86e9a2450f65cdfd (patch) | |
tree | 7830a0782af72aeaa4d79da945604effb204cb4a /lib/snmp/src/agent/snmpa_net_if.erl | |
parent | 6611181ae71422a1c66798718b37474641a090a9 (diff) | |
download | erlang-90b0f7f4b3b66e5820cc229b86e9a2450f65cdfd.tar.gz |
[snmp|agent] Improvements of discovery process
A couple of issues with the agent discovery process
(when authoritative engine was snmptrapd) found and
corrected by (Asko Husso).
OTP-16207
Diffstat (limited to 'lib/snmp/src/agent/snmpa_net_if.erl')
-rw-r--r-- | lib/snmp/src/agent/snmpa_net_if.erl | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/lib/snmp/src/agent/snmpa_net_if.erl b/lib/snmp/src/agent/snmpa_net_if.erl index 58c01146be..eefe864ac6 100644 --- a/lib/snmp/src/agent/snmpa_net_if.erl +++ b/lib/snmp/src/agent/snmpa_net_if.erl @@ -738,6 +738,26 @@ handle_discovery_response( %% should be redundant. NReqs = lists:keydelete(ReqId, 1, Reqs), S#state{reqs = NReqs}; + + %% <OTP-16207> + %% For some reason 'snmptrapd' response in stage 2 with request-id + %% of zero. + false when (ReqId =:= 0) -> + DiscoReqs = [X|| {0, From1} <- S#state.reqs, + {_, From2} = X <- S#state.reqs, From1 =:= From2], + case (length(DiscoReqs) =:= 2) of + true -> + [{_, Pid}, _] = DiscoReqs, + active_once(Socket), + Pid ! {snmp_discovery_response_received, Pdu, + ManagerEngineId}, + NReqs = S#state.reqs -- DiscoReqs, + S#state{reqs = NReqs}; + false -> + S + end; + %% </OTP-16207> + false -> %% Ouch, timeout? resend? S @@ -1013,8 +1033,9 @@ handle_send_discovery( log(Log, Type, Packet, {Domain, Address}), udp_send(Socket, {Domain, Address}, Packet), ?vtrace("handle_send_discovery -> sent (~w)", [ReqId]), - NReqs = snmp_misc:keyreplaceadd(From, 2, Reqs, {ReqId, From}), - S#state{reqs = NReqs} + NReqs = snmp_misc:keyreplaceadd(From, 2, Reqs, {ReqId, From}), + NReqs2 = (NReqs -- [{0, From}]) ++ [{0, From}], % OTP-16207 + S#state{reqs = NReqs2} end; {discarded, Reason} -> ?vlog("handle_send_discovery -> " |