檢視原始碼 snmpa_mpd (snmp v5.18)
SNMP 代理程式的訊息處理和分派模組
模組 snmpa_mpd
實作 SNMP 中用於代理程式的版本獨立訊息處理和分派功能。它應該從網路介面程序中使用(代理程式網路介面定義)。
資料類型
如需詳細資訊,請參閱 snmpa_conf
中的資料類型。
摘要
類型
這是 SNMP 訊息中使用的訊息特定資料。此值在來自代理程式(由 net-if 程序)的 send_pdu
或 send_pdu_req
訊息中接收。
這是 SNMPv1 和 SNMPv2c 訊息中使用的訊息特定資料。
這是 SNMPv3 訊息中使用的訊息特定資料。
處理稽核追蹤記錄的 fun
。
這是 SNMP 訊息中使用的訊息特定資料。此值在來自代理程式(由 net-if 程序)的 send_pdu
或 send_pdu_req
訊息中接收。
這是 SNMP 訊息中使用的訊息特定資料。在 SNMPv1 和 SNMPv2c 中,此訊息資料是社群字串。
這是 SNMP 訊息中使用的訊息特定資料。在 SNMPv3 中,它是上下文資訊。
類型
-type acm_data() :: acm_data_cmy() | acm_data_v3().
這是 SNMP 訊息中使用的訊息特定資料。此值在來自代理程式(由 net-if 程序)的 send_pdu
或 send_pdu_req
訊息中接收。
-opaque acm_data_cmy()
這是 SNMPv1 和 SNMPv2c 訊息中使用的訊息特定資料。
-opaque acm_data_v3()
這是 SNMPv3 訊息中使用的訊息特定資料。
-type logger() :: fun((Type :: snmp_pdus:pdu_type(), Data :: binary() | {V3Hdr :: snmp_pdus:v3_hdr(), ScopedPDUBytes :: binary()}) -> snmp:void()).
處理稽核追蹤記錄的 fun
。
-opaque mpd_state()
-type msg_data() :: msg_data_cmy() | msg_data_ctx().
這是 SNMP 訊息中使用的訊息特定資料。此值在來自代理程式(由 net-if 程序)的 send_pdu
或 send_pdu_req
訊息中接收。
-opaque msg_data_cmy()
這是 SNMP 訊息中使用的訊息特定資料。在 SNMPv1 和 SNMPv2c 中,此訊息資料是社群字串。
-opaque msg_data_ctx()
這是 SNMP 訊息中使用的訊息特定資料。在 SNMPv3 中,它是上下文資訊。
函式
-spec discarded_pdu(Variable) -> snmp:void() when Variable :: snmpa:name() | false.
遞增與丟棄的 PDU 相關聯的變數。當 net_if 程序從代理程式接收到 discarded_pdu
訊息時,可以使用此函式。
-spec generate_msg(Vsn, NoteStore, Pdu, MsgData, To) -> {ok, PacketsAndAddresses} | {discarded, Reason} when Vsn :: snmp_pdus:version(), NoteStore :: pid(), Pdu :: snmp_pdus:pdu(), MsgData :: msg_data(), To :: [{Domain, Address}], PacketsAndAddresses :: [{Domain, Address, Packet}], Domain :: snmpa_conf:transportDomain(), Address :: snmpa_conf:transportAddress(), Packet :: binary(), Reason :: term().
等同於 generate_msg/6
。
-spec generate_msg(Vsn, NoteStore, Pdu, MsgData, LocalEngineID, To) -> {ok, PacketsAndAddresses} | {discarded, Reason} when Vsn :: snmp_pdus:version(), NoteStore :: pid(), Pdu :: snmp_pdus:pdu(), MsgData :: msg_data(), LocalEngineID :: snmp_framework_mib:engine_id(), To :: [DestAddr], DestAddr :: {Domain, Address} | {{Domain, Address}, SecData}, SecData :: term(), PacketsAndAddresses :: [{Domain, Address, Packet}], Domain :: snmpa_conf:transportDomain(), Address :: snmpa_conf:transportAddress(), Packet :: binary(), Reason :: term().
產生一個可能加密的請求封包,以傳送到網路。
MsgData
是 SNMP 訊息中使用的訊息特定資料。此值在來自代理程式的 send_pdu
或 send_pdu_req
訊息中接收。在 SNMPv1 和 SNMPv2c 中,此訊息資料是 社群 字串。在 SNMPv3 中,它是 上下文 資訊。
To
是目的地位址及其對應安全參數的清單。此值從代理程式在同一個訊息中接收,然後通過 process_taddrs
轉換,然後傳遞給此函式。
注意
請注意,LocalEngineID 引數的使用僅適用於特殊情況,如果代理程式要「模擬」多個 EngineID!預設情況下,代理程式使用
SnmpEngineID
的值(請參閱 SNMP-FRAMEWORK-MIB)。
-spec generate_response_msg(Vsn, RePdu, Type, ACMData, Log) -> {ok, Packet} | {discarded, Reason} when Vsn :: snmp_pdus:version(), RePdu :: snmp_pdus:pdu(), Type :: snmp_pdus:pdu_type(), ACMData :: acm_data(), Log :: logger(), Packet :: binary(), Reason :: term().
-spec generate_response_msg(Vsn, RePdu, Type, ACMData, LocalEngineID, Log) -> {ok, Packet} | {discarded, Reason} when Vsn :: snmp_pdus:version(), RePdu :: snmp_pdus:pdu(), Type :: snmp_pdus:pdu_type(), ACMData :: acm_data(), LocalEngineID :: snmp_framework_mib:engine_id(), Log :: logger(), Packet :: binary(), Reason :: term().
產生一個可能加密的回應封包,以傳送到網路。Type
是原始請求的 #pdu.type
。
注意
請注意,LocalEngineID 引數的使用僅適用於特殊情況,如果代理程式要「模擬」多個 EngineID!預設情況下,代理程式使用
SnmpEngineID
的值(請參閱 SNMP-FRAMEWORK-MIB)。
-spec init(Vsns) -> MPDState when Vsns :: [snmp:version()], MPDState :: mpd_state().
可以在啟動時從 net_if 程序呼叫此函式。選項清單定義要使用的版本。
它也會初始化一些 SNMP 計數器。
-spec process_packet(Packet, From, State, NoteStore, Log) -> {ok, Vsn, Pdu, PduMS, ACMData} | {discarded, Reason} | {discovery, DiscoPacket} when Packet :: binary(), From :: {TDomain, TAddress}, TDomain :: snmpa_conf:transportDomain(), TAddress :: {IpAddr, IpPort}, IpAddr :: inet:ip_address(), IpPort :: inet:port_number(), State :: mpd_state(), NoteStore :: pid(), Log :: logger(), Vsn :: snmp_pdus:version(), Pdu :: snmp_pdus:pdu(), PduMS :: pos_integer(), ACMData :: acm_data(), Reason :: term(), DiscoPacket :: binary().
等同於 process_packet/6
。
-spec process_packet(Packet, TDomain, TAddress, State, NoteStore, Log) -> {ok, Vsn, Pdu, PduMS, ACMData} | {discarded, Reason} | {discovery, DiscoPacket} when Packet :: binary(), TDomain :: snmpa_conf:transportDomain(), TAddress :: {IpAddr, IpPort}, IpAddr :: inet:ip_address(), IpPort :: inet:port_number(), State :: mpd_state(), NoteStore :: pid(), Log :: logger(), Vsn :: snmp_pdus:version(), Pdu :: snmp_pdus:pdu(), PduMS :: pos_integer(), ACMData :: acm_data(), Reason :: term(), DiscoPacket :: binary(); (Packet, From, LocalEngineID, State, NoteStore, Log) -> {ok, Vsn, Pdu, PduMS, ACMData} | {discarded, Reason} | {discovery, DiscoPacket} when Packet :: binary(), From :: {TDomain, TAddress}, TDomain :: snmpa_conf:transportDomain(), TAddress :: {IpAddr, IpPort}, IpAddr :: inet:ip_address(), IpPort :: inet:port_number(), LocalEngineID :: snmp_framework_mib:engine_id(), State :: mpd_state(), NoteStore :: pid(), Log :: logger(), Vsn :: snmp_pdus:version(), Pdu :: snmp_pdus:pdu(), PduMS :: pos_integer(), ACMData :: acm_data(), Reason :: term(), DiscoPacket :: binary().
處理傳入的封包。必要時執行驗證和解密。傳回值應傳遞給代理程式。
注意
請注意,LocalEngineID 引數的使用僅適用於特殊情況,如果代理程式要「模擬」多個 EngineID!預設情況下,代理程式使用
SnmpEngineID
的值(請參閱 SNMP-FRAMEWORK-MIB)。
-spec process_taddrs(InDests) -> OutDests when InDests :: [InDest], InDest :: {{InDomain, InAddress}, SecData} | {InDomain, InAddress}, InDomain :: term(), InAddress :: term(), SecData :: term(), OutDests :: [OutDest], OutDest :: {{OutDomain, OutAddress}, SecData} | {OutDomain, OutAddress}, OutDomain :: snmpa_conf:transportDomain(), OutAddress :: snmpa_conf:transportAddress().
將位址從內部 MIB 格式轉換為對 代理程式網路介面更有用的格式。
另請參閱 generate_msg
。