檢視原始碼 snmpm_user 行為 (snmp v5.18)

SNMP 管理器使用者的行為模組。

此模組定義了管理器使用者的行為。符合 snmpm_user 的模組必須匯出以下函數

它們的語義和確切簽名將在下面解釋。

某些函數沒有定義的返回值 (void()),它們當然可以返回任何值。但是,具有指定返回值的函數必須遵守這一點。沒有任何函數可以使用 exit 或 throw 來返回。

如果管理器未配置為使用任何特定的傳輸域,為了向後兼容,行為 handle_agent/5 將使用舊的 IpAddrPortNumber 參數調用。

摘要

類型

一般錯誤資訊(不一定表示錯誤)。

陷阱相關資訊。

回呼

當從未知代理收到訊息時,會調用此函數。

當管理器需要向使用者傳達「非同步」錯誤時,會調用此函數:例如,無法發送非同步訊息(即編碼錯誤)、由於安全錯誤而丟棄收到的訊息、管理器無法產生對收到的 inform-request 的回應訊息,或當從代理收到意外的 PDU 時(可能是一個過期的非同步請求)。

如果任何其他回呼函數崩潰(exit、throw 或一般的崩潰)或返回無效結果(如果已指定有效的返回值),則會調用此函數。目的是允許使用者處理此錯誤(例如發出錯誤報告)。

處理對非同步請求的回覆,例如 async_getasync_get_nextasync_set

處理來自代理的 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-request 的回應訊息,或當從代理收到意外的 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 request behaviour 組態選項設定為 user{user, integer()},則當此函數返回時,將會發送對此 inform-request 的回應(確認)。

連結到此回呼

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()} 的使用者是預設使用者