.TH "Store and retrieve data referenced by an OID." 3 "24 Jun 2011" "Version 5.4.3.pre1" "net-snmp" \" -*- nroff -*-
.ad l
.nh
.SH NAME
Store and retrieve data referenced by an OID. \- 
.PP
This is essentially a way of storing data associated with a given OID.  

.SS "Functions"

.in +1c
.ti -1c
.RI "\fBnetsnmp_oid_stash_node\fP * \fBnetsnmp_oid_stash_create_sized_node\fP (size_t mysize)"
.br
.RI "\fICreate an netsnmp_oid_stash \fBnode\fP. \fP"
.ti -1c
.RI "NETSNMP_INLINE \fBnetsnmp_oid_stash_node\fP * \fBnetsnmp_oid_stash_create_node\fP (void)"
.br
.RI "\fICreates a netsnmp_oid_stash_node. \fP"
.ti -1c
.RI "int \fBnetsnmp_oid_stash_add_data\fP (\fBnetsnmp_oid_stash_node\fP **root, oid *lookup, size_t lookup_len, void *mydata)"
.br
.RI "\fIadds data to the stash at a given oid. \fP"
.ti -1c
.RI "\fBnetsnmp_oid_stash_node\fP * \fBnetsnmp_oid_stash_get_node\fP (\fBnetsnmp_oid_stash_node\fP *root, oid *lookup, size_t lookup_len)"
.br
.RI "\fIreturns a \fBnode\fP associated with a given OID. \fP"
.ti -1c
.RI "\fBnetsnmp_oid_stash_node\fP * \fBnetsnmp_oid_stash_getnext_node\fP (\fBnetsnmp_oid_stash_node\fP *root, oid *lookup, size_t lookup_len)"
.br
.RI "\fIreturns the next \fBnode\fP associated with a given OID. \fP"
.ti -1c
.RI "void * \fBnetsnmp_oid_stash_get_data\fP (\fBnetsnmp_oid_stash_node\fP *root, oid *lookup, size_t lookup_len)"
.br
.RI "\fIreturns a data pointer associated with a given OID. \fP"
.ti -1c
.RI "int \fBnetsnmp_oid_stash_store_all\fP (int majorID, int minorID, void *serverarg, void *clientarg)"
.br
.RI "\fIa wrapper around netsnmp_oid_stash_store for use with a \fBsnmp_alarm\fP. \fP"
.ti -1c
.RI "void \fBnetsnmp_oid_stash_store\fP (\fBnetsnmp_oid_stash_node\fP *root, const char *tokenname, NetSNMPStashDump *dumpfn, oid *curoid, size_t curoid_len)"
.br
.RI "\fIstores data in a starsh \fBtree\fP to peristent storage. \fP"
.ti -1c
.RI "void \fBoid_stash_dump\fP (\fBnetsnmp_oid_stash_node\fP *root, char *prefix)"
.br
.RI "\fIFor debugging: dump the netsnmp_oid_stash \fBtree\fP to stdout. \fP"
.ti -1c
.RI "void \fBnetsnmp_oid_stash_free\fP (\fBnetsnmp_oid_stash_node\fP **root, NetSNMPStashFreeNode *freefn)"
.br
.RI "\fIFrees the contents of a netsnmp_oid_stash \fBtree\fP. \fP"
.ti -1c
.RI "void \fBnetsnmp_oid_stash_no_free\fP (void *bogus)"
.br
.in -1c
.SH "Detailed Description"
.PP 
This is essentially a way of storing data associated with a given OID. 

It stores a bunch of data pointers within a memory \fBtree\fP that allows fairly efficient lookups with a heavily populated \fBtree\fP. 
.SH "Function Documentation"
.PP 
.SS "int netsnmp_oid_stash_add_data (\fBnetsnmp_oid_stash_node\fP ** root, oid * lookup, size_t lookup_len, void * mydata)"
.PP
adds data to the stash at a given oid. \fBParameters:\fP
.RS 4
\fIroot\fP the top of the stash \fBtree\fP 
.br
\fIlookup\fP the oid index to store the data at. 
.br
\fIlookup_len\fP the length of the lookup oid. 
.br
\fImydata\fP the data to store
.RE
.PP
\fBReturns:\fP
.RS 4
SNMPERR_SUCCESS on success, SNMPERR_GENERR if data is already there, SNMPERR_MALLOC on malloc failures or if arguments passed in with NULL values. 
.RE
.PP

.PP
Definition at line 83 of file oid_stash.c.
.SS "NETSNMP_INLINE \fBnetsnmp_oid_stash_node\fP* netsnmp_oid_stash_create_node (void)"
.PP
Creates a netsnmp_oid_stash_node. Assumes you want the default OID_STASH_CHILDREN_SIZE hash size for the \fBnode\fP. 
.PP
\fBReturns:\fP
.RS 4
NULL on error, otherwise the newly allocated \fBnode\fP 
.RE
.PP

