########################################################################
## generic include for XXX. Don't use directly.
##
## $Id$
########################################################################
@if $m2c_mark_boundary == 1@
/** START code generated by $RCSfile$ $Revision$ */
@end@
########################################################################
##
@open ${name}-README-FIRST.txt@
************************************************************************
${name} README
------------------------------------------------------------------------
This document describes the results of the mib2c code generation
system using the mfd code generation template.  The resulting files
are documented both in this README file as well as per-table specific
README files.  All of the files generated by this run of mib2c will
begin with the ${name} prefix.

Quick Start
-----------
For those interested in a quick start, to get a pseudo-todo list, try
this command in directory with the generated code:

 grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n

Key:
  :o: Optional
  :r: Recommended
  :M: Mandatory
  :A: Advanced users

This will give you and ordered list of places in the code that you
may (or must) take a closer look at).

You may also want to take a look at the on-line tutorial, found here:

    http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html


MIBs For Dummies Overview
-------------------------
The MIBs For Dummies (MFD) configuration files have been written to help
SNMP novices implement SNMP MIBs. This section will be a brief
introduction to some of the general concepts you should be familar with.

  Managed Information Base (MIB)
  ------------------------------
  A SNMP MIB (Managed information base) is a text file that describes the
  syntax for some set of data objects. The MIB creates a correlation
  between an ASCII name for an object and a number OID (Object Identifier).
  The SNMP protocol communicates information using the OIDs, and the MIB
  allows tools to display a name, which we humans find easier to deal with.

  To use an analogy, a MIB is much like a menu at a restaurant. If you've
  ever been to a reataurant and ordered a meal, and later received a bill
  that simply had '#6' on it, you get the idea. The name is easier for
  the customers to remember, and the waiters and chefs use the number for
  efficency.


    Scalars
    -------
    A scalar variable is a unique object in a MIB which can represent
    a single value. For example, the SNMP standard MIB-II defines a
    variable, sysContact.0, which is a string containing the contact
    information for the person in charge of a particular agent. Note
    that scalar variable always end with '.0'.
    

    Rows and Tables
    ---------------
    When a group of related attributes occur more than once, they can be
    grouped together in a table. A table has an index, which uniquely
    identifies a particular row, and data columns, which contain the
    attributes for that row.

    For example, the SNMP standard MIB-II defines a table, ifTable, which
    contains information on the ethernet interfaces on a system.
    

  Data Structures
  ---------------
  The code generated by the MFD configuration files has a few important
  structures.


    The Data Context
    ----------------
    The data context structure should contain the necessary information
    to provide the data for the columns in a given row. As long as you
    can extract the data for a column for the data context, the data context
    can be anything you want: a pointer to an existing structure, the
    parameters needed for a function call or an actual copy of the data.

    By default, a data context structure is generated with storage for
    all the data in a row. Information on changing the default is presented
    later on in this help.


    The MIB Context
    ---------------
    The MIB context structure is generated with storage for all the
    indexes of a table. This data will be used when searching for the
    correct row to process for a request.


    The Row Request Context
    -----------------------
    Each table will have a unique data structure for holding data during
    the processing of a particular row. The row request context contains
    the registration context (that you supply during initilization),
    the data context, the MIB context, the undo context (for settable
    tables) and other data. There is also a netsnmp_data_list, which can
    be used to temporary storage during processing.


    The Table Registration Pointer
    ------------------------------
    During initilization, you may provide a pointer to arbitrary data for
    you own use. This pointer will be saved in the row request context,
    and is passed as a parameter to several functions. It is not required,
    and is provided as a way for you to access table specific data in
    the generated code.



These files are top-level files potentially useful for all the tables: 
------------------------------------------------------------------------

  File    : ${name}_Makefile
  ----------------------------------------------------------------------
  Purpose : Make file for compiling a (sub)agent.  This file is only
            useful if you don't want to compile your code directly
            into the Net-SNMP master agent.
  Editable: Optional
  Usage   : make -f ${name}_Makefile


  File    : ${name}_subagent.c
  ----------------------------------------------------------------------
  Purpose : This file contains a main() function for an agent or
            sub-agent and is compiled using the Makefile above.




