# `snmpa_mib_data` [🔗](https://github.com/kikofernandez/otp/blob/kiko/otp/release-gh-action-backup-continuation/OTP-20040/lib/snmp/src/agent/snmpa_mib_data.erl#L22) 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](`c:snmpa_mib_data:new/1`) - [close/1](`c:snmpa_mib_data:close/1`) - [sync/1](`c:snmpa_mib_data:sync/1`) - [load_mib/4](`c:snmpa_mib_data:load_mib/4`) - [unload_mib/4](`c:snmpa_mib_data:unload_mib/4`) - [lookup/2](`c:snmpa_mib_data:lookup/2`) - [next/3](`c:snmpa_mib_data:next/3`) - [register_subagent/3](`c:snmpa_mib_data:register_subagent/3`) - [unregister_subagent/2](`c:snmpa_mib_data:unregister_subagent/2`) - [which_mib/2](`c:snmpa_mib_data:which_mib/2`) - [which_mibs/1](`c:snmpa_mib_data:which_mibs/1`) - [whereis_mib/2](`c:snmpa_mib_data:whereis_mib/2`) - [dump/2](`c:snmpa_mib_data:dump/2`) - [info/1](`c:snmpa_mib_data:info/1`) - [backup/2](`c:snmpa_mib_data:backup/2`) - [code_change/4](`c:snmpa_mib_data: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. # `filename` *not exported* *since OTP R16B01* ```elixir -type filename() :: file:filename(). ``` # `mib_view` *since OTP R16B01* ```elixir -type mib_view() :: [mib_view_elem()]. ``` # `mib_view_elem` *since OTP R16B01* ```elixir -type mib_view_elem() :: {SubTree :: snmp:oid(), Mask :: [non_neg_integer()], Inclusion :: mib_view_inclusion()}. ``` # `mib_view_inclusion` *since OTP R16B01* ```elixir -type mib_view_inclusion() :: 1 | 2. ``` # `mib_view_mask` *since OTP R16B01* ```elixir -type mib_view_mask() :: [non_neg_integer()]. ``` # `backup` *since OTP R16B01* ```elixir -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` *since OTP R16B01* ```elixir -callback close(State :: term()) -> ok. ``` Close the mib-storage. # `code_change` *since OTP R16B01* ```elixir -callback code_change(Direction :: up | down, Vsn :: term(), Extra :: term(), State :: term()) -> NewState :: term(). ``` Perform a code-change (upgrade or downgrade). See `m:gen_server` for more info regarding the `Vsn` and `Extra` arguments. # `dump` *since OTP R16B01* ```elixir -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` *since OTP R16B01* ```elixir -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` *since OTP R16B01* ```elixir -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` *since OTP R16B01* ```elixir -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 .0 and if it is a table, `Oid` must be # `new` *since OTP R16B01* ```elixir -callback new(MibStorage :: snmpa:mib_storage()) -> State :: term(). ``` Create a new mib-server data instance. # `next` *since OTP R16B01* ```elixir -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` *since OTP R16B01* ```elixir -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` *since OTP R16B01* ```elixir -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` *since OTP R16B01* *optional* ```elixir -callback unload_mib(State, Filename) -> {ok, NewState} | {error, Reason} when State :: term(), Filename :: filename(), NewState :: term(), Reason :: not_loaded | term(). ``` # `unload_mib` *since OTP R16B01* ```elixir -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` *since OTP R16B01* ```elixir -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 `t:pid/0` (`PidOrOid`). When unregister the subagent using an `oid()`, the `t:pid/0` of the process handling the sub-tree is also returned. # `whereis_mib` *since OTP R16B01* ```elixir -callback whereis_mib(State :: term(), MibName :: atom()) -> {ok, Filename :: filename()} | {error, Reason :: term()}. ``` Retrieve the mib file for the mib. # `which_mib` *since OTP R16B01* ```elixir -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` *since OTP R16B01* ```elixir -callback which_mibs(State :: term()) -> [{MibName :: atom(), Filename :: filename()}]. ``` Retrieve all loaded mib-files. --- *Consult [api-reference.md](api-reference.md) for complete listing*