| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- /* 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.
- */
- /*
- * Portions of this file are copyrighted by:
- * Copyright (C) 2007 Apple, Inc. All rights reserved.
- * Use is subject to license terms specified in the COPYING file
- * distributed with the Net-SNMP package.
- */
- /**
- * @file table.h
- *
- * @addtogroup table
- *
- * @{
- */
- #ifndef _TABLE_HANDLER_H_
- #define _TABLE_HANDLER_H_
- #ifdef __cplusplus
- extern "C" {
- #endif
- /**
- * The table helper is designed to simplify the task of writing a
- * table handler for the net-snmp agent. You should create a normal
- * handler and register it using the netsnmp_register_table() function
- * instead of the netsnmp_register_handler() function.
- */
- /**
- * Notes:
- *
- * 1) illegal indexes automatically get handled for get/set cases.
- * Simply check to make sure the value is type ASN_NULL before
- * you answer a request.
- */
-
- /**
- * used as an index to parent_data lookups
- */
- #define TABLE_HANDLER_NAME "table"
- /** @typedef struct netsnmp_column_info_t netsnmp_column_info
- * Typedefs the netsnmp_column_info_t struct into netsnmp_column_info */
- /**
- * @struct netsnmp_column_info_t
- * column info struct. OVERLAPPING RANGES ARE NOT SUPPORTED.
- */
- typedef struct netsnmp_column_info_t {
- char isRange;
- /** only useful if isRange == 0 */
- char list_count;
- union {
- unsigned int range[2];
- unsigned int *list;
- } details;
- struct netsnmp_column_info_t *next;
- } netsnmp_column_info;
- /** @typedef struct netsnmp_table_registration_info_s netsnmp_table_registration_info
- * Typedefs the netsnmp_table_registration_info_s struct into
- * netsnmp_table_registration_info */
- /**
- * @struct netsnmp_table_registration_info_s
- * Table registration structure.
- */
- typedef struct netsnmp_table_registration_info_s {
- /** list of varbinds with only 'type' set */
- netsnmp_variable_list *indexes;
- /** calculated automatically */
- unsigned int number_indexes;
- /**
- * the minimum columns number. If there are columns
- * in-between which are not valid, use valid_columns to get
- * automatic column range checking.
- */
- unsigned int min_column;
- /** the maximum columns number */
- unsigned int max_column;
- /** more details on columns */
- netsnmp_column_info *valid_columns;
- } netsnmp_table_registration_info;
- /** @typedef struct netsnmp_table_request_info_s netsnmp_table_request_info
- * Typedefs the netsnmp_table_request_info_s struct into
- * netsnmp_table_request_info */
- /**
- * @struct netsnmp_table_request_info_s
- * The table request info structure.
- */
- typedef struct netsnmp_table_request_info_s {
- /** 0 if OID not long enough */
- unsigned int colnum;
- /** 0 if failure to parse any */
- unsigned int number_indexes;
- /** contents freed by helper upon exit */
- netsnmp_variable_list *indexes;
- oid index_oid[MAX_OID_LEN];
- size_t index_oid_len;
- netsnmp_table_registration_info *reg_info;
- } netsnmp_table_request_info;
- netsnmp_mib_handler
- *netsnmp_get_table_handler(netsnmp_table_registration_info
- *tabreq);
- void netsnmp_handler_owns_table_info(netsnmp_mib_handler *handler);
- void netsnmp_registration_owns_table_info(netsnmp_handler_registration *reg);
- int netsnmp_register_table( netsnmp_handler_registration *reginfo,
- netsnmp_table_registration_info *tabreq);
- int netsnmp_unregister_table(netsnmp_handler_registration *reginfo);
- int netsnmp_table_build_oid( netsnmp_handler_registration *reginfo,
- netsnmp_request_info *reqinfo,
- netsnmp_table_request_info *table_info);
- int
- netsnmp_table_build_oid_from_index(netsnmp_handler_registration
- *reginfo,
- netsnmp_request_info *reqinfo,
- netsnmp_table_request_info
- *table_info);
- int netsnmp_table_build_result(netsnmp_handler_registration
- *reginfo,
- netsnmp_request_info
- *reqinfo,
- netsnmp_table_request_info
- *table_info, u_char type,
- u_char * result,
- size_t result_len);
- int
- netsnmp_update_variable_list_from_index(netsnmp_table_request_info
- *);
- int
- netsnmp_update_indexes_from_variable_list
- (netsnmp_table_request_info *tri);
- netsnmp_table_registration_info
- *netsnmp_find_table_registration_info(netsnmp_handler_registration
- *reginfo);
- netsnmp_table_registration_info *
- netsnmp_table_registration_info_clone(netsnmp_table_registration_info *tri);
- void netsnmp_table_registration_info_free(netsnmp_table_registration_info *);
- netsnmp_index * netsnmp_table_index_find_next_row(netsnmp_container *c,
- netsnmp_table_request_info *tblreq);
- unsigned int netsnmp_closest_column(unsigned int current,
- netsnmp_column_info
- *valid_columns);
- Netsnmp_Node_Handler table_helper_handler;
- #define netsnmp_table_helper_add_index(tinfo, type) snmp_varlist_add_variable(&tinfo->indexes, NULL, 0, (u_char)type, NULL, 0);
- void
- netsnmp_table_helper_add_indexes(netsnmp_table_registration_info
- *tinfo, ...);
- int netsnmp_check_getnext_reply(netsnmp_request_info *request,
- oid * prefix, size_t prefix_len,
- netsnmp_variable_list * newvar,
- netsnmp_variable_list ** outvar);
- netsnmp_table_request_info
- *netsnmp_extract_table_info(netsnmp_request_info *);
- netsnmp_oid_stash_node
- **netsnmp_table_get_or_create_row_stash(netsnmp_agent_request_info
- *reqinfo,
- const u_char *
- storage_name);
- unsigned int
- netsnmp_table_next_column(netsnmp_table_request_info *table_info);
- int netsnmp_sparse_table_register(netsnmp_handler_registration *reginfo,
- netsnmp_table_registration_info *tabreq);
- netsnmp_mib_handler *netsnmp_sparse_table_handler_get(void);
- #ifdef __cplusplus
- }
- #endif
- #endif /* _TABLE_HANDLER_H_ */
- /** @} */
|