查看源代码 snmpm_user 行为 (snmp v5.18)

SNMP 管理器用户的行为模块。

此模块定义了管理器用户的行为。一个符合 snmpm_user 的模块必须导出以下函数

它们的语义和确切的签名将在下面解释。

一些函数没有定义的返回值 (void()),它们当然可以返回任何值。但是,确实指定了返回值的函数必须遵守这一点。任何函数都不能使用 exit 或 throw 返回。

如果管理器未配置为使用任何特定的传输域,则出于向后兼容的原因,将使用旧的 IpAddrPortNumber 参数调用行为 handle_agent/5

摘要

类型

通用错误信息(不一定表示错误)。

陷阱相关信息。

回调

当收到来自未知代理的消息时,将调用此函数。

当管理器需要向用户传达“异步”错误时,将调用此函数:例如,发送异步消息失败(即编码错误)、收到的消息由于安全错误而被丢弃、管理器未能生成对收到的 inform 请求的响应,或者当从代理收到意外 PDU 时(可能是过期的异步请求)。

如果任何其他回调函数崩溃(exit、throw 或纯粹的崩溃)或返回无效结果(如果已指定了有效返回),则将调用此函数。目的是允许用户处理此错误(例如,发出错误报告)。

处理来自代理的 trap/通知消息。

类型

链接到此类型

ip_address()

查看源代码 (未导出)
-type ip_address() :: inet:ip_address().
链接到此类型

port_number()

查看源代码 (未导出)
-type port_number() :: inet:port_number().
-type snmp_gen_info() ::
          {ErrorStatus :: atom(), ErrorIndex :: pos_integer(), Varbinds :: [snmp:varbind()]}.

通用错误信息(不一定表示错误)。

-type snmp_v1_trap_info() ::
          {Enteprise :: snmp:oid(),
           Generic :: integer(),
           Spec :: integer(),
           Timestamp :: integer(),
           Varbinds :: [snmp:varbind()]}.

陷阱相关信息。

回调

链接到此回调

handle_agent(Domain, Address, Type, SnmpInfo, UserData)

查看源代码
-callback handle_agent(Domain :: atom(),
                       Address :: term(),
                       Type :: pdu | trap | inform | report,
                       SnmpInfo :: snmp_gen_info() | snmp_v1_trap_info(),
                       UserData :: term()) ->
                          Reply ::
                              ignore |
                              {register,
                               UserId :: term(),
                               RTargetName :: snmpm:target_name(),
                               AgentConfig :: [snmpm:agent_config()]}.

当收到来自未知代理的消息时,将调用此函数。

请注意,这将始终是被调用的默认用户。

有关 agent_config() 的更多信息,请参见 snmpm:register_agent/3

参数 TypeSnmpInfo 以以下方式相关

  • pdu - SnmpPduInfo (有关更多信息,请参见 handle_pdu/4)。
  • trap - SnmpTrapInfo (有关更多信息,请参见 handle_trap/3)。
  • report - SnmpReportInfo (有关更多信息,请参见 handle_report/3)。
  • inform - SnmpInformInfo (有关更多信息,请参见 handle_inform/3)。

唯一会返回 {register, UserId, TargetName, AgentConfig} 的用户是默认用户

链接到此回调

handle_error(ReqId, Reason, UserData)

查看源代码
-callback handle_error(ReqId :: netif | integer(),
                       Reason ::
                           {unexpected_pdu, SnmpInfo :: snmp_gen_info()} |
                           {invalid_sec_info, SecInfo :: term(), SnmpInfo :: snmp_gen_info()} |
                           {empty_message,
                            TransportDomain :: atom(),
                            {Addr :: ip_address(), Port :: port_number()}} |
                           term(),
                       UserData :: term()) ->
                          snmp:void().

当管理器需要向用户传达“异步”错误时,将调用此函数:例如,发送异步消息失败(即编码错误)、收到的消息由于安全错误而被丢弃、管理器未能生成对收到的 inform 请求的响应,或者当从代理收到意外 PDU 时(可能是过期的异步请求)。

