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

SNMP编程

开发平台:

Unix_Linux

  1. /*
  2.  * table_iterator.h 
  3.  */
  4. #ifndef _TABLE_DATA_SET_HANDLER_H_
  5. #define _TABLE_DATA_SET_HANDLER_H_
  6. #ifdef __cplusplus
  7. extern          "C" {
  8. #endif
  9.     /*
  10.      * This helper is designed to completely automate the task of storing
  11.      * tables of data within the agent that are not tied to external data
  12.      * sources (like the kernel, hardware, or other processes, etc).  IE,
  13.      * all rows within a table are expected to be added manually using
  14.      * functions found below.
  15.      */
  16.     void netsnmp_init_table_dataset(void);
  17. #define TABLE_DATA_SET_NAME "netsnmp_table_data_set"
  18.     /*
  19.      * return SNMP_ERR_NOERROR or some SNMP specific protocol error id 
  20.      */
  21.     typedef int     (Netsnmp_Value_Change_Ok) (char *old_value,
  22.                                                size_t old_value_len,
  23.                                                char *new_value,
  24.                                                size_t new_value_len,
  25.                                                void *mydata);
  26.     /*
  27.      * stored within a given row 
  28.      */
  29.     typedef struct netsnmp_table_data_set_storage_s {
  30.         unsigned int    column;
  31.         /*
  32.          * info about it? 
  33.          */
  34.         char            writable;
  35.         Netsnmp_Value_Change_Ok *change_ok_fn;
  36.         void           *my_change_data;
  37.         /*
  38.          * data actually stored 
  39.          */
  40.         u_char          type;
  41.         union {                 /* value of variable */
  42.             void           *voidp;
  43.             long           *integer;
  44.             u_char         *string;
  45.             oid            *objid;
  46.             u_char         *bitstring;
  47.             struct counter64 *counter64;
  48. #ifdef OPAQUE_SPECIAL_TYPES
  49.             float          *floatVal;
  50.             double         *doubleVal;
  51. #endif                          /* OPAQUE_SPECIAL_TYPES */
  52.         } data;
  53.         u_long          data_len;
  54.         struct netsnmp_table_data_set_storage_s *next;
  55.     } netsnmp_table_data_set_storage;
  56.     typedef struct netsnmp_table_data_set_s {
  57.         netsnmp_table_data *table;
  58.         netsnmp_table_data_set_storage *default_row;
  59.         int             allow_creation; /* set to 1 to allow creation of new rows */
  60.         unsigned int    rowstatus_column;
  61.     } netsnmp_table_data_set;
  62.     Netsnmp_Node_Handler netsnmp_table_data_set_helper_handler;
  63.     /*
  64.      * to set, add column, type, (writable) ? 1 : 0 
  65.      */
  66.     /*
  67.      * default value, if not NULL, is the default value used in row
  68.      * creation.  It is copied into the storage template (free your
  69.      * calling argument). 
  70.      */
  71.     int            
  72.         netsnmp_table_set_add_default_row(netsnmp_table_data_set *,
  73.                                           unsigned int, int, int,
  74.                                           void *default_value,
  75.                                           size_t default_value_len);
  76.     /*
  77.      * to set, add column, type, (writable) ? 1 : 0, ... 
  78.      */
  79. #if HAVE_STDARG_H
  80.     void           
  81.         netsnmp_table_set_multi_add_default_row(netsnmp_table_data_set *,
  82.                                                 ...);
  83. #else
  84.     void            netsnmp_table_set_multi_add_default_row(va_alist);
  85. #endif
  86.     int             netsnmp_set_row_column(netsnmp_table_row *,
  87.                                            unsigned int, int, const char *,
  88.                                            size_t);
  89.     netsnmp_table_data_set_storage
  90.         *netsnmp_table_data_set_find_column(netsnmp_table_data_set_storage
  91.                                             *, unsigned int);
  92.     netsnmp_table_data_set_storage
  93.        *netsnmp_extract_table_data_set_column(netsnmp_request_info *,
  94.                                               unsigned int);
  95.     int            
  96.         netsnmp_register_table_data_set(netsnmp_handler_registration *,
  97.                                         netsnmp_table_data_set *,
  98.                                         netsnmp_table_registration_info *);
  99.     netsnmp_mib_handler
  100.         *netsnmp_get_table_data_set_handler(netsnmp_table_data_set *);
  101.     netsnmp_table_data_set *netsnmp_create_table_data_set(const char *);
  102.     int             netsnmp_mark_row_column_writable(netsnmp_table_row
  103.                                                      *row, int column,
  104.                                                      int writable);
  105.     NETSNMP_INLINE netsnmp_table_data_set
  106.         *netsnmp_extract_table_data_set(netsnmp_request_info *request);
  107.     void            netsnmp_config_parse_table_set(const char *token,
  108.                                                    char *line);
  109.     void            netsnmp_config_parse_add_row(const char *token,
  110.                                                  char *line);
  111.     NETSNMP_INLINE void netsnmp_table_dataset_add_index(netsnmp_table_data_set
  112.                                                     *table, u_char type);
  113.     NETSNMP_INLINE void netsnmp_table_dataset_add_row(netsnmp_table_data_set
  114.                                                   *table,
  115.                                                   netsnmp_table_row *row);
  116.     NETSNMP_INLINE void netsnmp_table_dataset_remove_row(netsnmp_table_data_set
  117.                                                      *table,
  118.                                                      netsnmp_table_row
  119.                                                      *row);
  120.     NETSNMP_INLINE void netsnmp_table_dataset_delete_row(netsnmp_table_row
  121.                                                      *row);
  122.     NETSNMP_INLINE void    
  123.         netsnmp_table_dataset_remove_and_delete_row(netsnmp_table_data_set
  124.                                                     *table,
  125.                                                     netsnmp_table_row
  126.                                                     *row);
  127.     NETSNMP_INLINE void    
  128.         netsnmp_table_dataset_delete_all_data
  129.         (netsnmp_table_data_set_storage *data);
  130.     NETSNMP_INLINE void    
  131.         netsnmp_table_dataset_replace_row(netsnmp_table_data_set *table,
  132.                                           netsnmp_table_row *origrow,
  133.                                           netsnmp_table_row *newrow);
  134.     netsnmp_table_row *netsnmp_table_data_set_clone_row(netsnmp_table_row
  135.                                                         *row);
  136.     void            netsnmp_register_auto_data_table(netsnmp_table_data_set
  137.                                                      *table_set,
  138.                                                      char
  139.                                                      *registration_name);
  140.     int netsnmp_table_data_num_rows(netsnmp_table_data *table);
  141. #if HAVE_STDARG_H
  142.     void           
  143.         netsnmp_table_set_add_indexes(netsnmp_table_data_set *tset, ...);
  144. #else
  145.     void            netsnmp_table_helper_add_indexes(va_alist);
  146. #endif
  147. #ifdef __cplusplus
  148. }
  149. #endif
  150. #define netsnmp_table_row_add_column(row, type, value, value_len) snmp_varlist_add_variable(&row->indexes, NULL, 0, type, (u_char *) value, value_len)
  151. #endif                          /* _TABLE_DATA_SET_HANDLER_H_ */