MIB2C.CONF(5) Net-SNMP MIB2C.CONF(5)
NAME
mib2c.conf - How to write mib2c.conf files to do ANYTHING based on MIB
input.
SYNOPSIS
% cat > mib2c.test.conf << EOF @foreach $t table@
Starting table $t
@foreach $c column@
echo $t has column $c which has a syntax of $c.syntax
@end@
@end@ EOF
% mib2c -c mib2c.test.conf internet
DESCRIPTION
The mib2c.conf script language is a MIB-particular language designed to
easily process MIB nodes in ways that you want. mib2c is a misnomer
(for historical purposes), because you can produce anything (not just C
code). Look in the Net-SNMP "local" directory for a bunch of example
mib2c.*.conf files and behold the power before you.
COMMANDS
All commands within mib2c.conf files are embraced by @ signs. Anything
with an @ sign at the front and back of the line is generally supposed
to be a mib2c specific command. These are detailed here:
@open FILE@
writes generated output to FILE note that for file specifica-
tions, opening '-' will print to stdout.
@append FILE@
appends the given FILE
@close FILE@
closes the given FILE
@push@ save the current outputs, then clear outputs. Use with @open@
and @pop@ to write to a new file without interfering with cur-
rent outputs.
@pop@ pop up the process() stack one level. Use after a @push@ to re-
turn to the previous set of open files.
@foreach $VAR scalar@
repeat iterate over code until @end@ setting $VAR to all known
scalars
@foreach $VAR table@
repeat iterate over code until @end@ setting $VAR to all known
tables
@foreach $VAR column@
repeat iterate over code until @end@ setting $VAR to all known
columns within a given table. Obviously this must be called
within a foreach-table clause.
@foreach $VAR nonindex@
repeat iterate over code until @end@ setting $VAR to all known
non-index columns within a given table. Obviously this must be
called within a foreach-table clause.
@foreach $VAR internalindex@
repeat iterate over code until @end@ setting $VAR to all known
internal index columns within a given table. Obviously this
must be called within a foreach-table clause.
@foreach $VAR externalindex@
repeat iterate over code until @end@ setting $VAR to all known
external index columns within a given table. Obviously this
must be called within a foreach-table clause.
@foreach $VAR index@
repeat iterate over code until @end@ setting $VAR to all known
indexes within a given table. Obviously this must be called
within a foreach-table clause.
@foreach $VAR notifications@
repeat iterate over code until @end@ setting $VAR to all known
notifications
@foreach $VAR varbinds@
repeat iterate over code until @end@ setting $VAR to all known
varbinds Obviously this must be called within a foreach-notifi-
cations clause.
@foreach $LABEL, $VALUE enum@
repeat iterate over code until @end@ setting $LABEL and $VALUE
to the label and values from the enum list.
@foreach $RANGE_START, $RANGE_END range NODE@
repeat iterate over code until @end@ setting $RANGE_START and
$RANGE_END to the legal accepted range set for a given mib NODE.
@foreach $var stuff a b c d@
repeat iterate over values a, b, c, d as assigned generically
(ie, the values are taken straight from the list with no mib-ex-
pansion, etc).
@while expression@
repeat iterate over code until the expression is false
@eval $VAR = expression@
evaluates expression and assigns the results to $VAR. This is
not a full perl eval, but sort of a ""psuedo"" eval useful for
simple expressions while keeping the same variable name space.
See below for a full-blown export to perl.
@perleval STUFF@
evaluates STUFF directly in perl. Note that all mib2c variables
interpereted within .conf files are in $vars{NAME} and that a
warning will be printed if STUFF does not return 0. (adding a
'return 0;' at the end of STUFF is a workaround.
@startperl@
@endperl@
treats everything between these tags as perl code, and evaluates
it.
@next@ restart foreach; should only be used inside a conditional.
skips out of current conditional, then continues to skip to end
for the current foreach clause.
@if expression@
evaluates expression, and if expression is true processes con-
tained part until appropriate @end@ is reached. If the expres-
sion is false, the next @elsif expression@ expression (if it ex-
ists) will be evaluated, until an expression is true. If no such
expression exists and an @else@ clause is found, it will be
evaluated.
@ifconf file@
If the specified file can be found in the conf file search path,
and if found processes contained part until an appropriate @end@
is found. As with a regular @if expression@, @elsif expression@
and @else@ can be used.
@ifdir dir@
If the specified directory exists, process contained part until
an appropriate @end@ is found. As with a regular @if expres-
sion@, @elsif expression@ and @else@ can be used.
@define NAME@
@enddefine@
Memorizes ""stuff"" between the define and enddefine tags for
later calling as NAME by @calldefine NAME@.
@calldefine NAME@
Executes stuff previously memorized as NAME.
@printf "expression" stuff1, stuff2, ...@
Like all the other printf's you know and love.
@run FILE@
Sources the contents of FILE as a mib2c file, but does not af-
fect current files opened.
@include FILE@
Sources the contents of FILE as a mib2c file and appends its
output to the current output.
@prompt $var QUESTION@
Presents the user with QUESTION, expects a response and puts it
in $var
@print STUFF@
Prints stuff directly to the users screen (ie, not to where nor-
mal mib2c output goes)
@quit@ Bail out (silently)
@exit@ Bail out!
VARIABLES
Variables in the mib2c language look very similar to perl variables, in
that they start with a "$". They can be used for anything you want,
but most typically they'll hold mib node names being processed by
@foreach ...@ clauses.
They also have a special properties when they are a mib node, such that
adding special suffixes to them will allow them to be interpreted in
some fashion. The easiest way to understand this is through an exam-
ple. If the variable 'x' contained the word 'ifType' then some magical
things happen. In mib2c output, anytime $x is seen it is replaced with
"ifType". Additional suffixes can be used to get other aspects of that
mib node though. If $x.objectID is seen, it'll be replaced by the OID
for ifType: ".1.3.6.1.2.1.2.2.1.3". Other suffixes that can appear af-
ter a dot are listed below.
One last thing: you can use things like $vartext immediately ending in
some other text, you can use {}s to get proper expansion of only part
of the mib2c input. IE, $xtext will produce "$xtext", but ${x}text
will produce "ifTypetext" instead.
$var.uc
all upper case version of $var
$var.objectID
dotted, fully-qualified, and numeric OID
$var.commaoid
comma separated numeric OID for array initialization
$var.oidlength
length of the oid
$var.subid
last number component of oid
$var.module
MIB name that the object comes from
$var.parent
contains the label of the parent node of $var.
$var.isscalar
returns 1 if var contains the name of a scalar
$var.iscolumn
returns 1 if var contains the name of a column
$var.children
returns 1 if var has children
$var.perltype
node's perl SYNTAX ($SNMP::MIB{node}{'syntax'})
$var.type
node's ASN_XXX type (Net-SNMP specific #define)
$var.decl
C data type (char, u_long, ...)
$var.readable
1 if an object is readable, 0 if not
$var.settable
1 if an object is writable, 0 if not
$var.creatable
1 if a column object can be created as part of a new row, 0 if
not
$var.noaccess
1 if not-accessible, 0 if not
$var.accessible
1 if accessible, 0 if not
$var.storagetype
1 if an object is a StorageType object, 0 if not
$var.rowstatus
1 if an object is a RowStatus object, 0 if not 'settable', 'cre-
atable', 'lastchange', 'storagetype' and 'rowstatus' can also be
used with table variables to indicate whether it contains
writable, creatable, LastChange, StorageType or RowStatus column
objects
$var.hasdefval
returns 1 if var has a DEFVAL clause
$var.defval
node's DEFVAL
$var.hashint
returns 1 if var has a HINT clause
$var.hint
node's HINT
$var.ranges
returns 1 if var has a value range defined
$var.enums
returns 1 if var has enums defined for it.
$var.access
node's access type
$var.status
node's status
$var.syntax
node's syntax
$var.reference
node's reference
$var.description
node's description
SEE ALSO
mib2c(1)
VVERSIONINFO 28 Apr 2004 MIB2C.CONF(5)