Search documentation of snmp

# snmpa_mib_data behaviour (snmp v5.20.1)

View Source

Behaviour module for the SNMP agent mib-server data module.

This module defines the behaviour of the SNMP agent mib-server data module. A `snmpa_mib_data` compliant module must export the following functions:

- new/1
- close/1
- sync/1
- load_mib/4
- unload_mib/4
- lookup/2
- next/3
- register_subagent/3
- unregister_subagent/2
- which_mib/2
- which_mibs/1
- whereis_mib/2
- dump/2
- info/1
- backup/2
- code_change/4

The semantics of them and their exact signatures are explained below.

Note that the data extracted from the imported (loaded) mibs are stored partly by the mib-server and partly by the symbolic-store server. See the default mib-server data module, `snmpa_mib_data_tttn` for details.

# Summary

## Types

filename()
mib_view()
mib_view_elem()
mib_view_inclusion()
mib_view_mask()

## Callbacks

backup(State, BackupDir)

Perform a backup of the mib-server data.

close(State)

Close the mib-storage.

code_change(Direction, Vsn, Extra, State)

Perform a code-change (upgrade or downgrade).

dump(State, Destination)

Dump the mib-server data to `stdio` (Destination = `io`) or the specified file.

info(State)

Retrieve misc info for the mib data.

load_mib(State, FileName, MeOverride, TeOverride)

Load the mib specified by the `Filename` argument into the mib-server. The `MeOverride` and `TeOverride` arguments specifies how the mib-server shall handle duplicate mib- and trap- entries.

lookup(State, Oid)

Find the mib-entry corresponding to the `Oid`. If it is a variable, the `Oid` must be <Oid for var>.0 and if it is a table, `Oid` must be

new(MibStorage)

Create a new mib-server data instance.

next(State, Oid, MibView)

Finds the lexicographically next oid.

register_subagent(State, Oid, Pid)

Register the subagent, process, handling part of the mib-tree.

sync(State)

Synchronize (write to disc, if possible) the mib-server data. This depends on the `mib_storage` option, and will only have an effect if the mib-storage option has an actual disc component (such as dets, or ets with a file).

unload_mib(State, Filename)
unload_mib(State, FileName, MeOverride, TeOverride)

Unload the mib specified by the `Filename` argument from the mib-server. The `MeOverride` and `TeOverride` arguments specifies how the mib-server shall handle duplicate mib- and trap- entries.

unregister_subagent(State, PidOrOid)

Unregister the subagent, handling part of the mib-tree, as specified by the `oid()` or `pid/0` (`PidOrOid`).

whereis_mib(State, MibName)

Retrieve the mib file for the mib.

which_mib(State, Oid)

Retrieve the mib-file to which an given `oid()` belongs.

which_mibs(State)

Retrieve all loaded mib-files.

# Types

# filename()

(not exported) (since OTP R16B01)

    -type filename() :: file:filename().

# mib_view()

(since OTP R16B01)

    -type mib_view() :: [mib_view_elem()].

# mib_view_elem()

(since OTP R16B01)

    -type mib_view_elem() ::
              {SubTree :: snmp:oid(), Mask :: [non_neg_integer()], Inclusion :: mib_view_inclusion()}.

# mib_view_inclusion()

(since OTP R16B01)

    -type mib_view_inclusion() :: 1 | 2.

# mib_view_mask()

(since OTP R16B01)

    -type mib_view_mask() :: [non_neg_integer()].

# Callbacks

# backup(State, BackupDir)

(since OTP R16B01)

    -callback backup(State :: term(), BackupDir :: string()) -> ok | {error, Reason :: term()}.

Perform a backup of the mib-server data.

Note that its implementation dependent (and also dependent on mib-storage is used) if a backup is possible.

# close(State)

(since OTP R16B01)

    -callback close(State :: term()) -> ok.

Close the mib-storage.

# code_change(Direction, Vsn, Extra, State)

(since OTP R16B01)

    -callback code_change(Direction :: up | down, Vsn :: term(), Extra :: term(), State :: term()) ->
                             NewState :: term().

Perform a code-change (upgrade or downgrade).

See `gen_server` for more info regarding the `Vsn` and `Extra` arguments.

# dump(State, Destination)

(since OTP R16B01)

    -callback dump(State :: term(), Destination :: io | filename()) -> ok | {error, Reason :: term()}.

Dump the mib-server data to `stdio` (Destination = `io`) or the specified file.

# info(State)

(since OTP R16B01)

    -callback info(State :: term()) -> list().