Table specific README files
------------------------------------------------------------------------
Each table for which code was generated has its own README file
describing the files specifically associated with each table.  You
should probably read these next:

@foreach $table table@
@    include m2c_setup_table.m2i@
   ${name}-README-${table}.txt
@end@



These are miscellaneous auto-generated code files you generally
shouldn't edit.  They contain code that ties your code together with
the Net-SNMP agent.
------------------------------------------------------------------------
@if $m2c_create_fewer_files == 1@
  File    : ${name}.c
  Purpose : Initilization for the entire module set, including the
            SNMP tables.

@end@
  File    : ${name}.h
  Purpose : Header file for the module set.  Includes config_require
            macros to auto-load the other code pieces when compiled
            into the agent.

@if $m2c_create_fewer_files != 1@
  File    : ${name}_oids.h
  Purpose : C #define definitions of the tables, columns, and OIDs

  File    : ${name}_enums.h
  Purpose : C #define definitions of the enumerated type values for
            each column of each table that requires them.
@else@
  File    : ${name}_constants.h
  Purpose : C #define definitions of the tables, columns, OIDs, enumerated
            type values for each column of each table that requires them.
@end@

  File    : ${name}_interface.c
  Purpose : MFD interface to Net-SNMP.  This auto-generated code ties the
            functions you will fill out to the code that the agent needs.

########################################################################
@foreach $table table@
@    include m2c_setup_table.m2i@
@    open ${name}-README-${table}.txt@
************************************************************************
${context} README
------------------------------------------------------------------------
  This readme file describes the code generated by mib2c (using the MIBs
  for Dummies (MFD) configuration file). The code generated was
  generated specifically for the following SNMP table:

     ${context}

  Your code will be called when the snmp agent receives requests for
  the ${context} table.  The agent will start by looking for the right
  row in your existing data to operate on, if one exists.


  Configuration Variables
  ------------------------------------------------------------
  Some variables used for code generation may be set to affect the code
  generation. You may override these variables by setting them in the
  file ${m2c_defaults_dir}table-${context}.m2d, and then re-running mib2c.

    m2c_table_settable (currently '$m2c_table_settable')
    --------------------------------------------------------
    This variable determines whether or not code is generated to support
    MIB object which have an access of read-write or read-create. The
    default is set based on whether or not the table contains writable
    objects, but can be over-ridden.

    Syntax: @eval $@m2c_table_settable = 0@


    m2c_table_dependencies (currently '$m2c_table_dependencies')
    --------------------------------------------------------
    This variable determines whether or not code is generated to support
    checking dependencies between columns, rows or tables. The default
    is set based on whether or not the table contains writable objects,
    but can be over-ridden.

    Syntax: @eval $@m2c_table_dependencies = 0@


    m2c_table_row_creation (currently '$m2c_table_row_creation')
    --------------------------------------------------------
    This variable determines whether or not code is generated to support
    checking creation of new rows via SNMP. The default is set based on
    whether or not the table contains read-create objects, but can be
    over-ridden.

    Syntax: @eval $@m2c_table_row_creation = 0@


    m2c_context_reg (currently '$m2c_context_reg')
    --------------------------------------------------------
    This variable contains the structure name to typedef for the
    ${context}_registration.

    During initilization, you will provide a pointer to a structure of
    this type. This pointer is used as a parameter to many functions so
    that you have access to your registration data. The default is a
    netsnmp_data_list pointer, which will allow you to keep multiple
    pointers tagged by a text name. If you have a new or existing structure
    you would rather use, you can redefine this variable.
    

    To avoid regenerating code, you may also change this typedef directly
    in the ${table}.h header.

    Syntax: @eval $@m2c_context_reg = "struct my_registration_context@


    m2c_data_context (currently '$m2c_data_context')
    --------------------------------------------------------
    This variable contains the structure name to typedef for the
    ${context}_data.

    This typedef is used in the row request context structure for the table,
    ${context}_rowreq_ctx.

    The typedef in the primary table context will be used for the data and
    undo structure types. This structure should contain all the data
    needed for all the columns in the table. The default is 'generated',
    which will cuase a new data strcuture to be generated with data members
    for each column.

    To avoid regenerating code, you may also change this typedef directly
    in the ${table}.h header.

    Syntax: @eval $@m2c_data_context = "struct my_data_context"@


    m2c_data_allocate (currently '$m2c_data_allocate')
    --------------------------------------------------------
    This variable determines whether or not the data context (see above)
    requires memory to be allocated. The default generated data structure
    does not. If you are using a custom data context which needs to
    allocate memory, override this value and two additional functions
    will be generated:

      ${context}_allocate_data
      ${context}_release_data

    Syntax: @eval $@m2c_data_allocate = 1@


    m2c_data_init (currently '$m2c_data_init')
    --------------------------------------------------------
    This variable determines whether or not the data context (see above)
    or any other items you have added to the table context requires
    initialization. The default generated data structure does not. If you
    are using a custom data context or have added items needing initialization
    to the table context, override this value and two additional functions
    will be generated:

      ${context}_rowreq_ctx_init
      ${context}_rowreq_ctx_cleanup

    Syntax: @eval $m2c_data_init = 1@


    m2c_table_access (currently '$m2c_table_access')
    ------------------------------------------------------------------
    This variable determines which data interface will be use to generate
    code for looking up data for a given index. The default is the
    'container-cached' access code, which caches the data in a netsnmp-
    container (usually a sorted array).

    Available options can be determined by checking for mib2c configuration
    files that begin with 'mfd-access-*'.

    Syntax: @eval $@m2c_table_access = '$m2c_table_access'@

 
    m2c_include_examples (currently '$m2c_include_examples')
    ------------------------------------------------------------------
    This variable determines whether or not to generate example code. The
    default is to generate example code.

    Syntax: @eval $@m2c_include_examples = 0@


    m2c_data_transient (currently '$m2c_data_transient')
    ------------------------------------------------------------------
    This variable determines how the generated example code deals with the
    data during data lookup. See the table readme file for details on how
    the current table access method interprets this value. In general,
    a value of 0 indicates persistent data, 1 indicates semi-transient and
    2 indicates transient data.

    Syntax: @eval $@m2c_data_transient = 0@


 Index(es) for the ${context} table
  ------------------------------------------------------------
  The index(es) for the ${context} table are:

