File 2643-snmp-agent-Dialyzer-related-changes.patch of Package erlang

From 04b795f59e678e550fb8c7650952c5ded1096cef Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Fri, 14 Jun 2019 11:13:34 +0200
Subject: [PATCH 3/6] [snmp|agent] Dialyzer related changes

Changes to satisfy dialyzer. Including changing the definition
of some of the behaviours (use the '-callback' attribute instead
of an explicit behaviour_info/1 function).

Also found and corrected some (apparently minor) bugs.

OTP-15932
---
 lib/snmp/src/agent/snmp_community_mib.erl          | 22 ++----
 lib/snmp/src/agent/snmp_view_based_acm_mib.erl     | 10 +--
 .../src/agent/snmpa_authentication_service.erl     | 45 ++++++++++---
 lib/snmp/src/agent/snmpa_conf.erl                  | 28 ++++++++
 lib/snmp/src/agent/snmpa_discovery_handler.erl     | 19 ++++--
 lib/snmp/src/agent/snmpa_error_report.erl          | 16 +++--
 lib/snmp/src/agent/snmpa_get.erl                   |  2 +
 lib/snmp/src/agent/snmpa_local_db.erl              | 12 ++--
 lib/snmp/src/agent/snmpa_mib_storage.erl           |  6 +-
 lib/snmp/src/agent/snmpa_mib_storage_dets.erl      | 14 ++--
 lib/snmp/src/agent/snmpa_mib_storage_ets.erl       |  9 ++-
 lib/snmp/src/agent/snmpa_network_interface.erl     | 78 +++++++++++++++-------
 lib/snmp/src/agent/snmpa_set_mechanism.erl         | 37 ++++++++--
 lib/snmp/src/agent/snmpa_trap.erl                  |  2 +-
 lib/snmp/src/misc/snmp_conf.erl                    |  8 +++
 lib/snmp/src/misc/snmp_config.erl                  | 11 ++-
 lib/snmp/src/misc/snmp_log.erl                     | 18 ++---
 17 files changed, 219 insertions(+), 118 deletions(-)

diff --git a/lib/snmp/src/agent/snmp_community_mib.erl b/lib/snmp/src/agent/snmp_community_mib.erl
index 984b0bcee1..4bd30632f5 100644
--- a/lib/snmp/src/agent/snmp_community_mib.erl
+++ b/lib/snmp/src/agent/snmp_community_mib.erl
@@ -545,26 +545,18 @@ snmpTargetAddrExtTable(is_set_ok, RowIndex, Cols0) ->
     end.
 
 
-
 get_snmpTargetAddrTDomain(RowIndex, Col) ->
-    case
-	get(
-	  snmpTargetAddrTable, RowIndex,
-	  [?snmpTargetAddrRowStatus,?snmpTargetAddrTDomain])
-    of
-	[{value,?snmpTargetAddrRowStatus_active},ValueTDomain] ->
-	    case ValueTDomain of
-		{value,TDomain} ->
-		    TDomain;
-		_ ->
-		    ?snmpUDPDomain
-	    end;
-	_ ->
+    Cols = [?snmpTargetAddrRowStatus,?snmpTargetAddrTDomain],
+    case snmp_target_mib:snmpTargetAddrTable(get, RowIndex, Cols) of
+	[{value, ?snmpTargetAddrRowStatus_active}, {value, TDomain}] ->
+            TDomain;
+	[{value, ?snmpTargetAddrRowStatus_active}, _] ->
+            ?snmpUDPDomain;
+        _ ->
 	    wrongValue(Col)
     end.
 
 
-
 verify_snmpTargetAddrExtTable_cols([], _TDomain, Cols) ->
     {ok, lists:reverse(Cols)};
 verify_snmpTargetAddrExtTable_cols([{Col, Val0}|Cols], TDomain, Acc) ->
diff --git a/lib/snmp/src/agent/snmp_view_based_acm_mib.erl b/lib/snmp/src/agent/snmp_view_based_acm_mib.erl
index 56b5d96142..a5a65d9326 100644
--- a/lib/snmp/src/agent/snmp_view_based_acm_mib.erl
+++ b/lib/snmp/src/agent/snmp_view_based_acm_mib.erl
@@ -654,7 +654,7 @@ vacmAccessTable(is_set_ok, RowIndex, Cols0) ->
 		{{Col, ?'RowStatus_createAndWait'}, _} ->
 		    %% Row already exists => inconsistentValue
 		    {inconsistentValue, Col};
