diff options
Diffstat (limited to 'include/net-snmp/agent/table_iterator.h')
-rw-r--r-- | include/net-snmp/agent/table_iterator.h | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/include/net-snmp/agent/table_iterator.h b/include/net-snmp/agent/table_iterator.h new file mode 100644 index 0000000..c71dd4e --- /dev/null +++ b/include/net-snmp/agent/table_iterator.h @@ -0,0 +1,165 @@ +/* Portions of this file are subject to the following copyright(s). See + * the Net-SNMP's COPYING file for more details and other copyrights + * that may apply: + */ +/* + * Portions of this file are copyrighted by: + * Copyright © 2003 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms specified in the COPYING file + * distributed with the Net-SNMP package. + */ +/** + * @file table_iterator.h + * @addtogroup table_iterator + * @{ + */ +#ifndef _TABLE_ITERATOR_HANDLER_H_ +#define _TABLE_ITERATOR_HANDLER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + + struct netsnmp_iterator_info_s; + + typedef netsnmp_variable_list * + (Netsnmp_First_Data_Point) (void **loop_context, + void **data_context, + netsnmp_variable_list *, + struct netsnmp_iterator_info_s *); + typedef netsnmp_variable_list * + (Netsnmp_Next_Data_Point) (void **loop_context, + void **data_context, + netsnmp_variable_list *, + struct netsnmp_iterator_info_s *); + typedef void *(Netsnmp_Make_Data_Context) (void *loop_context, + struct netsnmp_iterator_info_s *); + typedef void (Netsnmp_Free_Loop_Context) (void *, + struct netsnmp_iterator_info_s *); + typedef void (Netsnmp_Free_Data_Context) (void *, + struct netsnmp_iterator_info_s *); + + /** @typedef struct netsnmp_iterator_info_s netsnmp_iterator_info + * Typedefs the netsnmp_iterator_info_s struct into netsnmp_iterator_info */ + + /** @struct netsnmp_iterator_info_s + + * Holds iterator information containing functions which should be + called by the iterator_handler to loop over your data set and + sort it in a SNMP specific manner. + + The netsnmp_iterator_info typedef can be used instead of directly calling this struct if you would prefer. + */ + typedef struct netsnmp_iterator_info_s { + /** Number of handlers that own this data structure. */ + int refcnt; + + /** Responsible for: returning the first set of "index" data, a + loop-context pointer, and optionally a data context + pointer */ + Netsnmp_First_Data_Point *get_first_data_point; + + /** Given the previous loop context, this should return the + next loop context, associated index set and optionally a + data context */ + Netsnmp_Next_Data_Point *get_next_data_point; + + /** If a data context wasn't supplied by the + get_first_data_point or get_next_data_point functions and + the make_data_context pointer is defined, it will be called + to convert a loop context into a data context. */ + Netsnmp_Make_Data_Context *make_data_context; + + /** A function which should free the loop context. This + function is called at *each* iteration step, which is + not-optimal for speed purposes. The use of + free_loop_context_at_end instead is strongly + encouraged. This can be set to NULL to avoid its usage. */ + Netsnmp_Free_Loop_Context *free_loop_context; + + /** Frees a data context. This will be called at any time a + data context needs to be freed. This may be at the same + time as a correspondng loop context is freed, or much much + later. Multiple data contexts may be kept in existence at + any time. */ + Netsnmp_Free_Data_Context *free_data_context; + + /** Frees a loop context at the end of the entire iteration + sequence. Generally, this would free the loop context + allocated by the get_first_data_point function (which would + then be updated by each call to the get_next_data_point + function). It is not called until the get_next_data_point + function returns a NULL */ + Netsnmp_Free_Loop_Context *free_loop_context_at_end; + + /** This can be used by client handlers to store any + information they need */ + void *myvoid; + int flags; +#define NETSNMP_ITERATOR_FLAG_SORTED 0x01 +#define NETSNMP_HANDLER_OWNS_IINFO 0x02 + + /** A pointer to the netsnmp_table_registration_info object + this iterator is registered along with. */ + netsnmp_table_registration_info *table_reginfo; + + /* Experimental extension - Use At Your Own Risk + (these two fields may change/disappear without warning) */ + Netsnmp_First_Data_Point *get_row_indexes; + netsnmp_variable_list *indexes; + } netsnmp_iterator_info; + +#define TABLE_ITERATOR_NAME "table_iterator" + +/* ============================ + * Iterator API: Table maintenance + * ============================ */ + /* N/A */ + +/* ============================ + * Iterator API: MIB maintenance + * ============================ */ + + void netsnmp_handler_owns_iterator_info(netsnmp_mib_handler *h); + netsnmp_mib_handler + *netsnmp_get_table_iterator_handler(netsnmp_iterator_info *iinfo); + int netsnmp_register_table_iterator(netsnmp_handler_registration *reginfo, + netsnmp_iterator_info *iinfo); + void netsnmp_iterator_delete_table(netsnmp_iterator_info *iinfo); + + void *netsnmp_extract_iterator_context(netsnmp_request_info *); + void netsnmp_insert_iterator_context(netsnmp_request_info *, void *); + + Netsnmp_Node_Handler netsnmp_table_iterator_helper_handler; + +#define netsnmp_register_table_iterator2(reginfo, iinfo) \ + (((iinfo)->flags |= NETSNMP_HANDLER_OWNS_IINFO), \ + netsnmp_register_table_iterator((reginfo), (iinfo))) + + +/* ============================ + * Iterator API: Row operations + * ============================ */ + +void *netsnmp_iterator_row_first( netsnmp_iterator_info *); +void *netsnmp_iterator_row_get( netsnmp_iterator_info *, void *); +void *netsnmp_iterator_row_next( netsnmp_iterator_info *, void *); +void *netsnmp_iterator_row_get_byidx( netsnmp_iterator_info *, + netsnmp_variable_list *); +void *netsnmp_iterator_row_next_byidx( netsnmp_iterator_info *, + netsnmp_variable_list *); +void *netsnmp_iterator_row_get_byoid( netsnmp_iterator_info *, oid *, size_t); +void *netsnmp_iterator_row_next_byoid( netsnmp_iterator_info *, oid *, size_t); +int netsnmp_iterator_row_count( netsnmp_iterator_info *); + + +/* ============================ + * Iterator API: Index operations + * ============================ */ + +#ifdef __cplusplus +} +#endif + +#endif /* _TABLE_ITERATOR_HANDLER_H_ */ +/** @} */ |