SYNOPSIS

% cat > mib2c.test.conf << EOF @foreach $t [email protected]

  Starting table $t
  @foreach $c [email protected]
    echo $t has column $c which has a syntax of $c.syntax
  @[email protected]

@[email protected] 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 [email protected]

writes generated output to FILE note that for file specifications, opening '-' will print to stdout.

@append [email protected]

appends the given FILE

@close [email protected]

closes the given FILE

@[email protected]

save the current outputs, then clear outputs. Use with @[email protected] and @[email protected] to write to a new file without interfering with current outputs.

@[email protected]

pop up the process() stack one level. Use after a @[email protected] to return to the previous set of open files.

@foreach $VAR [email protected]

repeat iterate over code until @[email protected] setting $VAR to all known scalars

@foreach $VAR [email protected]

repeat iterate over code until @[email protected] setting $VAR to all known tables

@foreach $VAR [email protected]

repeat iterate over code until @[email protected] setting $VAR to all known columns within a given table. Obviously this must be called within a foreach-table clause.

@foreach $VAR [email protected]

repeat iterate over code until @[email protected] setting $VAR to all known non-index columns within a given table. Obviously this must be called within a foreach-table clause.

@foreach $VAR [email protected]

repeat iterate over code until @[email protected] setting $VAR to all known internal index columns within a given table. Obviously this must be called within a foreach-table clause.

@foreach $VAR [email protected]

repeat iterate over code until @[email protected] setting $VAR to all known external index columns within a given table. Obviously this must be called within a foreach-table clause.

@foreach $VAR [email protected]

repeat iterate over code until @[email protected] setting $VAR to all known indexes within a given table. Obviously this must be called within a foreach-table clause.

@foreach $VAR [email protected]

repeat iterate over code until @[email protected] setting $VAR to all known notifications

@foreach $VAR [email protected]

repeat iterate over code until @[email protected] setting $VAR to all known varbinds Obviously this must be called within a foreach-notifications clause.

@foreach $LABEL, $VALUE [email protected]

repeat iterate over code until @[email protected] setting $LABEL and $VALUE to the label and values from the enum list.

@foreach $RANGE_START, $RANGE_END range [email protected]

repeat iterate over code until @[email protected] setting $RANGE_START and $RANGE_END to the legal accepted range set for a given mib NODE.

@foreach $var stuff a b c [email protected]

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 [email protected]

repeat iterate over code until the expression is false

@eval $VAR = [email protected]

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 [email protected]

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.

@[email protected]
@[email protected]

treats everything between these tags as perl code, and evaluates it.

@[email protected]

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 [email protected]

evaluates expression, and if expression is true processes contained part until appropriate @[email protected] is reached. If the expression is false, the next @elsif [email protected] expression (if it exists) will be evaluated, until an expression is true. If no such expression exists and an @[email protected] clause is found, it will be evaluated.

@ifconf [email protected]

If the specified file can be found in the conf file search path, and if found processes contained part until an appropriate @[email protected] is found. As with a regular @if [email protected], @elsif [email protected] and @[email protected] can be used.

@ifdir [email protected]

If the specified directory exists, process contained part until an appropriate @[email protected] is found. As with a regular @if [email protected], @elsif [email protected] and @[email protected] can be used.

@define [email protected]
@[email protected]

Memorizes ""stuff"" between the define and enddefine tags for later calling as NAME by @calldefine [email protected]

@calldefine [email protected]

Executes stuff previously memorized as NAME.

@printf

Like all the other printf's you know and love.

@run [email protected]

Sources the contents of FILE as a mib2c file, but does not affect current files opened.

@include [email protected]

Sources the contents of FILE as a mib2c file and appends its output to the current output.

@prompt $var [email protected]

Presents the user with QUESTION, expects a response and puts it in $var

@print [email protected]

Prints stuff directly to the users screen (ie, not to where normal mib2c output goes)

@[email protected]

Bail out (silently)

@[email protected]

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 [email protected] 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 example. 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 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

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', 'creatable', '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

RELATED TO mib2c.conf…