-		{value, {_Col, ?'RowStatus_destroy'}} ->
+		{{_Col, ?'RowStatus_destroy'}, _} ->
 		    %% always ok!
 		    {noError, 0};
 		{_, false} ->
@@ -1115,9 +1115,7 @@ externalize_next(Name, Result) when is_list(Result) ->
     F = fun({[Col | _] = Idx, Val}) -> {Idx, externalize(Name, Col, Val)};
 	   (Other)                  -> Other
 	end,
-    [F(R) || R <- Result];
-externalize_next(_, Result) ->
-    Result.
+    [F(R) || R <- Result].
 
 
 externalize_get(Name, Cols, Result) when is_list(Result) ->
@@ -1127,9 +1125,7 @@ externalize_get(Name, Cols, Result) when is_list(Result) ->
 	end,
     %% Merge column numbers and return values. there must be as much
     %% return values as there are columns requested. And then patch all values
-    [F(R) || R <- lists:zip(Cols, Result)];
-externalize_get(_, _, Result) ->
-    Result. 
+    [F(R) || R <- lists:zip(Cols, Result)]. 
 
 externalize(vacmViewTreeFamilyTable, ?vacmViewTreeFamilyMask, Val) ->
     imask2emask(Val);
diff --git a/lib/snmp/src/agent/snmpa_authentication_service.erl b/lib/snmp/src/agent/snmpa_authentication_service.erl
index e4238a8384..b6b9f5bd96 100644
--- a/lib/snmp/src/agent/snmpa_authentication_service.erl
+++ b/lib/snmp/src/agent/snmpa_authentication_service.erl
@@ -1,7 +1,7 @@
 %%
 %% %CopyrightBegin%
 %% 
-%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2019. All Rights Reserved.
 %% 
 %% Licensed under the Apache License, Version 2.0 (the "License");
 %% you may not use this file except in compliance with the License.
@@ -19,13 +19,27 @@
 %%
 -module(snmpa_authentication_service).
 
--export([behaviour_info/1]).
- 
-behaviour_info(callbacks) ->
-    [{init_check_access, 2}];
-behaviour_info(_) ->
-    undefined.
- 
+-export_type([
+              acm_data/0
+             ]).
+
+-type acm_data() :: {community,
+                     SecModel  :: 0 | 1 | 2 | 3, % any | v1 | v2c | v3
+                     Community :: string(),
+                     %% Oids for either:
+                     %%      transportDomainUdpIpv4 | transportDomainUdpIpv6
+                     TDomain   :: snmp:oid(),
+                     TAddress  :: [non_neg_integer()]} |
+                    {v3,
+                     MsgID           :: integer(),
+                     SecModel        :: 0 | 1 | 2 | 3, % any | v1 | v2c | v3
+                     SecName         :: string(),
+                     %% noAuthNoPriv | authNoPriv | authPriv
+                     SecLevel        :: 1 | 2 | 3,
+                     ContextEngineID :: string(),
+                     ContextName     :: string(),
+                     SecData         :: term()}.
+
 
 %%-----------------------------------------------------------------
 %% init_check_access(Pdu, ACMData)
@@ -46,9 +60,7 @@ behaviour_info(_) ->
 %%        Variable        = snmpInBadCommunityNames |
 %%                          snmpInBadCommunityUses |
 %%                          snmpInASNParseErrs
-%%        Reason          = snmp_message_decoding |
-%%                          {bad_community_name, Address, Community}} |
-%%                          {invalid_access, Access, Op}
+%%        Reason          = {bad_community_name, Address, Community}}
 %%
 %% Purpose: Called once for each Pdu.  Returns a MibView
 %%          which is later used for each variable in the pdu.
@@ -57,3 +69,14 @@ behaviour_info(_) ->
 %%
 %% NOTE: This function is executed in the Master agents's context
 %%-----------------------------------------------------------------
+
+-callback init_check_access(Pdu, ACMData) ->
+    {ok, MibView, ContextName} |
+    {error, Reason} |
+    {discarded, Variable, Reason} when
+      Pdu         :: snmp:pdu(),
+      ACMData     :: acm_data(),
+      MibView     :: snmp_view_based_acm_mib:mibview(),
+      ContextName :: string(),
+      Reason      :: term(),
+      Variable    :: snmpInBadCommunityNames.
diff --git a/lib/snmp/src/agent/snmpa_conf.erl b/lib/snmp/src/agent/snmpa_conf.erl
index fc5116dac9..3665931d16 100644
--- a/lib/snmp/src/agent/snmpa_conf.erl
+++ b/lib/snmp/src/agent/snmpa_conf.erl
@@ -83,6 +83,34 @@
 
 
 
