snmp_config.erl

来自「OTP是开放电信平台的简称」· ERL 代码 · 共 2,125 行 · 第 1/5 页

ERL
2,125
字号
		if		    IsAgentDir and IsManagerDir ->			"Note that the default directory contains both agent and manager config files";		    IsAgentDir ->			"Note that the default directory contains agent config files";		    IsManagerDir ->			"Note that the default directory contains manager config files";		    true ->			""		end,	    {DefDir, Warning}    end.%% ------------------------------------------------------------------ask_auth_key(_Prefix, usmNoAuthProtocol) ->    "";ask_auth_key(Prefix, usmHMACSHAAuthProtocol) ->    ask(Prefix ++ "  Authentication [sha] key (length 0 or 20)?", "\"\"",	fun verify_usm_auth_sha_key/1);ask_auth_key(Prefix, usmHMACMD5AuthProtocol) ->    ask(Prefix ++ "  Authentication [md5] key (length 0 or 16)?", "\"\"",	fun verify_usm_auth_md5_key/1).ask_priv_key(_Prefix, usmNoPrivProtocol) ->    "";ask_priv_key(Prefix, usmDESPrivProtocol) ->    ask(Prefix ++ "  Priv [des] key (length 0 or 16)?", "\"\"",	fun verify_usm_priv_des_key/1);ask_priv_key(Prefix, usmAesCfb128Protocol) ->    ask(Prefix ++ "  Priv [aes] key (length 0 or 16)?", "\"\"",	fun verify_usm_priv_aes_key/1).%% ------------------------------------------------------------------verify_yes_or_no("y") ->    {ok, yes};verify_yes_or_no("yes") ->    {ok, yes};verify_yes_or_no("n") ->    {ok, no};verify_yes_or_no("no") ->    {ok, no};verify_yes_or_no(YON) ->    {error, "invalid yes or no: " ++ YON}.verify_prio("low") ->    {ok, low};verify_prio("normal") ->    {ok, normal};verify_prio("high") ->    {ok, high};verify_prio(Prio) ->    {error, "invalid process priority: " ++ Prio}.verify_system_name(Name) -> {ok, Name}.verify_engine_id(Name) -> {ok, Name}.verify_max_message_size(MMS) ->    case (catch list_to_integer(MMS)) of	I when integer(I), I >= 484 ->	    {ok, I};	I when integer(I) ->	    {error, "invalid max message size (must be atleast 484): " ++ MMS};	_ ->	    {error, "invalid max message size: " ++ MMS}    end.	 verify_port_number(P) ->    case (catch list_to_integer(P)) of	N when integer(N), N > 0 ->	    {ok, N};	_ ->	    {error, "invalid port number: " ++ P}    end.verify_versions("1")     -> {ok, [v1]};verify_versions("2")     -> {ok, [v2]};verify_versions("3")     -> {ok, [v3]};verify_versions("1&2")   -> {ok, [v1,v2]};verify_versions("1&3")   -> {ok, [v1,v3]};verify_versions("2&3")   -> {ok, [v2,v3]};verify_versions("1&2&3") -> {ok, [v1,v2,v3]};verify_versions(V)       -> {error, "incorrect version(s): " ++ V}.verify_version("1")     -> {ok, v1};verify_version("2")     -> {ok, v2};verify_version("3")     -> {ok, v3};verify_version(V)       -> {error, "incorrect version: " ++ V}.    verify_passwd(Passwd) when length(Passwd) >= 8 ->    {ok, Passwd};verify_passwd(_P) ->    {error, "invalid password"}.verify_dir(Dir) ->    case filename:pathtype(Dir) of	absolute -> 	    case file:read_file_info(Dir) of		{ok, #file_info{type = directory}} ->		    {ok, snmp_misc:ensure_trailing_dir_delimiter(Dir)};		{ok, _FileInfo} ->		    {error, Dir ++ " is not a directory"};		_ ->		    {error, "invalid directory: " ++ Dir}	    end;	_E -> 	    {error, "invalid directory (not absolute): " ++ Dir}    end.	    verify_notif_type("trap")   -> {ok, trap};verify_notif_type("inform") -> {ok, inform};verify_notif_type(NT)       -> {error, "invalid notifcation type: " ++ NT}.verify_sec_type("none")     -> {ok, none};verify_sec_type("minimum")  -> {ok, minimum};verify_sec_type("semi_des") -> {ok, {semi, des}};verify_sec_type("semi_aes") -> {ok, {semi, aes}};verify_sec_type(ST)         -> {error, "invalid security type: " ++ ST}.    verify_address(A) ->    case (catch snmp_misc:ip(A)) of	{ok, IP} ->	     {ok, tuple_to_list(IP)};	{error, _} ->	    {error, "invalid address: " ++ A};	_E ->	    {error, "invalid address: " ++ A}    end.verify_mib_storage_type("m") ->    {ok, mnesia};verify_mib_storage_type("mnesia") ->    {ok, mnesia};verify_mib_storage_type("d") ->    {ok, dets};verify_mib_storage_type("dets") ->    {ok, dets};verify_mib_storage_type("e") ->    {ok, ets};verify_mib_storage_type("ets") ->    {ok, ets};verify_mib_storage_type(T) ->    {error, "invalid mib storage type: " ++ T}.verify_mib_storage_action("default") ->    {ok, default};verify_mib_storage_action("clear") ->    {ok, clear};verify_mib_storage_action("keep") ->    {ok, keep};verify_mib_storage_action(A) ->    {error, "invalid mib storage action: " ++ A}.verify_verbosity("silence") ->    {ok, silence};verify_verbosity("info") ->    {ok, info};verify_verbosity("log") ->    {ok, log};verify_verbosity("debug") ->    {ok, debug};verify_verbosity("trace") ->    {ok, trace};verify_verbosity(V) ->    {error, "invalid verbosity: " ++ V}.verify_dets_repair("true") ->    {ok, true};verify_dets_repair("false") ->    {ok, false};verify_dets_repair("force") ->    {ok, force};verify_dets_repair(R) ->    {error, "invalid repair: " ++ R}.verify_dets_auto_save("infinity") ->    {ok, infinity};verify_dets_auto_save(I0) ->    case (catch list_to_integer(I0)) of	I when integer(I), I > 0 ->	    {ok, I};	_ -> 	    {error, "invalid auto save timeout time: " ++ I0}    end.%% I know that this is a little of the edge, but...verify_module(M0) ->    case (catch list_to_atom(M0)) of	M when atom(M) ->	    {ok, M};	_ ->	    {error, "invalid module: " ++ M0}    end.	 verify_agent_type("master") ->    {ok, master};verify_agent_type("sub") ->    {ok, sub};verify_agent_type(AT) ->    {error, "invalid agent type: " ++ AT}.verify_bool("true") ->    {ok, true};verify_bool("false") ->    {ok, false};verify_bool(B) ->    {error, "invalid boolean: " ++ B}.verify_timeout(T0) ->    case (catch list_to_integer(T0)) of	T when integer(T), T > 0 ->	    {ok, T};	_ ->	    {error, "invalid timeout time: '" ++ T0 ++ "'"}    end.verify_retransmission_timeout("infinity") ->    {ok, infinity};verify_retransmission_timeout([${|R] = Timer) ->    case lists:reverse(R) of	[$}|R2] ->	    case string:tokens(lists:reverse(R2), ", ") of		[WaitForStr, FactorStr, IncrStr, RetryStr] ->		    WaitFor = incr_timer_value(WaitForStr, 1),		    Factor  = incr_timer_value(FactorStr,  1),		    Incr    = incr_timer_value(IncrStr,    0),		    Retry   = incr_timer_value(RetryStr,   0),		    {ok, {WaitFor, Factor, Incr, Retry}};		_ ->		    {error, "invalid retransmission timer: '" ++ Timer ++ "'"}	    end;	_ ->	    {error, "invalid retransmission timer: '" ++ Timer ++ "'"}    end;verify_retransmission_timeout(T0) ->    case (catch list_to_integer(T0)) of	T when integer(T), T > 0 ->	    {ok, T};	_ ->	    {error, "invalid timeout time: '" ++ T0 ++ "'"}    end.incr_timer_value(Str, Min) ->    case (catch list_to_integer(Str)) of	I when integer(I), I >= Min ->	    I;	I when integer(I) ->	    E = lists:flatten(io_lib:format("invalid incremental timer value "					    "(min value is ~w): " ++ Str, 					    [Min])),	    error(E);	_ ->	    error("invalid incremental timer value: " ++ Str)    end.	 %% verify_atl_type("read") ->%%     {ok, read};verify_atl_type("write") ->    {ok, write};verify_atl_type("read_write") ->    {ok, read_write};verify_atl_type(T) ->    {error, "invalid log type: " ++ T}.verify_atl_repair("true") ->    {ok, true};verify_atl_repair("false") ->    {ok, false};verify_atl_repair("truncate") ->    {ok, truncate};verify_atl_repair("snmp_repair") ->    {ok, snmp_repair};verify_atl_repair(R) ->    {error, "invalid audit trail log repair: " ++ R}.verify_pos_integer(I0) ->    case (catch list_to_integer(I0)) of	I when integer(I), I > 0 ->	    {ok, I};	_ ->	    {error, "invalid integer value: " ++ I0}    end.verify_netif_req_limit("infinity") ->    {ok, infinity};verify_netif_req_limit(I0) ->    case (catch list_to_integer(I0)) of	I when integer(I), I > 0 ->	    {ok, I};	_ ->	    {error, "invalid network interface request limit: " ++ I0}    end.verify_netif_recbuf(Val) ->    verify_netif_recbuf_or_sndbuf(Val, "recbuf").verify_netif_sndbuf(Val) ->    verify_netif_recbuf_or_sndbuf(Val, "sndbuf").verify_netif_recbuf_or_sndbuf("default", _) ->    {ok, default};verify_netif_recbuf_or_sndbuf(I0, Buf) ->    case (catch list_to_integer(I0)) of	I when integer(I), I > 0 ->	    {ok, I};	_ ->	    {error, "invalid network interface " ++ Buf ++ " size: " ++ I0}    end.verify_irb("auto") ->    {ok, auto};verify_irb("user") ->    {ok, user};verify_irb(IRB) ->    E = lists:flatten(io_lib:format("invalid irb: ~p", [IRB])),    {error, E}.verify_irb_user("default") ->    {ok, default};verify_irb_user(TO) ->    case (catch list_to_integer(TO)) of	I when integer(I), I > 0 ->	    {ok, I*1000}; % Time is given in seconds	_ ->	    {error, "invalid IRB GC time: " ++ TO}    end.    verify_user_id(UserId) when list(UserId) ->    case (catch list_to_atom(UserId)) of	A when atom(A) ->	    {ok, A};	_ ->	    {error, "invalid user id: " ++ UserId}    end;verify_user_id(UserId) when atom(UserId) ->    {ok, UserId};verify_user_id(UserId) ->    E = lists:flatten(io_lib:format("invalid user id: ~p", [UserId])),    {error, E}.verify_user_data("undefined") ->    {ok, undefined};verify_user_data(UserData) ->    {ok, UserData}.verify_community("\"\"") ->    {ok, ""};verify_community(Comm) ->    {ok, Comm}.% verify_context_name("\"\"") ->%     {ok, ""};% verify_context_name(Ctx) ->%     {ok, Ctx}.% verify_mp_model("v1") ->%     {ok, v1};% verify_mp_model("v2c") ->%     {ok, v2c};% verify_mp_model("v3") ->%     {ok, v3};% verify_mp_model(M) ->%     {error, "invalid mp model: " ++ M}.verify_sec_model("any") ->    {ok, any};verify_sec_model("v1") ->    {ok, v1};verify_sec_model("v2c") ->    {ok, v2c};verify_sec_model("usm") ->    {ok, usm};verify_sec_model(M) ->    {error, "invalid sec model: " ++ M}.verify_sec_name("\"initial\"") ->    {ok, "initial"};verify_sec_name(N) ->    {ok, N}.verify_sec_level("noAuthNoPriv") ->    {ok, noAuthNoPriv};verify_sec_level("authNoPriv") ->    {ok, authNoPriv};verify_sec_level("authPriv") ->    {ok, authPriv};verify_sec_level(L) ->    {error, "invalid sec level: " ++ L}.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?