檢視原始碼 ct_snmp (common_test v1.27.5)

Common Test 的使用者介面模組,用於 SNMP 應用程式。

此模組的目的是簡化測試案例撰寫者的 SNMP 設定。許多測試案例可以使用常見操作的預設值,而無需提供 SNMP 設定檔。當需要變更特定的設定參數時,可以將相關 SNMP 設定檔的子集,透過 Common Test 設定檔傳遞給 ct_snmp。對於更專業的設定參數,可以將簡單的 SNMP 設定檔放置在測試套件的資料目錄中。為了簡化測試套件,Common Test 會追蹤一些 SNMP 管理器的資訊。這樣,測試套件就不需要像直接與 OTP SNMP 管理器介接時那樣處理許多輸入參數。

可設定的 SNMP 管理器和代理程式參數

管理器設定

  • [{start_manager, boolean()} - 選用。預設值為 true

  • {users, [{user_name(), [call_back_module(), user_data()]}]} - 選用。

  • {usm_users, [{usm_user_name(), [usm_config()]}]} - 選用。僅限 SNMPv3。

  • {managed_agents,[{agent_name(), [user_name(), agent_ip(), agent_port(), [agent_config()]]}]} - managed_agents 是選用的。

  • {max_msg_size, integer()} - 選用。預設值為 484

  • {mgr_port, integer()} - 選用。預設值為 5000

  • {engine _id, string()} - 選用。預設值為 "mgrEngine"

代理程式設定

  • {start_agent, boolean()} - 選用。預設值為 false

  • {agent_sysname, string()} - 選用。預設值為 "ct_test"

  • {agent_manager_ip, manager_ip()} - 選用。預設值為 localhost

  • {agent_vsns, list()} - 選用。預設值為 [v2]

  • {agent_trap_udp, integer()} - 選用。預設值為 5000

  • {agent_udp, integer()} - 選用。預設值為 4000

  • {agent_notify_type, atom()} - 選用。預設值為 trap

  • {agent_sec_type, sec_type()} - 選用。預設值為 none

  • {agent_passwd, string()} - 選用。預設值為 ""

  • {agent_engine_id, string()} - 選用。預設值為 "agentEngine"

  • {agent_max_msg_size, string()} - 選用。預設值為 484

以下參數代表 SNMP 設定檔 context.confstandard.confcommunity.confvacm.confusm.confnotify.conftarget_addr.conftarget_params.conf。請注意,agent.conf 中的所有值都可以透過上面列出的參數進行修改。所有這些設定檔都由 SNMP 應用程式設定了預設值。這些值可以透過提供有效的設定值清單或位於測試套件資料目錄中的檔案來覆寫。如果您將函式 file:consult/1 應用於該檔案,則可以產生有效的設定值清單。

  • {agent_contexts, [term()] | {data_dir_file, rel_path()}} - 選用。

  • {agent_community, [term()] | {data_dir_file, rel_path()}} - 選用。

  • {agent_sysinfo, [term()] | {data_dir_file, rel_path()}} - 選用。

  • {agent_vacm, [term()] | {data_dir_file, rel_path()}} - 選用。

  • {agent_usm, [term()] | {data_dir_file, rel_path()}} - 選用。

  • {agent_notify_def, [term()] | {data_dir_file, rel_path()}} - 選用。

  • {agent_target_address_def, [term()] | {data_dir_file, rel_path()}} - 選用。

  • {agent_target_param_def, [term()] | {data_dir_file, rel_path()}} - 選用。

函式中的參數 MgrAgentConfName 是您在測試套件中使用 require 陳述式分配的名稱。範例 (其中 MgrAgentConfName = snmp_mgr_agent)

suite() -> [{require, snmp_mgr_agent, snmp}].

ct:require(snmp_mgr_agent, snmp).

請注意,SNMPv3 設定需要 USM 使用者,並且不要與使用者混淆。

SNMP 陷阱、通知和報告訊息由使用者回呼模組處理。詳情請參閱 SNMP 應用程式。

建議使用 Erlang/OTP MIB 編譯器建立的 .hrl 檔案來定義物件識別碼 (OID)。例如,要從 OTP-MIB 中的 erlNodeTable 取得 Erlang 節點名稱

Oid = ?erlNodeEntry ++ [?erlNodeName, 1]

此外,可以為 SNMP 應用程式設定參數設定值,例如 configservernet_if 等等 (有關有效參數和類型的列表,請參閱 SNMP 應用程式的使用者指南)。這是透過定義以下形式的設定資料變數來完成的

{snmp_app, [{manager, [snmp_app_manager_params()]},
            {agent, [snmp_app_agent_params()]}]}.

必須在套件中使用 require 分配資料的名稱 (請參閱上面的範例)。將此名稱作為引數 SnmpAppConfName 傳遞給 ct_snmp:start/3ct_snmp 為一些 SNMP 應用程式設定參數指定預設值 (例如,參數 config{verbosity,trace})。這組預設值與使用者指定的參數合併。使用者值會覆寫 ct_snmp 預設值。

摘要

函式

發出同步 SNMP get next 請求。

發出同步 SNMP get 請求。

將 MIB 載入代理程式 snmp_master_agent

明確指示管理器處理此代理程式。相當於在 agents.conf 中建立一個條目。

註冊負責特定代理程式的管理員實體 (= 使用者)。相當於在 users.conf 中建立一個條目。

明確指示管理器處理此 USM 使用者。相當於在 usm.conf 中建立一個條目。

以相反的順序傳回在測試案例中執行的所有成功 set 請求的清單。該清單包含涉及的使用者和代理程式、set 之前的值,以及新值。這旨在簡化函式 end_per_testcase 中的清除,也就是還原 set 請求及其可能產生的副作用。

啟動 SNMP 管理器和/或代理程式。在管理器的情況下,將執行由組態 MgrAgentConfName 指定的使用者和代理程式註冊。使用 SNMPv3 時,也會註冊所謂的 USM 使用者。使用者、usm_users 和受管理的代理程式也可以稍後使用 ct_snmp:register_users/2ct_snmp:register_agents/2ct_snmp:register_usm_users/2 註冊。

停止 SNMP 管理器和/或代理程式,並移除建立的所有檔案。

從代理程式 snmp_master_agent 卸載 MIB。

取消註冊所有受管理的代理程式。

取消註冊指定的受管理代理程式。

取消註冊所有使用者。

取消註冊指定的使用者。

取消註冊所有 USM 使用者。

取消註冊指定的 USM 使用者。

類型

-type agent_config() :: {Item :: term(), Value :: term()}.
-type agent_ip() :: ip().
-type agent_name() :: atom().
-type agent_port() :: integer().
-type call_back_module() :: atom().
-type error_index() :: integer().
-type error_status() :: noError | atom().
-type ip() :: string() | {integer(), integer(), integer(), integer()}.
-type manager_ip() :: ip().
-type oid() :: [byte()].
-type oids() :: [oid()].
-type rel_path() :: string().
-type sec_type() :: none | minimum | semi.
連結到此類型

snmp_app_agent_params()

檢視原始碼
-type snmp_app_agent_params() :: term().
連結到此類型

snmp_app_manager_params()

檢視原始碼
-type snmp_app_manager_params() :: term().
-type snmpreply() :: {error_status(), error_index(), varbinds()}.
-type user_data() :: term().
-type user_name() :: atom().
-type usm_config() :: {Item :: term(), Value :: term()}.
-type usm_user_name() :: string().
-type value_type() :: o | i | u | g | s.
-type var_and_val() :: {oid(), value_type(), term()}.
-type varbind() :: term().
-type varbinds() :: [varbind()].
-type varsandvals() :: [var_and_val()].

這些資料類型在 SNMP 應用程式的文件中有所說明。

函式

連結到此函式

get_next_values(Agent, Oids, MgrAgentConfName)

檢視原始碼
-spec get_next_values(Agent, Oids, MgrAgentConfName) -> SnmpReply
                         when
                             Agent :: agent_name(),
                             Oids :: oids(),
                             MgrAgentConfName :: atom(),
                             SnmpReply :: snmpreply().

發出同步 SNMP get next 請求。

連結到此函式

get_values(Agent, Oids, MgrAgentConfName)

檢視原始碼
-spec get_values(Agent, Oids, MgrAgentConfName) -> SnmpReply
                    when
                        Agent :: agent_name(),
                        Oids :: oids(),
                        MgrAgentConfName :: atom(),
                        SnmpReply :: snmpreply().

發出同步 SNMP get 請求。

-spec load_mibs(Mibs) -> ok | {error, Reason}
                   when
                       Mibs :: [MibName],
                       MibName :: string(),
                       Reason :: {'load aborted at', MibName, InternalReason},
                       InternalReason :: already_loaded | term().

將 MIB 載入代理程式 snmp_master_agent

連結到此函式

register_agents(MgrAgentConfName, ManagedAgents)

檢視原始碼
-spec register_agents(MgrAgentConfName, ManagedAgents) -> ok | {error, Reason}
                         when
                             MgrAgentConfName :: atom(),
                             ManagedAgents :: [{AgentName, [Uid | AgentIp | AgentUdpPort | AgentConf]}],
                             AgentName :: agent_name(),
                             Uid :: snmpm:user_id(),
                             AgentIp :: agent_ip(),
                             AgentUdpPort :: inet:port_number(),
                             AgentConf :: [agent_config()],
                             Reason :: term().

明確指示管理器處理此代理程式。相當於在 agents.conf 中建立一個條目。

此函式嘗試註冊指定的受管理代理程式,而不檢查其中任何一個是否存在。要變更已註冊的受管理代理程式,必須先取消註冊該代理程式。

連結到此函式

register_users(MgrAgentConfName, Users)

檢視原始碼
-spec register_users(MgrAgentConfName, Users) -> ok | {error, Reason}
                        when
                            MgrAgentConfName :: atom(),
                            Users :: [{Id, [Module | Data]}],
                            Id :: snmpm:user_id(),
                            Module :: user_name(),
                            Data :: user_data(),
                            Reason :: term().

註冊負責特定代理程式的管理員實體 (= 使用者)。相當於在 users.conf 中建立一個條目。

此函式嘗試註冊指定的使用者,而不檢查其中任何一個是否存在。要變更已註冊的使用者,必須先取消註冊該使用者。

連結到此函式

register_usm_users(MgrAgentConfName, UsmUsers)

檢視原始碼
-spec register_usm_users(MgrAgentConfName, UsmUsers) -> ok | {error, Reason}
                            when
                                MgrAgentConfName :: atom(),
                                UsmUsers :: [{UsmUserName, UsmConfig}],
                                UsmUserName :: usm_user_name(),
                                UsmConfig :: [usm_config()],
                                Reason :: term().

明確指示管理器處理此 USM 使用者。相當於在 usm.conf 中建立一個條目。

此函式嘗試註冊指定的使用者,而不檢查其中任何一個是否存在。要變更已註冊的使用者,必須先取消註冊該使用者。

-spec set_info(Config) -> [{Agent, OldVarsAndVals, NewVarsAndVals}]
                  when
                      Config :: proplists:proplist(),
                      Agent :: agent_name(),
                      OldVarsAndVals :: varsandvals(),
                      NewVarsAndVals :: varsandvals().

以相反的順序傳回在測試案例中執行的所有成功 set 請求的清單。該清單包含涉及的使用者和代理程式、set 之前的值,以及新值。這旨在簡化函式 end_per_testcase 中的清除,也就是還原 set 請求及其可能產生的副作用。

連結到此函式

set_values(Agent, VarsAndVals, MgrAgentConfName, Config)

檢視原始碼
-spec set_values(Agent, VarsAndVals, MgrAgentConfName, Config) -> SnmpReply
                    when
                        Agent :: agent_name(),
                        VarsAndVals :: varsandvals(),
                        MgrAgentConfName :: atom(),
                        Config :: proplists:proplist(),
                        SnmpReply :: snmpreply().

發出同步 SNMP set 請求。

連結到此函式

start(Config, MgrAgentConfName)

檢視原始碼
-spec start(Config, MgrAgentConfName) -> ok | {error, Reason}
               when Config :: proplists:proplist(), MgrAgentConfName :: atom(), Reason :: term().

等同於 start(Config, MgrAgentConfName, undefined)

連結到此函式

start(Config, MgrAgentConfName, SnmpAppConfName)

檢視原始碼
-spec start(Config, MgrAgentConfName, SnmpAppConfName) -> ok | {error, Reason}
               when
                   Config :: proplists:proplist(),
                   MgrAgentConfName :: atom(),
                   SnmpAppConfName :: atom(),
                   Reason :: term().

啟動 SNMP 管理器和/或代理程式。在管理器的情況下,將執行由組態 MgrAgentConfName 指定的使用者和代理程式註冊。使用 SNMPv3 時,也會註冊所謂的 USM 使用者。使用者、usm_users 和受管理的代理程式也可以稍後使用 ct_snmp:register_users/2ct_snmp:register_agents/2ct_snmp:register_usm_users/2 註冊。

啟動的代理程式稱為 snmp_master_agent。使用 ct_snmp:load_mibs/1 將 MIB 載入到代理程式中。

透過 SnmpAppConfName,可以使用參數 configmibsnet_if 等來設定 SNMP 應用程式。這些值會與 ct_snmp 設定的預設值合併(並可能覆蓋)。

-spec stop(Config) -> ok when Config :: proplists:proplist().

停止 SNMP 管理器和/或代理程式,並移除建立的所有檔案。

連結到此函式

unload_mibs(Mibs)

檢視原始碼 (自 OTP R16B 起)
-spec unload_mibs(Mibs) -> ok | {error, Reason}
                     when
                         Mibs :: [MibName],
                         MibName :: string(),
                         Reason :: {'unload aborted at', MibName, InternalReason},
                         InternalReason :: not_loaded | term().

從代理程式 snmp_master_agent 卸載 MIB。

連結到此函式

unregister_agents(MgrAgentConfName)

檢視原始碼
-spec unregister_agents(MgrAgentConfName) -> ok when MgrAgentConfName :: atom().

取消註冊所有受管理的代理程式。

連結到此函式

unregister_agents(MgrAgentConfName, ManagedAgents)

檢視原始碼 (自 OTP R16B 起)
-spec unregister_agents(MgrAgentConfName, ManagedAgents) -> ok
                           when MgrAgentConfName :: atom(), ManagedAgents :: [agent_name()].

取消註冊指定的受管理代理程式。

連結到此函式

unregister_users(MgrAgentConfName)

檢視原始碼
-spec unregister_users(MgrAgentConfName) -> ok when MgrAgentConfName :: atom().

取消註冊所有使用者。

連結到此函式

unregister_users(MgrAgentConfName, Users)

檢視原始碼 (自 OTP R16B 起)
-spec unregister_users(MgrAgentConfName, Users) -> ok
                          when MgrAgentConfName :: atom(), Users :: [snmpm:user_id()].

取消註冊指定的使用者。

連結到此函式

unregister_usm_users(MgrAgentConfName)

檢視原始碼 (自 OTP R16B 起)
-spec unregister_usm_users(MgrAgentConfName) -> ok when MgrAgentConfName :: atom().

取消註冊所有 USM 使用者。

連結到此函式

unregister_usm_users(MgrAgentConfName, UsmUsers)

檢視原始碼 (自 OTP R16B 起)
-spec unregister_usm_users(MgrAgentConfName, UsmUsers) -> ok
                              when MgrAgentConfName :: atom(), UsmUsers :: [usm_user_name()].

取消註冊指定的 USM 使用者。