From 0ad38017c9346733be12db6494264065de7f661b Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Fri, 8 Jul 2011 15:38:12 +0200
Subject: [agent] Did not handle transport domains properly in some cases, for
 instance trap sending.

OTP-9400
---
 lib/snmp/src/agent/snmpa_mpd.erl | 95 +++++++++++++++++++++++++---------------
 1 file changed, 60 insertions(+), 35 deletions(-)

(limited to 'lib/snmp')

diff --git a/lib/snmp/src/agent/snmpa_mpd.erl b/lib/snmp/src/agent/snmpa_mpd.erl
index 14f62b12f3..d71786b4a7 100644
--- a/lib/snmp/src/agent/snmpa_mpd.erl
+++ b/lib/snmp/src/agent/snmpa_mpd.erl
@@ -32,6 +32,7 @@
 -include("SNMP-MPD-MIB.hrl").
 -include("SNMPv2-TM.hrl").
 -include("SNMP-FRAMEWORK-MIB.hrl").
+-include("TRANSPORT-ADDRESS-MIB.hrl").
 
 -define(VMODULE,"MPD").
 -include("snmp_verbosity.hrl").
@@ -981,12 +982,15 @@ generate_discovery_msg2(NoteStore, Pdu,
 discovery_note_timeout(Timeout) ->
     (Timeout div 100) + 1.
     
-generate_discovery_msg(NoteStore, {?snmpUDPDomain, [A,B,C,D,U1,U2]}, 
+generate_discovery_msg(NoteStore, {TDomain, TAddress}, 
 		       Pdu, ScopedPduBytes, 
 		       ContextEngineID, ManagerEngineID, 
 		       SecModel, SecName, SecLevelFlag, 
 		       InitialUserName, 
 		       ContextName, Timeout) ->
+
+    {ok, {_Domain, Address}} = transform_taddr(TDomain, TAddress),
+    
     %% 7.1.7
     ?vdebug("generate_discovery_msg -> 7.1.7 (~w)", [ManagerEngineID]),
     MsgID     = generate_msg_id(),
@@ -1027,7 +1031,7 @@ generate_discovery_msg(NoteStore, {?snmpUDPDomain, [A,B,C,D,U1,U2]},
 	    %% Log(Packet),
 	    inc_snmp_out_vars(Pdu),
 	    ?vdebug("generate_discovery_msg -> done", []),
-	    {Packet, {{A,B,C,D}, U1 bsl 8 + U2}};
+	    {Packet, Address};
 
 	Error ->
 	    throw(Error)
@@ -1057,6 +1061,29 @@ generate_sec_discovery_msg(Message, SecModule,
     end.
 	
     
+transform_taddr(?snmpUDPDomain, TAddress) ->
+    transform_taddr(?transportDomainUdpIpv4, TAddress);
+transform_taddr(?transportDomainUdpIpv4, [A, B, C, D, P1, P2]) ->
+    Domain  = transportDomainUdpIpv4, 
+    Addr    = {A,B,C,D}, 
+    Port    = P1 bsl 8 + P2, 
+    Address = {Addr, Port},
+    {ok, {Domain, Address}};
+transform_taddr(?transportDomainUdpIpv4, BadAddr) ->
+    {error, {bad_transportDomainUdpIpv4_address, BadAddr}};
+transform_taddr(?transportDomainUdpIpv6, 
+		[A1, A2, A3, A4, A5, A6, A7, A8, P1, P2]) ->
+    Domain  = transportDomainUdpIpv6, 
+    Addr    = {A1, A2, A3, A4, A5, A6, A7, A8},
+    Port    = P1 bsl 8 + P2,
+    Address = {Addr, Port},
+    {ok, {Domain, Address}};
+transform_taddr(?transportDomainUdpIpv6, BadAddr) ->
+    {error, {bad_transportDomainUdpIpv6_address, BadAddr}};
+transform_taddr(BadTDomain, BadTAddress) ->
+    {error, {bad_domain, BadTDomain, BadTAddress}}.
+
+
 process_taddrs(Dests) ->
     ?vtrace("process_taddrs -> entry with"
 	    "~n   Dests: ~p", [Dests]),
@@ -1068,42 +1095,40 @@ process_taddrs([], Acc) ->
     lists:reverse(Acc);
 
 %% v3
-process_taddrs([{{?snmpUDPDomain, [A,B,C,D,U1,U2]}, SecData} | T], Acc) ->
+process_taddrs([{{TDomain, TAddress}, SecData} | T], Acc) ->
     ?vtrace("process_taddrs -> entry when v3 with"
-	    "~n   A:       ~p"
-	    "~n   B:       ~p"
-	    "~n   C:       ~p"
-	    "~n   D:       ~p"
-	    "~n   U1:      ~p"
-	    "~n   U2:      ~p"
-	    "~n   SecData: ~p", [A, B, C, D, U1, U2, SecData]),
-    Entry = {{snmpUDPDomain, {{A,B,C,D}, U1 bsl 8 + U2}}, SecData}, 
-    process_taddrs(T, [Entry | Acc]);
-%% Bad v3
-process_taddrs([{{TDomain, TAddr}, _SecData} | T], Acc) ->
-    ?vtrace("process_taddrs -> entry when bad v3 with"
-	    "~n   TDomain: ~p"
-	    "~n   TAddr:   ~p", [TDomain, TAddr]),
-    user_err("Bad TDomain/TAddr: ~w/~w", [TDomain, TAddr]),
-    process_taddrs(T, Acc);
+	    "~n   TDomain:  ~p"
+	    "~n   TAddress: ~p"
+	    "~n   SecData:  ~p", [TDomain, TAddress, SecData]),
+    case transform_taddr(TDomain, TAddress) of
+	{ok, DestAddr} ->
+	    ?vtrace("process_taddrs -> transformed: "
+		    "~n   DestAddr: ~p", [DestAddr]),
+	    Entry = {DestAddr, SecData}, 
+	    process_taddrs(T, [Entry | Acc]);
+	{error, Reason} ->
+	    ?vinfo("Failed transforming v3 domain and address"
+		   "~n   Reason:  ~p", [Reason]),
+	    user_err("Bad TDomain/TAddress: ~w/~w", [TDomain, TAddress]),
+	    process_taddrs(T, Acc)
+    end;
 %% v1 & v2
-process_taddrs([{?snmpUDPDomain, [A,B,C,D,U1,U2]} | T], Acc) ->
+process_taddrs([{TDomain, TAddress} | T], Acc) ->
     ?vtrace("process_taddrs -> entry when v1/v2 with"
-	    "~n   A:  ~p"
-	    "~n   B:  ~p"
-	    "~n   C:  ~p"
-	    "~n   D:  ~p"
-	    "~n   U1: ~p"
-	    "~n   U2: ~p", [A, B, C, D, U1, U2]),
-    Entry = {snmpUDPDomain, {{A,B,C,D}, U1 bsl 8 + U2}}, 
-    process_taddrs(T, [Entry | Acc]);
-%% Bad v1 or v2
-process_taddrs([{TDomain, TAddr} | T], Acc) ->
-    ?vtrace("process_taddrs -> entry when bad v1/v2 with"
-	    "~n   TDomain: ~p"
-	    "~n   TAddr:   ~p", [TDomain, TAddr]),
-    user_err("Bad TDomain/TAddr: ~w/~w", [TDomain, TAddr]),
-    process_taddrs(T, Acc);
+	    "~n   TDomain:  ~p"
+	    "~n   TAddress: ~p", [TDomain, TAddress]),
+    case transform_taddr(TDomain, TAddress) of
+	{ok, DestAddr} ->
+	    ?vtrace("process_taddrs -> transformed: "
+		    "~n   DestAddr: ~p", [DestAddr]),
+	    Entry = DestAddr, 
+	    process_taddrs(T, [Entry | Acc]);
+	{error, Reason} ->
+	    ?vinfo("Failed transforming v1/v2 domain and address: "
+		   "~n   Reason:  ~p", [Reason]),
+	    user_err("Bad TDomain/TAddress: ~w/~w", [TDomain, TAddress]),
+	    process_taddrs(T, Acc)
+    end;
 process_taddrs(Crap, Acc) ->
     throw({error, {taddrs_crap, Crap, Acc}}).
 
-- 
cgit v1.2.3


From 1caa7dd1b8df39d487c43a5c11987fbcc4640529 Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Fri, 8 Jul 2011 15:39:04 +0200
Subject: [agent] Wrong default transport domain, snmpUDPDomain, instead of
 transportDomainUdpIpv4.

OTP-9425
---
 lib/snmp/src/agent/snmp_target_mib.erl | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'lib/snmp')

diff --git a/lib/snmp/src/agent/snmp_target_mib.erl b/lib/snmp/src/agent/snmp_target_mib.erl
index 77910541a2..25b3dab088 100644
--- a/lib/snmp/src/agent/snmp_target_mib.erl
+++ b/lib/snmp/src/agent/snmp_target_mib.erl
@@ -53,7 +53,7 @@
 %%-----------------------------------------------------------------
 
 default_domain() ->
-    snmpUDPDomain.
+    transportDomainUdpIpv4.
 
 
 %%-----------------------------------------------------------------
@@ -436,7 +436,8 @@ is_valid_tag(TDomain, TAddress, Tag, Key) ->
 
 %% TargAddrs =
 %%     [{TagList, TargetAddr, TargetAddrName, TargetParams, Timeout, Retry}]
-%%   TargetAddr = {TDomain, TAddr}; e.g. {?snmpUDPDomain, IpAndUdpPortAsList}
+%%   TargetAddr = {TDomain, TAddr}; e.g. 
+%%                {?transportDomainUdpIpv4, IpAndUdpPortAsList}
 get_target_addrs() ->
     get_target_addrs([], db(snmpTargetAddrTable), []).
 
-- 
cgit v1.2.3


From 8c4b1a7189b918a298e81014b3309e8d129aeed9 Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Fri, 8 Jul 2011 15:39:52 +0200
Subject: [agent] Did not handle transport domains properly in some cases, for
 instance trap sending. OTP-9400

[agent] Wrong default transport domain, snmpUDPDomain, instead
of transportDomainUdpIpv4.
OTP-9425
---
 lib/snmp/doc/src/notes.xml      | 51 +++++++++++++++++++++++++++++++++++++++++
 lib/snmp/src/app/snmp.appup.src | 12 ++++++++++
 lib/snmp/vsn.mk                 |  2 +-
 3 files changed, 64 insertions(+), 1 deletion(-)

(limited to 'lib/snmp')

diff --git a/lib/snmp/doc/src/notes.xml b/lib/snmp/doc/src/notes.xml
index 6a20d8ee3a..cf9d2b3834 100644
--- a/lib/snmp/doc/src/notes.xml
+++ b/lib/snmp/doc/src/notes.xml
@@ -32,6 +32,57 @@
     <file>notes.xml</file>
   </header>
 
+  <section>
+    <title>SNMP Development Toolkit 4.20.1</title>
+    <p>Version 4.20.1 supports code replacement in runtime from/to
+      version 4.20, 4.19 and 4.18.</p>
+
+    <section>
+      <title>Improvements and new features</title>
+      <p>-</p>
+<!--
+      <list type="bulleted">
+        <item>
+          <p>Added type specs for functions that do not return. </p>
+          <p>Kostis Sagonas</p>
+          <p>Own Id: OTP-9208</p>
+        </item>
+      </list>
+-->
+    </section>
+
+    <section>
+      <title>Fixed Bugs and Malfunctions</title>
+<!--
+      <p>-</p> 
+-->
+
+      <list type="bulleted">
+        <item>
+          <p>[agent] Did not handle transport domains properly in some cases, 
+	  for instance trap sending. </p>
+	  <p>Own Id: OTP-9400</p>
+	</item>
+
+        <item>
+          <p>[agent] Wrong default transport domain, snmpUDPDomain, instead
+	  of transportDomainUdpIpv4. </p>
+	  <p>Own Id: OTP-9425</p>
+          <p>Aux Id: Seq 11874</p>
+	</item>
+
+      </list>
+    </section>
+
+
+    <section>
+      <title>Incompatibilities</title>
+      <p>-</p>
+    </section>
+
+  </section> <!-- 4.20.1 -->
+
+
   <section>
     <title>SNMP Development Toolkit 4.20</title>
     <p>Version 4.20 supports code replacement in runtime from/to
diff --git a/lib/snmp/src/app/snmp.appup.src b/lib/snmp/src/app/snmp.appup.src
index 5deb40be0f..9d10db67a1 100644
--- a/lib/snmp/src/app/snmp.appup.src
+++ b/lib/snmp/src/app/snmp.appup.src
@@ -22,6 +22,12 @@
 %% ----- U p g r a d e -------------------------------------------------------
 
  [
+  {"4.20", 
+   [
+    {load_module, snmp_target_mib, soft_purge, soft_purge, []}, 
+    {load_module, snmpa_mpd, soft_purge, soft_purge, []}
+   ]
+  }, 
   {"4.19", 
    [
     {load_module, snmpa, soft_purge, soft_purge, []}, 
@@ -109,6 +115,12 @@
 %% ------D o w n g r a d e ---------------------------------------------------
 
  [
+  {"4.20", 
+   [
+    {load_module, snmp_target_mib, soft_purge, soft_purge, []}, 
+    {load_module, snmpa_mpd, soft_purge, soft_purge, []}
+   ]
+  }, 
   {"4.19", 
    [
     {load_module, snmpa, soft_purge, soft_purge, []}, 
diff --git a/lib/snmp/vsn.mk b/lib/snmp/vsn.mk
index 29228fc59b..fe3ba2c04a 100644
--- a/lib/snmp/vsn.mk
+++ b/lib/snmp/vsn.mk
@@ -17,6 +17,6 @@
 #
 # %CopyrightEnd%
 
-SNMP_VSN = 4.20
+SNMP_VSN = 4.20.1
 PRE_VSN  =
 APP_VSN  = "snmp-$(SNMP_VSN)$(PRE_VSN)"
-- 
cgit v1.2.3