+-export_type([
+              usm_entry/0
+             ]).
+
+-type usm_entry() :: {
+                      EngineID    :: string(),
+                      UserName    :: string(),
+                      SecName     :: string(),
+                      Clone       :: zeroDotZero | [non_neg_integer()],
+                      AuthP       :: usmNoAuthProtocol |
+                                     usmHMACMD5AuthProtocol |
+                                     usmHMACSHAAuthProtocol,
+                      AuthKeyC    :: string(),
+                      OwnAuthKeyC :: string(),
+                      PrivP       :: usmNoPrivProtocol |
+                                     usmDESPrivProtocol |
+                                     usmAesCfb128Protocol,
+                      PrivKeyC    :: string(),
+                      OwnPrivKeyC :: string(),
+                      Public      :: string(),
+                      %% Size 16 for usmHMACMD5AuthProtocol
+                      %% Size 20 for usmHMACSHAAuthProtocol
+                      AuthKey     :: [non_neg_integer()],
+                      %% Size 16 for usmDESPrivProtocol | usmAesCfb128Protocol
+                      PrivKey     :: [non_neg_integer()]
+                     }.
+
+
 %%
 %% ------ agent.conf ------
 %%
diff --git a/lib/snmp/src/agent/snmpa_discovery_handler.erl b/lib/snmp/src/agent/snmpa_discovery_handler.erl
index ffdd6aca1e..6fb1d1eb72 100644
--- a/lib/snmp/src/agent/snmpa_discovery_handler.erl
+++ b/lib/snmp/src/agent/snmpa_discovery_handler.erl
@@ -1,7 +1,7 @@
 %%
 %% %CopyrightBegin%
 %% 
-%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2019. All Rights Reserved.
 %% 
 %% Licensed under the Apache License, Version 2.0 (the "License");
 %% you may not use this file except in compliance with the License.
@@ -19,12 +19,17 @@
 %%
 -module(snmpa_discovery_handler).
 
--export([behaviour_info/1, verify/1]).
-
-behaviour_info(callbacks) ->
-    [{stage1_finish, 3}];
-behaviour_info(_) ->
-    undefined.
+-export([verify/1]).
 
+-callback stage1_finish(TargetName, ManagerEngineID, ExtraInfo) ->
+    ignore |
+    {ok, snmpa_conf:usm_entry() | [snmpa_conf:usm_entry()]} |
+    {ok, snmpa_conf:usm_entry() | [snmpa_conf:usm_entry()], NewExtraInfo} when
+      TargetName      :: string(),
+      ManagerEngineID :: string(),
+      ExtraInfo       :: term(),
+      NewExtraInfo    :: term().
+      
 verify(Mod) ->
     snmp_misc:verify_behaviour(?MODULE, Mod).
+
diff --git a/lib/snmp/src/agent/snmpa_error_report.erl b/lib/snmp/src/agent/snmpa_error_report.erl
index 8f28eac653..6b281693e5 100644
--- a/lib/snmp/src/agent/snmpa_error_report.erl
+++ b/lib/snmp/src/agent/snmpa_error_report.erl
@@ -1,7 +1,7 @@
 %%
 %% %CopyrightBegin%
 %% 
-%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2019. All Rights Reserved.
 %% 
 %% Licensed under the Apache License, Version 2.0 (the "License");
 %% you may not use this file except in compliance with the License.
@@ -19,10 +19,12 @@
 %%
 -module(snmpa_error_report).
 
--export([behaviour_info/1]).
+-callback config_err(Format, Args) ->
+    snmp:void() when
+      Format :: string(),
+      Args   :: [term()].
 
-behaviour_info(callbacks) ->
-    [{user_err,   2},
-     {config_err, 2}];
-behaviour_info(_) ->
-    undefined.
+-callback user_err(Format, Args) ->
+    snmp:void() when
+      Format :: string(),
+      Args   :: [term()].
diff --git a/lib/snmp/src/agent/snmpa_get.erl b/lib/snmp/src/agent/snmpa_get.erl
index e67975a67d..b35a57970e 100644
--- a/lib/snmp/src/agent/snmpa_get.erl
+++ b/lib/snmp/src/agent/snmpa_get.erl
@@ -168,6 +168,7 @@ do_get_subagents([], Res, _IsNotification) ->
 %%          #varbind |
 %%          List of #varbind
 %%-----------------------------------------------------------------