@foreach $node index@
@    include m2c_setup_node.m2i@
     $node:
        Syntax:      $node.syntax
        DataType:    $node.perltype
        ASN type:    $node.type
        C-code type: $m2c_decl
@end@ # foreach

  You should know how to set all these values from your data context,
  ${context}_data.


************************************************************************
${context} File Overview
------------------------------------------------------------------------
  Several files have been generated to implement the ${context}
  table. We'll go through these files, one by one, explaining each and
  letting you know which you need to edit.


File: ${name}_data_access.[c|h]
------------------------------------------------------------------------
  The ${name}_data_access file contains the interface to your data in
  its raw format.  These functions are used to build the row cache or 
  locate the row (depending on the table access method).

  Set MIB context
  -----------------
  TODO : Set MIB index values
  FUNC : ${context}_indexes_set
  WHERE: ${context}_data_access.c

  This is a convenience function for setting the index context from
  the native C data. Where necessary, value mapping should be done.

@if $mfd_readme_verbose == 1@
  This function should update the table index values (found in
  tbl_idx) for the given raw data.

@end@
  
@    eval $m2c_processing_type = 'r'@
@    include mfd-access-${m2c_table_access}-defines.m2i@


@if $m2c_create_fewer_files != 1@
File: ${name}_enums.h
@else@
File: ${name}_constants.h
@end@
------------------------------------------------------------------------
  This file contains macros for mapping enumeration values when the
  enumerated values defined by the MIB do not match the values used
  internally.

  Review this file to see if any values need to be updated.


@if $m2c_create_fewer_files != 1@
File: ${name}_data_get.c
@else@
File: ${name}.c; GET support
@end@
------------------------------------------------------------------------
@    if ("$m2c_data_allocate" eq "yes") && ("$m2c_data_context" ne "generated")@
  Allocate data context
  ---------------------
  TODO : allocate memory for a data context
  FUNC : ${context}_allocate_data

  This function will be called to allocate memory for a data context
  when a new row request context is being created, or to create an
  undo context while processing a set request.

  Release data context
  -------
  TODO : release memory allocated for a data context
  FUNC : ${context}_release_data

  This function will be called to release any resources held by a
  data or undo context. It will be called when a row request context
  is released, or during cleanup after a set request.


