📄 table_generic.c
字号:
/* * table_generic.c * * Generic table API framework *//** @defgroup table_generic generic_table_API * General requirements for a table helper. * @ingroup table * * A given table helper need not implement the whole of this API, * and may need to adjust the prototype of certain routines. * But this description provides a suitable standard design framework. * * @{ *//* ======================================================= * * Table Maintenance: * create/delete table * create/copy/clone/delete row * add/replace/remove row * * ======================================================= *//** @defgroup table_maintenance table_maintenance * * Routines for maintaining the contents of a table. * This would typically be part of implementing an SNMP MIB, * but could potentially also be used for a standalone table. * * This section of the generic API is primarily relevant to * table helpers where the representation of the table is * constructed and maintained within the helper itself. * "External" tables will typically look after such aspects * directly, although this section of the abstract API * framework could also help direct the design of such * table-specific implementations. * * @{ *//** Create a structure to represent the table. * * This could be as simple as the head of a linked * list, or a more complex container structure. * The 'name' field would typically be used to * distinguish between several tables implemented * using the same table helper. The 'flags' field * would be used to control various (helper-specific) * aspects of table behaviour. * * The table structure returned should typically be * regarded as an opaque, private structure. All * operations on the content of the table should * ideally use the appropriate routines from this API. */void *netsnmp_generic_create_table( const char *name, int flags ) {}/** Release the structure representing a table. * Any rows still contained within the table * should also be removed and deleted. */voidnetsnmp_generic_delete_table( void *table ) {}/** Create a new row structure suitable for this style of table. * Note that this would typically be a 'standalone' row, and * would not automatically be inserted into an actual table. */void *netsnmp_generic_create_row( void ) {}/** Create a new copy of the specified row. */void *netsnmp_generic_clone_row( void *row ) {}/** Copy the contents of one row into another. * The destination row structure should be * created before this routine is called. */intnetsnmp_generic_copy_row( void *dst_row, void *src_row ) {}/** Delete a row data structure. * The row should be removed from any relevant * table(s) before this routine is called. */voidnetsnmp_generic_delete_row( void *row ) {}/** Add a row to the table. */intnetsnmp_generic_add_row( void *table, void *row ) {}/** Replace one row with another in the table. * This will typically (but not necessarily) involve * two rows sharing the same index information (e.g. * to implement update/restore-style SET behaviour). */intnetsnmp_generic_replace_row( void *table, void *old_row, void *new_row ) {}/** Remove a row from the table. * The data structure for the row should not be released, * and would be the return value of this routine. */void *netsnmp_generic_remove_row( void *table, void *row ) {}/** Remove and delete a row from the table. */voidnetsnmp_generic_remove_delete_row( void *table, void *row ) {}/** @} end of table_maintenance *//* ======================================================= * * MIB Maintenance: * create a handler registration * register/unregister table * extract table from request * extract/insert row * * ======================================================= *//** @defgroup mib_maintenance mib_maintenance * * Routines for maintaining a MIB table. * * @{ *//** Create a MIB handler structure. * This will typically be invoked within the corresponding * 'netsnmp_generic_register' routine (or the registration * code of a sub-helper based on this helper). * * Alternatively, it might be called from the initialisation * code of a particular MIB table implementation. */netsnmp_mib_handler *netsnmp_generic_get_handler(void /* table specific */ ) {}/** Free a MIB handler structure, releasing any related resources. * Possibly called automatically by 'netsnmp_unregister_handler' ? */netsnmp_generic_free_handler( netsnmp_mib_handler *handler ) {}/** Register a MIB table with the SNMP agent. */intnetsnmp_generic_register(netsnmp_handler_registration *reginfo, void *table, netsnmp_table_registration_info *table_info) {}/** Unregister a MIB table from the SNMP agent. * This should also release the internal representation of the table. * ?? Is a table-specific version of this needed, or would * 'netsnmp_unregister_handler' + 'netsnmp_generic_free_handler' do? */intnetsnmp_generic_unregister(netsnmp_handler_registration *reginfo) {}/** Extract the table relating to a requested varbind. */voidnetsnmp_generic_extract_table( netsnmp_request_info *request ) {}/** Extract the row relating to a requested varbind. */voidnetsnmp_generic_extract_row( netsnmp_request_info *request ) {}/** Associate a (new) row with the requested varbind. * The row should also be associated with any other * varbinds that refer to the same index values. */voidnetsnmp_generic_insert_row( netsnmp_request_info *request, void *row ) {}/** @} end of mib_maintenance *//* ======================================================= * * Row Operations * get first/this/next row * get row/next row by index * get row/next row by OID * number of rows * * ======================================================= *//** @defgroup table_rows table_rows * * Routines for working with the rows of a table. * * @{ *//** Retrieve the first row of the table. */void *netsnmp_generic_row_first( void *table ) {}/** Retrieve the given row from the table. * This could either be the same data pointer, * passed in, or a separate row structure * sharing the same index values (or NULL). * * This routine also provides a means to tell * whether a given row is present in the table. */void *netsnmp_generic_row_get( void *table, void *row ) {}/** Retrieve the following row from the table. * If the specified row is not present, this * routine should return the entry next after * the position this row would have occupied. */void *netsnmp_generic_row_next( void *table, void *row ) {}/** Retrieve the row with the specified index values. */void *netsnmp_generic_row_get_byidx( void *table, netsnmp_variable_list *indexes ) {}/** Retrieve the next row after the specified index values. */void *netsnmp_generic_row_next_byidx( void *table, netsnmp_variable_list *indexes ) {}/** Retrieve the row with the specified instance OIDs. */void *netsnmp_generic_row_get_byoid( void *table, oid *instance, size_t len ) {}/** Retrieve the next row after the specified instance OIDs. */void *netsnmp_generic_row_next_byoid( void *table, oid *instance, size_t len ) {}/** Report the number of rows in the table. */intnetsnmp_generic_row_count( void *table ) {}/** @} end of table_rows *//* ======================================================= * * Index Operations * get table index structure * get row index values/OIDs * compare row with index/OIDs * subtree comparisons (index/OIDs) * * ======================================================= *//** @defgroup table_indexes table_indexes * * Routines for working with row indexes. * * @{ *//** Retrieve the indexing structure of the table. */netsnmp_variable_list *netsnmp_generic_idx( void *table ) {}/** Report the index values for a row. */netsnmp_variable_list *netsnmp_generic_row_idx( void *row ) {}/** Report the instance OIDs for a row. */size_tnetsnmp_generic_row_oid( void *row, oid *instances ) {}/** Compare a row against the specified index values. */intnetsnmp_generic_compare_idx( void *row, netsnmp_variable_list *index ) {}/** Compare a row against the specified instance OIDs. */intnetsnmp_generic_compare_oid( void *row, oid *instances, size_t len ) {}/** Check if a row lies within a subtree of index values. */intnetsnmp_generic_compare_subtree_idx( void *row, netsnmp_variable_list *index ) {}/** Check if a row lies within a subtree of instance OIDs. */intnetsnmp_generic_compare_subtree_oid( void *row, oid *instances, size_t len ) {}/** @} end of table_indexes *//** @} end of table_generic */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -