查看源代码 管理器网络接口定义
网络接口 (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-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}
。具体使用哪一个取决于 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 消息编码和解码的有用函数。