@    end@
@    foreach $node index@
@        include m2c_setup_node.m2i@
@        if ($m2c_skip_mapping != 1)@
  Map native data to MIB format
  -----------------------------
  TODO : convert data from its native format to the format required by the MIB
  FUNC : ${node}_map

  This function should map between the native format of the node data to
  the format or values required by the MIB. For example, a C boolean value
  for a MIB node with the TruthValue syntax needs to map the value C
  false(0) to TruthValue false(2).

@        end@ #// skip mapping
@    end@ // foreach index
@    foreach $node nonindex@
@        include m2c_setup_node.m2i@
@        if ($m2c_skip_mapping != 1)@
  Map native data to MIB format
  -----------------------------
  TODO : convert data from its native format to the format required by the MIB
  FUNC : ${node}_map

  This function should map between the native format of the node data to
  the format or values required by the MIB. For example, a C boolean value
  for a MIB node with the TruthValue syntax needs to map the value C
  false(0) to TruthValue false(2).

@        end@ #// skip mapping
  Get data for column
  -------------------
  TODO : retrieve column data from raw data
  FUNC : ${node}_get

@      ifconf syntax-$node.syntax-readme.m2i@
@          include syntax-$node.syntax-readme.m2i@
@      elsif ($node.enums == 1) && ("$node.perltype" eq "BITS")@
  Since this column has enumerated BITS, you should update or replace the
  IS_SET_* macros to properly determine whether or not a particular bit
  should be set.

@      end@
@   end@


@if $m2c_create_fewer_files != 1@
File: ${name}_data_set.c
@else@
File: ${name}.c; SET support
@end@
------------------------------------------------------------------------

@if $m2c_table_settable == 0@
  This table does not support set requests.
@else@
  This code was generated based on the following assumptions or settings:

@   if $m2c_table_dependencies == 1@
  1) None of the values for this table have DEPENDENCIES on other objects.
@   else@
  1) Some of the values for this table have DEPENDENCIES on other objects.
@   end@

@   if $mfd_readme_verbose != 0@
  DEPENDENCIES on other objects complicates SET request processing. When
  one or more columns in a table depend on another object (in the same
  table, or in another table), a DEPENDENCY exists. For example, if you
  have a table that determine a color with three columns (red, green and
  blue) that define the percentage of each primary color, the total for
  the three columns must equal 100 percent. So, in addition to checking
  that each colums has a valid value between 0 and 100, the total of
  all three columns must equal 100.

  Set $@m2c_table_dependencies = 0 in ${m2c_defaults_dir}table-${table}.m2d
  and regenerate code if this assumption is incorrect.
@   end@

@if $m2c_table_row_creation == 1@
  2) This table supports ROW CREATION.
@else@
  2) This table does not support ROW CREATION.
@end@

@if $mfd_readme_verbose != 0@
  Supporting ROW CREATION allows new rows to be created via SNMP requests.
@end@
@if $m2c_table_row_creation == 1@

  To support row creation, the index component of an incoming set request must
  be validated. A funciton is generated for each individual index component,
  and another for validating all the index components together.

@    foreach $node externalindex@
@        include m2c_setup_node.m2i@
  Validate external index
  -----------------------
  TODO : validate the specified external index component
  FUNC : ${context}_${node}_check_index

@    end@ # foreach externalindex

@    foreach $node internalindex@
@        include m2c_setup_node.m2i@
  Validate index component
  ------------------------
  TODO : validate the specified index component
  FUNC : ${node}_check_index

@    end@

  Validate index
  --------------
  TODO : check that all index components are valid
  FUNC : ${context}_validate_index
@end@


@   if $m2c_table_dependencies == 1@
  Check dependencies
  ------------------
  TODO : check that all dependencies have been satisfied
  FUNC : ${context}_check_dependencies

  This function will be called after all the individual columns have been
  set to their new values. Check for any dependencies between rows or
  tables in this function.

