查看源码 snmpm_mpd (snmp v5.18)
SNMP 管理器的消息处理和分发模块
模块 snmpm_mpd
实现了 SNMP 中管理器端版本无关的消息处理和分发功能。它应该从网络接口进程中使用(管理器网络接口的定义)。
旧版 API 函数 process_msg/7
仍然像以前一样工作,为了向后兼容,它有单独的 IpAddr
和 PortNumber
参数。
概要
类型
一个处理审计跟踪日志的 fun
。
是一个不透明的数据结构,包含(传入)v3 消息的必要安全信息。
是一个不透明的数据结构,包含 v1 和 v2 消息的必要安全信息。
是一个不透明的数据结构,包含 v1 和 v2 消息的必要安全和传输信息。
是一个不透明的数据结构,包含 v3 消息的必要安全信息。
函数
生成一个可能加密的、要发送到网络的包。
生成一个可能加密的、要发送到网络的响应包。
此函数可以在启动时从 net-if
进程调用。选项列表定义要使用的版本。
处理传入的消息。根据需要执行身份验证和解密。返回值应传递给管理器服务器。
类型
-type logger() :: fun((Data :: binary() | snmp_pdus:pdu() | snmp_pdus:trappdu() | snmp_pdus:message() | {V3Hdr :: snmp_pdus:v3_hdr(), ScopedPDUBytes :: binary()}) -> snmp:void()).
一个处理审计跟踪日志的 fun
。
-opaque mpd_state()
-opaque msg_data_acm()
是一个不透明的数据结构,包含(传入)v3 消息的必要安全信息。
-opaque msg_data_cmy()
是一个不透明的数据结构,包含 v1 和 v2 消息的必要安全信息。
-opaque msg_data_cmyt()
是一个不透明的数据结构,包含 v1 和 v2 消息的必要安全和传输信息。
-opaque msg_data_v3()
是一个不透明的数据结构,包含 v3 消息的必要安全信息。
函数
-spec generate_msg(Vsn, NoteStore, Pdu, MsgData, Log) -> {ok, Packet} | {discarded, Reason} when Vsn :: snmp_pdus:version(), NoteStore :: pid(), Pdu :: snmp_pdus:pdu(), MsgData :: msg_data_cmy() | msg_data_v3(), Log :: logger(), Packet :: binary(), Reason :: term().
生成一个可能加密的、要发送到网络的包。
NoteStore
是 note-store
进程的 pid()
。
MsgData
是 SNMP 消息中使用的消息特定数据。在 SNMPv1 和 SNMPv2c 中,此消息数据是团体字符串。在 SNMPv3 中,它是上下文信息。
Logger
是用于审计跟踪日志的函数。
-spec generate_response_msg(Vsn, Pdu, MsgData, Log) -> {ok, Packet} | {discarded, Reason} | {error, Reason} when Vsn :: snmp_pdus:version(), Pdu :: snmp_pdus:pdu(), MsgData :: msg_data_cmy() | msg_data_cmyt() | msg_data_v3(), Log :: logger(), Packet :: binary(), Reason :: term().
生成一个可能加密的、要发送到网络的响应包。
MsgData
是 SNMP 消息中使用的消息特定数据。此值从 process_msg/6
函数接收。
-spec init(Vsns) -> MPDState when Vsns :: [snmp:version()], MPDState :: mpd_state().
此函数可以在启动时从 net-if
进程调用。选项列表定义要使用的版本。
它还会初始化一些 SNMP 计数器。
-spec process_msg(Msg, Domain, Addr, State, NoteStore, Log) -> {ok, Vsn, PduV2, PduMS, MsgDataV2} | {ok, 'version-3', PduV3, PduMS, MsgDataV3} | {discarded, Reason} when Msg :: binary(), Domain :: snmpUDPDomain | snmp:tdomain(), Addr :: {Ip, Port}, Ip :: inet:ip_address(), Port :: inet:port_number(), State :: mpd_state(), NoteStore :: pid(), Log :: logger(), Vsn :: 'version-1' | 'version-2', PduV2 :: snmp_pdus:pdu() | snmp_pdus:trappdu(), PduV3 :: snmp_pdus:pdu(), PduMS :: pos_integer(), MsgDataV2 :: msg_data_cmyt(), MsgDataV3 :: ok | {error, ReqId, ACM} | undefined | msg_data_acm(), ReqId :: snmpm:request_id(), ACM :: term(), Reason :: term().
处理传入的消息。根据需要执行身份验证和解密。返回值应传递给管理器服务器。
NoteStore
是 note-store
进程的 pid()
。
Logger
是用于审计跟踪日志的函数。
当 pdu 类型为 report
时,MsgData
要么是 ok
,要么是 {error, ReqId, Reason}
。