+
 try_get(IVb, IsNotification) when is_record(IVb, ivarbind) ->
     ?vtrace("try_get(ivarbind) -> entry with"
 	    "~n   IVb: ~p", [IVb]),
@@ -186,6 +187,7 @@ try_get({TableOid, TableVbs}, IsNotification) ->
 	    NVbs ++ NoAccessVbs
     end.
 
+
 %%-----------------------------------------------------------------
 %% Make sure all requested columns are accessible.
 %%-----------------------------------------------------------------
diff --git a/lib/snmp/src/agent/snmpa_local_db.erl b/lib/snmp/src/agent/snmpa_local_db.erl
index f481641242..c9093fcdb9 100644
--- a/lib/snmp/src/agent/snmpa_local_db.erl
+++ b/lib/snmp/src/agent/snmpa_local_db.erl
@@ -733,16 +733,16 @@ dets_backup(close, _Cont, _D, B) ->
     ok;
 dets_backup(read, Cont1, D, B) ->
     case dets:bchunk(D, Cont1) of
+	{error, _} = ERROR ->
+	    ERROR;
+	'$end_of_table' ->
+	    dets:close(B),
+	    end_of_input;
 	{Cont2, Data} ->
 	    F = fun(Arg) ->
 			dets_backup(Arg, Cont2, D, B)
 		end,
-	    {Data, F};
-	'$end_of_table' ->
-	    dets:close(B),
-	    end_of_input;
-	Error ->
-	    Error
+	    {Data, F}
     end.
 
 
diff --git a/lib/snmp/src/agent/snmpa_mib_storage.erl b/lib/snmp/src/agent/snmpa_mib_storage.erl
index ed0607fb84..d46dab0be0 100644
--- a/lib/snmp/src/agent/snmpa_mib_storage.erl
+++ b/lib/snmp/src/agent/snmpa_mib_storage.erl
@@ -1,7 +1,7 @@
 %%
 %% %CopyrightBegin%
 %%
-%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2019. All Rights Reserved.
 %%
 %% Licensed under the Apache License, Version 2.0 (the "License");
 %% you may not use this file except in compliance with the License.
@@ -120,7 +120,7 @@
 
 -callback match_object(TabId   :: mib_storage_table_id(), 
 		       Pattern :: ets:match_pattern()) ->
-    {ok, Recs :: [tuple()]} | {error, Reason :: term()}.
+    Recs :: [tuple()] | {error, Reason :: term()}.
 
 
 %% ---------------------------------------------------------------
@@ -133,7 +133,7 @@
 
 -callback match_delete(TabId   :: mib_storage_table_id(), 
 		       Pattern :: ets:match_pattern()) ->
-    {ok, Recs :: [tuple()]} | {error, Reason :: term()}.
+    Recs :: [tuple()] | {error, Reason :: term()}.
 
 
 %% ---------------------------------------------------------------
diff --git a/lib/snmp/src/agent/snmpa_mib_storage_dets.erl b/lib/snmp/src/agent/snmpa_mib_storage_dets.erl
index 2459b6bc3e..0fcb8083f5 100644
--- a/lib/snmp/src/agent/snmpa_mib_storage_dets.erl
+++ b/lib/snmp/src/agent/snmpa_mib_storage_dets.erl
@@ -1,7 +1,7 @@
 %%
 %% %CopyrightBegin%
 %%
-%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2019. All Rights Reserved.
 %%
 %% Licensed under the Apache License, Version 2.0 (the "License");
 %% you may not use this file except in compliance with the License.
@@ -291,16 +291,16 @@ dets_backup(close, _Cont, _ID, B) ->
     ok;
 dets_backup(read, Cont1, ID, B) ->
     case dets:bchunk(ID, Cont1) of
+        {error, _} = ERROR ->
+            ERROR;
+	'$end_of_table' ->
+	    dets:close(B),
+	    end_of_input;
 	{Cont2, Data} ->
 	    F = fun(Arg) ->
 			dets_backup(Arg, Cont2, ID, B)
 		end,
