mib2c.access_functions.conf
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:7k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. ## -*- c -*-
  2. ######################################################################
  3. ## Do the .h file
  4. ######################################################################
  5. @open ${name}_access.h@
  6. /*
  7.  * Note: this file originally auto-generated by mib2c using
  8.  *        $Id: mib2c.access_functions.conf,v 1.9 2004/10/14 12:57:33 dts12 Exp $
  9.  */
  10. #ifndef $name.uc_ACCESS_H
  11. #define $name.uc_ACCESS_H
  12. @foreach $t table@
  13. /** User-defined data access functions for data in table $t */
  14. /** row level accessors */
  15. Netsnmp_First_Data_Point  ${t}_get_first_data_point;
  16. Netsnmp_Next_Data_Point   ${t}_get_next_data_point;
  17. int ${t}_commit_row(void **my_data_context, int new_or_del);
  18. void * ${t}_create_data_context(netsnmp_variable_list *index_data, int column);
  19. /** column accessors */
  20.   @foreach $c column@
  21.     @if $c.access =~ /(Read|Create)/@
  22.       $c.decl *get_$c(void *data_context, size_t *ret_len);
  23.     @end@
  24.     @if $c.access =~ /(Write|Create)/@
  25.       int set_$c(void *data_context, $c.decl *val, size_t val_len);
  26.     @end@
  27.   @end@
  28. @end@
  29. #endif /* $name.uc_ACCESS_H */
  30. ######################################################################
  31. ## Do the .c file
  32. ######################################################################
  33. @open ${name}_access.c@
  34. /*
  35.  * Note: this file originally auto-generated by mib2c using
  36.  *        $Id: mib2c.access_functions.conf,v 1.9 2004/10/14 12:57:33 dts12 Exp $
  37.  */
  38. #include <net-snmp/net-snmp-config.h>
  39. #include <net-snmp/net-snmp-includes.h>
  40. #include <net-snmp/agent/net-snmp-agent-includes.h>
  41. #include "${name}_access.h"
  42. #include "${name}_enums.h"
  43. @foreach $t table@
  44. /** returns the first data point within the $t table data.
  45.     Set the my_loop_context variable to the first data point structure
  46.     of your choice (from which you can find the next one).  This could
  47.     be anything from the first node in a linked list, to an integer
  48.     pointer containing the beginning of an array variable.
  49.     Set the my_data_context variable to something to be returned to
  50.     you later that will provide you with the data to return in a given
  51.     row.  This could be the same pointer as what my_loop_context is
  52.     set to, or something different.
  53.     The put_index_data variable contains a list of snmp variable
  54.     bindings, one for each index in your table.  Set the values of
  55.     each appropriately according to the data matching the first row
  56.     and return the put_index_data variable at the end of the function.
  57. */
  58. netsnmp_variable_list *
  59. ${t}_get_first_data_point(void **my_loop_context, void **my_data_context,
  60.                           netsnmp_variable_list *put_index_data,
  61.                           netsnmp_iterator_info *mydata)
  62. {
  63.     netsnmp_variable_list *vptr;
  64.     *my_loop_context = /** XXX */;
  65.     *my_data_context = /** XXX */;
  66.     vptr = put_index_data;
  67.     
  68.     @foreach $idx index@
  69.     snmp_set_var_value(vptr, (u_char *) /** XXX: $idx data */, /** XXX: length of $idx data */);
  70.     vptr = vptr->next_variable;
  71.     @end@
  72.     return put_index_data;
  73. }
  74. /** functionally the same as ${t}_get_first_data_point, but
  75.    my_loop_context has already been set to a previous value and should
  76.    be updated to the next in the list.  For example, if it was a
  77.    linked list, you might want to cast it to your local data type and
  78.    then return my_loop_context->next.  The my_data_context pointer
  79.    should be set to something you need later and the indexes in
  80.    put_index_data updated again. */
  81. netsnmp_variable_list *
  82. ${t}_get_next_data_point(void **my_loop_context, void **my_data_context,
  83.                          netsnmp_variable_list *put_index_data,
  84.                          netsnmp_iterator_info *mydata)
  85. {
  86.     netsnmp_variable_list *vptr;
  87.     *my_loop_context = /** XXX */;
  88.     *my_data_context = /** XXX */;
  89.     vptr = put_index_data;
  90.     
  91.     @foreach $idx index@
  92.     snmp_set_var_value(vptr, (u_char *) /** XXX: $idx data */, /** XXX: length of $idx data */);
  93.     vptr = vptr->next_variable;
  94.     @end@
  95.     return put_index_data;
  96. }
  97. /** Create a data_context for non-existent rows that SETs are performed on.
  98.  *  return a void * pointer which will be passed to subsequent get_XXX
  99.  *  and set_XXX functions for data retrival and modification during
  100.  *  this SET request.
  101.  *
  102.  *  The indexes are encoded (in order) into the index_data pointer,
  103.  *  and the column object which triggered the row creation is available
  104.  *  via the column parameter, if it would be helpful to use that information.
  105.  */
  106. void *
  107. ${t}_create_data_context(netsnmp_variable_list *index_data, int column) {
  108.     return NULL; /* XXX: you likely want to return a real pointer */
  109. }
  110. /** If the implemented set_* functions don't operate directly on the
  111.    real-live data (which is actually recommended), then this function
  112.    can be used to take a given my_data_context pointer and "commit" it
  113.    to whereever the modified data needs to be put back to.  For
  114.    example, if this was a routing table you could publish the modified
  115.    routes back into the kernel at this point.
  116.    new_or_del will be set to 1 if new, or -1 if it should be deleted
  117.    or 0 if it is just a modification of an existing row.
  118.    If you free the data yourself, make sure to *my_data_context = NULL */
  119. int
  120. ${t}_commit_row(void **my_data_context, int new_or_del)
  121. {
  122.     /** Add any necessary commit code here */
  123.     /*  */
  124.     /* return no errors.  And there shouldn't be any!!!  Ever!!!  You
  125.     should have checked the values long before this. */
  126.     return SNMP_ERR_NOERROR;
  127. }
  128. /* User-defined data access functions (per column) for data in table $t */
  129. /*
  130.  * NOTE:
  131.  * - these get_ routines MUST return data that will not be freed (ie,
  132.  *   use static variables or persistent data).  It will be copied, if
  133.  *   needed, immediately after the get_ routine has been called.
  134.  * - these SET routines must copy the incoming data and can not take
  135.  *   ownership of the memory passed in by the val pointer.
  136.  */
  137.   @foreach $c column@
  138.     @if $c.access =~ /(Read|Create)/@
  139. /** XXX: return a data pointer to the data for the $c column and set
  140.          ret_len to its proper size in bytes. */
  141.       $c.decl *get_$c(void *data_context, size_t *ret_len) {
  142.       return NULL; /** XXX: replace this with a pointer to a real value */
  143.       }
  144.     @end@
  145.     @if $c.access =~ /(Write|Create)/@
  146. /** XXX: Set the value of the $c column and return
  147.          SNMP_ERR_NOERROR on success
  148.          SNMP_ERR_XXX     for SNMP deterministic error codes
  149.          SNMP_ERR_GENERR  on generic failures (a last result response). */
  150.       int set_$c(void *data_context, $c.decl *val, size_t val_len) {
  151.         return SNMP_ERR_NOERROR;  /** XXX: change if an error occurs */
  152.       }
  153.     @end@
  154.   @end@
  155.     
  156. @end@