查看源代码 Agent Net if 的定义

The Purpose of Agent Net if

网络接口 (Net If) 进程将 SNMP PDU 传递给主代理,并从主代理接收 SNMP PDU。Net if 进程最常见的行为是从网络接收字节,将其解码为 SNMP PDU,然后发送给主代理。当主代理处理完 PDU 后,它会向 Net if 进程发送响应 PDU,该进程将 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 从网络接收到发送给 MasterAgent 的 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 是目标 Address,来自先前发送给 MasterAgent 的相应 snmp_pdu 消息中的 From 字段。
    • 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}

    当要发送 trap 时,此消息从主代理发送。

    • 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 消息的编码和解码。