---
name: "snmpa_mpd"
section: "3erl"
platform: "linux"
package: "erlang-manpages"
version: "1:25.2.3+dfsg-1+deb12u4"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/snmpa_mpd"
---

# snmpa\_mpd(3erl)

Message Processing and Dispatch module for the SNMP agent

## NAME

snmpa\_mpd - Message Processing and Dispatch module for the SNMP agent

## DESCRIPTION

The module *snmpa\_mpd* implements the version independent Message Processing and Dispatch functionality in SNMP for the agent. It is supposed to be used from a Network Interface process (Definition of Agent Net if).

## DATA TYPES

See the  data types in *snmpa\_conf*.

## EXPORTS

**init(Vsns) -\> mpd\_state()**\

Types:

Vsns = \[Vsn\]\
 Vsn = v1 \| v2 \| v3\

This function can be called from the net\_if process at start-up. The options list defines which versions to use.

It also initializes some SNMP counters.

**process\_packet(Packet, From, State, NoteStore, Log) -\> {ok, Vsn, Pdu, PduMS, ACMData} \| {discarded, Reason} \| {discovery, DiscoPacket}**\
 **process\_packet(Packet, From, LocalEngineID, State, NoteStore, Log) -\> {ok, Vsn, Pdu, PduMS, ACMData} \| {discarded, Reason} \| {discovery, DiscoPacket}**\

Types:

Packet = binary()\
 From = {TDomain, TAddr}\
 TDomain = transportDomainUdpIpv4 \| transportDomainUdpIpv6\
 TAddr = {IpAddr, IpPort}\
 LocalEngineID = string()\
 IpAddr = inet:ip\_address()\
 IpPort = inet:port\_number()\
 State = mpd\_state()\
 NoteStore = pid()\
 Log = snmp\_log()\
 Vsn = 'version-1' \| 'version-2' \| 'version-3'\
 Pdu = #pdu\
 PduMs = integer()\
 ACMData = acm\_data()\
 Reason = term()\
 DiscoPacket = binary()\

Processes an incoming packet. Performs authentication and decryption as necessary. The return values should be passed to the agent.

**Note:**

Note that the use of the LocalEngineID argument is only intended for special cases, if the agent is to "emulate" multiple EngineIDs! By default, the agent uses the value of *SnmpEngineID* (see SNMP-FRAMEWORK-MIB).

**generate\_response\_msg(Vsn, RePdu, Type, ACMData, Log) -\> {ok, Packet} \| {discarded, Reason}**\
 **generate\_response\_msg(Vsn, RePdu, Type, ACMData, LocalEngineID, Log) -\> {ok, Packet} \| {discarded, Reason}**\

Types:

Vsn = 'version-1' \| 'version-2' \| 'version-3'\
 RePdu = #pdu\
 Type = atom()\
 ACMData = acm\_data()\
 LocalEngineID = string()\
 Packet = binary()\

Generates a possibly encrypted response packet to be sent to the network. *Type* is the *#pdu.type* of the original request.

**Note:**

Note that the use of the LocalEngineID argument is only intended for special cases, if the agent is to "emulate" multiple EngineIDs! By default, the agent uses the value of *SnmpEngineID* (see SNMP-FRAMEWORK-MIB).

**generate\_msg(Vsn, NoteStore, Pdu, MsgData, To) -\> {ok, PacketsAndAddresses} \| {discarded, Reason}**\
 **generate\_msg(Vsn, NoteStore, Pdu, MsgData, LocalEngineID, To) -\> {ok, PacketsAndAddresses} \| {discarded, Reason}**\

Types:

Vsn = 'version-1' \| 'version-2' \| 'version-3'\
 NoteStore = pid()\
 Pdu = #pdu\
 MsgData = msg\_data()\
 LocalEngineID = string()\
 To = \[dest\_addrs()\]\
 PacketsAndAddresses = \[{TDomain, TAddress, Packet}\]\
 TDomain = snmpUDPDomain\
 TAddress = {Ip, Udp}\
 Ip = {integer(), integer(), integer(), integer()}\
 Udp = integer()\
 Packet = binary()\

Generates a possibly encrypted request packet to be sent to the network.

*MsgData* is the message specific data used in the SNMP message. This value is received in a *send\_pdu* or *send\_pdu\_req* message from the agent. In SNMPv1 and SNMPv2c, this message data is the community string. In SNMPv3, it is the context information.

*To* is a list of destination addresses and their corresponding security parameters. This value is received in the same message from the agent and then transformed through *process\_taddrs* before passed to this function.

**Note:**

Note that the use of the LocalEngineID argument is only intended for special cases, if the agent is to "emulate" multiple EngineIDs! By default, the agent uses the value of *SnmpEngineID* (see SNMP-FRAMEWORK-MIB).

**process\_taddrs(TDests) -\> Dests**\

Types:

TDests = \[TDest\]\
 TDest = {{TDomain, TAddr}, SecData} \| {TDomain, TAddr}\
 TDomain = term() % Not at tuple\
 TAddr = term()\
 SecData = term()\
 Dests = \[Dest\]\
 Dest = {{Domain, Addr}, SecData} \| {Domain, Addr}\
 Domain = transportDomain()\
 Addr = transportAddress() % Depends on Domain\

Transforms addresses from internal MIB format to one more useful to Agent Net if.

See also *generate\_msg*.

**discarded\_pdu(Variable) -\> void()**\

Types:

Variable = atom()\

Increments the variable associated with a discarded pdu. This function can be used when the net\_if process receives a *discarded\_pdu* message from the agent.
