檢視原始碼 代理程式網路介面定義

The Purpose of Agent Net if

網路介面 (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} 元組,其中 DomaintransportDomainUdpIpv4transportDomainUdpIpv4,而 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 Pdu
  • From 是來源 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 訊息的實用函數。