The module snmp contains interface functions to the SNMP toolkit.
Some functions are off-line functions (e.g. c to compile a
MIB), and some are functions called by instrumentation functions
in a target system (e.g. current_address).
The following datatypes are used in the functions below:
oid() = [byte()]
The oid() type is used to represent an ASN.1 OBJECT
IDENTIFIER.
add_agent_caps(SysORID, SysORDescr) -> SysORIndex
SysORID = oid()SysORDescr = string()SysORIndex = integer()This function can be used to add an AGENT-CAPABILITY statement to the sysORTable in the agent. The table is defined in the SNMPv2-MIB.
c(File)
c(File,Options) -> {ok, BinFileName} | {error, Reason}
File = string()Options = [opt()]opt() = {db, volatile|persistent|mnesia} | {i, [dir()]} |
{il, [dir()]} | {outdir, dir()} | {warnings, bool()} |
{group_check, bool()} | {deprecated, bool()} |
{description, bool()}dir() = string()BinFileName = string()Compiles the specified MIB file <File>.mib. The
compiled file BinFileName is called <File>.bin.
db specifies which database should
be used for the default instrumentation. Default is
volatile.
i specifies the path to search for
imported (compiled) MIB files. The directories should be
strings with a trailing directory delimiter. Default is
["./"].
il (include_lib) also specifies a
list of directories to search for imported MIBs. It
assumes that the first element in the directory name
corresponds to an OTP application. The compiler will find
the current installed version. For example, the value
["snmp/mibs/"] will be replaced by ["snmp-3.1.1/mibs/"]
(or what the current version may be in the system). The
current directory and the <snmp-home>/priv/mibs/
are always listed last in the include path.
warnings specifies whether warning
messages should be shown. Default is true.
group_check specifies whether the
mib compiler should check the OBJECT-GROUP macro for
correctness or not. Default is true.
deprecated specifies if a deprecated
definition should be ignored or not. If the option is
true will the MIB-compilator ignore all deprecated
definitions. Default is false.
description specifies if the text
of the DESCRIPTION field will be included or not. Default
is false, in which case the description will be
replaced by the atom undefined.
The MIB compiler understands both SMIv1 and SMIv2 MIBs. It
uses the MODULE-IDENTITY statement to determine if the MIB is
version 1 or 2.
The MIB compiler can be invoked from the OS command line by
using the command erlc. erlc recognises the
extension .mib, and invokes the SNMP MIB compiler for
files with that extension. The options db, group_check
and deprecated have to be specified to erlc using
the syntax +term. See erlc(1) for details.
change_log_size(NewSize) -> ok | {error, Reason}
NewSize = {MaxBytes, MaxFiles}MaxBytes = integer()MaxFiles = integer()Changes the log size of the Audit Trail Log. The application must be configured to use the audit trail log function. Please refer to disk_log(3) in Kernel Reference Manual for a description of how to change the log size.
The change is permanent, as long as the log is not deleted. That means, the log size is remebered across reboots.
config() -> ok | {error, Reason}
A simple interactive SNMP agent configuration tool. Simple configuration files can be generated, but more complex configurations still have to be edited manually.
The tool is a textual based tool that asks some questions
and generates sys.config and *.conf files.
current_address() -> {value, {IP, UDP}} | false
IP = [int(), int(), int(), int()]UDP = int()Retrieves the IP address of the management station sending the request. It must be called from the same process that is handling the request (normally an instrumentation function).
Returns false if no request is currently handled.
current_community() -> {value, Community} | false
Community = string()Retrieves the community referred to in the current request. It must be called from the same process that is handling the request (normally an instrumentation function).
Returns false if no request is currently handled.
NOTE: This function should only be used if the agent
speaks SNMPv1 or SNMPv2c only. Otherwise, use
current_context/0.
current_context() -> {value, ContextName} | false
ContextName = string()Retrieves the context referred to in the current request. It must be called from the same process that is handling the request (normally an instrumentation function).
Returns false if no request is currently handled.
current_net_if_data() -> {value, NetIfData} | false
NetIfData = term()Retrieves the Net_if data for the current pdu being handled. This data is defined in the Net_if process, and can be used to forward information about the packet to the instrumentation functions. With the default Net_if implementation, it is nil. It must be called from the same process that handles the request (normally an instrumentation function).
Returns false if no request is currently handled.
current_request_id() -> {value, RequestId} | false
RequestId = int()Retrieves the request Id of the current request. It must be called from the same process that is handling the request (normally an instrumentation function).
Returns false if no request is currently handled.
date_and_time() -> DateAndTime
DateAndTime = [int()]Returns current date and time as the data type DateAndTime, as specified in RFC1903. This is an OCTET STRING.
date_and_time_to_universal_time(DateAndTime) -> UTC
DateAndTime = [int()]UTC = {{Y,Mo,D},{H,M,S}}Converts a DateAndTime list to universal time. The unversal time value on the same format as defined in calendar(3).
date_and_time_to_string(DateAndTime) -> string()
DateAndTime = [int()]Converts a DateAndTime list to a printable string, according to the DISPLAY-HINT definition in RFC1903.
Agent = pid() | atom()Bool = bool()Turns debugging of the agent on/off. Debug information is
printed whenever an instrumentation function is called, and
when a packet is received or sent.
This actually sets verbosity to log or silence for the
snmp_master_agent and snmp_net_if.
del_agent_caps(SysORIndex) -> void()
SysORIndex = integer()This function can be used to delete an AGENT-CAPABILITY statement to the sysORTable in the agent. This table is defined in the SNMPv2-MIB.
enum_to_int(Name,Enum) -> {value, Int} | false
Name = atom()Enum = atom()Int = int()Converts the symbolic value Enum to the
corresponding integer of the enumerated object or type
Name in a MIB. The MIB must be loaded.
false is returned if the object or type is not
defined in any loaded MIB, or if it does not define the
symbolic value as enumerated.
enum_to_int(Db,Name,Enum) -> {value, Int} | false
Db = term()Name = atom()Enum = atom()Int = int()Converts the symbolic value Enum to the
corresponding integer of the enumerated object or type
Name in a MIB. The MIB must be loaded. Db is
a reference to the symbolic store database (retrieved by a
call to get_symbolic_store_db/0<c>).
<p><c>false is returned if the object or type is not
defined in any loaded MIB, or if it does not define the
symbolic value as enumerated.
get(Agent,Vars) -> Values | {error, Reason}
Agent = pid() | atom()Vars = [oid()]Values = [term()]Reason = {atom(), oid()}Performs a GET operation on the agent. All loaded MIB
objects are visible in this operation. The agent calls the
corresponding instrumentation functions just as if it was a
GET request coming from a manager. That the request
specific parameters (such as snmp:current_request_id/0
are not accessible for the instrumentation functions if this
function is used.
get_agent_caps() -> [[SysORIndex, SysORID, SysORDescr, SysORUpTime]]
SysORIndex = integer()SysORId = oid()SysORDescr = string()SysORUpTime = integer()Returns all AGENT-CAPABILITY statements in the sysORTable in the agent. This table is defined in the SNMPv2-MIB.
Db = term()Retrieve the symbolic store database reference. This is used
for faster access to the database using the functions:
int_to_enum/3, enum_to_int/3, name_to_oid/2,
oid_to_name/2.
Agent = pid() | atom()Returns a list (a dictionary) containing information about the agent. Information includes loaded MIBs, registered subagents, some information about the memory allocation.
int_to_enum(Name,Int) -> {value, Enum} | false
Name = atom()Int = int()Enum = atom()Converts the integer Int to the corresponding
symbolic value of the enumerated object or type Name in
a MIB. The MIB must be loaded.
false is returned if the object or type is not
defined in any loaded MIB, or if it does not define the
symbolic value as enumerated.
int_to_enum(Db,Name,Int) -> {value, Enum} | false
Db = term()Name = atom()Int = int()Enum = atom()Converts the integer Int to the corresponding
symbolic value of the enumerated object or type Name in
a MIB. The MIB must be loaded. Db is a reference to
the symbolic store database (retrieved by a call to
get_symbolic_store_db/0<c>).
<p><c>false is returned if the object or type is not
defined in any loaded MIB, or if it does not define the
symbolic value as enumerated.
is_consistent(Mibs) -> ok | {error, Reason}
Mibs = [MibName]MibName = string()Checks for multiple usage of object identifiers and traps between MIBs.
load_mibs(Agent,Mibs) -> ok | {error, Reason}
Agent = pid() | atom()Mibs = [MibName]MibName = string()Loads Mibs into an agent. If the agent cannot load
all MIBs, it will indicate where loading was aborted. The
MibName is the name of the Mib, including the path to
where the compiled mib is found. For example,
Dir = code:priv_dir(my_app) ++ "/mibs/",
snmp:load_mibs(snmp_master_agent, [Dir ++ "MY-MIB"]).
local_time_to_date_and_time(Local) -> DateAndTime
Local = {{Y,Mo,D},{H,M,S}}DateAndTime = [int()]Converts a local time value to a DateAndTime list. The local time value on the same format as defined in calendar(3).
log_to_txt(LogDir, Mibs)
log_to_txt(LogDir, Mibs, OutFile) -> ok | {error, Reason}
log_to_txt(LogDir, Mibs, OutFile, LogName) ->
ok | {error, Reason}
log_to_txt(LogDir, Mibs, OutFile, LogName, LogFile) ->
ok | {error, Reason}
log_to_txt(LogDir, Mibs, OutFile, LogName, LogFile, Start) ->
ok | {error, Reason}
log_to_txt(LogDir, Mibs, OutFile, LogName, LogFile, Start, Stop) ->
ok | {error, Reason}
LogDir = string()Mibs = [MibName]OutFile = string()MibName = string()LogName = string()LogFile = string()Start = Stop = null | datetime() | {local_time,datetime()} |
{universal_time,datetime()} Converts an Audit Trail Log to a readable text file, where each item has a trailing TAB character, and any TAB character in the body of an item has been replaced by ESC TAB.
The function can be used on a running system, or by copying the entire log directory and calling this function. SNMP must be running in order to provide MIB information.
LogDir is the name of the directory where the audit
trail log is stored. Mibs is a list of Mibs to be
used. The function uses the information in the Mibs to
convert for example object identifiers to their symbolic
name. OutFile is the name of the generated textfile.
It defaults to "./snmp_log.txt". LogName is the
name of the log (default is "snmp log"),
LogFile is the name of the log file (default is
"snmp.log"). Start is the start (first) date
and time from which log events will be converted and Stop
is the stop (last) date and time to which log events will be
converted.
The format of an audit trail log text item is as follows:
Tag Addr - Community [TimeStamp] Vsn
PDU
where Tag is request, response,
report, trap or inform; Addr is
IP:Port (or comma space separated list of such);
Community is the community parameter (SNMP version
v1 and v2), or SecLevel:"AuthEngineID":"UserName"
(SNMP v3); TimeStamp is a date and time stamp,
and Vsn is the SNMP version. PDU is a textual
version of the protocol data unit. There is a new line
between Vsn and PDU.
mib_to_hrl(MibName) -> ok | {error, Reason}
MibName = string()Generates a .hrl file with definitions of Erlang
constants for the objects in the MIB. The .hrl file is
called <MibName>.hrl. The MIB must be compiled, and
present in the current directory.
The mib_to_hrl generator can be invoked from the OS
command line by using the command erlc. erlc
recognises the extension .bin, and invokes this function
for files with that extension.
name_to_oid(Name) -> {value, oid()} | false
Name = atom()Looks up the OBJECT IDENTIFIER of a MIB object, given the symbolic name. Note, the OBJECT IDENTIFIER is given for the object, not for an instance.
false is returned if the object is not defined in any
loaded MIB.
name_to_oid(Db,Name) -> {value, oid()} | false
Db = term()Name = atom()Looks up the OBJECT IDENTIFIER of a MIB object, given the
symbolic name. Note, the OBJECT IDENTIFIER is given for the
object, not for an instance. Db is a reference to the
symbolic store database (retrieved by a call to
get_symbolic_store_db/0<c>).
<p><c>false is returned if the object is not defined in any
loaded MIB.
oid_to_name(OID) -> {value, Name} | false
OID = oid()Name = atom()Looks up the symbolic name of a MIB object, given OBJECT IDENTIFIER.
false is returned if the object is not defined in any
loaded MIB.
oid_to_name(Db,OID) -> {value, Name} | false
Db = term()OID = oid()Name = atom()Looks up the symbolic name of a MIB object, given OBJECT
IDENTIFIER. Db is a reference to the symbolic store
database (retrieved by a call to get_symbolic_store_db/0<c>).
<p><c>false is returned if the object is not defined in any
loaded MIB.
register_subagent(Agent,SubTreeOid,Subagent) -> ok |
{error, Reason}
Agent = pid() | atom()SubTreeOid = oid()SubAgent = pid()Registers a subagent under a subtree of another agent.
It is easy to make mistakes when registering subagents and this activity should be done carefully. For example, a strange behaviour would result from the following configuration:
snmp_agent:register_subagent(MAPid,[1,2,3,4],SA1),
snmp_agent:register_subagent(SA1,[1,2,3], SA2).
SA2 will not get requests starting with object
identifier [1,2,3] since SA1 does not.
send_notification(Agent,Notification,Receiver)
send_notification(Agent,Notification,Receiver,Varbinds)
send_notification(Agent,Notification,Receiver,
NotifyName,Varbinds)
send_notification(Agent,Notification,Receiver,
NotifyName,ContextName,Varbinds) -> void()
Agent = pid() | atom()Notification = atom()Receiver = no_receiver | {Tag, Recv}Tag = term()Recv = pid() | atom() | {M,F,A}NotifyName = string()ContextName = string()Varbinds = [Varbind]Varbind = {Variable, Value} | {Column, RowIndex, Value} |
{OID, Value}Variable = atom()Column = atom()OID = oid()Value = term()RowIndex = [int()]Sends the notification Notification to the
management targets defined for NotifyName in the
snmpNotifyTable in SNMP-NOTIFICATION-MIB from the
specified context. If no NotifyName is specified (or
if it is ""), the notification is sent to all
management targets. If no ContextName is specified,
the default "" context is used.
The parameter Receiver specifies where information
about delivery of Inform-Requests should be sent. The agent
sends Inform-Requests and waits for acknowledgements from the
managers. If the Receiver is specified as
no_receiver, nothing is sent. Otherwise, it is
specified as {Tag, Recv}. The receiver (Recv)
gets a message:
{snmp_targets, Tag, Addresses}
Addresses is a list of management target addresses.
If UDP over IP is used, this is a 2-tuple {IP,
UDPport}, where IP is a 4-tuple with the IP
address, and UDPport is an integer. The notification
is sent as an Inform-Request to each target address in
Addresses. If there are no targets for which an
Inform-Request is sent, Addresses is the empty list
[].
For each such Address is the Addresses list,
one of the following two messages is sent to Recv:
{snmp_notification, Tag, {got_response, Address}}
{snmp_notification, Tag, {no_response, Address}}
The optional argument Varbinds defines
values for the objects in the notification. If no value is
given for an object, the Agent performs a get-operation
to retrieve the value.
Varbinds is a list of Varbind, where each
Varbind is one of:
{Variable, Value}, where Variable is the
symbolic name of a scalar variable referred to in the notification
specification.
{Column, RowIndex, Value}, where Column
is the symbolic name of a column variable.
RowIndex is a list of indices for the specified
element. If this is the case, the OBJECT IDENTIFIER sent
in the notification is the RowIndex appended to the OBJECT
IDENTIFIER for the table column. This is the OBJECT
IDENTIFIER which specifies the element.
{OID, Value}, where OID is the OBJECT
IDENTIFIER for an instance of an object, scalar variable,
or column variable.
For example, to specify that sysLocation should have the
value "upstairs" in the notification, we could use one of:
{sysLocation, "upstairs"} or
{[1,3,6,1,2,1,1,6,0], "upstairs"} or
{?sysLocation_instance, "upstairs"} (provided
that the generated .hrl file is included)
If a variable in the notification is a table element, the
RowIndex for the element must be given in the
Varbinds list. In this case, the OBJECT IDENTIFIER sent
in the notification is the OBJECT IDENTIFIER that identifies this
element. This OBJECT IDENTIFIER could be used in a get
operation later.
This function is asynchronous, and does not return any
information. If an error occurs, snmp_error:user_err/2
is called and the notification is discarded.
send_trap(Agent,Trap,Community)
send_trap(Agent,Trap,Community,Varbinds) -> void()
Agent = pid() | atom()Trap = atom()Community = string()Varbinds = [Varbind]Varbind = {Variable, Value} | {Column, RowIndex, Value} |
{OID, Value}Variable = atom()Column = atom()OID = oid()Value = term()RowIndex = [int()]Note! This function is only kept for backwards
compatibility reasons. Use send_notification instead.
Sends the trap Trap to the managers defined for
Community in the intTrapDestTable in
OTP-SNMPEA-MIB. The optional argument Varbinds defines
values for the objects in the trap. If no value is given for
an object, the Agent performs a get-operation to
retrieve the value.
Varbinds is a list of Varbind, where each
Varbind is one of:
{Variable, Value}, where Variable is the
symbolic name of a scalar variable referred to in the trap
specification.
{Column, RowIndex, Value}, where Column
is the symbolic name of a column variable.
RowIndex is a list of indices for the specified
element. If this is the case, the OBJECT IDENTIFIER sent
in the trap is the RowIndex appended to the OBJECT
IDENTIFIER for the table column. This is the OBJECT
IDENTIFIER which specifies the element.
{OID, Value}, where OID is the OBJECT
IDENTIFIER for an instance of an object, scalar variable,
or column variable.
For example, to specify that sysLocation should have the
value "upstairs" in the trap, we could use one of:
{sysLocation, "upstairs"} or
{[1,3,6,1,2,1,1,6,0], "upstairs"} or
{?sysLocation_instance, "upstairs"} (provided
that the generated .hrl file is included)
If a variable in the trap is a table element, the
RowIndex for the element must be given in the
Varbinds list. In this case, the OBJECT IDENTIFIER sent
in the trap is the OBJECT IDENTIFIER that identifies this
element. This OBJECT IDENTIFIER could be used in a get
operation later.
This function is asynchronous, and does not return any
information. If an error occurs, snmp_error:user_err/2
is called and the trap is discarded.
universal_time_to_date_and_time(UTC) -> DateAndTime
UTC = {{Y,Mo,D},{H,M,S}}DateAndTime = [int()]Converts a universal time value to a DateAndTime list. The unversal time value on the same format as defined in calendar(3).
unload_mibs(Agent,Mibs) -> ok | {error, Reason}
Agent = pid() | atom()Mibs = [MibName]MibName = string()Unloads MIBs into an agent. If it cannot unload all MIBs, it will indicate where unloading was aborted.
unregister_subagent(Agent,SubagentOidOrPid) -> ok | {ok,
SubAgentPid} | {error, Reason}
Agent = pid() | atom()SubTreeOidorPid = oid() | pid()Unregisters a subagent. If the second argument is a pid,
then that subagent will be unregistered from all trees in
Agent.
validate_date_and_time(DateAndTime) bool()
DateAndTime = term()Checks if DateAndTime is a correct DateAndTime
value, as specified in RFC1903. This function can be used in
instrumentation functions to validate a DateAndTime value.
verbosity(Ref,Verbosity) -> void()
Ref = pid() | snmp_master_agent | snmp_net_if | snmp_mib |
snmp_symbolic_store | snmp_note_store | snmp_local_dbVerbosity = silence | info | log | debug | traceSets verbosity for the designated process. For the lowest
verbosity silence, nothing is printed. The higher the
verbosity, the more is printed.
calendar(3), erlc(1)