tdata(3)

NAME
tdata - Implement a table with datamatted storage.

  Functions
void _netsnmp_tdata_generate_index_oid (netsnmp_tdata_row *row)
netsnmp_tdata * netsnmp_tdata_create_table (const char *name, long flags)
creates and returns a 'tdata' table data structure
void netsnmp_tdata_delete_table (netsnmp_tdata *table)
creates and returns a 'tdata' table data structure
netsnmp_tdata_row * netsnmp_tdata_create_row (void)
creates and returns a pointer to new row data structure
netsnmp_tdata_row * netsnmp_tdata_clone_row (netsnmp_tdata_row *row)
clones a 'tdata' row.
int netsnmp_tdata_copy_row (netsnmp_tdata_row *dst_row, netsnmp_tdata_row *src_row)
copy the contents of a 'tdata' row.
void * netsnmp_tdata_delete_row (netsnmp_tdata_row *row)
deletes the memory used by the specified row returns the table-specific entry data (that it doesn't know how to delete)
int netsnmp_tdata_add_row (netsnmp_tdata *table, netsnmp_tdata_row *row)
Adds a row to the given table (stored in proper lexographical order).
void netsnmp_tdata_replace_row (netsnmp_tdata *table, netsnmp_tdata_row *origrow, netsnmp_tdata_row *newrow)
swaps out origrow with newrow.
netsnmp_tdata_row * netsnmp_tdata_remove_row (netsnmp_tdata *table, netsnmp_tdata_row *row)
removes a row from the given table and returns it (no free's called)
void * netsnmp_tdata_remove_and_delete_row (netsnmp_tdata *table, netsnmp_tdata_row *row)
removes and frees a row of the given table and returns the table-specific entry data
netsnmp_mib_handler * netsnmp_get_tdata_handler (netsnmp_tdata *table)
Creates a tdata handler and returns it.
int _netsnmp_tdata_helper_handler (netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests)
int netsnmp_tdata_register (netsnmp_handler_registration *reginfo, netsnmp_tdata *table, netsnmp_table_registration_info *table_info)
registers a tdata-based MIB table
netsnmp_tdata * netsnmp_tdata_extract_table (netsnmp_request_info *request)
extracts the tdata table from the request structure
netsnmp_container * netsnmp_tdata_extract_container (netsnmp_request_info *request)
extracts the tdata container from the request structure
netsnmp_tdata_row * netsnmp_tdata_extract_row (netsnmp_request_info *request)
extracts the tdata row being accessed from the request structure
void * netsnmp_tdata_extract_entry (netsnmp_request_info *request)
extracts the (table-specific) entry being accessed from the request structure
NETSNMP_INLINE void netsnmp_insert_tdata_row (netsnmp_request_info *request, netsnmp_tdata_row *row)
inserts a newly created tdata row into a request
void * netsnmp_tdata_row_entry (netsnmp_tdata_row *row)
returns the (table-specific) entry data for a given row
netsnmp_tdata_row * netsnmp_tdata_row_first (netsnmp_tdata *table)
returns the first row in the table
netsnmp_tdata_row * netsnmp_tdata_row_get (netsnmp_tdata *table, netsnmp_tdata_row *row)
finds a row in the 'tdata' table given another row
netsnmp_tdata_row * netsnmp_tdata_row_next (netsnmp_tdata *table, netsnmp_tdata_row *row)
returns the next row in the table
netsnmp_tdata_row * netsnmp_tdata_row_get_byidx (netsnmp_tdata *table, netsnmp_variable_list *indexes)
finds a row in the 'tdata' table given the index values
netsnmp_tdata_row * netsnmp_tdata_row_get_byoid (netsnmp_tdata *table, oid *searchfor, size_t searchfor_len)
finds a row in the 'tdata' table given the index OID
netsnmp_tdata_row * netsnmp_tdata_row_next_byidx (netsnmp_tdata *table, netsnmp_variable_list *indexes)
finds the lexically next row in the 'tdata' table given the index values
netsnmp_tdata_row * netsnmp_tdata_row_next_byoid (netsnmp_tdata *table, oid *searchfor, size_t searchfor_len)
finds the lexically next row in the 'tdata' table given the index OID
int netsnmp_tdata_row_count (netsnmp_tdata *table)
int netsnmp_tdata_compare_idx (netsnmp_tdata_row *row, netsnmp_variable_list *indexes)
compare a row with the given index values
int netsnmp_tdata_compare_oid (netsnmp_tdata_row *row, oid *compareto, size_t compareto_len)
compare a row with the given index OID
int netsnmp_tdata_compare_subtree_idx (netsnmp_tdata_row *row, netsnmp_variable_list *indexes)
int netsnmp_tdata_compare_subtree_oid (netsnmp_tdata_row *row, oid *compareto, size_t compareto_len)

  Variables
Netsnmp_Node_Handler _netsnmp_tdata_helper_handler

Detailed Description

Implement a table with datamatted storage.

This helper helps you implement a table where all the rows are expected to be stored within the agent itself and not in some external storage location. It can be used to store a list of rows, where a row consists of the indexes to the table and a generic data pointer. You can then implement a subhandler which is passed the exact row definition and data it must return data for or accept data for. Complex GETNEXT handling is greatly simplified in this case.

Function Documentation

  netsnmp_mib_handler* netsnmp_get_tdata_handler (netsnmp_tdata * table)

Creates a tdata handler and returns it.

Definition at line 284 of file table_tdata.c.

References _netsnmp_tdata_helper_handler, netsnmp_mib_handler_s::flags, MIB_HANDLER_AUTO_NEXT, netsnmp_mib_handler_s::myvoid, netsnmp_create_handler(), NULL, and snmp_log().

Referenced by netsnmp_tdata_register().

  NETSNMP_INLINE void netsnmp_insert_tdata_row (netsnmp_request_info * request, netsnmp_tdata_row * row)

inserts a newly created tdata row into a request

Definition at line 399 of file table_tdata.c.

References netsnmp_container_table_row_insert().

  int netsnmp_tdata_add_row (netsnmp_tdata * table, netsnmp_tdata_row * row)

Adds a row to the given table (stored in proper lexographical order).

returns SNMPERR_SUCCESS on successful addition. or SNMPERR_GENERR on failure (E.G., indexes already existed)

Definition at line 186 of file table_tdata.c.

References _netsnmp_tdata_generate_index_oid(), netsnmp_tdata_s::container, netsnmp_tdata_s::flags, netsnmp_tdata_row_s::indexes, netsnmp_tdata_s::name, NULL, netsnmp_tdata_row_s::oid_index, netsnmp_index_s::oids, snmp_free_varbind(), and snmp_log().

Referenced by netsnmp_tdata_replace_row().

  netsnmp_tdata_row* netsnmp_tdata_clone_row (netsnmp_tdata_row * row)

clones a 'tdata' row.

DOES NOT CLONE THE TABLE-SPECIFIC ENTRY DATA.

Definition at line 92 of file table_tdata.c.

References memdup(), NULL, snmp_clone_varbind(), SNMP_FREE, and snmp_free_varbind().

  int netsnmp_tdata_compare_idx (netsnmp_tdata_row * row, netsnmp_variable_list * indexes)

compare a row with the given index values

Definition at line 518 of file table_tdata.c.

References build_oid_noalloc(), netsnmp_tdata_compare_oid(), and NULL.

  int netsnmp_tdata_compare_oid (netsnmp_tdata_row * row, oid * compareto, size_t compareto_len)

compare a row with the given index OID

Definition at line 531 of file table_tdata.c.

References netsnmp_index_s::len, netsnmp_index_s::oids, and snmp_oid_compare().

Referenced by netsnmp_tdata_compare_idx().

  int netsnmp_tdata_copy_row (netsnmp_tdata_row * dst_row, netsnmp_tdata_row * src_row)

copy the contents of a 'tdata' row.

DOES NOT COPY THE TABLE-SPECIFIC ENTRY DATA.

Definition at line 129 of file table_tdata.c.

References memdup(), and snmp_clone_varbind().

  netsnmp_tdata_row* netsnmp_tdata_create_row (void)

creates and returns a pointer to new row data structure

Definition at line 84 of file table_tdata.c.

References SNMP_MALLOC_TYPEDEF.

  netsnmp_tdata* netsnmp_tdata_create_table (const char * name, long flags)

creates and returns a 'tdata' table data structure

Definition at line 54 of file table_tdata.c.

References netsnmp_tdata_s::container, netsnmp_tdata_s::name, NULL, and SNMP_MALLOC_TYPEDEF.

  void* netsnmp_tdata_delete_row (netsnmp_tdata_row * row)

deletes the memory used by the specified row returns the table-specific entry data (that it doesn't know how to delete)

Definition at line 157 of file table_tdata.c.

References netsnmp_tdata_row_s::data, netsnmp_tdata_row_s::indexes, NULL, netsnmp_tdata_row_s::oid_index, netsnmp_index_s::oids, SNMP_FREE, and snmp_free_varbind().

Referenced by netsnmp_tdata_remove_and_delete_row().

  void netsnmp_tdata_delete_table (netsnmp_tdata * table)

creates and returns a 'tdata' table data structure

Definition at line 68 of file table_tdata.c.

References netsnmp_tdata_s::container, netsnmp_tdata_s::name, and SNMP_FREE.

  netsnmp_container* netsnmp_tdata_extract_container (netsnmp_request_info * request)

extracts the tdata container from the request structure

Definition at line 370 of file table_tdata.c.

References netsnmp_tdata_s::container, netsnmp_request_get_list_data(), and NULL.

  void* netsnmp_tdata_extract_entry (netsnmp_request_info * request)

extracts the (table-specific) entry being accessed from the request structure

Definition at line 387 of file table_tdata.c.

References netsnmp_tdata_row_s::data, netsnmp_tdata_extract_row(), and NULL.

  netsnmp_tdata_row* netsnmp_tdata_extract_row (netsnmp_request_info * request)

extracts the tdata row being accessed from the request structure

Definition at line 379 of file table_tdata.c.

References netsnmp_container_table_row_extract().

Referenced by netsnmp_tdata_extract_entry().

  netsnmp_tdata* netsnmp_tdata_extract_table (netsnmp_request_info * request)

extracts the tdata table from the request structure

Definition at line 362 of file table_tdata.c.

References netsnmp_request_get_list_data().

  int netsnmp_tdata_register (netsnmp_handler_registration * reginfo, netsnmp_tdata * table, netsnmp_table_registration_info * table_info)

registers a tdata-based MIB table

Definition at line 351 of file table_tdata.c.

References netsnmp_tdata_s::container, netsnmp_container_table_register(), netsnmp_get_tdata_handler(), and netsnmp_inject_handler().

  void* netsnmp_tdata_remove_and_delete_row (netsnmp_tdata * table, netsnmp_tdata_row * row)

removes and frees a row of the given table and returns the table-specific entry data

returns the void * pointer on successful deletion. or NULL on failure (bad arguments)

Definition at line 260 of file table_tdata.c.

References netsnmp_tdata_delete_row(), netsnmp_tdata_remove_row(), and NULL.

  netsnmp_tdata_row* netsnmp_tdata_remove_row (netsnmp_tdata * table, netsnmp_tdata_row * row)

removes a row from the given table and returns it (no free's called)

returns the row pointer itself on successful removing. or NULL on failure (bad arguments)

Definition at line 242 of file table_tdata.c.

References netsnmp_tdata_s::container, and NULL.

Referenced by netsnmp_tdata_remove_and_delete_row(), and netsnmp_tdata_replace_row().

  void netsnmp_tdata_replace_row (netsnmp_tdata * table, netsnmp_tdata_row * origrow, netsnmp_tdata_row * newrow)

swaps out origrow with newrow.

This does *not* delete/free anything!

Definition at line 227 of file table_tdata.c.

References netsnmp_tdata_add_row(), and netsnmp_tdata_remove_row().

  void* netsnmp_tdata_row_entry (netsnmp_tdata_row * row)

returns the (table-specific) entry data for a given row

Definition at line 414 of file table_tdata.c.

References netsnmp_tdata_row_s::data, and NULL.

  netsnmp_tdata_row* netsnmp_tdata_row_first (netsnmp_tdata * table)

returns the first row in the table

Definition at line 424 of file table_tdata.c.

References netsnmp_tdata_s::container.

  netsnmp_tdata_row* netsnmp_tdata_row_get (netsnmp_tdata * table, netsnmp_tdata_row * row)

finds a row in the 'tdata' table given another row

Definition at line 431 of file table_tdata.c.

References netsnmp_tdata_s::container.

  netsnmp_tdata_row* netsnmp_tdata_row_get_byidx (netsnmp_tdata * table, netsnmp_variable_list * indexes)

finds a row in the 'tdata' table given the index values

Definition at line 447 of file table_tdata.c.

References build_oid_noalloc(), netsnmp_tdata_row_get_byoid(), and NULL.

  netsnmp_tdata_row* netsnmp_tdata_row_get_byoid (netsnmp_tdata * table, oid * searchfor, size_t searchfor_len)

finds a row in the 'tdata' table given the index OID

Definition at line 460 of file table_tdata.c.

References netsnmp_tdata_s::container, netsnmp_index_s::len, NULL, and netsnmp_index_s::oids.

Referenced by netsnmp_tdata_row_get_byidx().

  netsnmp_tdata_row* netsnmp_tdata_row_next (netsnmp_tdata * table, netsnmp_tdata_row * row)

returns the next row in the table

Definition at line 439 of file table_tdata.c.

References netsnmp_tdata_s::container.

  netsnmp_tdata_row* netsnmp_tdata_row_next_byidx (netsnmp_tdata * table, netsnmp_variable_list * indexes)

finds the lexically next row in the 'tdata' table given the index values

Definition at line 475 of file table_tdata.c.

References build_oid_noalloc(), netsnmp_tdata_row_next_byoid(), and NULL.

  netsnmp_tdata_row* netsnmp_tdata_row_next_byoid (netsnmp_tdata * table, oid * searchfor, size_t searchfor_len)

finds the lexically next row in the 'tdata' table given the index OID

Definition at line 489 of file table_tdata.c.

References netsnmp_tdata_s::container, netsnmp_index_s::len, NULL, and netsnmp_index_s::oids.

Referenced by netsnmp_tdata_row_next_byidx().