檢視原始碼 代理程式網路介面定義
網路介面 (Net If) 程序會將 SNMP PDU 傳遞至主代理程式,並接收來自主代理程式的 SNMP PDU。Net If 程序最常見的行為是從網路接收位元組,將其解碼為 SNMP PDU,然後將其傳送至主代理程式。當主代理程式處理完 PDU 後,它會將回應 PDU 傳送至 Net If 程序,後者會將 PDU 編碼為位元組並將位元組傳輸到網路上。
然而,這種簡單的行為可以透過多種方式修改。例如,Net If 程序可以對位元組應用某種加密/解密方案,或充當代理篩選器,將某些封包傳送至代理程式,並將某些封包傳送至主代理程式。
也可以編寫自己的 Net If 程序。預設的 Net If 程序實作於 snmpa_net_if
模組中,它使用 UDP 作為傳輸協定,即傳輸網域 transportDomainUdpIpv4
和/或 transportDomainUdpIpv6
。
本節說明如何編寫 Net If 程序。
必要函數
Net If 程序必須實作 SNMP 代理程式網路介面行為。
訊息
訊息 章節描述了 Net If 必須傳送和能夠接收的必要訊息。
在本節中,Address
欄位是一個 {Domain, Addr}
元組,其中 Domain
是 transportDomainUdpIpv4
或 transportDomainUdpIpv4
,而 Addr
是一個 {
IpAddr
,IpPort}
元組。
傳出訊息
當 Net If 從網路接收到針對主代理程式的 SNMP PDU 時,必須傳送以下訊息
MasterAgent ! {snmp_pdu, Vsn, Pdu, PduMS, ACMData, From, Extra}
Vsn
是'version-1'
、'version-2'
或'version-3'
。Pdu
是一個 SNMP PDU 記錄,如snmp_types.hrl
中定義的,帶有 SNMP 請求。PduMS
是允許的回應 Pdu 的最大大小。通常,此值會從snmpa_mpd:process_packet
中傳回(請參閱參考手冊)。ACMData
是使用的存取控制模組所使用的資料。通常,此值會從snmpa_mpd:process_packet
中傳回(請參閱參考手冊)。From
是來源Address
。Extra
是 Net If 程序希望傳送至代理程式的任何詞語。可以使用呼叫snmp:current_net_if_data()
的方式,由檢測函數擷取此詞語。當代理程式產生對請求的回應時,此資料也會傳回至 Net If 程序。
以下訊息用於報告已收到對請求的回應。代理程式可以傳送的唯一請求是 Inform-Request。
Pid ! {snmp_response_received, Vsn, Pdu, From}
Pid
是等待請求回應的程序。Pid 是在send_pdu_req
訊息中指定的 (請參閱下文)。Vsn
是'version-1'
、'version-2'
或'version-3'
。Pdu
是收到的 SNMP PduFrom
是來源Address
。
傳入訊息
本節說明 Net If 程序必須能夠接收的傳入訊息。
{snmp_response, Vsn, Pdu, Type, ACMData, To, Extra}
此訊息由主代理程式傳送至 Net If 程序,以回應先前收到的請求。
Vsn
是'version-1'
、'version-2'
或'version-3'
。Pdu
是一個 SNMP PDU 記錄(如 snmp_types.hrl 中定義的),帶有 SNMP 回應。Type
是原始請求的#pdu.type
。ACMData
是使用的存取控制模組所使用的資料。通常,它只會傳送至snmpa_mpd:generate_response_message
(請參閱參考手冊)。To
是來自先前傳送至主代理程式的對應snmp_pdu
訊息中From
欄位的目的地Address
。Extra
是 Net If 程序在將請求傳送至代理程式時傳送至代理程式的詞語。
{discarded_pdu, Vsn, ReqId, ACMData, Variable, Extra}
如果主代理程式由於某種原因決定捨棄 pdu,則會從主代理程式傳送此訊息。
Vsn
是'version-1'
、'version-2'
或'version-3'
。ReqId
是原始請求的請求 ID。ACMData
是使用的存取控制模組所使用的資料。通常,它只會傳送至snmpa_mpd:generate_response_message
(請參閱參考手冊)。Variable
是表示錯誤的 snmp 計數器名稱,例如snmpInBadCommunityUses
。Extra
是 Net If 程序在將請求傳送至代理程式時傳送至代理程式的詞語。
{send_pdu, Vsn, Pdu, MsgData, To, Extra}
當要傳送陷阱時,此訊息由主代理程式傳送。
Vsn
是'version-1'
、'version-2'
或'version-3'
。Pdu
是一個 SNMP PDU 記錄(如 snmp_types.hrl 中定義的),帶有 SNMP 回應。MsgData
是 SNMP 訊息中使用的訊息特定資料。此值通常會傳送至snmpa_mpd:generate_msg/5
。在 SNMPv1 和 SNMPv2c 中,此訊息資料是社群字串。在 SNMPv3 中,它是內容資訊。To
是{Address, SecData}
元組的清單,即目的地地址及其對應的安全參數。此值通常會傳送至snmpa_mpd:generate_msg/5
。Extra
是通知傳送器希望在傳送通知時傳遞給 Net If 程序的任何詞語(請參閱send notification
以取得更多資訊)。
{send_pdu_req, Vsn, Pdu, MsgData, To, Pid, Extra}
當要傳送請求時,此訊息由主代理程式傳送。代理程式可以傳送的唯一請求是 Inform-Request。net if 程序需要記住請求 ID 和 Pid,當收到針對請求 ID 的回應時,使用
snmp_response_received
訊息將其傳送至 Pid。Vsn
是'version-1'
、'version-2'
或'version-3'
。Pdu
是一個 SNMP PDU 記錄(如 snmp_types.hrl 中定義的),帶有 SNMP 回應。MsgData
是 SNMP 訊息中使用的訊息特定資料。此值通常會傳送至snmpa_mpd:generate_msg/5
。在 SNMPv1 和 SNMPv2c 中,此訊息資料是社群字串。在 SNMPv3 中,它是內容資訊。To
是{Address, SecData}
元組的清單,即目的地地址及其對應的安全參數。此值通常會傳送至snmpa_mpd:generate_msg/5
。Pid
是一個程序識別碼。Extra
是通知傳送器希望在傳送通知時傳遞給 Net If 程序的任何詞語(請參閱send notification
以取得更多資訊)。
注意事項
由於 Net If 程序負責 SNMP 訊息的編碼和解碼,因此它也必須更新 MIB-II 中 SNMP 群組中的相關計數器。它可以為此目的使用 snmpa_mpd
模組中的函數(請參閱參考手冊中 snmp
章節,snmpa_mpd 模組以取得更多詳細資訊)。
模組 snmp_pdus
中還有一些用於編碼和解碼 SNMP 訊息的實用函數。