table_data.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /*
  2. * table_iterator.h
  3. */
  4. #ifndef _TABLE_DATA_HANDLER_H_
  5. #define _TABLE_DATA_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. #define TABLE_DATA_NAME "table_data"
  17. #define TABLE_DATA_ROW "table_data"
  18. #define TABLE_DATA_TABLE "table_data_table"
  19. typedef struct netsnmp_table_row_s {
  20. netsnmp_variable_list *indexes; /* stored permanently if store_indexes = 1 */
  21. oid *index_oid;
  22. size_t index_oid_len;
  23. void *data; /* the data to store */
  24. struct netsnmp_table_row_s *next, *prev; /* if used in a list */
  25. } netsnmp_table_row;
  26. typedef struct netsnmp_table_data_s {
  27. netsnmp_variable_list *indexes_template; /* containing only types */
  28. char *name; /* if !NULL, it's registered globally */
  29. int flags; /* not currently used */
  30. int store_indexes;
  31. netsnmp_table_row *first_row;
  32. netsnmp_table_row *last_row;
  33. } netsnmp_table_data;
  34. /* =================================
  35. * Table Data API: Table maintenance
  36. * ================================= */
  37. void netsnmp_table_data_generate_index_oid( netsnmp_table_row *row);
  38. netsnmp_table_data *netsnmp_create_table_data(const char *name);
  39. netsnmp_table_row *netsnmp_create_table_data_row(void);
  40. netsnmp_table_row *netsnmp_table_data_clone_row( netsnmp_table_row *row);
  41. void *netsnmp_table_data_delete_row(netsnmp_table_row *row);
  42. int netsnmp_table_data_add_row( netsnmp_table_data *table,
  43. netsnmp_table_row *row);
  44. void
  45. netsnmp_table_data_replace_row(netsnmp_table_data *table,
  46. netsnmp_table_row *origrow,
  47. netsnmp_table_row *newrow);
  48. netsnmp_table_row *netsnmp_table_data_remove_row(netsnmp_table_data *table,
  49. netsnmp_table_row *row);
  50. void *netsnmp_table_data_remove_and_delete_row(netsnmp_table_data *table,
  51. netsnmp_table_row *row);
  52. void netsnmp_table_data_delete_table( netsnmp_table_data *table );
  53. /* =================================
  54. * Table Data API: MIB maintenance
  55. * ================================= */
  56. netsnmp_mib_handler *
  57. netsnmp_get_table_data_handler(netsnmp_table_data *table);
  58. int netsnmp_register_table_data(netsnmp_handler_registration *reginfo,
  59. netsnmp_table_data *table,
  60. netsnmp_table_registration_info *table_info);
  61. int netsnmp_register_read_only_table_data(
  62. netsnmp_handler_registration *reginfo,
  63. netsnmp_table_data *table,
  64. netsnmp_table_registration_info *table_info);
  65. Netsnmp_Node_Handler netsnmp_table_data_helper_handler;
  66. netsnmp_table_data *netsnmp_extract_table( netsnmp_request_info *);
  67. netsnmp_table_row *netsnmp_extract_table_row(netsnmp_request_info *);
  68. void *netsnmp_extract_table_row_data(netsnmp_request_info *);
  69. void netsnmp_insert_table_row(netsnmp_request_info *, netsnmp_table_row *);
  70. int netsnmp_table_data_build_result(netsnmp_handler_registration *reginfo,
  71. netsnmp_agent_request_info *reqinfo,
  72. netsnmp_request_info *request,
  73. netsnmp_table_row *row, int column,
  74. u_char type, u_char * result_data,
  75. size_t result_data_len);
  76. /* =================================
  77. * Table Data API: Row operations
  78. * ================================= */
  79. netsnmp_table_row *netsnmp_table_data_get_first_row(
  80. netsnmp_table_data *table);
  81. netsnmp_table_row *netsnmp_table_data_get_next_row(
  82. netsnmp_table_data *table,
  83. netsnmp_table_row *row);
  84. netsnmp_table_row *netsnmp_table_data_get(netsnmp_table_data *table,
  85. netsnmp_variable_list *indexes);
  86. netsnmp_table_row *netsnmp_table_data_get_from_oid(
  87. netsnmp_table_data *table,
  88. oid * searchfor,
  89. size_t searchfor_len);
  90. int netsnmp_table_data_num_rows(netsnmp_table_data *table);
  91. /* =================================
  92. * Table Data API: Index operations
  93. * ================================= */
  94. #define netsnmp_table_data_add_index(thetable, type) snmp_varlist_add_variable(&thetable->indexes_template, NULL, 0, type, NULL, 0)
  95. #define netsnmp_table_row_add_index(row, type, value, value_len) snmp_varlist_add_variable(&row->indexes, NULL, 0, type, (const u_char *) value, value_len)
  96. #ifdef __cplusplus
  97. }
  98. #endif
  99. #endif /* _TABLE_DATA_HANDLER_H_ */