查看源代码 snmpa_mpd (snmp v5.18)

SNMP 代理的消息处理和分发模块

模块 snmpa_mpd 实现了 SNMP 代理中与版本无关的消息处理和分发功能。 它应该从网络接口进程中使用 (请参阅 代理网络接口的定义)。

数据类型

有关更多信息,请参阅 snmpa_conf 中的数据类型

概要

类型

这是 SNMP 消息中使用的消息特定数据。此值在代理(通过网络接口进程)发送的 send_pdusend_pdu_req 消息中接收。

这是 SNMPv1 和 SNMPv2c 消息中使用的消息特定数据。

这是 SNMPv3 消息中使用的消息特定数据。

处理审计跟踪日志记录的 fun

这是 SNMP 消息中使用的消息特定数据。此值在代理(通过网络接口进程)发送的 send_pdusend_pdu_req 消息中接收。

这是 SNMP 消息中使用的消息特定数据。在 SNMPv1 和 SNMPv2c 中,此消息数据是团体字符串。

这是 SNMP 消息中使用的消息特定数据。在 SNMPv3 中,它是上下文信息。

函数

递增与丢弃的 PDU 关联的变量。当 net_if 进程收到来自代理的 discarded_pdu 消息时,可以使用此函数。

生成一个可能加密的请求数据包,以发送到网络。

生成一个可能加密的响应数据包,以发送到网络。Type 是原始请求的 #pdu.type

此函数可以在启动时从 net_if 进程调用。选项列表定义要使用的版本。

处理传入的数据包。根据需要执行身份验证和解密。返回值应传递给代理。

将地址从内部 MIB 格式转换为对 代理网络接口更有用的格式。

类型

-type acm_data() :: acm_data_cmy() | acm_data_v3().

这是 SNMP 消息中使用的消息特定数据。此值在代理(通过网络接口进程)发送的 send_pdusend_pdu_req 消息中接收。

-opaque acm_data_cmy()

这是 SNMPv1 和 SNMPv2c 消息中使用的消息特定数据。

-opaque acm_data_v3()

这是 SNMPv3 消息中使用的消息特定数据。

-type logger() ::
          fun((Type :: snmp_pdus:pdu_type(),
               Data :: binary() | {V3Hdr :: snmp_pdus:v3_hdr(), ScopedPDUBytes :: binary()}) ->
                  snmp:void()).

处理审计跟踪日志记录的 fun

-opaque mpd_state()
-type msg_data() :: msg_data_cmy() | msg_data_ctx().

这是 SNMP 消息中使用的消息特定数据。此值在代理(通过网络接口进程)发送的 send_pdusend_pdu_req 消息中接收。

-opaque msg_data_cmy()

这是 SNMP 消息中使用的消息特定数据。在 SNMPv1 和 SNMPv2c 中,此消息数据是团体字符串。

-opaque msg_data_ctx()

这是 SNMP 消息中使用的消息特定数据。在 SNMPv3 中,它是上下文信息。

函数

链接到此函数

discarded_pdu(Variable)

查看源代码
-spec discarded_pdu(Variable) -> snmp:void() when Variable :: snmpa:name() | false.

递增与丢弃的 PDU 关联的变量。当 net_if 进程收到来自代理的 discarded_pdu 消息时,可以使用此函数。

链接到此函数

generate_msg(Vsn, NoteStore, Pdu, MsgData, To)

查看源代码 (自 OTP R14B 起)
-spec generate_msg(Vsn, NoteStore, Pdu, MsgData, To) -> {ok, PacketsAndAddresses} | {discarded, Reason}
                      when
                          Vsn :: snmp_pdus:version(),
                          NoteStore :: pid(),
                          Pdu :: snmp_pdus:pdu(),
                          MsgData :: msg_data(),
                          To :: [{Domain, Address}],
                          PacketsAndAddresses :: [{Domain, Address, Packet}],
                          Domain :: snmpa_conf:transportDomain(),
                          Address :: snmpa_conf:transportAddress(),
                          Packet :: binary(),
                          Reason :: term().

等效于 generate_msg/6

链接到此函数

generate_msg(Vsn, NoteStore, Pdu, MsgData, LocalEngineID, To)

查看源代码 (自 OTP R14B 起)
-spec generate_msg(Vsn, NoteStore, Pdu, MsgData, LocalEngineID, To) ->
                      {ok, PacketsAndAddresses} | {discarded, Reason}
                      when
                          Vsn :: snmp_pdus:version(),
                          NoteStore :: pid(),
                          Pdu :: snmp_pdus:pdu(),
                          MsgData :: msg_data(),
                          LocalEngineID :: snmp_framework_mib:engine_id(),
                          To :: [DestAddr],
                          DestAddr :: {Domain, Address} | {{Domain, Address}, SecData},
                          SecData :: term(),
                          PacketsAndAddresses :: [{Domain, Address, Packet}],
                          Domain :: snmpa_conf:transportDomain(),
                          Address :: snmpa_conf:transportAddress(),
                          Packet :: binary(),
                          Reason :: term().

生成一个可能加密的请求数据包,以发送到网络。

MsgData 是 SNMP 消息中使用的消息特定数据。此值在代理发送的 send_pdusend_pdu_req 消息中接收。在 SNMPv1 和 SNMPv2c 中,此消息数据是团体字符串。在 SNMPv3 中,它是上下文信息。

To 是目标地址及其相应的安全参数的列表。此值在来自代理的同一消息中接收,然后通过 process_taddrs 进行转换,然后再传递给此函数。

注意

请注意,LocalEngineID 参数的使用仅适用于特殊情况,如果代理要“模拟”多个 EngineID!默认情况下,代理使用 SnmpEngineID 的值(请参阅 SNMP-FRAMEWORK-MIB)。