.PP
Definition at line 66 of file oid_stash.c.
.SS "\fBnetsnmp_oid_stash_node\fP* netsnmp_oid_stash_create_sized_node (size_t mysize)"
.PP
Create an netsnmp_oid_stash \fBnode\fP. \fBParameters:\fP
.RS 4
\fImysize\fP the size of the child pointer array
.RE
.PP
\fBReturns:\fP
.RS 4
NULL on error, otherwise the newly allocated \fBnode\fP 
.RE
.PP

.PP
Definition at line 46 of file oid_stash.c.
.SS "void netsnmp_oid_stash_free (\fBnetsnmp_oid_stash_node\fP ** root, NetSNMPStashFreeNode * freefn)"
.PP
Frees the contents of a netsnmp_oid_stash \fBtree\fP. \fBParameters:\fP
.RS 4
\fIroot\fP the top of the \fBtree\fP (or branch to be freed) 
.br
\fIfreefn\fP The function to be called on each data (void *) pointer. If left NULL the system free() function will be called 
.RE
.PP

.PP
Definition at line 401 of file oid_stash.c.
.SS "void* netsnmp_oid_stash_get_data (\fBnetsnmp_oid_stash_node\fP * root, oid * lookup, size_t lookup_len)"
.PP
returns a data pointer associated with a given OID. This is equivelent to netsnmp_oid_stash_get_node, but returns only the data not the entire \fBnode\fP.
.PP
\fBParameters:\fP
.RS 4
\fIroot\fP the top of the stash 
.br
\fIlookup\fP the oid to search for 
.br
\fIlookup_len\fP the length of the search oid. 
.RE
.PP

.PP
Definition at line 282 of file oid_stash.c.
.SS "\fBnetsnmp_oid_stash_node\fP* netsnmp_oid_stash_get_node (\fBnetsnmp_oid_stash_node\fP * root, oid * lookup, size_t lookup_len)"
.PP
returns a \fBnode\fP associated with a given OID. \fBParameters:\fP
.RS 4
\fIroot\fP the top of the stash \fBtree\fP 
.br
\fIlookup\fP the oid to look up a \fBnode\fP for. 
.br
\fIlookup_len\fP the length of the lookup oid 
.RE
.PP

.PP
Definition at line 154 of file oid_stash.c.
.SS "\fBnetsnmp_oid_stash_node\fP* netsnmp_oid_stash_getnext_node (\fBnetsnmp_oid_stash_node\fP * root, oid * lookup, size_t lookup_len)"
.PP
returns the next \fBnode\fP associated with a given OID. INCOMPLETE. This is equivelent to a GETNEXT operation. 
.PP
Definition at line 191 of file oid_stash.c.
.SS "void netsnmp_oid_stash_store (\fBnetsnmp_oid_stash_node\fP * root, const char * tokenname, NetSNMPStashDump * dumpfn, oid * curoid, size_t curoid_len)"
.PP
stores data in a starsh \fBtree\fP to peristent storage. This function can be called to save all data in a stash \fBtree\fP to Net-SNMP's percent storage. Make sure you register a parsing function with the read_config system to re-incorperate your saved data into future trees.
.PP
\fBParameters:\fP
.RS 4
\fIroot\fP the top of the stash to store. 
.br
\fItokenname\fP the file token name to save in (passing 'snmpd' will save things into snmpd.conf). 
.br
\fIdumpfn\fP A function which can dump the data stored at a particular \fBnode\fP into a char buffer. 
.br
\fIcuroid\fP must be a pointer to a OID array of length MAX_OID_LEN. 
.br
\fIcuroid_len\fP must be 0 for the top level call. 
.RE
.PP

.PP
Definition at line 334 of file oid_stash.c.
.SS "int netsnmp_oid_stash_store_all (int majorID, int minorID, void * serverarg, void * clientarg)"
.PP
a wrapper around netsnmp_oid_stash_store for use with a \fBsnmp_alarm\fP. when calling \fBsnmp_alarm\fP, you can list this as a callback. The clientarg should be a pointer to a netsnmp_oid_stash_save_info pointer. It can also be called directly, of course. The last argument (clientarg) is the only one that is used. The rest are ignored by the function. 
.PP
\fBParameters:\fP
.RS 4
\fImajorID\fP 
.br
\fIminorID\fP 
.br
\fIserverarg\fP 
.br
\fIclientarg\fP A pointer to a netsnmp_oid_stash_save_info structure. 
.RE
.PP

.PP
Definition at line 304 of file oid_stash.c.
.SS "void oid_stash_dump (\fBnetsnmp_oid_stash_node\fP * root, char * prefix)"
.PP
For debugging: dump the netsnmp_oid_stash \fBtree\fP to stdout. \fBParameters:\fP
.RS 4
\fIroot\fP The top of the \fBtree\fP 
.br
\fIprefix\fP a character string prefix printed to the beginning of each line. 
.RE
.PP

.PP
Definition at line 374 of file oid_stash.c.
.SH "Author"
.PP 
Generated automatically by Doxygen for net-snmp from the source code.
