[erlang-bugs] SNMP manager: strange behaviour

Денис Артёмов <>
Tue Dec 9 13:29:16 CET 2008


This source code if work fine for me:

-module(test_snmp).

-behaviour(snmpm_user).

-export([
    start/1,
    handle_error/3, handle_agent/4, handle_pdu/5, handle_trap/4, handle_inform/4, handle_report/4
]).

-define(ENGINE_ID, [16#50, 16#6f, 16#6c, 16#79, 16#43, 16#6f, 16#6d, 16#2d, 16#33, 16#30, 16#30, 16#55, 16#2d, 16#31, 16#47, 16#54]).
-define(USER, lalala).
-define(USER_NAME, "username").

start(_Arg) ->
    catch start_safe(),
    snmpm:stop().

start_safe() ->
    ok = crypto:start(),
    
    ok = snmpm:start(),
    ok = snmpm:register_user(?USER, ?MODULE, undefined),
    
    AuthKey = snmp:passwd2localized_key(md5, "123456789", ?ENGINE_ID),
    PrivKey = snmp:passwd2localized_key(md5, "123456789", ?ENGINE_ID),
    
    ok = snmpm:register_usm_user(?ENGINE_ID, ?USER_NAME, 
        [
            {auth,     usmHMACMD5AuthProtocol},
            {sec_name, ?USER_NAME            },
            {auth_key, AuthKey               },
            {priv,     usmDESPrivProtocol    },
            {priv_key, PrivKey               }
        ]
    ),
    
    ok = snmpm:register_agent(
           ?USER, 
           [192,168,0,179], 
           [
                {version,   v3         },
                {engine_id, ?ENGINE_ID },
                {sec_model, usm        },
                {sec_name,  ?USER_NAME },
                {sec_level, authPriv   }
           ]
    ),
    
% If to uncomment code below, error occurs when calling snmpm:g!!!
%    ok = snmpm:register_agent(
%           ?USER, 
%           [192,168,0,180], 
%           [
%                {version,   v1      },
%                {community, "public"}
%           ]
%    ),
    
    Result1 = snmpm:g(?USER, {192,168,0,179}, [[1,3,6,1,2,1,1,1,0]]),
    io:format("Result1=~p~n", [Result1]),
    
    Result2 = snmpm:g(?USER, {192,168,0,179}, [[1,3,6,1,2,1,1,1,0]]),
    io:format("Result2=~p~n", [Result2]),
    
    ok. 
    

handle_error(ReqId, Reason, UserData) ->
    io:format
    (
        "handle_error(ReqId=~p, Reason=~p, UserData=~p)~n", 
        [ReqId, Reason, UserData]
       ),
    ignore.

handle_agent(Addr, Port, SnmpInfo, UserData) ->
    io:format
    (
        "handle_agent(Addr=~p, Port=~p, SnmpInfo=~p, UserData=~p)~n", 
        [Addr, Port, SnmpInfo, UserData]
    ),
    ignore.

handle_pdu(Addr, Port, ReqId, SnmpResponse, UserData) ->
    io:format
    (
        "handle_pdu(Addr=~p, Port=~p, ReqId=~p, SnmpResponse=~p, UserData=~p)~n", 
        [Addr, Port, ReqId, SnmpResponse, UserData]
       ),
    ignore.

handle_trap(Addr, Port, SnmpTrapInfo, UserData) ->
    io:format
    (
        "handle_trap(Addr=~p, Port=~p, SnmpTrapInfo=~p, UserData=~p)~n",
        [Addr, Port, SnmpTrapInfo, UserData]
    ),
    ignore.

handle_inform(Addr, Port, SnmpInfo, UserData) ->
    io:format
    (
        "handle_inform(Addr=~p, Port=~p, SnmpInfo=~p, UserData=~p)~n",
        [Addr, Port, SnmpInfo, UserData]
    ),
    ignore.

handle_report(Addr, Port, SnmpInfo, UserData) ->
    io:format
    (
        "handle_report(Addr=~p, Port=~p, SnmpInfo=~p, UserData=~p)~n",
        [Addr, Port, SnmpInfo, UserData]
    ),
    ignore.


but if to uncomment code where another agent is registered with SNMP v1, then info report appears in the screen after calling of snmpm:g function:

Eshell V5.6.5  (abort with ^G)
()1> Result1={error,{send_failed,1628668040,unknownSecurityName}}
()1> Result2={error,{send_failed,1628668041,unknownSecurityName}}
()1>
=ERROR REPORT==== 9-Dec-2008::17:15:25 ===
[ snmp : manager : snmpm_mpd : <0.57.0> ]
MPD: CONFIG ERROR: unknownSecurityName (message: {message,'version-3',
                                                  {v3_hdr,1393084258,484,
                                                   [7],
                                                   3,undefined,undefined},
                                                  [48,50,4,16,80,111,108,121,
                                                   67,111,109,45,51,48,48,85,
                                                   45,49,71,84,4,0,160,28,2,4,
                                                   97,19,128,136,2,1,0,2,1,0,
                                                   48,14,48,12,6,8,43,6,1,2,1,
                                                   1,1,0,5,0]})

()1>
=ERROR REPORT==== 9-Dec-2008::17:15:25 ===
[ snmp : manager : snmpm_mpd : <0.57.0> ]
MPD: CONFIG ERROR: unknownSecurityName (message: {message,'version-3',
                                                  {v3_hdr,1393084259,484,
                                                   [7],
                                                   3,undefined,undefined},
                                                  [48,50,4,16,80,111,108,121,
                                                   67,111,109,45,51,48,48,85,
                                                   45,49,71,84,4,0,160,28,2,4,
                                                   97,19,128,137,2,1,0,2,1,0,
                                                   48,14,48,12,6,8,43,6,1,2,1,
                                                   1,1,0,5,0]})

text of my manager.conf is:
{port,             162}.
{engine_id,        "manager id"}.
{max_message_size, 484}.

Is it bug in my code or in erlang SNMP library? How to force to register both snmp-v1 and snmp-v3 agents without errors?




More information about the erlang-bugs mailing list