@   end@

  Undo setup
  ----------
  TODO : save data for undo
  FUNC : ${context}_undo_setup

  This function will be called before the individual undo_setup functions are
  called. This is where you should save any undo information which is not
  directly related to a particular column. This function will only be called
  once per row. After this function is called, any column which is being
  set will have its individual node undo_setup function called.



@    foreach $node nonindex@
@        include m2c_setup_node.m2i@
@        if $node.settable == 0@
@            next@ # skip to next column
@        end@
  Check value for column
  ----------------------
  TODO : perform additional validations on values for a set request
  FUNC : ${node}_check_value

  The generated code will automatically validate incoming requests against
  all the requirements specified by the syntax of the MIB. However, it is
  often the case that additional requirements are specified in the
  description of a MIB object. Those type of validations should be checked
  in this function.


  Undo setup for column
  ---------------------
  TODO : save the value for column
  FUNC : ${node}_undo_setup

  After the table level undo setup function has been called, the individual
  node undo setup functions will be called for columns which are being set.


  Set value for column
  --------------------
  TODO : set the value for column
  FUNC : ${node}_set

  After all the validations have been passed, this function will be called to
  set the new value.


  Undo value for column
  ---------------------
  TODO : undo set for column
  FUNC : ${node}_undo

  If an error occurs after a column has been set, this function will be called
  to undo the set and restore the previous state.

@    end@ # nonindex


  Commit changes
  --------------
  TODO : commit changes
  FUNC : ${context}_commit

  After all values have been set, the commit function will be called.


@   if $m2c_irreversible_commit == 1@
  Commit irreversible changes
  ---------------------------
  FUNC: ${context}_irreversible_commit

  This special mode is reserved for committing changes which can not be undone.
  (e.g. launching a rocket). It is called after all normal commits have
  succeeded.
@   end@

@end@ # settable


************************************************************************
${context} Reference
------------------------------------------------------------------------

Function flow
----------------------------------------------------
To give you the general idea of how the functions flow works, this
example flow is from a complete table implementation.

NOTE: Depending on your configuration, some of the functions used in the
      examples below  may not have been generated for the
      ${context} table.

      Conversely, the examples below may not include some functions that
      were generated for the ${context} table.

To watch the flow of the ${context} table, use the
following debug tokens:

        snmp_agent
        helper:table:req
        ${context}
        verbose:${context}
        internal:${context}

e.g.
        snmpd -f -Le -D${context},verbose:${context},internal:${context}


@if $m2c_create_fewer_files == 1@
@   eval $tmp_mfd_rm_set = "xxx.c"@
@   eval $tmp_mfd_rm_get = "xxx.c"@
@else@
@   eval $tmp_mfd_rm_set = "xxx_data_set.c"@
@   eval $tmp_mfd_rm_get = "xxx_data_get.c"@
@end@
Initialization
--------------------------------
init_xxxTable: called                           xxx.c
   initialize_table_xxxTable                    xxx.c
      _xxxTable_initialize_interface            xxx_interface.c
         xxxTable_init_data                     xxx_data_access.c
      _xxxTable_container_init                  xxx_interface.c
         xxxTable_container_init                xxx_data_access.c


GET Request
--------------------------------
_cache_load                                     xxx_interface.c
   xxxTable_cache_load                          xxx_data_access.c
      xxxTable_allocate_rowreq_ctx              xxx_interface.c
         xxxTable_allocate_data                 $tmp_mfd_rm_get
         xxxTable_rowreq_ctx_init               $tmp_mfd_rm_get
      xxxTable_indexes_set                      $tmp_mfd_rm_get
         xxxTable_indexes_set_tbl_idx           $tmp_mfd_rm_get

xxxTable_pre_request                              

_mfd_xxxTable_object_lookup                     xxx_interface.c
   xxxTable_row_prep                            xxx_data_access.c

_mfd_xxxTable_get_values                        xxx_interface.c
   _mfd_xxxTable_get_column                     xxx_interface.c
      yyy_get                                   $tmp_mfd_rm_get

xxxTable_post_request


GETNEXT Request
--------------------------------
_cache_load                                     ...
xxxTable_pre_request                            ...
_mfd_xxxTable_object_lookup                     ...
_mfd_xxxTable_get_values                        ...
xxxTable_post_request                           ...