-	    {Data, F};
-	'$end_of_table' ->
-	    dets:close(B),
-	    end_of_input;
-	Error ->
-	    Error
+	    {Data, F}
     end.
 
 
diff --git a/lib/snmp/src/agent/snmpa_mib_storage_ets.erl b/lib/snmp/src/agent/snmpa_mib_storage_ets.erl
index 68dfa83247..173dac276e 100644
--- a/lib/snmp/src/agent/snmpa_mib_storage_ets.erl
+++ b/lib/snmp/src/agent/snmpa_mib_storage_ets.erl
@@ -1,7 +1,7 @@
 %%
 %% %CopyrightBegin%
 %%
-%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2019. All Rights Reserved.
 %%
 %% Licensed under the Apache License, Version 2.0 (the "License");
 %% you may not use this file except in compliance with the License.
@@ -189,7 +189,8 @@ read(#tab{id = ID}, Key) ->
 write(#tab{id = ID, rec_name = RecName}, Rec) 
   when (is_tuple(Rec) andalso (element(1, Rec) =:= RecName)) ->
     ?vtrace("write to table ~p", [ID]),
-    ets:insert(ID, Rec).
+    ets:insert(ID, Rec),
+    ok.
 
 
 %% ---------------------------------------------------------------
@@ -213,7 +214,9 @@ delete(#tab{id = ID, file = File}) ->
 %% ---------------------------------------------------------------
 delete(#tab{id = ID}, Key) ->
     ?vtrace("delete from table ~p: ~p", [ID, Key]),
-    ets:delete(ID, Key).
+    ets:delete(ID, Key),
+    ok.
+        
 
 
 %% ---------------------------------------------------------------
diff --git a/lib/snmp/src/agent/snmpa_network_interface.erl b/lib/snmp/src/agent/snmpa_network_interface.erl
index 699fbde671..24985c113e 100644
--- a/lib/snmp/src/agent/snmpa_network_interface.erl
+++ b/lib/snmp/src/agent/snmpa_network_interface.erl
@@ -1,7 +1,7 @@
 %%
 %% %CopyrightBegin%
 %% 
-%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2019. All Rights Reserved.
 %% 
 %% Licensed under the Apache License, Version 2.0 (the "License");
 %% you may not use this file except in compliance with the License.
@@ -19,28 +19,56 @@
 %%
 -module(snmpa_network_interface).
 
--export([behaviour_info/1]).
-
-behaviour_info(callbacks) ->
-    [{start_link,        4}, 
-     {get_log_type,      1},
-     {set_log_type,      2},
-     {get_request_limit, 1},
-     {set_request_limit, 2},
-     {info,              1}, 
-     {verbosity,         2}];
-behaviour_info(_) ->
-    undefined.
-
-
-%% behaviour_info(callbacks) ->
-%%     [{start_link,        4}, 
-%%      {send_pdu,          5},
-%%      {send_response_pdu, 6},
-%%      {discard_pdu,       6},
-%%      {send_pdu_req,      6},
-%%      {verbosity,         2}, 
-%%      {change_log_type, 2}];
-%% behaviour_info(_) ->
-%%     undefined.
+%% Note that this behaviour is not enough!
+%% There is also a set of mandatory messages which the
+%% network interface entity must be able to receive and
+%% be able to send. See the documentation for more info.
+
+-callback start_link(Prio, NoteStore, MasterAgent, Opts) ->
+    {ok, Pid} | {error, Reason} when
+      Prio        :: low | normal | high, % priority_level(),
+      NoteStore   :: pid(),
+      MasterAgent :: pid(),
+      Opts        :: [Option],
+      Option      :: {verbosity, snmp:verbosity()} |
+                     {versions,  [snmp:version()]} |
+                     term(),
+      Pid         :: pid(),
+      Reason      :: term().
+
+-callback info(Pid) ->
+    Info when
+      Pid   :: pid(),
+      Info  :: [{Key, Value}],
+      Key   :: term(),
+      Value :: term().
+
+-callback verbosity(Pid, Verbosity) ->
+    snmp:void() when
+      Pid       :: pid(),
+      Verbosity :: snmp:verbosity().
+
+-callback get_log_type(Pid) ->
+    {ok, LogType} | {error, Reason} when
+      Pid     :: pid(),
+      LogType :: snmp:atl_type(),
+      Reason  :: term().
+
+-callback set_log_type(Pid, NewType) ->
+    {ok, OldType} | {error, Reason} when
+      Pid     :: pid(),
+      NewType :: snmp:atl_type(),
+      OldType :: snmp:atl_type(),
+      Reason  :: term().
+
+-callback get_request_limit(Pid) ->
+    {ok, Limit} when
+      Pid   :: pid(),
+      Limit :: non_neg_integer() | infinity.
+
+-callback set_request_limit(Pid, NewLimit) ->
+    {ok, OldLimit} when
+      Pid      :: pid(),
+      NewLimit :: non_neg_integer() | infinity,
+      OldLimit :: non_neg_integer() | infinity.
 
diff --git a/lib/snmp/src/agent/snmpa_set_mechanism.erl b/lib/snmp/src/agent/snmpa_set_mechanism.erl
index 2f24f38092..4eee7d7257 100644
--- a/lib/snmp/src/agent/snmpa_set_mechanism.erl
+++ b/lib/snmp/src/agent/snmpa_set_mechanism.erl
@@ -1,7 +1,7 @@
 %%
 %% %CopyrightBegin%
 %% 
-%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2019. All Rights Reserved.
 %% 
 %% Licensed under the Apache License, Version 2.0 (the "License");
 %% you may not use this file except in compliance with the License.
@@ -19,18 +19,26 @@
 %%
 -module(snmpa_set_mechanism).
 
--export([behaviour_info/1]).
- 
-behaviour_info(callbacks) ->
-    [{do_set, 2}, {do_subagent_set, 1}];
-behaviour_info(_) ->
-    undefined.
+%% -export([behaviour_info/1]).
  
+%% behaviour_info(callbacks) ->
+%%     [{do_set, 2}, {do_subagent_set, 1}];
+%% behaviour_info(_) ->
+%%     undefined.
+
 
 %%-----------------------------------------------------------------
 %% do_set(MibView, UnsortedVarbinds) 
 %%-----------------------------------------------------------------
 
+-callback do_set(MibView, UnsortedVBs) ->
+    {noError, 0} | {ErrStatus, ErrIndex} when
+      MibView     :: snmp_view_based_acm_mib:mibview(),
+      UnsortedVBs :: [snmp:varbind()],
+      ErrStatus   :: snmp:error_status(),
+      ErrIndex    :: snmp:error_index().
+
+
 %%-----------------------------------------------------------------
 %% do_subagent_set(Args)
 %% 
@@ -41,3 +49,18 @@ behaviour_info(_) ->
 %%   [phase_two, set, UnsortedVarbinds]
 %%   [phase_two, undo, UnsortedVarbinds]
 %%-----------------------------------------------------------------
+
+%% -callback do_subagent_set(Args) ->
+%%     {noError, 0} | {ErrStatus, ErrIndex} when
+%%       Args        :: [phase_one, UnsortedVBs] |
+%%                      [phase_two, set, UnsortedVBs] |
+%%                      [phase_two, undo, UnsortedVBs],
+%%       ErrStatus   :: snmp:error_status(),
+%%       ErrIndex    :: snmp:error_index(),
+%%       UnsortedVBs :: [snmp:varbind()].
+
+-callback do_subagent_set(Args) ->
+    {noError, 0} | {ErrStatus, ErrIndex} when
+      Args      :: list(),
+      ErrStatus :: snmp:error_status(),
+      ErrIndex  :: snmp:error_index().
diff --git a/lib/snmp/src/agent/snmpa_trap.erl b/lib/snmp/src/agent/snmpa_trap.erl
index f741c3aaa9..119207c76b 100644
--- a/lib/snmp/src/agent/snmpa_trap.erl
+++ b/lib/snmp/src/agent/snmpa_trap.erl
@@ -1115,7 +1115,7 @@ transform_taddrs(TAddrs) ->
 
 %% v2
 transform_taddr({?snmpUDPDomain, Addr}) ->
-    transform_taddr(transportDomainIdpIpv4, Addr);
+    transform_taddr(transportDomainUdpIpv4, Addr);
 transform_taddr({?transportDomainUdpIpv4, Addr}) ->
     transform_taddr(transportDomainUdpIpv4, Addr);
 transform_taddr({?transportDomainUdpIpv6, Addr}) ->
diff --git a/lib/snmp/src/misc/snmp_conf.erl b/lib/snmp/src/misc/snmp_conf.erl
index d73291764d..20b7af0373 100644
--- a/lib/snmp/src/misc/snmp_conf.erl
+++ b/lib/snmp/src/misc/snmp_conf.erl
@@ -164,6 +164,14 @@ no_filter(X) -> X.
 %% An ordering function (A, B) shall return true iff
 %% A is less than or equal to B i.e shall return
 %% false iff A is to be ordered after B.
+
+-spec keyorder(N, A, B, Keys) ->
+                      boolean() when
+      N    :: integer(),
+      A    :: tuple(),
+      B    :: tuple(),
+      Keys :: maybe_improper_list().
+
 keyorder(N, A, B, _) when element(N, A) == element(N, B) ->
     true;
 keyorder(N, A, B, [Key | _])
diff --git a/lib/snmp/src/misc/snmp_config.erl b/lib/snmp/src/misc/snmp_config.erl
index 26e85897f4..3104f2a096 100644
--- a/lib/snmp/src/misc/snmp_config.erl
+++ b/lib/snmp/src/misc/snmp_config.erl
@@ -96,17 +96,15 @@
 	]).
 
 
--export_type([void/0,
-	      order_config_entry_function/0,
+-export_type([
+              order_config_entry_function/0,
 	      check_config_entry_function/0,
-	      write_config_function/0]).
+	      write_config_function/0
+             ]).
 
 
 %%----------------------------------------------------------------------
 
--type void() :: term(). % Any value - ignored
-
-
 %%----------------------------------------------------------------------
 %% Handy SNMP configuration
 %%----------------------------------------------------------------------
@@ -1106,6 +1104,7 @@ verify_sec_type(ST)         -> {error, "invalid security type: " ++ ST}.
 verify_address(A) ->
     verify_address(A, snmpUDPDomain).
 
+-dialyzer({nowarn_function, verify_address/2}). % Future compat
 verify_address(A, snmpUDPDomain = _Domain) ->
     do_verify_address(A, inet);
 verify_address(A, transportDomainUdpIpv4 = _Domain) ->
diff --git a/lib/snmp/src/misc/snmp_log.erl b/lib/snmp/src/misc/snmp_log.erl
index 9ae5c1109b..8a4dfa621b 100644
--- a/lib/snmp/src/misc/snmp_log.erl
+++ b/lib/snmp/src/misc/snmp_log.erl
@@ -1,7 +1,7 @@
 %% 
 %% %CopyrightBegin%
 %%
-%% Copyright Ericsson AB 1997-2018. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2019. All Rights Reserved.
 %%
 %% Licensed under the Apache License, Version 2.0 (the "License");
 %% you may not use this file except in compliance with the License.
@@ -342,10 +342,9 @@ validate_loop({Cont, Terms, BadBytes}, Log, Validator, PrevTS, PrevSN) ->
     ?vtrace("validate_loop -> "
 	    "~n   NextTS: ~p"
 	    "~n   NextSN: ~p", [NextTS, NextSN]),
-    validate_loop(disk_log:chunk(Log, Cont), Log, Validator, NextTS, NextSN);
--dialyzer({nowarn_function, validate_loop/5}). % Future compat
-validate_loop(Error, _Log, _Write, _PrevTS, _PrevSN) ->
-    Error.
+    validate_loop(disk_log:chunk(Log, Cont), Log, Validator, NextTS, NextSN).
+%% validate_loop(Error, _Log, _Write, _PrevTS, _PrevSN) ->
+%%     Error.
     
 
 %% -- log ---
@@ -925,14 +924,7 @@ f(TimeStamp, SeqNo,
 	end,
     format_tab(
       "~w ~s - ~s [~s]~s ~w\n~s",
-      [Class, AddrStr, HdrStr, TimeStamp, SeqNo, Vsn, Str]);
-f(TimeStamp, SeqNo, Msg, AddrStr, _Mib) ->
-    io:format("<ERROR> Unexpected data: "
-              "~n   TimeStamp: ~s~s"
-              "~n   Msg:       ~p"
-              "~n   AddrStr:   ~p"
-              "~n", [TimeStamp, SeqNo, Msg, AddrStr]),
-    throw({error, 'invalid-message'}).
+      [Class, AddrStr, HdrStr, TimeStamp, SeqNo, Vsn, Str]).
 
 f(F, A) ->
     lists:flatten(io_lib:format(F, A)).
-- 
2.16.4

openSUSE Build Service is sponsored by