Provided by: libsnmp-base_5.2.1.2-4ubuntu2_all bug

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
              specifications, 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
              current 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-
              notifications 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).

       @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}.

       @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
              contained part until appropriate @end@ is reached.  If an @else@
              clause  is  found,  it  will  be evaluated instead if expression
              isn’t true.

       @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
              Like all the other printf’s 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
              normal mib2c output goes)

       @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
       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.rowstatus
              1 if an object is a RowStatus  object,  0  if  not  to  indicate
              whether  it  contains  writable,  creatable  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)