1
%% ``The contents of this file are subject to the Erlang Public License,
2
%% Version 1.1, (the "License"); you may not use this file except in
3
%% compliance with the License. You should have received a copy of the
4
%% Erlang Public License along with this software. If not, it can be
5
%% retrieved via the world wide web at http://www.erlang.org/.
7
%% Software distributed under the License is distributed on an "AS IS"
8
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
9
%% the License for the specific language governing rights and limitations
12
%% The Initial Developer of the Original Code is Ericsson Utvecklings AB.
13
%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
14
%% AB. All Rights Reserved.''
18
%%----------------------------------------------------------------------
21
%% Test: ts:run(snmp, snmp_log_test, [batch]).
22
%% Test: ts:run(snmp, snmp_log_test, log_to_txt2, [batch]).
24
%%----------------------------------------------------------------------
25
-module(snmp_log_test).
27
%%----------------------------------------------------------------------
29
%%----------------------------------------------------------------------
30
-include("test_server.hrl").
31
-include("snmp_test_lib.hrl").
32
-define(SNMP_USE_V3, true).
33
-include_lib("snmp/include/snmp_types.hrl").
34
-include_lib("kernel/include/file.hrl").
37
%%----------------------------------------------------------------------
39
%%----------------------------------------------------------------------
41
init_per_testcase/2, fin_per_testcase/2,
45
open_write_and_close/1,
52
%%----------------------------------------------------------------------
54
%%----------------------------------------------------------------------
60
%%----------------------------------------------------------------------
62
%%----------------------------------------------------------------------
64
%%----------------------------------------------------------------------
66
%%----------------------------------------------------------------------
68
%%======================================================================
70
%%======================================================================
72
init_per_testcase(Case, Config) when list(Config) ->
73
Dir = ?config(priv_dir, Config),
74
LogTestDir = join(Dir, ?MODULE),
75
CaseDir = join(LogTestDir, Case),
76
case file:make_dir(LogTestDir) of
82
?FAIL({failed_creating_subsuite_top_dir, Error})
84
?line ok = file:make_dir(CaseDir),
85
Dog = ?WD_START(?MINS(5)),
86
[{log_dir, CaseDir}, {watchdog, Dog}|Config].
88
fin_per_testcase(_Case, Config) when list(Config) ->
89
%% Leave the dirs created above (enable debugging of the test case(s))
90
Dog = ?config(watchdog, Config),
92
lists:keydelete(watchdog, 1, Config).
95
%%======================================================================
96
%% Test case definitions
97
%%======================================================================
98
%% ?SKIP(not_yet_implemented).
102
open_write_and_close,
110
%%======================================================================
112
%%======================================================================
114
open_and_close(suite) -> [];
115
open_and_close(Config) when list(Config) ->
117
put(sname,open_and_close),
118
put(verbosity,trace),
119
Dir = ?config(log_dir, Config),
121
File = join(Dir, "snmp_test.log"),
124
?line {ok, Log} = snmp_log:create(Name, File, Size, Repair),
125
?line ok = snmp_log:sync(Log),
126
?line {ok, Info} = snmp_log:info(Log),
128
?line ok = snmp_log:close(Log).
131
%%======================================================================
133
open_write_and_close(suite) -> [];
134
open_write_and_close(Config) when list(Config) ->
135
p(open_write_and_close),
136
put(sname,open_write_and_close),
137
put(verbosity,trace),
138
?DBG("open_write_and_close -> start", []),
139
Dir = ?config(log_dir, Config),
141
File = join(Dir, "snmp_test.log"),
144
?DBG("open_write_and_close -> create log", []),
145
?line {ok, Log} = snmp_log:create(Name, File, Size, Repair),
148
Community = "all-rights",
150
?DBG("open_write_and_close -> create messages to log", []),
152
?line Req = get_next_request(Vsn, Community, [1,1], 1, 235779012),
155
?line Rep = get_response(Vsn, Community,
156
[1,3,6,1,2,1,1,1,0], 'OCTET STRING',
157
"Erlang SNMP agent", 1, 235779012),
159
%% Create a list of messages to log:
160
Msgs = lists:flatten(lists:duplicate(1002,[Req,Rep])),
163
?DBG("open_write_and_close -> log ~p messages, ~p bytes",
164
[length(Msgs), size(list_to_binary(Msgs))]),
167
Logger = fun(Packet) ->
168
?line ok = snmp_log:log(Log, Packet, Addr, Port)
170
lists:foreach(Logger, Msgs),
173
?DBG("open_write_and_close -> display info", []),
174
?line {ok, Info} = snmp_log:info(Log),
177
?DBG("open_write_and_close -> close log", []),
178
?line ok = snmp_log:close(Log),
180
?DBG("open_write_and_close -> done", []),
185
%%======================================================================
187
log_to_io1(suite) -> [];
188
log_to_io1(doc) -> "Log to io from the same process that opened "
190
log_to_io1(Config) when list(Config) ->
193
put(verbosity,trace),
194
?DBG("log_to_io1 -> start", []),
195
Dir = ?config(log_dir, Config),
196
Name = "snmp_test_l2i1",
197
File = join(Dir, "snmp_test_l2i1.log"),
200
?DBG("log_to_io1 -> create log", []),
201
?line {ok, Log} = snmp_log:create(Name, File, Size, Repair),
203
?DBG("log_to_io1 -> create messages to log", []),
206
?DBG("log_to_io1 -> create logger funs", []),
209
Logger = fun(Packet) ->
210
?line ok = snmp_log:log(Log, Packet, Addr, Port)
212
BatchLogger = fun(Time) ->
213
lists:foreach(Logger, Msgs),
217
To = lists:duplicate(100, 100),
219
?DBG("log_to_io1 -> log the messages", []),
220
lists:foreach(BatchLogger, To),
222
?DBG("log_to_io1 -> display info", []),
223
?line {ok, Info} = snmp_log:info(Log),
226
?DBG("log_to_io1 -> do the convert to io (stdout)", []),
227
? line ok = snmp_log:log_to_io(Log, File, Dir, []),
229
?DBG("log_to_io1 -> close log", []),
230
?line ok = snmp_log:close(Log),
232
?DBG("log_to_io1 -> done", []),
236
%%======================================================================
237
%% Starta en logger-process som med ett visst intervall loggar
238
%% meddelanden. Starta en reader-process som vid ett viss tillf�lle
239
%% l�ser fr�n loggen.
241
log_to_io2(suite) -> [];
242
log_to_io2(doc) -> "Log to io from a different process than which "
243
"opened and wrote the log";
244
log_to_io2(Config) when list(Config) ->
245
process_flag(trap_exit, true),
248
put(verbosity,trace),
249
?DBG("log_to_io2 -> start", []),
250
Dir = ?config(log_dir, Config),
251
Name = "snmp_test_l2i2",
252
File = join(Dir, "snmp_test_l2i2.log"),
256
?DBG("log_to_io2 -> create log writer process", []),
257
?line {ok, Log, Logger} = log_writer_start(Name, File, Size, Repair),
259
?DBG("log_to_io2 -> create log reader process", []),
260
?line {ok, Reader} = log_reader_start(),
262
?DBG("log_to_io2 -> wait some time", []),
265
?DBG("log_to_io2 -> display log info", []),
266
?line log_writer_info(Logger),
268
?DBG("log_to_io2 -> instruct the log writer to sleep some", []),
269
?line ok = log_writer_sleep(Logger, 5000),
271
?DBG("log_to_io2 -> instruct the log reader to log to io", []),
273
log_reader_log_to(Reader,
275
I = disk_log:info(Log),
276
R = snmp_log:log_to_io(Log, File, Dir, []),
282
?DBG("log_to_io2 -> ~n Info: ~p", [Info]),
285
?DBG("log_to_io2 -> log to io failed: "
287
"~n Info: ~p", [Error, Info]),
288
?line ?FAIL({log_lo_io_failed, Error, Info})
291
?DBG("log_to_io2 -> instruct the log writer to stop", []),
292
?line log_writer_stop(Logger),
294
?DBG("log_to_io2 -> instruct the log reader to stop", []),
295
?line log_reader_stop(Reader),
297
?DBG("log_to_io2 -> done", []),
301
%%======================================================================
303
log_to_txt1(suite) -> [];
304
log_to_txt1(Config) when list(Config) ->
307
put(verbosity,trace),
308
?DBG("log_to_txt1 -> start", []),
309
Dir = ?config(log_dir, Config),
310
Name = "snmp_test_l2t1",
311
File = join(Dir, "snmp_test_l2t1.log"),
314
?DBG("log_to_txt1 -> create log", []),
315
?line {ok, Log} = snmp_log:create(Name, File, Size, Repair),
317
?DBG("log_to_txt1 -> create messages to log", []),
320
?DBG("log_to_txt1 -> create logger funs", []),
323
Logger = fun(Packet) ->
324
?line ok = snmp_log:log(Log, Packet, Addr, Port)
326
BatchLogger = fun(Time) ->
327
lists:foreach(Logger, Msgs),
331
To = lists:duplicate(20, 5000),
333
?DBG("log_to_txt1 -> log the messages", []),
334
Start = calendar:local_time(),
335
lists:foreach(BatchLogger, To),
336
Stop = calendar:local_time(),
338
?DBG("log_to_txt1 -> display info", []),
339
?line {ok, Info} = snmp_log:info(Log),
342
Out1 = join(Dir, "snmp_text-1.txt"),
343
?DBG("log_to_txt1 -> do the convert to a text file when"
344
"~n Out1: ~p", [Out1]),
345
?line ok = snmp:log_to_txt(Dir, [], Out1, Log, File),
347
?line {ok, #file_info{size = Size1}} = file:read_file_info(Out1),
348
?DBG("log_to_txt1 -> text file size: ~p", [Size1]),
349
validate_size(Size1),
351
Out2 = join(Dir, "snmp_text-2.txt"),
352
?DBG("log_to_txt1 -> do the convert to a text file when"
355
"~n Out2: ~p", [Start, Stop, Out2]),
356
?line ok = snmp:log_to_txt(Dir, [], Out2, Log, File, Start, Stop),
358
?line {ok, #file_info{size = Size2}} = file:read_file_info(Out2),
359
?DBG("log_to_txt1 -> text file size: ~p", [Size2]),
360
validate_size(Size2, {le, Size1}),
362
%% Calculate new start / stop times...
363
GStart = calendar:datetime_to_gregorian_seconds(Start),
364
?DBG("log_to_txt1 -> GStart: ~p", [GStart]),
365
GStop = calendar:datetime_to_gregorian_seconds(Stop),
366
?DBG("log_to_txt1 -> GStop: ~p", [GStop]),
367
Diff4 = (GStop - GStart) div 4,
368
?DBG("log_to_txt1 -> Diff4: ~p", [Diff4]),
369
GStart2 = GStart + Diff4,
370
GStop2 = GStop - Diff4,
375
?FAIL({date_calc_failure, GStart2, GStop2})
378
Start2 = calendar:gregorian_seconds_to_datetime(GStart2),
379
Stop2 = calendar:gregorian_seconds_to_datetime(GStop2),
381
Out3 = join(Dir, "snmp_text-3.txt"),
382
?DBG("log_to_txt1 -> do the convert to a text file when"
385
"~n Out3: ~p", [Start2, Stop2, Out3]),
386
?line ok = snmp:log_to_txt(Dir, [], Out3, Log, File, Start2, Stop2),
388
?line {ok, #file_info{size = Size3}} = file:read_file_info(Out3),
389
?DBG("log_to_txt1 -> text file size: ~p", [Size3]),
390
validate_size(Size3, {l, Size1}),
392
?DBG("log_to_txt1 -> close log", []),
393
?line ok = snmp_log:close(Log),
395
?DBG("log_to_txt1 -> done", []),
399
%%======================================================================
400
%% Starta en logger-process som med ett visst intervall loggar
401
%% meddelanden. Starta en reader-process som vid ett viss tillf�lle
402
%% l�ser fr�n loggen.
404
%% Test: ts:run(snmp, snmp_log_test, log_to_txt2, [batch]).
406
log_to_txt2(suite) -> [];
407
log_to_txt2(doc) -> "Log to txt file from a different process than which "
408
"opened and wrote the log";
409
log_to_txt2(Config) when list(Config) ->
410
process_flag(trap_exit, true),
413
put(verbosity,trace),
414
?DBG("log_to_txt2 -> start", []),
415
Dir = ?config(log_dir, Config),
416
Name = "snmp_test_l2t2",
417
LogFile = join(Dir, "snmp_test_l2t2.log"),
418
TxtFile = join(Dir, "snmp_test_l2t2.txt"),
423
StdMibDir = filename:join(code:priv_dir(snmp), "mibs") ++ "/",
424
Mibs = [join(StdMibDir, "SNMPv2-MIB")],
426
?DBG("log_to_txt2 -> create log writer process", []),
427
?line {ok, Log, Logger} = log_writer_start(Name, LogFile, Size, Repair),
429
?DBG("log_to_txt2 -> create log reader process", []),
430
?line {ok, Reader} = log_reader_start(),
432
?DBG("log_to_txt2 -> wait some time", []),
435
?DBG("log_to_txt2 -> display log info", []),
436
?line log_writer_info(Logger),
438
?DBG("log_to_txt2 -> instruct the log writer to sleep some", []),
439
?line ok = log_writer_sleep(Logger, 5000),
441
?DBG("log_to_txt2 -> instruct the log reader to log to txt", []),
443
log_reader_log_to(Reader,
445
I = disk_log:info(Log),
447
R = snmp_log:log_to_txt(Log, LogFile, Dir,
451
"Time converting file: ~w ms~n",
458
?DBG("log_to_txt2 -> ~n Info: ~p", [Info]),
459
?line {ok, #file_info{size = FileSize}} =
460
file:read_file_info(TxtFile),
461
?DBG("log_to_txt2 -> text file size: ~p", [FileSize]),
462
validate_size(FileSize);
464
?DBG("log_to_txt2 -> log to txt failed: "
466
"~n Info: ~p", [Error, Info]),
467
?line ?FAIL({log_lo_txt_failed, Error, Info})
470
?DBG("log_to_txt2 -> instruct the log writer to stop", []),
471
?line log_writer_stop(Logger),
473
?DBG("log_to_txt2 -> instruct the log reader to stop", []),
474
?line log_reader_stop(Reader),
476
?DBG("log_to_txt2 -> done", []),
485
validate_size(0, _) ->
487
validate_size(A, {le, B}) when A =< B ->
489
validate_size(A, {l, B}) when A < B ->
491
validate_size(A, B) ->
492
?FAIL({invalid_size, A, B}).
495
%%======================================================================
496
%% Internal functions
497
%%======================================================================
499
log_writer_start(Name, File, Size, Repair) ->
500
Pid = spawn_link(?MODULE, log_writer_main,
501
[Name, File, Size, Repair, self()]),
505
{'EXIT', Pid, Reason} ->
508
Msg = receive Any -> Any after 0 -> nothing end,
509
Info = (catch process_info(Pid)),
510
exit({failed_starting_writer, timeout, Msg, Info})
513
log_writer_stop(Pid) ->
514
Pid ! {stop, self()},
517
{'EXIT', Pid, normal} ->
519
?DBG("it took ~w ms to stop the writer", [T2 - T1]),
522
Msg = receive Any -> Any after 0 -> nothing end,
523
Info = (catch process_info(Pid)),
524
exit({failed_stopping_writer, timeout, Msg, Info})
527
log_writer_info(Pid) ->
528
Pid ! {info, self()}.
530
log_writer_sleep(Pid, Time) ->
531
Pid ! {sleep, Time, self()},
536
?DBG("it took ~w ms to put the writer to sleep", [T2 - T1]),
538
{'EXIT', Pid, Reason} ->
541
Msg = receive Any -> Any after 0 -> nothing end,
542
Info = (catch process_info(Pid)),
543
exit({failed_put_writer_to_sleep, timeout, Msg, Info})
546
log_writer_main(Name, File, Size, Repair, P) ->
547
process_flag(trap_exit, true),
548
%% put(sname,log_writer),
549
%% put(verbosity,trace),
550
{ok, Log} = snmp_log:create(Name, File, Size, Repair),
551
P ! {log, Log, self()},
552
Msgs = lists:flatten(lists:duplicate(10, messages())),
555
Logger = fun(Packet) ->
556
?line ok = snmp_log:log(Log, Packet, Addr, Port)
558
BatchLogger = fun(Time) ->
559
lists:foreach(Logger, Msgs),
563
log_writer(Log, BatchLogger, P).
565
log_writer(Log, Fun, P) ->
569
lp("received stop request"),
570
ok = snmp_log:close(Log),
573
lp("received info request"),
574
{ok, Info} = snmp_log:info(Log),
576
log_writer(Log, Fun, P);
578
lp("received sleep (~w) request", [Time]),
579
P ! {sleeping, self()},
582
log_writer(Log, Fun, P);
584
io:format("ERROR:logger - received unknown message: "
586
log_writer(Log, Fun, P)
588
lp("log some messages"),
589
To = lists:duplicate(100, 100),
590
lists:foreach(Fun, To),
591
log_writer(Log, Fun, P)
598
io:format(user,"writer [~w] " ++ F ++ "~n", [self()|A]).
602
log_reader_start() ->
603
Pid = spawn_link(?MODULE, log_reader_main, [self()]),
608
?DBG("it took ~w ms to start the reader", [T2 - T1]),
610
{'EXIT', Pid, Reason} ->
616
log_reader_stop(Pid) ->
617
Pid ! {stop, self()},
620
{'EXIT', Pid, normal} ->
622
?DBG("it took ~w ms to put the reader to eleep", [T2 - T1]),
625
Msg = receive Any -> Any after 0 -> nothing end,
626
exit({failed_stopping_reader, timeout, Msg})
629
log_reader_log_to(Pid, LogToFun) when function(LogToFun) ->
630
Pid ! {log_to, LogToFun, self()},
632
{log_to_reply, Res, Pid} ->
636
log_reader_main(P) ->
637
put(sname,log_reader),
638
put(verbosity,trace),
639
P ! {started, self()},
646
rp("received stop request"),
649
rp("received log_to request"),
651
rp("done with log_to - sending reply"),
652
P ! {log_to_reply, Res, self()},
655
io:format("ERROR:reader - received unknown message: "
664
io:format(user, "reader [~w] " ++ F ++ "~n", [self()|A]).
667
%%======================================================================
671
{disk_log, Node, LogName, Info} ->
672
io:format("disk_log notify: "
676
"~n", [Node, LogName, Info]),
684
[get_next_request('version-1', "all-rights",
686
get_response('version-1', "all-rights",
688
'OCTET STRING', "Erlang SNMP agent",
690
get_request('version-1', "all-rights",
691
[1,3,6,1,2,1,1,1,0], 1, 1102),
692
get_response('version-1', "all-rights",
694
'OCTET STRING', "Erlang SNMP agent",
696
set_request('version-1', "all-rights",
698
'OCTET STRING', "new_value",
700
get_response('version-1', "all-rights",
702
'OCTET STRING', "new_value",
704
get_bulk_request("all-rights", 1104),
705
bulk_get_response('version-1', "all-rights",
706
[48,29,6,8,43,6,1,2,1,1,1,0,4,17,69,114,108,97,
707
110,103,32,83,78,77,80,32,97,103,101,110,116,
708
48,7,6,3,43,7,1,130,0], 1104),
709
inform_request("all-rights", 1105),
710
get_response('version-1', "all-rights",
711
[{[1,3,6,1,2,1,1,3,0],
715
{[1,3,6,1,6,3,1,1,4,1,0],
717
[1,3,6,1,2,1,1,0,1],2}],
719
snmpv2_trap("all-rights", 1106),
723
get_request(Vsn, Community, Oid, OrgIdx, ReqId) ->
724
Varbind = #varbind{oid = Oid,
725
variabletype = 'NULL',
728
Pdu = #pdu{type = 'get-response',
730
error_status = noError,
732
varbinds = [Varbind]},
733
enc_message(Vsn, Community, Pdu).
735
get_next_request(Vsn, Community, Oid, OrgIdx, ReqId) ->
736
Varbind = #varbind{oid = Oid,
737
variabletype = 'NULL',
740
Pdu = #pdu{type = 'get-next-request',
742
error_status = noError,
744
varbinds = [Varbind]},
745
enc_message(Vsn, Community, Pdu).
747
bulk_get_response(Vsn, Community, Bulk, ReqId) ->
748
Pdu = #pdu{type = 'get-response',
750
error_status = noError,
753
enc_message(Vsn, Community, Pdu).
755
get_response(Vsn, Community, VarbindData, ReqId) ->
756
Varbinds = varbinds(VarbindData, []),
757
Pdu = #pdu{type = 'get-response',
759
error_status = noError,
761
varbinds = Varbinds},
762
enc_message(Vsn, Community, Pdu).
764
get_response(Vsn, Community, Oid, Type, Value, OrgIdx, ReqId) ->
765
Varbind = #varbind{oid = Oid,
769
Pdu = #pdu{type = 'get-response',
771
error_status = noError,
773
varbinds = [Varbind]},
774
enc_message(Vsn, Community, Pdu).
776
set_request(Vsn, Community, Oid, Type, Value, OrgIdx, ReqId) ->
777
Varbind = #varbind{oid = Oid,
781
Pdu = #pdu{type = 'set-request',
783
error_status = noError,
785
varbinds = [Varbind]},
786
enc_message(Vsn, Community, Pdu).
789
get_bulk_request(Community, ReqId) ->
790
Varbinds = [#varbind{oid = [1,3,6,1,2,1,1,1],
791
variabletype = 'NULL',
794
#varbind{oid = [1,3,7,1],
795
variabletype = 'NULL',
798
Pdu = #pdu{type = 'get-bulk-request',
802
varbinds = Varbinds},
803
enc_message('version-2', Community, Pdu).
805
inform_request(Community, ReqId) ->
806
Varbinds = [#varbind{oid = [1,3,6,1,2,1,1,3,0],
807
variabletype = 'TimeTicks',
810
#varbind{oid = [1,3,6,1,6,3,1,1,4,1,0],
811
variabletype = 'OBJECT IDENTIFIER',
812
value = [1,3,6,1,2,1,1,0,1],
814
Pdu = #pdu{type = 'inform-request',
816
error_status = noError,
818
varbinds = Varbinds},
819
enc_message('version-2', Community, Pdu).
821
snmpv2_trap(Community, ReqId) ->
822
Varbinds = [#varbind{oid = [1,3,6,1,2,1,1,3,0],
823
variabletype = 'TimeTicks',
826
#varbind{oid = [1,3,6,1,6,3,1,1,4,1,0],
827
variabletype = 'OBJECT IDENTIFIER',
828
value = [1,3,6,1,2,1,11,1],
830
Pdu = #pdu{type = 'snmpv2-trap',
832
error_status = noError,
834
varbinds = Varbinds},
835
enc_message('version-2', Community, Pdu).
838
% Varbind = #varbind{oid = ?snmpUnknownPDUHandlers,
839
% variabletype = 'Counter32',
841
% Pdu = #pdu{type = report,
842
% request_id = 991199,
843
% error_status = noError,
845
% varbinds = [Varbind]},
846
% enc_message('version-3', Community, Pdu).
849
Enterp = [1,3,6,1,2,1,1],
850
Oid = [1,3,6,1,2,1,1,4,0],
851
Type = 'OCTET STRING',
852
Value = "{mbj,eklas}@erlang.ericsson.se",
856
AgentIp = [127,0,0,1],
857
trap(Community, Enterp, Oid, Type, Value, SysUpTime,
858
Spec, Generic, AgentIp, 1).
861
trap(Community, Enterp, Oid, Type, Value, SysUpTime,
862
Spec, Generic, AgentIp, OrgIdx) ->
863
Varbind = #varbind{oid = Oid,
867
Trap = #trappdu{enterprise = Enterp,
868
agent_addr = AgentIp,
869
generic_trap = Generic,
870
specific_trap = Spec,
871
time_stamp = SysUpTime,
872
varbinds = [Varbind]},
873
enc_message('version-1', Community, Trap).
875
varbinds([], Varbinds) ->
876
lists:reverse(Varbinds);
877
varbinds([{Oid, Type, Value, Idx}|T], Acc) ->
878
Varbind = #varbind{oid = Oid,
882
varbinds(T, [Varbind|Acc]).
884
% enc_message('version-3' = Vsn, Community, Pdu) ->
885
% ScopedPDU = #scopedPdu{contextEngineID = ContextEngineID,
886
% contextName = ContextName,
889
% UsmSecParams#usmSecurityParameters{msgAuthenticationParameters =
891
% SecBytes = snmp_pdus:enc_usm_security_parameters(NUsmSecParams),
892
% V3Hdr = #v3_hdr{msgID = MsgID,
893
% msgMaxSize = AgentMS,
894
% msgFlags = snmp_misc:mk_msg_flags(Type, SecLevel),
895
% msgSecurityParameters = SecBytes
896
% msgSecurityModel = MsgSecurityModel},
897
% Msg = #message{version = Vsn, vsn_hdr = V3Hdr,
898
% data = ScopedPDUBytes},
899
% snmp_pdus:enc_message_only(Message2);
901
enc_message(Vsn, Community, Pdu) ->
902
PduBytes = snmp_pdus:enc_pdu(Pdu),
903
Msg = #message{version = Vsn,
906
list_to_binary(snmp_pdus:enc_message_only(Msg)).
908
display_info(Info) ->
909
{SinceOpened, SinceLastInfo} = get_info(no_overflows, Info, {-1,-1}),
910
CurrentFile = get_info(current_file, Info, -1),
911
NoItems = get_info(no_current_items, Info, -1),
912
NoBytes = get_info(no_current_bytes, Info, -1),
913
io:format(user, "Disk log info: "
914
"~n Number of filled since opened: ~p"
915
"~n Number of filled since last info: ~p"
916
"~n Current file: ~p"
917
"~n Number of items in file: ~p"
918
"~n Number of bytes in file: ~p"
920
[SinceOpened, SinceLastInfo, CurrentFile, NoItems, NoBytes]).
922
get_info(Key, Info, Def) ->
923
case lists:keysearch(Key, 1, Info) of
924
{value, {Key, Val}} ->
934
io:format(user, "test case: ~w~n", [Case]).
938
{A,B,C} = erlang:now(),
939
A*1000000000+B*1000+(C div 1000).