126
126
#message{version = 'version-1', vsn_hdr = Community, data = Data}
127
127
when State#state.v1 =:= true ->
128
?vlog("~n v1, community: ~s", [Community]),
128
?vlog("v1, community: ~s", [Community]),
129
129
HS = ?empty_msg_size + length(Community),
130
130
v1_v2c_proc('version-1', NoteStore, Community, TDomain, TAddress,
131
131
Data, HS, Log, Packet);
133
133
#message{version = 'version-2', vsn_hdr = Community, data = Data}
134
134
when State#state.v2c =:= true ->
135
?vlog("~n v2c, community: ~s", [Community]),
135
?vlog("v2c, community: ~s", [Community]),
136
136
HS = ?empty_msg_size + length(Community),
137
137
v1_v2c_proc('version-2', NoteStore, Community, TDomain, TAddress,
138
138
Data, HS, Log, Packet);
140
140
#message{version = 'version-3', vsn_hdr = V3Hdr, data = Data}
141
141
when State#state.v3 =:= true ->
142
?vlog("~n v3, msgID: ~p, msgFlags: ~p, msgSecModel: ~p",
142
?vlog("v3, msgID: ~p, msgFlags: ~p, msgSecModel: ~p",
143
143
[V3Hdr#v3_hdr.msgID,
144
144
V3Hdr#v3_hdr.msgFlags,
145
145
V3Hdr#v3_hdr.msgSecurityModel]),
331
331
length(ContextName) - length(ContextEngineID),
332
332
?vdebug("v3_proc -> PDU type: ~p", [PDU#pdu.type]),
333
333
case PDU#pdu.type of
334
report when DiscoOrPlain =:= discovery ->
335
%% Discovery step 1 response
336
Key = {agent, MsgID},
337
Note = snmp_note_store:get_note(NoteStore, Key),
339
#note{sec_engine_id = "",
340
sec_model = _MsgSecModel,
342
sec_level = _SecLevel,
343
ctx_engine_id = _CtxEngineID,
347
%% This is part of the discovery process initiated by us.
348
%% Response to the discovery step 1 request
349
?vdebug("v3_proc -> discovery step 1 response", []),
350
{ok, 'version-3', PDU, PduMMS, {discovery, SecEngineID}};
351
#note{sec_engine_id = SecEngineID,
352
sec_model = _MsgSecModel,
354
sec_level = SecLevel,
355
ctx_engine_id = _CtxEngineID,
359
%% This is part of the discovery process initiated by us.
360
%% Response to the discovery step 2 request
361
?vdebug("v3_proc -> discovery step 2 response", []),
362
{ok, 'version-3', PDU, PduMMS, discovery};
365
throw({discarded, report})
336
369
throw({discarded, report});
826
859
generate_discovery_msg(NoteStore, Pdu, MsgData, Timeout, To) ->
827
860
{SecData, ContextEngineID, ContextName} = MsgData,
828
861
{SecModel, SecName, SecLevelFlag, TargetName} = SecData,
862
{ManagerEngineId, InitialUserName} =
830
863
case get_target_engine_id(TargetName) of
831
864
{ok, discovery} ->
832
""; % Discovery stage 1
865
{"", ""}; % Discovery stage 1
866
{ok, {discovery, IUN}} ->
867
{"", IUN}; % Discovery stage 1
833
868
{ok, TargetEngineId} ->
834
TargetEngineId % Discovery stage 2
869
{TargetEngineId, ""} % Discovery stage 2
836
871
generate_discovery_msg(NoteStore, Pdu,
837
872
ContextEngineID, ContextName,
838
873
SecModel, SecName, SecLevelFlag,
839
ManagerEngineId, Timeout, To).
841
878
generate_discovery_msg(NoteStore, Pdu,
842
879
ContextEngineID, ContextName,
843
880
SecModel, _SecName, _SecLevelFlag,
844
"" = ManagerEngineID, Timeout, To) ->
881
"" = ManagerEngineID,
845
884
%% Discovery step 1 uses SecLevel = noAuthNoPriv
847
886
SecLevelFlag = 0, % ?'SnmpSecurityLevel_noAuthNoPriv',
848
887
generate_discovery_msg2(NoteStore, Pdu,
849
888
ContextEngineID, ManagerEngineID,
850
889
SecModel, SecName, SecLevelFlag,
851
891
ContextName, Timeout, To);
852
892
generate_discovery_msg(NoteStore, Pdu,
853
893
ContextEngineID, ContextName,
854
894
SecModel, SecName, SecLevelFlag,
855
ManagerEngineID, Timeout, To) ->
898
%% SecLevelFlag = 1, % ?'SnmpSecurityLevel_authNoPriv',
856
899
generate_discovery_msg2(NoteStore, Pdu,
857
900
ContextEngineID, ManagerEngineID,
858
901
SecModel, SecName, SecLevelFlag,
859
903
ContextName, Timeout, To).
861
905
generate_discovery_msg2(NoteStore, Pdu,
862
906
ContextEngineID, ManagerEngineID,
863
907
SecModel, SecName, SecLevelFlag,
864
909
ContextName, Timeout, To) ->
865
910
%% rfc2272: 7.1.6
866
911
ScopedPDU = #scopedPdu{contextEngineID = ContextEngineID,
938
986
generate_sec_discovery_msg(Message, SecModule,
939
987
ContextEngineID, ManagerEngineID,
940
SecName, SecLevelFlag) ->
988
SecName, SecLevelFlag,
941
990
case (catch SecModule:generate_discovery_msg(Message, ContextEngineID,
943
SecName, SecLevelFlag)) of
992
SecName, SecLevelFlag,
944
994
{'EXIT', Reason} ->
945
995
config_err("~p (message: ~p)", [Reason, Message]),
946
996
{discarded, Reason};