檢視原始碼 Manager Net if 的定義
網路介面 (Net If) 處理程序將 SNMP PDU 傳遞給管理伺服器,並從管理伺服器接收 SNMP PDU。Net if 處理程序最常見的行為是從管理伺服器接收請求 PDU,將 PDU 編碼為位元組,並將這些位元組透過網路傳輸到代理程式。當代理程式的回應被 Net if 處理程序接收時,它會將其解碼為 SNMP PDU,並將其傳送至管理伺服器。
然而,這種簡單的行為可以透過多種方式修改。例如,Net if 處理程序可以在位元組上應用某種加密/解密方案。
snmp 應用程式提供了兩個不同的模組,snmpm_net_if
(預設) 和 snmpm_net_if_mt
,兩者都使用 UDP 作為傳輸協定,即傳輸域 transportDomainUdpIpv4
和/或 transportDomainUdpIpv6
。這兩個模組之間的區別在於後者是「多執行緒」的,即對於每個訊息/請求,都會建立一個新的處理程序來處理訊息/請求,然後退出。
有一個 server
配置選項,netif_sup,可以啟用「主動式」的 Net If 監管。這是一個非常簡單的機制。(監管)處理程序只需傳送一個 ping 訊息,並期望在特定時間內收到 pong 訊息的回應。每次 ping/pong
交換之間的時間間隔是使用者可配置的。允許 pong 訊息到達的時間也是如此。該應用程式提供的兩個 NetIf 模組都支援主動監管。如果使用不實作此功能的 NetIf 模組/處理程序,則無法使用主動監管來配置伺服器。
也可以編寫您自己的 Net if 處理程序,本節將描述如何執行此操作。
必要函數
Net If 處理程序必須實作 SNMP 管理器的 網路介面行為。
訊息
訊息 章節描述了 Net If 必須傳送給管理伺服器處理程序的必要訊息(ping/pong 訊息除外)。
在本節中,Domain
欄位是傳輸域,即 transportDomainUdpIpv4
或 transportDomainUdpIpv6
其中之一,而 Addr
欄位是 {
IpAddr
,IpPort}
的元組。
傳出訊息
當 Net if 從網路接收到目標為 MasterAgent 的 SNMP PDU 時,必須傳送以下訊息。
Server ! {snmp_pdu, Pdu, Domain, Addr}
Pdu
是一個 SNMP PDU 記錄,如snmp_types.hrl
中定義,包含 SNMP 請求。Domain
是來源傳輸域。Addr
是來源地址。
Server ! {snmp_trap, Trap, Domain, Addr}
Trap
要嘛是一個 SNMP pdu 記錄,要嘛是一個 trappdu 記錄,如snmp_types.hrl
中定義,包含 SNMP 請求。Domain
是來源傳輸域。Addr
是來源地址。
Server ! {snmp_inform, Ref, Pdu, PduMS, Domain, Addr}
Ref
要嘛是原子ignore
,要嘛是可用於識別 inform 請求的東西(例如,請求 ID)。如果已傳送 inform 請求的回應(確認),則使用ignore
(這表示伺服器不會呼叫 inform_response 函數)。有關更多資訊,請參閱 inform 請求行為 配置選項。Pdu
是一個 SNMP PDU 記錄,如snmp_types.hrl
中定義,包含 SNMP 請求。Domain
是來源傳輸域。Addr
是來源地址。
Server ! {snmp_report, Data, Domain, Addr}
Data
要嘛是{ok, Pdu}
,要嘛是{error, ReqId, ReasonInfo, Pdu}
。使用哪一個取決於 MPDprocess_msg/6
函數的傳回值。如果 MsgData 是ok
,則使用第一個,如果是{error, ReqId, Reason}
則使用後者。Pdu
是一個 SNMP PDU 記錄,如snmp_types.hrl
中定義,包含 SNMP 請求。ReqId
是一個整數。ReasonInfo
是一個 term()。Domain
是來源傳輸域。Addr
是來源地址。
Supervisor ! {pong, self()}
Supervisor
是傳送 ping 訊息的處理程序(見下文)。
傳入訊息
本節描述了 Net If 處理程序可能選擇回應的傳入訊息。
-
{ping, Supervisor}
此訊息由已配置為對 Net If 處理程序執行「主動監管」的處理程序傳送至 Net If 處理程序。Net If 處理程序應立即以 pong 訊息回應。Supervisor
是一個pid/0
。
注意
由於 Net if 處理程序負責 SNMP 訊息的編碼和解碼,因此它也必須更新 MIB-II 中 SNMP 群組中的相關計數器。它可以使用模組 snmpm_mpd
中的函數來達到此目的(有關更多詳細資訊,請參閱參考手冊,「snmp
」章節,snmpm_mpd
模組)。
在模組 snmp_pdus
中也有一些用於 SNMP 訊息編碼和解碼的實用函數。