链接到此函数

generate_response_msg(Vsn, RePdu, Type, ACMData, Log)

查看源代码 (自 OTP R14B 起)
-spec generate_response_msg(Vsn, RePdu, Type, ACMData, Log) -> {ok, Packet} | {discarded, Reason}
                               when
                                   Vsn :: snmp_pdus:version(),
                                   RePdu :: snmp_pdus:pdu(),
                                   Type :: snmp_pdus:pdu_type(),
                                   ACMData :: acm_data(),
                                   Log :: logger(),
                                   Packet :: binary(),
                                   Reason :: term().

等效于 generate_response_msg/6

链接到此函数

generate_response_msg(Vsn, RePdu, Type, ACMData, LocalEngineID, Log)

查看源代码 (自 OTP R14B 起)
-spec generate_response_msg(Vsn, RePdu, Type, ACMData, LocalEngineID, Log) ->
                               {ok, Packet} | {discarded, Reason}
                               when
                                   Vsn :: snmp_pdus:version(),
                                   RePdu :: snmp_pdus:pdu(),
                                   Type :: snmp_pdus:pdu_type(),
                                   ACMData :: acm_data(),
                                   LocalEngineID :: snmp_framework_mib:engine_id(),
                                   Log :: logger(),
                                   Packet :: binary(),
                                   Reason :: term().

生成一个可能加密的响应数据包,以发送到网络。Type 是原始请求的 #pdu.type

注意

请注意,LocalEngineID 参数的使用仅适用于特殊情况,如果代理要“模拟”多个 EngineID!默认情况下,代理使用 SnmpEngineID 的值(请参阅 SNMP-FRAMEWORK-MIB)。

-spec init(Vsns) -> MPDState when Vsns :: [snmp:version()], MPDState :: mpd_state().

此函数可以在启动时从 net_if 进程调用。选项列表定义要使用的版本。

它还会初始化一些 SNMP 计数器。

链接到此函数

process_packet(Packet, From, State, NoteStore, Log)

查看源代码 (自 OTP 17.3 起)
-spec process_packet(Packet, From, State, NoteStore, Log) ->
                        {ok, Vsn, Pdu, PduMS, ACMData} | {discarded, Reason} | {discovery, DiscoPacket}
                        when
                            Packet :: binary(),
                            From :: {TDomain, TAddress},
                            TDomain :: snmpa_conf:transportDomain(),
                            TAddress :: {IpAddr, IpPort},
                            IpAddr :: inet:ip_address(),
                            IpPort :: inet:port_number(),
                            State :: mpd_state(),
                            NoteStore :: pid(),
                            Log :: logger(),
                            Vsn :: snmp_pdus:version(),
                            Pdu :: snmp_pdus:pdu(),
                            PduMS :: pos_integer(),
                            ACMData :: acm_data(),
                            Reason :: term(),
                            DiscoPacket :: binary().

等效于 process_packet/6

链接到此函数

process_packet/6

查看源代码 (自 OTP R14B 起)
-spec process_packet(Packet, TDomain, TAddress, State, NoteStore, Log) ->
                        {ok, Vsn, Pdu, PduMS, ACMData} | {discarded, Reason} | {discovery, DiscoPacket}
                        when
                            Packet :: binary(),
                            TDomain :: snmpa_conf:transportDomain(),
                            TAddress :: {IpAddr, IpPort},
                            IpAddr :: inet:ip_address(),
                            IpPort :: inet:port_number(),
                            State :: mpd_state(),
                            NoteStore :: pid(),
                            Log :: logger(),
                            Vsn :: snmp_pdus:version(),
                            Pdu :: snmp_pdus:pdu(),
                            PduMS :: pos_integer(),
                            ACMData :: acm_data(),
                            Reason :: term(),
                            DiscoPacket :: binary();
                    (Packet, From, LocalEngineID, State, NoteStore, Log) ->
                        {ok, Vsn, Pdu, PduMS, ACMData} | {discarded, Reason} | {discovery, DiscoPacket}
                        when
                            Packet :: binary(),
                            From :: {TDomain, TAddress},
                            TDomain :: snmpa_conf:transportDomain(),
                            TAddress :: {IpAddr, IpPort},
                            IpAddr :: inet:ip_address(),
                            IpPort :: inet:port_number(),
                            LocalEngineID :: snmp_framework_mib:engine_id(),
                            State :: mpd_state(),
                            NoteStore :: pid(),
                            Log :: logger(),
                            Vsn :: snmp_pdus:version(),
                            Pdu :: snmp_pdus:pdu(),
                            PduMS :: pos_integer(),
                            ACMData :: acm_data(),
                            Reason :: term(),
                            DiscoPacket :: binary().

处理传入的数据包。根据需要执行身份验证和解密。返回值应传递给代理。

注意

请注意,LocalEngineID 参数的使用仅适用于特殊情况,如果代理要“模拟”多个 EngineID!默认情况下,代理使用 SnmpEngineID 的值(请参阅 SNMP-FRAMEWORK-MIB)。

链接到此函数

process_taddrs(InDests)

查看源代码 (自 OTP 17.3 起)
-spec process_taddrs(InDests) -> OutDests
                        when
                            InDests :: [InDest],
                            InDest :: {{InDomain, InAddress}, SecData} | {InDomain, InAddress},
                            InDomain :: term(),
                            InAddress :: term(),
                            SecData :: term(),
                            OutDests :: [OutDest],
                            OutDest :: {{OutDomain, OutAddress}, SecData} | {OutDomain, OutAddress},
                            OutDomain :: snmpa_conf:transportDomain(),
                            OutAddress :: snmpa_conf:transportAddress().

将地址从内部 MIB 格式转换为对 代理网络接口更有用的格式。

另请参阅 generate_msg