檢視原始碼 Manager Net if 的定義

The Purpose of 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 欄位是傳輸域,即 transportDomainUdpIpv4transportDomainUdpIpv6 其中之一,而 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}。使用哪一個取決於 MPD process_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 訊息編碼和解碼的實用函數。