diff options
Diffstat (limited to 'agent/mibgroup/notification/snmpNotifyFilterProfileTable.c')
-rw-r--r-- | agent/mibgroup/notification/snmpNotifyFilterProfileTable.c | 847 |
1 files changed, 847 insertions, 0 deletions
diff --git a/agent/mibgroup/notification/snmpNotifyFilterProfileTable.c b/agent/mibgroup/notification/snmpNotifyFilterProfileTable.c new file mode 100644 index 0000000..b12cdc8 --- /dev/null +++ b/agent/mibgroup/notification/snmpNotifyFilterProfileTable.c @@ -0,0 +1,847 @@ +/* + * This file was generated by mib2c and is intended for use as + * a mib module for the ucd-snmp snmpd agent. + */ + + +/* + * This should always be included first before anything else + */ +#include <net-snmp/net-snmp-config.h> + +#include <sys/types.h> +#if HAVE_STDLIB_H +#include <stdlib.h> +#endif +#if HAVE_STRING_H +#include <string.h> +#else +#include <strings.h> +#endif + + +/* + * minimal include directives + */ +#include <net-snmp/net-snmp-features.h> +#include <net-snmp/net-snmp-includes.h> +#include <net-snmp/agent/net-snmp-agent-includes.h> + +#include "header_complex.h" +#include "snmpNotifyFilterProfileTable.h" + +#ifndef NETSNMP_NO_WRITE_SUPPORT +netsnmp_feature_require(header_complex_find_entry) +#endif /* NETSNMP_NO_WRITE_SUPPORT */ + +/* + * snmpNotifyFilterProfileTable_variables_oid: + * this is the top level oid that we want to register under. This + * is essentially a prefix, with the suffix appearing in the + * variable below. + */ + + +oid snmpNotifyFilterProfileTable_variables_oid[] = + { 1, 3, 6, 1, 6, 3, 13, 1, 2 }; + + +/* + * variable2 snmpNotifyFilterProfileTable_variables: + * this variable defines function callbacks and type return information + * for the snmpNotifyFilterProfileTable mib section + */ + + +struct variable2 snmpNotifyFilterProfileTable_variables[] = { + /* + * magic number , variable type , ro/rw , callback fn , L, oidsuffix + */ +#define SNMPNOTIFYFILTERPROFILENAME 3 + {SNMPNOTIFYFILTERPROFILENAME, ASN_OCTET_STR, NETSNMP_OLDAPI_RWRITE, + var_snmpNotifyFilterProfileTable, 2, {1, 1}}, +#define SNMPNOTIFYFILTERPROFILESTORTYPE 4 + {SNMPNOTIFYFILTERPROFILESTORTYPE, ASN_INTEGER, NETSNMP_OLDAPI_RWRITE, + var_snmpNotifyFilterProfileTable, 2, {1, 2}}, +#define SNMPNOTIFYFILTERPROFILEROWSTATUS 5 + {SNMPNOTIFYFILTERPROFILEROWSTATUS, ASN_INTEGER, NETSNMP_OLDAPI_RWRITE, + var_snmpNotifyFilterProfileTable, 2, {1, 3}}, + +}; +/* + * (L = length of the oidsuffix) + */ + + +/* + * global storage of our data, saved in and configured by header_complex() + */ +static struct header_complex_index *snmpNotifyFilterProfileTableStorage = + NULL; + + + + +/* + * init_snmpNotifyFilterProfileTable(): + * Initialization routine. This is called when the agent starts up. + * At a minimum, registration of your variables should take place here. + */ +void +init_snmpNotifyFilterProfileTable(void) +{ + DEBUGMSGTL(("snmpNotifyFilterProfileTable", "initializing... ")); + + + /* + * register ourselves with the agent to handle our mib tree + */ + REGISTER_MIB("snmpNotifyFilterProfileTable", + snmpNotifyFilterProfileTable_variables, variable2, + snmpNotifyFilterProfileTable_variables_oid); + + + /* + * register our config handler(s) to deal with registrations + */ + snmpd_register_config_handler("snmpNotifyFilterProfileTable", + parse_snmpNotifyFilterProfileTable, NULL, + NULL); + + + + + /* + * we need to be called back later to store our data + */ + snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA, + store_snmpNotifyFilterProfileTable, NULL); + + + /* + * place any other initialization junk you need here + */ + + + DEBUGMSGTL(("snmpNotifyFilterProfileTable", "done.\n")); +} + + +/* + * snmpNotifyFilterProfileTable_add(): adds a structure node to our data set + */ +int +snmpNotifyFilterProfileTable_add(struct snmpNotifyFilterProfileTable_data + *thedata) +{ + netsnmp_variable_list *vars = NULL; + int retVal; + + DEBUGMSGTL(("snmpNotifyFilterProfileTable", "adding data... ")); + /* + * add the index variables to the varbind list, which is + * used by header_complex to index the data + */ + + snmp_varlist_add_variable(&vars, NULL, 0, ASN_PRIV_IMPLIED_OCTET_STR, + (u_char *) thedata->snmpTargetParamsName, + thedata->snmpTargetParamsNameLen); + + if (header_complex_maybe_add_data(&snmpNotifyFilterProfileTableStorage, vars, + thedata, 1) != NULL){ + DEBUGMSGTL(("snmpNotifyFilterProfileTable", "registered an entry\n")); + retVal = SNMPERR_SUCCESS; + }else{ + retVal = SNMPERR_GENERR; + } + + + DEBUGMSGTL(("snmpNotifyFilterProfileTable", "done.\n")); + return retVal; +} + + +/* + * parse_snmpNotifyFilterProfileTable(): + * parses .conf file entries needed to configure the mib. + */ +void +parse_snmpNotifyFilterProfileTable(const char *token, char *line) +{ + size_t tmpint; + struct snmpNotifyFilterProfileTable_data *StorageTmp = + SNMP_MALLOC_STRUCT(snmpNotifyFilterProfileTable_data); + + DEBUGMSGTL(("snmpNotifyFilterProfileTable", "parsing config... ")); + + if (StorageTmp == NULL) { + config_perror("malloc failure"); + return; + } + + line = + read_config_read_data(ASN_OCTET_STR, line, + &StorageTmp->snmpTargetParamsName, + &StorageTmp->snmpTargetParamsNameLen); + if (StorageTmp->snmpTargetParamsName == NULL) { + config_perror("invalid specification for snmpTargetParamsName"); + return; + } + + line = + read_config_read_data(ASN_OCTET_STR, line, + &StorageTmp->snmpNotifyFilterProfileName, + &StorageTmp->snmpNotifyFilterProfileNameLen); + if (StorageTmp->snmpNotifyFilterProfileName == NULL) { + config_perror("invalid specification for snmpNotifyFilterProfileName"); + SNMP_FREE(StorageTmp); + return; + } + + line = + read_config_read_data(ASN_INTEGER, line, + &StorageTmp->snmpNotifyFilterProfileStorType, + &tmpint); + + line = + read_config_read_data(ASN_INTEGER, line, + &StorageTmp-> + snmpNotifyFilterProfileRowStatus, &tmpint); + + if (snmpNotifyFilterProfileTable_add(StorageTmp) != SNMPERR_SUCCESS){ + SNMP_FREE(StorageTmp->snmpTargetParamsName); + SNMP_FREE(StorageTmp->snmpNotifyFilterProfileName); + SNMP_FREE(StorageTmp); + } + + DEBUGMSGTL(("snmpNotifyFilterProfileTable", "done.\n")); +} + + + + +/* + * store_snmpNotifyFilterProfileTable(): + * stores .conf file entries needed to configure the mib. + */ +int +store_snmpNotifyFilterProfileTable(int majorID, int minorID, + void *serverarg, void *clientarg) +{ + char line[SNMP_MAXBUF]; + char *cptr; + struct snmpNotifyFilterProfileTable_data *StorageTmp; + struct header_complex_index *hcindex; + + + DEBUGMSGTL(("snmpNotifyFilterProfileTable", "storing data... ")); + + for (hcindex = snmpNotifyFilterProfileTableStorage; hcindex != NULL; + hcindex = hcindex->next) { + StorageTmp = + (struct snmpNotifyFilterProfileTable_data *) hcindex->data; + + if ((StorageTmp->snmpNotifyFilterProfileStorType == ST_NONVOLATILE) || + (StorageTmp->snmpNotifyFilterProfileStorType == ST_PERMANENT)) { + + memset(line, 0, sizeof(line)); + strcat(line, "snmpNotifyFilterProfileTable "); + cptr = line + strlen(line); + + cptr = + read_config_store_data(ASN_OCTET_STR, cptr, + &StorageTmp->snmpTargetParamsName, + &StorageTmp-> + snmpTargetParamsNameLen); + cptr = + read_config_store_data(ASN_OCTET_STR, cptr, + &StorageTmp-> + snmpNotifyFilterProfileName, + &StorageTmp-> + snmpNotifyFilterProfileNameLen); + cptr = + read_config_store_data(ASN_INTEGER, cptr, + &StorageTmp-> + snmpNotifyFilterProfileStorType, + NULL); + cptr = + read_config_store_data(ASN_INTEGER, cptr, + &StorageTmp-> + snmpNotifyFilterProfileRowStatus, + NULL); + + snmpd_store_config(line); + } + } + DEBUGMSGTL(("snmpNotifyFilterProfileTable", "done.\n")); + return 0; +} + + + + +/* + * var_snmpNotifyFilterProfileTable(): + * Handle this table separately from the scalar value case. + * The workings of this are basically the same as for var_snmpNotifyFilterProfileTable above. + */ +unsigned char * +var_snmpNotifyFilterProfileTable(struct variable *vp, + oid * name, + size_t * length, + int exact, + size_t * var_len, + WriteMethod ** write_method) +{ + + + struct snmpNotifyFilterProfileTable_data *StorageTmp = NULL; + int found = 1; + + + DEBUGMSGTL(("snmpNotifyFilterProfileTable", + "var_snmpNotifyFilterProfileTable: Entering... \n")); + /* + * this assumes you have registered all your data properly + */ + if ((StorageTmp = (struct snmpNotifyFilterProfileTable_data *) + header_complex((struct header_complex_index *) + snmpNotifyFilterProfileTableStorage, vp, name, + length, exact, var_len, write_method)) == NULL) { + found = 0; + } + + switch (vp->magic) { +#ifndef NETSNMP_NO_WRITE_SUPPORT + case SNMPNOTIFYFILTERPROFILENAME: + *write_method = write_snmpNotifyFilterProfileName; + break; + + case SNMPNOTIFYFILTERPROFILESTORTYPE: + *write_method = write_snmpNotifyFilterProfileStorType; + break; + + case SNMPNOTIFYFILTERPROFILEROWSTATUS: + *write_method = write_snmpNotifyFilterProfileRowStatus; + break; +#endif /* !NETSNMP_NO_WRITE_SUPPORT */ + default: + *write_method = NULL; + } + + if (!found) { + return NULL; + } + + /* + * this is where we do the value assignments for the mib results. + */ + switch (vp->magic) { + + case SNMPNOTIFYFILTERPROFILENAME: + *var_len = StorageTmp->snmpNotifyFilterProfileNameLen; + return (u_char *) StorageTmp->snmpNotifyFilterProfileName; + + case SNMPNOTIFYFILTERPROFILESTORTYPE: + *var_len = sizeof(StorageTmp->snmpNotifyFilterProfileStorType); + return (u_char *) & StorageTmp->snmpNotifyFilterProfileStorType; + + case SNMPNOTIFYFILTERPROFILEROWSTATUS: + *var_len = sizeof(StorageTmp->snmpNotifyFilterProfileRowStatus); + return (u_char *) & StorageTmp->snmpNotifyFilterProfileRowStatus; + + + default: + ERROR_MSG(""); + } + + return NULL; +} + + + +static struct snmpNotifyFilterProfileTable_data *StorageNew; + +#ifndef NETSNMP_NO_WRITE_SUPPORT + +int +write_snmpNotifyFilterProfileName(int action, + u_char * var_val, + u_char var_val_type, + size_t var_val_len, + u_char * statP, + oid * name, size_t name_len) +{ + static char *tmpvar; + struct snmpNotifyFilterProfileTable_data *StorageTmp = NULL; + static size_t tmplen; + size_t newlen = + name_len - + (sizeof(snmpNotifyFilterProfileTable_variables_oid) / sizeof(oid) + + 3 - 1); + + + DEBUGMSGTL(("snmpNotifyFilterProfileTable", + "write_snmpNotifyFilterProfileName entering action=%d... \n", + action)); + if (action != RESERVE1 && + (StorageTmp = (struct snmpNotifyFilterProfileTable_data *) + header_complex((struct header_complex_index *) + snmpNotifyFilterProfileTableStorage, NULL, + &name[sizeof + (snmpNotifyFilterProfileTable_variables_oid) + / sizeof(oid) + 3 - 1], &newlen, 1, NULL, + NULL)) == NULL) { + if ((StorageTmp = StorageNew) == NULL) + return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */ + } + + + switch (action) { + case RESERVE1: + if (var_val_type != ASN_OCTET_STR) { + return SNMP_ERR_WRONGTYPE; + } + if (var_val_len < 1 || var_val_len > 32) { + return SNMP_ERR_WRONGLENGTH; + } + break; + + + case RESERVE2: + /* + * memory reseveration, final preparation... + */ + tmpvar = StorageTmp->snmpNotifyFilterProfileName; + tmplen = StorageTmp->snmpNotifyFilterProfileNameLen; + StorageTmp->snmpNotifyFilterProfileName = (char*)calloc(1, var_val_len + 1); + if (NULL == StorageTmp->snmpNotifyFilterProfileName) + return SNMP_ERR_RESOURCEUNAVAILABLE; + break; + + + case FREE: + /* + * Release any resources that have been allocated + */ + break; + + + case ACTION: + /* + * The variable has been stored in string for + * you to use, and you have just been asked to do something with + * it. Note that anything done here must be reversable in the UNDO case + */ + memcpy(StorageTmp->snmpNotifyFilterProfileName, var_val, var_val_len); + StorageTmp->snmpNotifyFilterProfileNameLen = var_val_len; + break; + + + case UNDO: + /* + * Back out any changes made in the ACTION case + */ + SNMP_FREE(StorageTmp->snmpNotifyFilterProfileName); + StorageTmp->snmpNotifyFilterProfileName = tmpvar; + StorageTmp->snmpNotifyFilterProfileNameLen = tmplen; + break; + + + case COMMIT: + /* + * Things are working well, so it's now safe to make the change + * permanently. Make sure that anything done here can't fail! + */ + SNMP_FREE(tmpvar); + snmp_store_needed(NULL); + break; + } + return SNMP_ERR_NOERROR; +} + + + +int +write_snmpNotifyFilterProfileStorType(int action, + u_char * var_val, + u_char var_val_type, + size_t var_val_len, + u_char * statP, + oid * name, size_t name_len) +{ + static int tmpvar; + long value = *((long *) var_val); + struct snmpNotifyFilterProfileTable_data *StorageTmp = NULL; + size_t newlen = + name_len - + (sizeof(snmpNotifyFilterProfileTable_variables_oid) / sizeof(oid) + + 3 - 1); + + + DEBUGMSGTL(("snmpNotifyFilterProfileTable", + "write_snmpNotifyFilterProfileStorType entering action=%d... \n", + action)); + if (action != RESERVE1 && + (StorageTmp = (struct snmpNotifyFilterProfileTable_data *) + header_complex((struct header_complex_index *) + snmpNotifyFilterProfileTableStorage, NULL, + &name[sizeof + (snmpNotifyFilterProfileTable_variables_oid) + / sizeof(oid) + 3 - 1], &newlen, 1, NULL, + NULL)) == NULL) { + if ((StorageTmp = StorageNew) == NULL) + return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */ + } + + switch (action) { + case RESERVE1: + if (var_val_type != ASN_INTEGER) { + return SNMP_ERR_WRONGTYPE; + } + if (var_val_len != sizeof(long)) { + return SNMP_ERR_WRONGLENGTH; + } + if (value != SNMP_STORAGE_OTHER && value != SNMP_STORAGE_VOLATILE + && value != SNMP_STORAGE_NONVOLATILE) { + return SNMP_ERR_WRONGVALUE; + } + break; + + + case RESERVE2: + /* + * memory reseveration, final preparation... + */ + break; + + + case FREE: + /* + * Release any resources that have been allocated + */ + break; + + + case ACTION: + /* + * The variable has been stored in long_ret for + * you to use, and you have just been asked to do something with + * it. Note that anything done here must be reversable in the UNDO case + */ + tmpvar = StorageTmp->snmpNotifyFilterProfileStorType; + StorageTmp->snmpNotifyFilterProfileStorType = *((long *) var_val); + break; + + + case UNDO: + /* + * Back out any changes made in the ACTION case + */ + StorageTmp->snmpNotifyFilterProfileStorType = tmpvar; + break; + + + case COMMIT: + /* + * Things are working well, so it's now safe to make the change + * permanently. Make sure that anything done here can't fail! + */ + snmp_store_needed(NULL); + break; + } + return SNMP_ERR_NOERROR; +} + + + + + + +int +write_snmpNotifyFilterProfileRowStatus(int action, + u_char * var_val, + u_char var_val_type, + size_t var_val_len, + u_char * statP, + oid * name, size_t name_len) +{ + struct snmpNotifyFilterProfileTable_data *StorageTmp = NULL; + static struct snmpNotifyFilterProfileTable_data *StorageDel; + size_t newlen = + name_len - + (sizeof(snmpNotifyFilterProfileTable_variables_oid) / sizeof(oid) + + 3 - 1); + static int old_value; + int set_value = *((long *) var_val); + netsnmp_variable_list *vars; + struct header_complex_index *hciptr; + + + DEBUGMSGTL(("snmpNotifyFilterProfileTable", + "write_snmpNotifyFilterProfileRowStatus entering action=%d... \n", + action)); + StorageTmp = (struct snmpNotifyFilterProfileTable_data *) + header_complex((struct header_complex_index *) + snmpNotifyFilterProfileTableStorage, NULL, + &name[sizeof + (snmpNotifyFilterProfileTable_variables_oid) / + sizeof(oid) + 3 - 1], &newlen, 1, NULL, NULL); + + switch (action) { + case RESERVE1: + if (var_val_type != ASN_INTEGER || var_val == NULL) { + return SNMP_ERR_WRONGTYPE; + } + if (var_val_len != sizeof(long)) { + return SNMP_ERR_WRONGLENGTH; + } + if (set_value < 1 || set_value > 6 || set_value == RS_NOTREADY) { + return SNMP_ERR_WRONGVALUE; + } + /* + * stage one: test validity + */ + if (StorageTmp == NULL) { + /* + * create the row now? + */ + + + /* + * ditch illegal values now + */ + if (set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE) { + return SNMP_ERR_INCONSISTENTVALUE; + } + } else { + /* + * row exists. Check for a valid state change + */ + if (set_value == RS_CREATEANDGO + || set_value == RS_CREATEANDWAIT) { + /* + * can't create a row that exists + */ + return SNMP_ERR_INCONSISTENTVALUE; + } + if ((set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE) && + StorageTmp->snmpNotifyFilterProfileNameLen == 0) { + /* + * can't activate row without a profile name + */ + return SNMP_ERR_INCONSISTENTVALUE; + } + /* + * XXX: interaction with row storage type needed + */ + } + + /* + * memory reseveration, final preparation... + */ + if (StorageTmp == NULL && + (set_value == RS_CREATEANDGO + || set_value == RS_CREATEANDWAIT)) { + /* + * creation + */ + vars = NULL; + + snmp_varlist_add_variable(&vars, NULL, 0, + ASN_PRIV_IMPLIED_OCTET_STR, NULL, 0); + + if (header_complex_parse_oid + (& + (name + [sizeof(snmpNotifyFilterProfileTable_variables_oid) / + sizeof(oid) + 2]), newlen, vars) != SNMPERR_SUCCESS) { + snmp_free_var(vars); + return SNMP_ERR_INCONSISTENTNAME; + } + + StorageNew = + SNMP_MALLOC_STRUCT(snmpNotifyFilterProfileTable_data); + if (StorageNew == NULL) + return SNMP_ERR_GENERR; + memdup((u_char **) & (StorageNew->snmpTargetParamsName), + vars->val.string, vars->val_len); + StorageNew->snmpTargetParamsNameLen = vars->val_len; + StorageNew->snmpNotifyFilterProfileStorType = ST_NONVOLATILE; + + StorageNew->snmpNotifyFilterProfileRowStatus = RS_NOTREADY; + snmp_free_var(vars); + } + + + break; + + case RESERVE2: + break; + + case FREE: + /* + * XXX: free, zero vars + */ + /* + * Release any resources that have been allocated + */ + if (StorageNew != NULL) { + SNMP_FREE(StorageNew->snmpTargetParamsName); + SNMP_FREE(StorageNew->snmpNotifyFilterProfileName); + free(StorageNew); + StorageNew = NULL; + } + break; + + + + + case ACTION: + /* + * The variable has been stored in set_value for you to + * use, and you have just been asked to do something with + * it. Note that anything done here must be reversable in + * the UNDO case + */ + + if (StorageTmp == NULL && + (set_value == RS_CREATEANDGO || + set_value == RS_CREATEANDWAIT)) { + /* + * row creation, so add it + */ + if (StorageNew != NULL) + snmpNotifyFilterProfileTable_add(StorageNew); + /* + * XXX: ack, and if it is NULL? + */ + } else if (set_value != RS_DESTROY) { + /* + * set the flag? + */ + if (StorageTmp == NULL) + return SNMP_ERR_GENERR; /* should never ever get here */ + + old_value = StorageTmp->snmpNotifyFilterProfileRowStatus; + StorageTmp->snmpNotifyFilterProfileRowStatus = + *((long *) var_val); + } else { + /* + * destroy... extract it for now + */ + if (StorageTmp) { + hciptr = + header_complex_find_entry + (snmpNotifyFilterProfileTableStorage, StorageTmp); + StorageDel = (struct snmpNotifyFilterProfileTable_data *) + header_complex_extract_entry((struct + header_complex_index **) + &snmpNotifyFilterProfileTableStorage, + hciptr); + } + + } + break; + + case UNDO: + /* + * Back out any changes made in the ACTION case + */ + if (StorageTmp == NULL && + (set_value == RS_CREATEANDGO || + set_value == RS_CREATEANDWAIT)) { + /* + * row creation, so remove it again + */ + hciptr = + header_complex_find_entry + (snmpNotifyFilterProfileTableStorage, StorageNew); + StorageDel = (struct snmpNotifyFilterProfileTable_data *) + header_complex_extract_entry((struct header_complex_index + **) + &snmpNotifyFilterProfileTableStorage, + hciptr); + /* + * XXX: free it + */ + } else if (StorageDel != NULL) { + /* + * row deletion, so add it again + */ + snmpNotifyFilterProfileTable_add(StorageDel); + StorageDel = NULL; + } else if (set_value != RS_DESTROY) { + if (StorageTmp) + StorageTmp->snmpNotifyFilterProfileRowStatus = old_value; + } + break; + + + + + case COMMIT: + /* + * Things are working well, so it's now safe to make the change + * permanently. Make sure that anything done here can't fail! + */ + if (StorageDel != NULL) { + SNMP_FREE(StorageDel->snmpTargetParamsName); + SNMP_FREE(StorageDel->snmpNotifyFilterProfileName); + free(StorageDel); + StorageDel = NULL; + } + if (StorageTmp && set_value == RS_CREATEANDGO) { + if (StorageTmp->snmpNotifyFilterProfileNameLen) + StorageTmp->snmpNotifyFilterProfileRowStatus = RS_ACTIVE; + StorageNew = NULL; + } else if (StorageTmp && set_value == RS_CREATEANDWAIT) { + if (StorageTmp->snmpNotifyFilterProfileNameLen) + StorageTmp->snmpNotifyFilterProfileRowStatus = RS_NOTINSERVICE; + StorageNew = NULL; + } + snmp_store_needed(NULL); + break; + } + return SNMP_ERR_NOERROR; +} + + +#endif /* !NETSNMP_NO_WRITE_SUPPORT */ + + +char * +get_FilterProfileName(const char *paramName, size_t paramName_len, + size_t * profileName_len) +{ + netsnmp_variable_list *vars = NULL; + struct snmpNotifyFilterProfileTable_data *data; + + /* + * put requested info into var structure + */ + snmp_varlist_add_variable(&vars, NULL, 0, ASN_PRIV_IMPLIED_OCTET_STR, + (const u_char *) paramName, paramName_len); + + /* + * get the data from the header_complex storage + */ + data = (struct snmpNotifyFilterProfileTable_data *) + header_complex_get(snmpNotifyFilterProfileTableStorage, vars); + + /* + * free search index + */ + snmp_free_var(vars); + + /* + * return the requested information (if this row is active) + */ + if (data && data->snmpNotifyFilterProfileRowStatus == RS_ACTIVE) { + *profileName_len = data->snmpNotifyFilterProfileNameLen; + return data->snmpNotifyFilterProfileName; + } + + *profileName_len = 0; + return NULL; +} |