SET Request: success
--------------------------------
_cache_load                                     ...
xxxTable_pre_request
_mfd_xxxTable_object_lookup                     ...

_mfd_xxxTable_check_objects                     xxx_interface.c
   _xxxTable_check_column                       xxx_interface.c
      yyy_check_value                           $tmp_mfd_rm_set

_mfd_xxxTable_undo_setup                        xxx_interface.c
   xxxTable_allocate_data                       ...
   xxxTable_undo_setup                          xxx_interface.c
      _xxxTable_undo_setup_column               xxx_interface.c
         yyy_undo_setup                         $tmp_mfd_rm_set

_mfd_xxxTable_set_values                        xxx_interface.c
   _xxxTable_set_column                         xxx_interface.c
      yyy_set                                   $tmp_mfd_rm_set

_mfd_xxxTable_check_dependencies                xxx_interface.c
   xxxTable_check_dependencies                  $tmp_mfd_rm_set

_mfd_xxxTable_commit                            xxx_interface.c
   xxxTable_commit                              $tmp_mfd_rm_set

_mfd_xxxTable_undo_cleanup                      xxx_interface.c
   xxxTable_undo_cleanup                        $tmp_mfd_rm_set
      xxxTable_release_data                     ...

xxxTable_post_request                           ...


SET Request: row creation
--------------------------------
_cache_load                                     ...
xxxTable_pre_request

_mfd_xxxTable_object_lookup                     ...
   xxxTable_index_from_oid                      xxx_interface.c
   xxxTable_allocate_rowreq_ctx                 ...
      ...
   _xxxTable_check_indexes                      xxx_interface.c
      yyy_check_index                           $tmp_mfd_rm_set
      xxxTable_validate_index                   $tmp_mfd_rm_set

_mfd_xxxTable_check_objects                     ...
   _xxxTable_check_column                       ...
      yyy_check_value                           ...
   _xxxTable_check_column                       ...
      yyy_check_value                           ...

_mfd_xxxTable_undo_setup                        ...
_mfd_xxxTable_set_values                        ...
_mfd_xxxTable_check_dependencies                ...
_mfd_xxxTable_commit                            ...
_mfd_xxxTable_undo_cleanup                      ...
xxxTable_post_request                           ...


SET Resuest: value error
--------------------------------
_cache_load                                     ...
xxxTable_pre_request                            ...
_mfd_xxxTable_object_lookup                     ...

_mfd_xxxTable_check_objects                     ...
   _xxxTable_check_column                       ...
      yyy_check_value                           ...
      ERROR:"yyy value not supported"

xxxTable_post_request                           ...


SET Request: commit failure
--------------------------------
_cache_load                                     ...
xxxTable_pre_request                            ...
_mfd_xxxTable_object_lookup                     ...
_mfd_xxxTable_check_objects                     ...
_mfd_xxxTable_undo_setup                        ...
_mfd_xxxTable_set_values                        ...
_mfd_xxxTable_check_dependencies                ...

_mfd_xxxTable_commit                            ...
   xxxTable_commit                              ...
   ERROR: bad rc -1

_mfd_xxxTable_undo_commit                       xxx_interface.c
   xxxTable_undo_commit                         $tmp_mfd_rm_set

_mfd_xxxTable_undo_values                       xxx_interface.c
   _xxxTable_undo_column                        xxx_interface.c
      yyy_undo                                  $tmp_mfd_rm_set

_mfd_xxxTable_undo_cleanup                      ...
xxxTable_post_request                           ...


Row release (user initiated)
--------------------------------
xxxTable_release_rowreq_ctx                     xxx_interface.c
   xxxTable_rowreq_ctx_cleanup                  $tmp_mfd_rm_get
   xxxTable_release_data                        $tmp_mfd_rm_get



Table / column details
----------------------------------------------------
@    include details-table.m2i@

@    foreach $node column@
@        include m2c_setup_node.m2i@
@        include details-node.m2i@
@    end@

@end@ # foreach table

##
########################################################################
@if $m2c_mark_boundary == 1@
/** END code generated by $RCSfile$ $Revision$ */
@end@
