查看源码 ct_snmp (common_test v1.27.5)
Common Test
的 SNMP
应用程序用户界面模块。
此模块的目的是简化测试用例编写者的 SNMP 配置。许多测试用例可以使用通用操作的默认值,则无需提供任何 SNMP 配置文件。当需要更改特定的配置参数时,可以通过 Common Test
的配置文件将相关 SNMP 配置文件的子集传递给 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.conf
、standard.conf
、community.conf
、vacm.conf
、usm.conf
、notify.conf
、target_addr.conf
和 target_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).
请注意,USM 用户是 SNMPv3 配置所必需的,不应与用户混淆。
SNMP 陷阱、通知和报告消息由用户回调模块处理。有关详细信息,请参阅 SNMP
应用程序。
建议使用 Erlang/OTP MIB 编译器创建的 .hrl
文件来定义对象标识符 (OID)。例如,要从 OTP-MIB 中的 erlNodeTable
获取 Erlang 节点名称
Oid = ?erlNodeEntry ++ [?erlNodeName, 1]
此外,可以为 SNMP
应用程序配置参数 config
、server
、net_if
等设置值(有关有效参数和类型的列表,请参阅 SNMP 应用程序的用户指南
)。这是通过定义以下形式的配置数据变量来完成的
{snmp_app, [{manager, [snmp_app_manager_params()]},
{agent, [snmp_app_agent_params()]}]}.
必须使用 require
在套件中分配数据名称(参见上面的示例)。将此名称作为参数 SnmpAppConfName
传递给 ct_snmp:start/3
。ct_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 set
请求。
启动 SNMP 管理器和/或代理。在管理器情况下,会执行由配置 MgrAgentConfName
指定的用户和代理的注册。使用 SNMPv3 时,还会注册调用的 USM 用户。也可以使用 ct_snmp:register_users/2
、ct_snmp:register_agents/2
和 ct_snmp:register_usm_users/2
稍后注册用户、usm_users
和托管代理。
停止 SNMP 管理器和/或代理,并删除所有创建的文件。
从代理 snmp_master_agent
中卸载 MIB。
取消注册所有托管代理。
取消注册指定的托管代理。
取消注册所有用户。
取消注册指定的用户。
取消注册所有 USM 用户。
取消注册指定的 USM 用户。
类型
-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 manager_ip() :: ip().
-type oid() :: [byte()].
-type oids() :: [oid()].
-type rel_path() :: string().
-type sec_type() :: none | minimum | semi.
-type snmp_app_agent_params() :: term().
-type snmp_app_manager_params() :: term().
-type snmpreply() :: {error_status(), error_index(), varbinds()}.
-type user_data() :: term().
-type user_name() :: atom().
-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
应用程序的文档中描述。
函数
-spec get_next_values(Agent, Oids, MgrAgentConfName) -> SnmpReply when Agent :: agent_name(), Oids :: oids(), MgrAgentConfName :: atom(), SnmpReply :: snmpreply().
发出同步 SNMP get next
请求。
-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
中。
-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
中创建条目。
此函数尝试注册指定的托管代理,而不检查它们是否存在。要更改已注册的托管代理,必须先取消注册该代理。
-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
中创建条目。
此函数尝试注册指定的用户,而不检查它们是否存在。要更改已注册的用户,必须先取消注册该用户。
-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
请求及其可能的副作用。
-spec set_values(Agent, VarsAndVals, MgrAgentConfName, Config) -> SnmpReply when Agent :: agent_name(), VarsAndVals :: varsandvals(), MgrAgentConfName :: atom(), Config :: proplists:proplist(), SnmpReply :: snmpreply().
发出同步 SNMP set
请求。
-spec start(Config, MgrAgentConfName) -> ok | {error, Reason} when Config :: proplists:proplist(), MgrAgentConfName :: atom(), Reason :: term().
-spec start(Config, MgrAgentConfName, SnmpAppConfName) -> ok | {error, Reason} when Config :: proplists:proplist(), MgrAgentConfName :: atom(), SnmpAppConfName :: atom(), Reason :: term().
启动 SNMP 管理器和/或代理。在管理器情况下,会执行由配置 MgrAgentConfName
指定的用户和代理的注册。使用 SNMPv3 时,还会注册调用的 USM 用户。也可以使用 ct_snmp:register_users/2
、ct_snmp:register_agents/2
和 ct_snmp:register_usm_users/2
稍后注册用户、usm_users
和托管代理。
启动的代理称为 snmp_master_agent
。使用 ct_snmp:load_mibs/1
将 MIB 加载到代理中。
使用 SnmpAppConfName
,可以使用参数 config
、mibs
、net_if
等配置 SNMP 应用程序。这些值与 ct_snmp
设置的默认值合并(并可能覆盖)。
-spec stop(Config) -> ok when Config :: proplists:proplist().
停止 SNMP 管理器和/或代理,并删除所有创建的文件。
-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。
-spec unregister_agents(MgrAgentConfName) -> ok when MgrAgentConfName :: atom().
取消注册所有托管代理。
-spec unregister_agents(MgrAgentConfName, ManagedAgents) -> ok when MgrAgentConfName :: atom(), ManagedAgents :: [agent_name()].
取消注册指定的托管代理。
-spec unregister_users(MgrAgentConfName) -> ok when MgrAgentConfName :: atom().
取消注册所有用户。
-spec unregister_users(MgrAgentConfName, Users) -> ok when MgrAgentConfName :: atom(), Users :: [snmpm:user_id()].
取消注册指定的用户。
-spec unregister_usm_users(MgrAgentConfName) -> ok when MgrAgentConfName :: atom().
取消注册所有 USM 用户。
-spec unregister_usm_users(MgrAgentConfName, UsmUsers) -> ok when MgrAgentConfName :: atom(), UsmUsers :: [usm_user_name()].
取消注册指定的 USM 用户。