Retrieve misc info for the mib data.

This is a utility function used to inspect, for instance, memory usage, in a simple way.

# load_mib(State, FileName, MeOverride, TeOverride)

(since OTP R16B01)

    -callback load_mib(State :: term(),
                       FileName :: filename(),
                       MeOverride :: boolean(),
                       TeOverride :: boolean()) ->
                          {ok, NewState :: term()} | {error, Reason :: already_loaded | term()}.

Load the mib specified by the `Filename` argument into the mib-server. The `MeOverride` and `TeOverride` arguments specifies how the mib-server shall handle duplicate mib- and trap- entries.

# lookup(State, Oid)

(since OTP R16B01)

    -callback lookup(State :: term(), Oid :: snmp:oid()) ->
                        {false, Reason :: term()} |
                        {variable, MibEntry :: snmpa:me()} |
                        {table_column, MibEntry :: snmpa:me(), TableEntryOid :: snmp:oid()} |
                        {subagent, SubAgentPid :: pid(), SAOid :: snmp:oid()}.

Find the mib-entry corresponding to the `Oid`. If it is a variable, the `Oid` must be <Oid for var>.0 and if it is a table, `Oid` must be

# new(MibStorage)

(since OTP R16B01)

    -callback new(MibStorage :: snmpa:mib_storage()) -> State :: term().

Create a new mib-server data instance.

# next(State, Oid, MibView)

(since OTP R16B01)

    -callback next(State :: term(), Oid :: snmp:oid(), MibView :: mib_view()) ->
                      endOfView | false |
                      {subagent, SubAgentPid :: pid(), SAOid :: snmp:oid()} |
                      {variable, MibEntry :: snmpa:me(), VarOid :: snmp:oid()} |
                      {table, TableOid :: snmp:oid(), TableRestOid :: snmp:oid(), MibEntry :: snmpa:me()}.

Finds the lexicographically next oid.

# register_subagent(State, Oid, Pid)

(since OTP R16B01)

    -callback register_subagent(State :: term(), Oid :: snmp:oid(), Pid :: pid()) ->
                                   {ok, NewState :: term()} | {error, Reason :: term()}.

Register the subagent, process, handling part of the mib-tree.

# sync(State)

(since OTP R16B01)

    -callback sync(State :: term()) -> ok.

Synchronize (write to disc, if possible) the mib-server data. This depends on the `mib_storage` option, and will only have an effect if the mib-storage option has an actual disc component (such as dets, or ets with a file).

# unload_mib(State, Filename)

(since OTP R16B01) (optional)

    -callback unload_mib(State, Filename) -> {ok, NewState} | {error, Reason}
                            when
                                State :: term(),
                                Filename :: filename(),
                                NewState :: term(),
                                Reason :: not_loaded | term().

# unload_mib(State, FileName, MeOverride, TeOverride)

(since OTP R16B01)

    -callback unload_mib(State :: term(),
                         FileName :: filename(),
                         MeOverride :: boolean(),
                         TeOverride :: boolean()) ->
                            {ok, NewState :: term()} | {error, Reason :: not_loaded | term()}.

Unload the mib specified by the `Filename` argument from the mib-server. The `MeOverride` and `TeOverride` arguments specifies how the mib-server shall handle duplicate mib- and trap- entries.

# unregister_subagent(State, PidOrOid)

(since OTP R16B01)

    -callback unregister_subagent(State :: term(), PidOrOid :: pid() | snmp:oid()) ->
                                     {ok, NewState :: term()} |
                                     {ok, NewState :: term(), Pid :: pid()} |
                                     {error, Reason :: term()}.

Unregister the subagent, handling part of the mib-tree, as specified by the `oid()` or `pid/0` (`PidOrOid`).

When unregister the subagent using an `oid()`, the `pid/0` of the process handling the sub-tree is also returned.

# whereis_mib(State, MibName)

(since OTP R16B01)

    -callback whereis_mib(State :: term(), MibName :: atom()) ->
                             {ok, Filename :: filename()} | {error, Reason :: term()}.

Retrieve the mib file for the mib.

# which_mib(State, Oid)

(since OTP R16B01)

    -callback which_mib(State :: term(), Oid :: snmp:oid()) -> {ok, Mib :: string()} | {error, Reason :: term()}.

Retrieve the mib-file to which an given `oid()` belongs.

# which_mibs(State)

(since OTP R16B01)

    -callback which_mibs(State :: term()) -> [{MibName :: atom(), Filename :: filename()}].

Retrieve all loaded mib-files.