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
return 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-
expansion, 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
exists) 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 printfs you know and love.
@run FILE@
Sources the contents of FILE as a mib2c file, but does not
affect 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 theyll 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, itll be replaced by the OID
for ifType: ".1.3.6.1.2.1.2.2.1.3". Other suffixes that can appear
after 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
nodes perl SYNTAX ($SNMP::MIB{node}{syntax})
$var.type
nodes 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.rowstatus
1 if an object is a RowStatus object, 0 if not settable, cre
atable and rowstatus can also be used with table variables to
indicate whether it contains writable, creatable or RowStatus
column objects
$var.hasdefval
returns 1 if var has a DEFVAL clause
$var.defval
nodes DEFVAL
$var.hashint
returns 1 if var has a HINT clause
$var.hint
nodes 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
nodes access type
$var.status
nodes status
$var.syntax
nodes syntax
$var.reference
nodes reference
$var.description
nodes description
SEE ALSO
mib2c(1)
4th Berkeley Distribution 28 Apr 2004 MIB2C.CONF(5)
|