diff options
Diffstat (limited to 'agent/mibgroup/tsm-mib/snmpTsmConfigurationUsePrefix.c')
-rw-r--r-- | agent/mibgroup/tsm-mib/snmpTsmConfigurationUsePrefix.c | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/agent/mibgroup/tsm-mib/snmpTsmConfigurationUsePrefix.c b/agent/mibgroup/tsm-mib/snmpTsmConfigurationUsePrefix.c new file mode 100644 index 0000000..c3976c4 --- /dev/null +++ b/agent/mibgroup/tsm-mib/snmpTsmConfigurationUsePrefix.c @@ -0,0 +1,110 @@ +/* + * Note: this file originally auto-generated by mib2c + */ + +#include <net-snmp/net-snmp-config.h> +#include <net-snmp/net-snmp-includes.h> +#include <net-snmp/agent/net-snmp-agent-includes.h> +#include "snmpTsmConfigurationUsePrefix.h" + +/** Initializes the snmpTsmConfigurationUsePrefix module */ +void +init_snmpTsmConfigurationUsePrefix(void) +{ + const oid snmpTsmConfigurationUsePrefix_oid[] = + { 1, 3, 6, 1, 2, 1, 190, 1, 2, 1 }; + + DEBUGMSGTL(("snmpTsmConfigurationUsePrefix", "Initializing\n")); + + netsnmp_register_scalar(netsnmp_create_handler_registration + ("snmpTsmConfigurationUsePrefix", + handle_snmpTsmConfigurationUsePrefix, + snmpTsmConfigurationUsePrefix_oid, + OID_LENGTH(snmpTsmConfigurationUsePrefix_oid), + HANDLER_CAN_RWRITE)); +} + +int +handle_snmpTsmConfigurationUsePrefix(netsnmp_mib_handler *handler, + netsnmp_handler_registration *reginfo, + netsnmp_agent_request_info *reqinfo, + netsnmp_request_info *requests) +{ + int ret; + /* + * We are never called for a GETNEXT if it's registered as a + * "instance", as it's "magically" handled for us. + */ + + /* + * a instance handler also only hands us one request at a time, so + * we don't need to loop over a list of requests; we'll only get one. + */ + + long current_value = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, + NETSNMP_DS_LIB_TSM_USE_PREFIX); + static long original_value = 0; + + switch (reqinfo->mode) { + + case MODE_GET: + if (current_value == 0) + current_value = TV_FALSE; + snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER, + ¤t_value, + sizeof(current_value)); + break; + + /* + * SET REQUEST + * + * multiple states in the transaction. See: + * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg + */ + case MODE_SET_RESERVE1: + /* + * or you could use netsnmp_check_vb_type_and_size instead + */ + ret = netsnmp_check_vb_type(requests->requestvb, ASN_INTEGER); + if (ret != SNMP_ERR_NOERROR) { + netsnmp_set_request_error(reqinfo, requests, ret); + } + if (*(requests->requestvb->val.integer) != 2 && + *(requests->requestvb->val.integer) != 1) + netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE); + original_value = current_value; + break; + + case MODE_SET_ACTION: + if (TV_FALSE == *(requests->requestvb->val.integer)) + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, + NETSNMP_DS_LIB_TSM_USE_PREFIX, 0); + else + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, + NETSNMP_DS_LIB_TSM_USE_PREFIX, 1); + break; + + case MODE_SET_UNDO: + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, + NETSNMP_DS_LIB_TSM_USE_PREFIX, + original_value); + break; + + /* we don't need these */ + case MODE_SET_COMMIT: + case MODE_SET_FREE: + case MODE_SET_RESERVE2: + break; + + default: + /* + * we should never get here, so this is a really bad error + */ + snmp_log(LOG_ERR, + "unknown mode (%d) in handle_snmpTsmConfigurationUsePrefix\n", + reqinfo->mode); + return SNMP_ERR_GENERR; + } + + return SNMP_ERR_NOERROR; +} |