31
30
%% External exports
32
31
-export([start_link/1, stop/0, is_started/0]).
33
-export([register_user/3, unregister_user/1,
32
-export([register_user/4, unregister_user/1,
35
user_info/0, user_info/1,
34
user_info/0, user_info/1, user_info/2,
37
register_agent/4, unregister_agent/3,
38
agent_info/3, update_agent_info/5,
36
register_agent/3, unregister_agent/2,
37
agent_info/0, agent_info/2, agent_info/3, update_agent_info/4,
39
38
which_agents/0, which_agents/1,
41
get_agent_engine_id/1, get_agent_engine_id/2, is_known_engine_id/3,
42
get_agent_engine_max_message_size/2,
41
get_agent_engine_id/1,
42
get_agent_engine_max_message_size/1,
45
get_agent_user_id/1, get_agent_user_id/2,
46
get_agent_user_info/2,
47
48
system_info/0, system_info/1,
48
49
%% update_system_info/2,
151
170
backup(BackupDir) when is_list(BackupDir) ->
152
171
call({backup, BackupDir}).
154
register_user(UserId, UserMod, UserData) when UserId =/= default_user ->
173
%% Backward compatibillity
174
register_user(UserId, UserMod, UserData) ->
175
register_user(UserId, UserMod, UserData, []).
177
register_user(UserId, UserMod, UserData, DefaultAgentConfig)
178
when (UserId =/= ?DEFAULT_USER) andalso is_list(DefaultAgentConfig) ->
155
179
case (catch verify_user_behaviour(UserMod)) of
157
call({register_user, UserId, UserMod, UserData});
181
Config = default_agent_config(DefaultAgentConfig),
182
call({register_user, UserId, UserMod, UserData, Config});
161
register_user(UserId, _, _) ->
186
register_user(UserId, _UserMod, _UserData, DefaultAgentConfig)
187
when (UserId =/= ?DEFAULT_USER) ->
188
{error, {bad_default_agent_config, DefaultAgentConfig}};
189
register_user(UserId, _, _, _) ->
162
190
{error, {bad_user_id, UserId}}.
192
default_agent_config(DefaultAgentConfig) ->
193
{ok, SystemDefaultAgentConfig} = agent_info(),
194
default_agent_config(SystemDefaultAgentConfig, DefaultAgentConfig).
196
default_agent_config([], DefaultAgentConfig) ->
198
default_agent_config([{Key, _} = Entry|T], DefaultAgentConfig) ->
199
case lists:keysearch(Key, 1, DefaultAgentConfig) of
201
default_agent_config(T, DefaultAgentConfig);
203
default_agent_config(T, [Entry|DefaultAgentConfig])
164
207
verify_user_behaviour(UserMod) ->
165
208
case snmp_misc:verify_behaviour(snmpm_user, UserMod) of
212
%% This user may implement the old behaviour, check it
213
case snmp_misc:verify_behaviour(snmpm_user_old, UserMod) of
173
unregister_user(UserId) when UserId =/= default_user ->
222
unregister_user(UserId) when UserId =/= ?DEFAULT_USER ->
174
223
call({unregister_user, UserId});
175
224
unregister_user(BadUserId) ->
176
225
{error, {bad_user_id, BadUserId}}.
179
229
Pattern = #user{id = '$1', _ = '_'},
180
230
Match = ets:match(snmpm_user_table, Pattern),
181
[UserId || [UserId] <- Match, UserId =/= default_user].
231
[UserId || [UserId] <- Match, UserId =/= ?DEFAULT_USER].
185
UserId = default_user,
235
UserId = ?DEFAULT_USER,
186
236
case user_info(UserId) of
187
237
{ok, Mod, Data} ->
188
238
{ok, UserId, Mod, Data};
198
248
{error, not_found}
202
register_agent(_UserId, ?DEF_ADDR_TAG = Addr, _Port, _Config) ->
203
{error, {invalid_address, Addr}};
204
register_agent(UserId, Addr0, Port, Config) ->
251
user_info(UserId, Item) ->
252
case (catch do_user_info(UserId, Item)) of
254
{error, {not_found, Item}};
259
do_user_info(UserId, module) ->
260
ets:lookup_element(snmpm_user_table, UserId, #user.mod);
261
do_user_info(UserId, data) ->
262
ets:lookup_element(snmpm_user_table, UserId, #user.data);
263
do_user_info(UserId, default_agent_config) ->
264
ets:lookup_element(snmpm_user_table, UserId, #user.default_agent_config);
265
do_user_info(_UserId, BadItem) ->
266
error({not_found, BadItem}).
269
%% A target-name constructed in this way is a string with the following
270
%% <IP-address>:<Port>-<Version>
272
mk_target_name(Addr0, Port, Config) when is_list(Config) ->
274
case lists:keysearch(version, 1, Config) of
278
select_lowest_supported_version()
280
%% p("mk_target_name -> Version: ~p", [Version]),
281
case normalize_address(Addr0) of
284
io_lib:format("~w.~w.~w.~w:~w-~w", [A, B, C, D, Port, Version]));
287
io_lib:format("~w.~w.~w.~w:~w-~w", [A, B, C, D, Port, Version]));
290
io_lib:format("~p:~w-~w", [Addr0, Port, Version]))
293
select_lowest_supported_version() ->
294
{ok, Versions} = system_info(versions),
295
select_lowest_supported_version([v1, v2, v3], Versions).
297
select_lowest_supported_version([], Versions) ->
298
error({bad_versions, Versions});
299
select_lowest_supported_version([H|T], Versions) ->
300
case lists:member(H, Versions) of
304
select_lowest_supported_version(T, Versions)
308
register_agent(UserId, _TargetName, _Config) when (UserId =:= user_id) ->
309
{error, {bad_user_id, UserId}};
310
register_agent(UserId, TargetName, Config)
311
when (is_list(TargetName) andalso
312
(length(TargetName) > 0) andalso
315
%% p("register_agent -> entry with"
317
%% "~n TargetName: ~p"
318
%% "~n Config: ~p", [UserId, TargetName, Config]),
206
%% 1) That the mandatory configs (none at the moment) are present
207
%% 2) That the illegal configs user_id (used internally) is
321
%% 1) That the mandatory configs are present
322
%% 2) That the illegal config user_id (used internally) is
209
324
%% 3) Check that there are no invalid or erroneous configs
210
325
%% 4) Chack that the manager is capable to use the selected version
211
326
case verify_agent_config(Config) of
213
Addr = normalize_address(Addr0),
214
call({register_agent, UserId, Addr, Port, Config});
328
call({register_agent, UserId, TargetName, Config});
219
334
verify_agent_config(Conf) ->
220
%% case verify_mandatory(Conf, []) of
222
%% case verify_invalid(Conf, [user_id]) of
224
%% case verify_agent_config2(Conf) of
226
%% {ok, Vsns} = system_info(versions),
228
%% case lists:keysearch(version, 1, Conf) of
229
%% {value, {version, V}} ->
234
%% case lists:member(Vsn, Vsns) of
238
%% {error, {version_not_supported_by_manager, Vsn, Vsns}}
247
ok = verify_mandatory(Conf, []),
335
ok = verify_mandatory(Conf, [engine_id, address, reg_type]),
248
336
case verify_invalid(Conf, [user_id]) of
250
338
case verify_agent_config2(Conf) of
272
360
verify_agent2(Conf).
363
unregister_agent(UserId, TargetName) ->
364
call({unregister_agent, UserId, TargetName}).
275
366
unregister_agent(UserId, Addr0, Port) ->
276
367
Addr = normalize_address(Addr0),
277
call({unregister_agent, UserId, Addr, Port}).
279
agent_info(?DEF_ADDR_TAG = Addr, Port, Item) ->
280
do_agent_info(Addr, Port, Item);
368
case do_agent_info(Addr, Port, target_name) of
370
unregister_agent(UserId, TargetName);
376
agent_info(?DEFAULT_TARGETNAME, all).
378
agent_info(TargetName, all) ->
379
case ets:match_object(snmpm_agent_table, {{TargetName, '_'}, '_'}) of
383
{ok, [{Item, Val} || {{_, Item}, Val} <- All]}
385
agent_info(TargetName, Item) ->
386
case ets:lookup(snmpm_agent_table, {TargetName, Item}) of
281
393
agent_info(Addr0, Port, Item) ->
282
394
Addr = normalize_address(Addr0),
283
395
do_agent_info(Addr, Port, Item).
285
do_agent_info(Addr, Port, all) ->
286
case ets:match_object(snmpm_agent_table, {{Addr, Port, '_'}, '_'}) of
397
do_agent_info(Addr, Port, target_name = Item) ->
398
case ets:lookup(snmpm_agent_table, {Addr, Port, Item}) of
290
{ok, [{Item, Val} || {{_, _, Item}, Val} <- All,
291
Item /= address, Item /= port]}
293
404
do_agent_info(Addr, Port, Item) ->
294
case ets:lookup(snmpm_agent_table, {Addr, Port, Item}) of
405
case do_agent_info(Addr, Port, target_name) of
407
agent_info(TargetName, Item);
303
414
which_agents('_').
305
416
which_agents(UserId) ->
306
Pat = {{'$1', '$2', user_id}, UserId},
417
Pat = {{'$1', user_id}, UserId},
307
418
Agents = ets:match(snmpm_agent_table, Pat),
308
[{Addr, Port} || [Addr, Port] <- Agents].
419
[TargetName || [TargetName] <- Agents].
311
update_agent_info(UserId, Addr0, Port, Item, Val0)
312
when Item /= address, Item /= port, Item /= user_id ->
422
update_agent_info(UserId, TargetName, Item, Val0)
423
when (Item =/= user_id) ->
313
424
case (catch verify_val(Item, Val0)) of
315
Addr = normalize_address(Addr0),
316
call({update_agent_info, UserId, Addr, Port, Item, Val});
321
is_known_engine_id(EngineID, Addr, Port) ->
322
case agent_info(Addr, Port, engine_id) of
426
call({update_agent_info, UserId, TargetName, Item, Val});
431
%% Backward compatibillity
432
update_agent_info(UserId, Addr, Port, Item, Val) ->
433
case agent_info(Addr, Port, target_name) of
435
update_agent_info(UserId, TargetName, Item, Val);
440
is_known_engine_id(EngineID, TargetName) ->
441
case agent_info(TargetName, engine_id) of
323
442
{ok, EngineID} ->
325
444
{ok, _OtherEngineID} ->
333
get_agent_engine_id(Name) ->
334
Pat = {{'$1', '$2', target_name}, Name},
335
case ets:match(snmpm_agent_table, Pat) of
337
%% If the user has given several agents
338
%% the same name, we pick the first we find...
339
agent_info(Addr, Port, engine_id);
450
%% Backward compatibillity
451
is_known_engine_id(EngineID, Addr, Port) ->
452
case agent_info(Addr, Port, target_name) of
454
is_known_engine_id(EngineID, TargetName);
459
get_agent_engine_id(TargetName) ->
460
agent_info(TargetName, engine_id).
462
%% Backward compatibillity
344
463
get_agent_engine_id(Addr, Port) ->
345
464
agent_info(Addr, Port, engine_id).
466
get_agent_engine_max_message_size(TargetName) ->
467
agent_info(TargetName, max_message_size).
469
%% Backward compatibillity
347
470
get_agent_engine_max_message_size(Addr, Port) ->
348
471
agent_info(Addr, Port, max_message_size).
473
get_agent_version(TargetName) ->
474
agent_info(TargetName, version).
476
%% Backward compatibillity
350
477
get_agent_version(Addr, Port) ->
351
agent_info(Addr, Port, version). %% MP-model
478
agent_info(Addr, Port, version).
353
get_agent_mp_model(Addr, Port) ->
354
case agent_info(Addr, Port, version) of
480
get_agent_mp_model(TargetName) ->
481
case agent_info(TargetName, version) of
490
%% Backward compatibillity
491
get_agent_mp_model(Addr, Port) ->
492
case agent_info(Addr, Port, target_name) of
494
get_agent_mp_model(TargetName);
499
get_agent_user_id(TargetName) ->
500
agent_info(TargetName, user_id).
363
502
get_agent_user_id(Addr, Port) ->
364
503
agent_info(Addr, Port, user_id).
505
get_agent_user_info(Addr, Port) ->
506
case agent_info(Addr, Port, target_name) of
508
case agent_info(Target, reg_type) of
510
case agent_info(Target, user_id) of
512
{ok, UserId, Target, RegType};
513
{error, not_found} ->
514
{error, {user_id_not_found, Target}}
516
{error, not_found} ->
517
{error, {reg_type_not_found, Target}}
519
{error, not_found} ->
520
{error, {target_name_not_found, Addr, Port}}
368
526
system_info(all).
1474
check_user_config({Id, Mod, _Data} = User) when Id =/= default_user ->
1646
check_user_config({Id, Mod, Data}) ->
1647
check_user_config({Id, Mod, Data, []});
1648
check_user_config({Id, Mod, _Data, DefaultAgentConfig} = User)
1649
when (Id =/= ?DEFAULT_USER) andalso is_list(DefaultAgentConfig) ->
1475
1650
case (catch verify_user_behaviour(Mod)) of
1652
case verify_user_agent_config(DefaultAgentConfig) of
1656
error({bad_default_agent_config, Reason})
1481
check_user_config({Id, _Mod, _Data}) ->
1661
check_user_config({Id, _Mod, _Data, DefaultAgentConfig})
1662
when (Id =/= ?DEFAULT_USER) ->
1663
{error, {bad_default_agent_config, DefaultAgentConfig}};
1664
check_user_config({Id, _Mod, _Data, _DefaultAgentConfig}) ->
1482
1665
error({bad_user_id, Id});
1483
1666
check_user_config(User) ->
1484
1667
error({bad_user_config, User}).
1507
1690
verify_user({Id, UserMod, UserData}) ->
1691
verify_user({Id, UserMod, UserData, []});
1692
verify_user({Id, UserMod, UserData, DefaultAgentConfig})
1693
when (Id =/= ?DEFAULT_USER) andalso is_list(DefaultAgentConfig) ->
1508
1694
?d("verify_user -> entry with"
1510
1696
"~n UserMod: ~p"
1511
"~n UserData: ~p", [Id, UserMod, UserData]),
1698
"~n DefaultAgentConfig: ~p",
1699
[Id, UserMod, UserData, DefaultAgentConfig]),
1512
1700
case (catch verify_user_behaviour(UserMod)) of
1514
{ok, #user{id = Id, mod = UserMod, data = UserData}};
1702
case verify_user_agent_config(DefaultAgentConfig) of
1704
Config = default_agent_config(DefaultAgentConfig),
1708
default_agent_config = Config}};
1710
error({bad_default_agent_config, Reason})
1715
verify_user({Id, _UserMod, _UserData, DefaultAgentConfig})
1716
when (Id =/= ?DEFAULT_USER) ->
1717
{error, {bad_default_agent_config, DefaultAgentConfig}};
1718
verify_user({Id, _, _, _}) ->
1719
{error, {bad_user_id, Id}}.
1721
verify_user_agent_config(Conf) ->
1722
case verify_invalid(Conf, [user_id, engine_id, address]) of
1724
verify_agent_config2(Conf);
1520
1729
read_usm_config_file(Dir) ->
1521
1730
Check = fun(C) -> check_usm_user_config(C) end,
1522
1731
case read_file(Dir, "usm.conf", Check, []) of
1838
2047
%% {stop, Reason, Reply, State} | (terminate/2 is called)
1839
2048
%% {stop, Reason, State} (terminate/2 is called)
1840
2049
%%--------------------------------------------------------------------
1841
handle_call({register_user, UserId, UserMod, UserData}, _From, State) ->
2050
handle_call({register_user, UserId, UserMod, UserData, DefaultAgentConfig},
1842
2052
?vlog("received register_user request: "
1845
"~n UserData: ~p", [UserId, UserMod, UserData]),
1846
User = #user{id = UserId, mod = UserMod, data = UserData},
2056
"~n DefaultAgentConfig: ~p",
2057
[UserId, UserMod, UserData, DefaultAgentConfig]),
2058
User = #user{id = UserId,
2061
default_agent_config = DefaultAgentConfig},
1847
2062
Reply = handle_register_user(User),
1848
2063
{reply, Reply, State};
1853
2068
Reply = handle_unregister_user(UserId),
1854
2069
{reply, Reply, State};
1856
handle_call({register_agent, UserId, Addr, Port, Config}, _From, State) ->
2071
handle_call({register_agent, UserId, TargetName, Config}, _From, State) ->
1857
2072
?vlog("received register_agent request: "
1861
"~n Config: ~p", [UserId, Addr, Port, Config]),
1862
Reply = handle_register_agent(UserId, Addr, Port, Config),
2075
"~n Config: ~p", [UserId, TargetName, Config]),
2076
Reply = handle_register_agent(UserId, TargetName, Config),
1863
2077
{reply, Reply, State};
1865
handle_call({unregister_agent, UserId, Addr, Port}, _From, State) ->
2079
handle_call({unregister_agent, UserId, TargetName}, _From, State) ->
1866
2080
?vlog("received unregister_agent request: "
1869
"~n Port: ~p", [UserId, Addr, Port]),
1870
Reply = handle_unregister_agent(UserId, Addr, Port),
2082
"~n TargetName: ~p", [UserId, TargetName]),
2083
Reply = handle_unregister_agent(UserId, TargetName),
1871
2084
{reply, Reply, State};
1873
handle_call({update_agent_info, UserId, Addr, Port, Item, Val},
2086
handle_call({update_agent_info, UserId, TargetName, Item, Val},
1874
2087
_From, State) ->
1875
2088
?vlog("received update_agent_info request: "
1880
"~n Val: ~p", [UserId, Addr, Port, Item, Val]),
1881
Reply = handle_update_agent_info(UserId, Addr, Port, Item, Val),
2092
"~n Val: ~p", [UserId, TargetName, Item, Val]),
2093
Reply = handle_update_agent_info(UserId, TargetName, Item, Val),
1882
2094
{reply, Reply, State};
1884
2096
handle_call({register_usm_user, User}, _From, State) ->
2237
handle_register_agent(UserId, Addr, Port, Config) ->
2449
handle_register_agent(UserId, TargetName, Config) ->
2238
2450
?vdebug("handle_register_agent -> entry with"
2242
"~n Config: ~p", [UserId, Addr, Port, Config]),
2243
case (catch agent_info(Addr, Port, address)) of
2453
"~n Config: ~p", [UserId, TargetName, Config]),
2454
case (catch agent_info(TargetName, user_id)) of
2245
{ok, DefConfig} = agent_info(?DEF_ADDR_TAG, ?DEF_PORT_TAG, all),
2246
do_handle_register_agent(Addr, Port, DefConfig),
2247
do_handle_register_agent(Addr, Port, [{user_id, UserId}|Config]);
2249
?vinfo("[~w] Agent (~w:~w) already registered:"
2253
[UserId, Addr, Port, Error, which_agents()]),
2254
{error, {already_registered, Addr, Port}}
2456
case ets:lookup(snmpm_user_table, UserId) of
2457
[#user{default_agent_config = DefConfig}] ->
2458
do_handle_register_agent(TargetName, DefConfig),
2459
do_handle_register_agent(TargetName,
2460
[{user_id, UserId}|Config]),
2461
%% <DIRTY-BACKWARD-COMPATIBILLITY>
2462
%% And now for some (backward compatibillity)
2463
%% dirty crossref stuff
2464
{ok, Addr} = agent_info(TargetName, address),
2465
{ok, Port} = agent_info(TargetName, port),
2466
ets:insert(snmpm_agent_table,
2467
{{Addr, Port, target_name}, TargetName}),
2468
%% </DIRTY-BACKWARD-COMPATIBILLITY>
2471
{error, {not_found, UserId}}
2474
?vinfo("[~w] Agent (~p) already registered"
2477
[UserId, TargetName, which_agents()]),
2478
{error, {already_registered, TargetName}};
2479
{ok, OtherUserId} ->
2480
?vinfo("[~w] Agent (~p) already registered to ~p"
2483
[UserId, TargetName, OtherUserId, which_agents()]),
2484
{error, {already_registered, TargetName, OtherUserId}}
2257
do_handle_register_agent(Addr, Port, []) ->
2258
do_update_agent_info(Addr, Port, address, Addr),
2259
do_update_agent_info(Addr, Port, port, Port),
2487
do_handle_register_agent(_TargetName, []) ->
2261
do_handle_register_agent(Addr, Port, [{Item, Val}|Rest]) ->
2262
case (catch do_update_agent_info(Addr, Port, Item, Val)) of
2489
do_handle_register_agent(TargetName, [{Item, Val}|Rest]) ->
2490
case (catch do_update_agent_info(TargetName, Item, Val)) of
2264
do_handle_register_agent(Addr, Port, Rest);
2492
do_handle_register_agent(TargetName, Rest);
2265
2493
{error, Reason} ->
2266
ets:match_delete(snmpm_agent_table, {Addr, Port, '_'}),
2494
ets:match_delete(snmpm_agent_table, {TargetName, '_'}),
2267
2495
{error, Reason}
2269
do_handle_register_agent(Addr, Port, BadConfig) ->
2270
error_msg("error during agent registration - bab config: ~n~p",
2497
do_handle_register_agent(TargetName, BadConfig) ->
2498
error_msg("error during agent registration - bad config: ~n~p",
2272
ets:match_delete(snmpm_agent_table, {Addr, Port, '_'}),
2273
{error, {bad_agent_config, Addr, Port, BadConfig}}.
2276
handle_unregister_agent(UserId, Addr, Port) ->
2500
ets:match_delete(snmpm_agent_table, {TargetName, '_'}),
2501
{error, {bad_agent_config, TargetName, BadConfig}}.
2504
handle_unregister_agent(UserId, TargetName) ->
2277
2505
?vdebug("handle_unregister_agent -> entry with"
2280
"~n Port: ~p", [UserId, Addr, Port]),
2281
case (catch agent_info(Addr, Port, user_id)) of
2507
"~n TargetName: ~p", [UserId, TargetName]),
2508
case (catch agent_info(TargetName, user_id)) of
2282
2509
{ok, UserId} ->
2283
{ok, EngineID} = agent_info(Addr, Port, engine_id),
2510
{ok, EngineID} = agent_info(TargetName, engine_id),
2284
2511
reset_usm_cache(EngineID),
2285
ets:match_delete(snmpm_agent_table, {{Addr, Port, '_'}, '_'}),
2512
%% <DIRTY-BACKWARD-COMPATIBILLITY>
2513
%% And now for some (backward compatibillity)
2514
%% dirty crossref stuff
2515
{ok, Addr} = agent_info(TargetName, address),
2516
{ok, Port} = agent_info(TargetName, port),
2517
ets:delete(snmpm_agent_table, {Addr, Port, target_name}),
2518
%% </DIRTY-BACKWARD-COMPATIBILLITY>
2519
ets:match_delete(snmpm_agent_table, {{TargetName, '_'}, '_'}),
2287
2521
{ok, OtherUserId} ->
2288
2522
{error, {not_owner, OtherUserId}};
2294
handle_update_agent_info(UserId, Addr, Port, Item, Val) ->
2528
handle_update_agent_info(UserId, TargetName, Item, Val) ->
2295
2529
?vdebug("handle_update_agent_info -> entry with"
2300
"~n Val: ~p", [UserId, Addr, Port, Item, Val]),
2301
case (catch agent_info(Addr, Port, user_id)) of
2533
"~n Val: ~p", [UserId, TargetName, Item, Val]),
2534
case (catch agent_info(TargetName, user_id)) of
2302
2535
{ok, UserId} ->
2303
do_update_agent_info(Addr, Port, Item, Val);
2536
do_update_agent_info(TargetName, Item, Val);
2304
2537
{ok, OtherUserId} ->
2305
2538
{error, {not_owner, OtherUserId}};
2310
do_update_agent_info(Addr, Port, Item, Val0) ->
2543
do_update_agent_info(TargetName, Item, Val0) ->
2544
%% p("do_update_agent_info -> entry with"
2545
%% "~n TargetName: ~p"
2547
%% "~n Val0: ~p", [TargetName, Item, Val0]),
2311
2548
case verify_val(Item, Val0) of
2313
ets:insert(snmpm_agent_table, {{Addr, Port, Item}, Val}),
2550
%% p("do_update_agent_info -> verified value"
2551
%% "~n Val: ~p", [Val]),
2552
ets:insert(snmpm_agent_table, {{TargetName, Item}, Val}),
2316
2555
?vlog("do_update_agent_info -> verify value failed: "
2321
"~n Error: ~p", [Addr, Port, Item, Val0, Error]),
2322
{error, {bad_agent_val, Addr, Port, Item, Val0}}
2559
"~n Error: ~p", [TargetName, Item, Val0, Error]),
2560
{error, {bad_agent_val, TargetName, Item, Val0}}
2506
2744
verify_val(user_id, UserId) ->
2508
verify_val(address, Ip) when list(Ip) ->
2509
case (catch snmp_conf:check_ip(Ip)) of
2511
{ok, list_to_tuple(Ip)};
2746
verify_val(reg_type, RegType)
2747
when (RegType =:= addr_port) orelse (RegType =:= target_name) ->
2749
verify_val(address, Addr0) ->
2750
case normalize_address(Addr0) of
2751
{_A1, _A2, _A3, _A4} = Addr ->
2753
_ when is_list(Addr0) ->
2754
case (catch snmp_conf:check_ip(Addr0)) of
2756
{ok, list_to_tuple(Addr0)};
2761
error({bad_address, Addr0})
2515
verify_val(address, {A1, A2, A3, A4} = Addr)
2516
when integer(A1), integer(A2), integer(A3), integer(A4) ->
2518
verify_val(address, InvalidAddr) ->
2519
error({bad_address, InvalidAddr});
2520
2763
verify_val(port, Port) ->
2521
2764
case (catch snmp_conf:check_integer(Port, {gt, 0})) of