檢視原始碼 snmpm_user 行為 (snmp v5.18)
SNMP 管理器使用者的行為模組。
此模組定義了管理器使用者的行為。符合 snmpm_user
的模組必須匯出以下函數
handle_error/3
handle_agent/5
handle_pdu/4
handle_trap/3
handle_inform/3
handle_report/3
handle_invalid_result/2
它們的語義和確切簽名將在下面解釋。
某些函數沒有定義的返回值 (void()
),它們當然可以返回任何值。但是,具有指定返回值的函數必須遵守這一點。沒有任何函數可以使用 exit 或 throw 來返回。
如果管理器未配置為使用任何特定的傳輸域,為了向後兼容,行為 handle_agent/5
將使用舊的 IpAddr
和 PortNumber
參數調用。
摘要
回呼
當從未知代理收到訊息時,會調用此函數。
當管理器需要向使用者傳達「非同步」錯誤時,會調用此函數:例如,無法發送非同步訊息(即編碼錯誤)、由於安全錯誤而丟棄收到的訊息、管理器無法產生對收到的 inform-request 的回應訊息,或當從代理收到意外的 PDU 時(可能是一個過期的非同步請求)。
處理 inform 訊息。
如果任何其他回呼函數崩潰(exit、throw 或一般的崩潰)或返回無效結果(如果已指定有效的返回值),則會調用此函數。目的是允許使用者處理此錯誤(例如發出錯誤報告)。
處理對非同步請求的回覆,例如 async_get、async_get_next 或 async_set。
處理 report 訊息。
處理來自代理的 trap/通知訊息。
類型
-type ip_address() :: inet:ip_address().
-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()]}.
陷阱相關資訊。
回呼
-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
。
參數 Type
和 SnmpInfo
的關係如下
pdu
-SnmpPduInfo
(有關更多資訊,請參閱handle_pdu/4
)。trap
-SnmpTrapInfo
(有關更多資訊,請參閱handle_trap/3
)。report
-SnmpReportInfo
(有關更多資訊,請參閱handle_report/3
)。inform
-SnmpInformInfo
(有關更多資訊,請參閱handle_inform/3
)。
唯一會返回 {register, UserId, TargetName, AgentConfig}
的使用者是預設使用者。
-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 程序發生「致命」錯誤並已重新啟動。可能會遺失流量!
-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 的回應(確認)。
-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
代表意外/無效的結果。
-callback handle_pdu(TargetName :: snmpm:target_name(), ReqId :: term(), SnmpResponse :: snmp_gen_info(), UserData :: term()) -> snmp:void().
處理對非同步請求的回覆,例如 async_get、async_get_next 或 async_set。
它也可能是對同步請求的延遲回覆。
ReqId
由非同步請求函數返回。
-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}
的使用者是預設使用者。
-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()}
的使用者是預設使用者。