如果 ReqId 小于 0,则表示管理器无法获得此信息(该信息在消息被丢弃之前从未检索过)。

有关 SnmpInfo,请参见下面的 handle_agent。

请注意,当 ReqId 的值具有原子 netif 的值时,有一种特殊情况。这意味着 NetIF 进程遭受了“致命”错误并已重新启动。可能丢失了流量!

链接到此回调

handle_inform(TargetName, SnmpInform, UserData)

查看源代码
-callback handle_inform(TargetName :: snmpm:target_name(),
                        SnmpInform :: snmp_gen_info(),
                        UserData :: term()) ->
                           Reply ::
                               ignore | no_reply | unregister |
                               {register,
                                UserId :: term(),
                                RTargetName :: snmpm:target_name(),
                                AgentConfig :: [snmpm:agent_config()]}.

处理 inform 消息。

有关 agent_config() 的更多信息,请参见 snmpm:register_agent/3

唯一会返回 {register, UserId, TargetName2, AgentConfig} 的用户是默认用户

如果 inform 请求行为配置选项设置为 user{user, integer()},则当此函数返回时,将发送对此 inform 请求的响应(确认)。

链接到此回调

handle_invalid_result(In, Out)

查看源代码 (可选) (自 OTP R16B03 起)
-callback handle_invalid_result(In, Out) -> no_return()
                                   when
                                       In :: {Fun :: atom(), Args :: list()},
                                       Out :: {crash, CrashInfo} | {result, InvalidResult :: term()},
                                       CrashInfo ::
                                           {ErrorType :: atom(),
                                            Error :: term(),
                                            Stacktrace :: erlang:stacktrace()}.

如果任何其他回调函数崩溃(exit、throw 或纯粹的崩溃)或返回无效结果(如果已指定了有效返回),则将调用此函数。目的是允许用户处理此错误(例如,发出错误报告)。

IN 代表调用的函数(及其参数)。OUT 代表意外/无效的结果。

链接到此回调

handle_pdu(TargetName, ReqId, SnmpResponse, UserData)

查看源代码
-callback handle_pdu(TargetName :: snmpm:target_name(),
                     ReqId :: term(),
                     SnmpResponse :: snmp_gen_info(),
                     UserData :: term()) ->
                        snmp:void().

处理对异步请求的答复,例如 async_getasync_get_nextasync_set

这也可能是对同步请求的延迟回复。

ReqId 由异步请求函数返回。

链接到此回调

handle_report(TargetName, SnmpReport, UserData)

查看源代码
-callback handle_report(TargetName :: snmpm:target_name(),
                        SnmpReport :: snmp_gen_info(),
                        UserData :: term()) ->
                           Reply ::
                               ignore | unregister |
                               {register,
                                UserId :: term(),
                                RTargetName :: snmpm:target_name(),
                                AgentConfig :: [snmpm:agent_config()]}.

处理 report 消息。

有关 agent_config() 的更多信息,请参见 snmpm:register_agent/3

唯一会返回 {register, UserId, TargetName2, AgentConfig} 的用户是默认用户

链接到此回调

handle_trap(TargetName, SnmpTrapInfo, UserData)

查看源代码
-callback handle_trap(TargetName :: snmpm:target_name(),
                      SnmpTrapInfo :: snmp_gen_info() | snmp_v1_trap_info(),
                      UserData :: term()) ->
                         Reply ::
                             ignore | unregister |
                             {register,
                              UserId :: term(),
                              RTargetName :: snmpm:target_name(),
                              AgentConfig :: [snmpm:agent_config()]}.

处理来自代理的 trap/通知消息。

有关 agent_config() 的更多信息,请参见 snmpm:register_agent/3

唯一会返回 {register, UserId, TargetName2, agent_info()} 的用户是默认用户