查看源代码 snmpa_network_interface_filter 行为 (snmp v5.18)
SNMP 代理网络接口过滤器的行为模块。
此模块定义了代理网络接口过滤器的行为。一个符合 snmpa_network_interface_filter
的模块必须导出以下函数
accept_recv/2
accept_send/2
accept_recv_pdu/3
accept_send_pdu/2
它们的语义和确切签名将在下面解释。
网络接口过滤器的目的是允许过滤接收和发送的消息(接受或拒绝)。这在两个级别上完成
- 第一级是在传输入口/出口点,即在接收消息后立即进行(accept_recv),在完成所有消息处理后立即发送消息(accept_send)。
- 第二级是在 MPD 入口/出口点,即在基本消息处理(accept_recv_pdu)之后立即进行/在基本消息处理(accept_send_pdu)之前立即进行。
请注意,网络接口过滤器是由应用程序提供的网络接口实现(snmpa_net_if
)使用的。默认过滤器接受所有消息。
网络接口过滤器例如可以在测试期间或用于负载调节。如果预期用途是负载调节,另请参阅 req_limit 和函数 register_notification_filter。
旧的网络接口过滤器模块使用 (IpAddr, PortNumber,...)
形式的参数,而不是 (Domain, Addr, ...)
,如果 SNMP 代理在不更改配置以使用传输域的情况下运行,则网络接口过滤器仍然会获得旧的参数并像以前一样工作。
另请参阅 snmpa_conf
中的数据类型。
摘要
回调
在接收消息时调用(在任何处理完成之前)。
在基本消息处理(MPD)完成后调用,但在将 pdu 传递给主代理进行主要处理之前。
在发送消息之前调用(在所有处理完成后)。
当从主代理接收到 pdu 时,在完成基本消息处理 (MPD) 之前调用。
类型
-type pdu_type() :: snmpa:pdu_type().
-type transportAddressWithPort() :: snmpa_conf:transportAddressWithPort().
-type transportDomain() :: snmpa_conf:transportDomain().
回调
-callback accept_recv(Domain, Addr) -> boolean() when Domain :: transportDomain(), Addr :: transportAddressWithPort().
在接收消息时调用(在任何处理完成之前)。
要丢弃消息,该函数必须返回false。
-callback accept_recv_pdu(Domain, Addr, PduType) -> boolean() when Domain :: transportDomain(), Addr :: transportAddressWithPort(), PduType :: pdu_type().
在基本消息处理(MPD)完成后调用,但在将 pdu 传递给主代理进行主要处理之前。
要丢弃 pdu,该函数必须返回false。
-callback accept_send(Domain, Addr) -> boolean() when Domain :: transportDomain(), Addr :: transportAddressWithPort().
在发送消息之前调用(在所有处理完成后)。
要丢弃消息,该函数必须返回false。
-callback accept_send_pdu(Targets, PduType) -> Reply when Targets :: [Target], Target :: {Domain, Addr}, Domain :: transportDomain(), Addr :: transportAddressWithPort(), PduType :: pdu_type(), Reply :: boolean() | NewTargets, NewTargets :: Targets.
当从主代理接收到 pdu 时,在完成基本消息处理 (MPD) 之前调用。
要完全丢弃消息,该函数必须返回false。
请注意,此函数可以通过返回更新后的 Targets
列表 (NewTargets
) 来过滤掉目标(但不能添加自己的目标)。