查看源代码 管理器网络接口定义

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-request 的内容 (例如 request-id)。如果已发送了 inform-request 的响应(确认),则使用 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 消息进行响应。

注释

由于 Net if 进程负责 SNMP 消息的编码和解码,它还必须更新 MIB-II 中 SNMP 组中的相关计数器。它可以为此目的使用模块 snmpm_mpd 中的函数 (有关更多详细信息,请参阅参考手册,snmp 部分,snmpm_mpd 模块)。

模块 snmp_pdus 中也有一些用于 SNMP 消息编码和解码的有用函数。