|
Packit |
fcad23 |
/*--------------------------------------------------------------------------+
|
|
Packit |
fcad23 |
| Edition History: |
|
|
Packit |
fcad23 |
| # Date Comments By |
|
|
Packit |
fcad23 |
| --- -------- -------------------------------------------------------- --- |
|
|
Packit |
fcad23 |
| 1 07/05/18 Created. emi |
|
|
Packit |
fcad23 |
+--------------------------------------------------------------------------*/
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* Note: this file originally auto-generated by mib2c using
|
|
Packit |
fcad23 |
* : mib2c.table_data.conf,v 1.11.2.1 2006/01/11 15:17:47 dts12 Exp $
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
#include <net-snmp/net-snmp-config.h>
|
|
Packit |
fcad23 |
#include <net-snmp/net-snmp-features.h>
|
|
Packit |
fcad23 |
#include <net-snmp/net-snmp-includes.h>
|
|
Packit |
fcad23 |
#include <net-snmp/agent/net-snmp-agent-includes.h>
|
|
Packit |
fcad23 |
#include "utilities/iquery.h"
|
|
Packit |
fcad23 |
#include "alarmTable.h"
|
|
Packit |
fcad23 |
#include "event.h"
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
netsnmp_feature_require(iquery)
|
|
Packit |
fcad23 |
netsnmp_feature_require(query_set_default_session)
|
|
Packit |
fcad23 |
netsnmp_feature_require(table_tdata)
|
|
Packit |
fcad23 |
netsnmp_feature_require(check_vb_type_and_max_size)
|
|
Packit |
fcad23 |
netsnmp_feature_require(table_tdata_extract_table)
|
|
Packit |
fcad23 |
#ifndef NETSNMP_NO_WRITE_SUPPORT
|
|
Packit |
fcad23 |
netsnmp_feature_require(table_tdata_insert_row)
|
|
Packit |
fcad23 |
netsnmp_feature_require(iquery_pdu_session)
|
|
Packit |
fcad23 |
#endif /* NETSNMP_NO_WRITE_SUPPORT */
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
/** Initializes the alarmTable module */
|
|
Packit |
fcad23 |
void
|
|
Packit |
fcad23 |
init_alarmTable(void)
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* here we initialize all the tables we're planning on supporting
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
initialize_table_alarmTable();
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
/** Initialize the alarmTable table by defining its contents and how it's structured */
|
|
Packit |
fcad23 |
void
|
|
Packit |
fcad23 |
initialize_table_alarmTable(void)
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
static oid alarmTable_oid[] = { 1, 3, 6, 1, 2, 1, 16, 3, 1 };
|
|
Packit |
fcad23 |
size_t alarmTable_oid_len = OID_LENGTH(alarmTable_oid);
|
|
Packit |
fcad23 |
netsnmp_handler_registration *reg;
|
|
Packit |
fcad23 |
netsnmp_tdata *table_data;
|
|
Packit |
fcad23 |
netsnmp_table_registration_info *table_info;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
DEBUGMSGTL(( "rmon:alarmTable", "initialize_table_alarmTable called.\n"));
|
|
Packit |
fcad23 |
reg =
|
|
Packit |
fcad23 |
netsnmp_create_handler_registration("alarmTable",
|
|
Packit |
fcad23 |
alarmTable_handler,
|
|
Packit |
fcad23 |
alarmTable_oid,
|
|
Packit |
fcad23 |
alarmTable_oid_len,
|
|
Packit |
fcad23 |
HANDLER_CAN_RWRITE);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
table_data = netsnmp_tdata_create_table("alarmTable", 0);
|
|
Packit |
fcad23 |
table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
|
|
Packit |
fcad23 |
netsnmp_table_helper_add_indexes(table_info, ASN_INTEGER, /* index: alarmIndex */
|
|
Packit |
fcad23 |
0);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
table_info->min_column = COLUMN_ALARMINDEX;
|
|
Packit |
fcad23 |
table_info->max_column = COLUMN_ALARMSTATUS;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
netsnmp_tdata_register(reg, table_data, table_info);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* Initialise the contents of the table here
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
#define ALARM_STR1_LEN 32
|
|
Packit |
fcad23 |
typedef enum {
|
|
Packit |
fcad23 |
RMON1_ENTRY_VALID = 1,
|
|
Packit |
fcad23 |
RMON1_ENTRY_CREATE_REQUEST,
|
|
Packit |
fcad23 |
RMON1_ENTRY_UNDER_CREATION,
|
|
Packit |
fcad23 |
RMON1_ENTRY_INVALID
|
|
Packit |
fcad23 |
} RMON1_ENTRY_STATUS_T;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
typedef enum {
|
|
Packit |
fcad23 |
SAMPLE_TYPE_ABSOLUTE =
|
|
Packit |
fcad23 |
1,
|
|
Packit |
fcad23 |
SAMPLE_TYPE_DELTE
|
|
Packit |
fcad23 |
} SAMPLE_TYPE_T;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
typedef enum {
|
|
Packit |
fcad23 |
ALARM_NOTHING =
|
|
Packit |
fcad23 |
0,
|
|
Packit |
fcad23 |
ALARM_RISING,
|
|
Packit |
fcad23 |
ALARM_FALLING,
|
|
Packit |
fcad23 |
ALARM_BOTH
|
|
Packit |
fcad23 |
} ALARM_TYPE_T;
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* Typical data structure for a row entry
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
struct alarmTable_entry {
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* Index values
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
long alarmIndex;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* Column values
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
long alarmInterval;
|
|
Packit |
fcad23 |
long old_alarmInterval;
|
|
Packit |
fcad23 |
oid alarmVariable[ALARM_STR1_LEN];
|
|
Packit |
fcad23 |
size_t alarmVariable_len;
|
|
Packit |
fcad23 |
oid old_alarmVariable[ALARM_STR1_LEN];
|
|
Packit |
fcad23 |
size_t old_alarmVariable_len;
|
|
Packit |
fcad23 |
long alarmSampleType;
|
|
Packit |
fcad23 |
long old_alarmSampleType;
|
|
Packit |
fcad23 |
long alarmValue;
|
|
Packit |
fcad23 |
long alarmStartupAlarm;
|
|
Packit |
fcad23 |
long old_alarmStartupAlarm;
|
|
Packit |
fcad23 |
long alarmRisingThreshold;
|
|
Packit |
fcad23 |
long old_alarmRisingThreshold;
|
|
Packit |
fcad23 |
long alarmFallingThreshold;
|
|
Packit |
fcad23 |
long old_alarmFallingThreshold;
|
|
Packit |
fcad23 |
long alarmRisingEventIndex;
|
|
Packit |
fcad23 |
long old_alarmRisingEventIndex;
|
|
Packit |
fcad23 |
long alarmFallingEventIndex;
|
|
Packit |
fcad23 |
long old_alarmFallingEventIndex;
|
|
Packit |
fcad23 |
char alarmOwner[ALARM_STR1_LEN];
|
|
Packit |
fcad23 |
size_t alarmOwner_len;
|
|
Packit |
fcad23 |
char old_alarmOwner[ALARM_STR1_LEN];
|
|
Packit |
fcad23 |
size_t old_alarmOwner_len;
|
|
Packit |
fcad23 |
long alarmStatus;
|
|
Packit |
fcad23 |
long old_alarmStatus;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
int valid;
|
|
Packit |
fcad23 |
unsigned int alarm_reg;
|
|
Packit |
fcad23 |
netsnmp_session *session;
|
|
Packit |
fcad23 |
u_long last_abs_value;
|
|
Packit |
fcad23 |
ALARM_TYPE_T prev_alarm; /* NOTHING | RISING | FALLING */
|
|
Packit |
fcad23 |
};
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
void
|
|
Packit |
fcad23 |
alarmTable_run( unsigned int reg, void *clientarg)
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
struct alarmTable_entry *entry = (struct alarmTable_entry *)clientarg;
|
|
Packit |
fcad23 |
netsnmp_variable_list *var;
|
|
Packit |
fcad23 |
u_long new_value;
|
|
Packit |
fcad23 |
int rc;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if (!entry) {
|
|
Packit |
fcad23 |
snmp_alarm_unregister( reg );
|
|
Packit |
fcad23 |
return;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* Retrieve the requested MIB value(s)...
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
DEBUGMSGTL(( "rmon:alarmTable", "alarmTable_run called\n"));
|
|
Packit |
fcad23 |
var = (netsnmp_variable_list *)SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
|
|
Packit |
fcad23 |
if (!var) {
|
|
Packit |
fcad23 |
snmp_log(LOG_ERR,"failed to create alarmTable query varbind");
|
|
Packit |
fcad23 |
return;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
snmp_set_var_objid( var, entry->alarmVariable,
|
|
Packit |
fcad23 |
entry->alarmVariable_len );
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
rc = netsnmp_query_get( var, entry->session );
|
|
Packit |
fcad23 |
if ( rc != SNMP_ERR_NOERROR ) {
|
|
Packit |
fcad23 |
DEBUGMSGTL(( "rmon:alarmTable", "alarmVariable query failed (%d)\n", rc));
|
|
Packit |
fcad23 |
snmp_free_varbind(var);
|
|
Packit |
fcad23 |
return;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
switch (var->type) {
|
|
Packit |
fcad23 |
case ASN_INTEGER:
|
|
Packit |
fcad23 |
case ASN_COUNTER:
|
|
Packit |
fcad23 |
case ASN_TIMETICKS:
|
|
Packit |
fcad23 |
case ASN_GAUGE:
|
|
Packit |
fcad23 |
case ASN_COUNTER64:
|
|
Packit |
fcad23 |
new_value = *var->val.integer;
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
default:
|
|
Packit |
fcad23 |
DEBUGMSGTL(("rmon:alarmTable", "invalid type (%d)\n", var->type));
|
|
Packit |
fcad23 |
snmp_free_varbind(var);
|
|
Packit |
fcad23 |
return ;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
DEBUGMSGTL(("rmon:alarmTable", "alarmIndex.%ld last value (%ld)\n", entry->alarmIndex, entry->last_abs_value));
|
|
Packit |
fcad23 |
DEBUGMSGTL(("rmon:alarmTable", "alarmIndex.%ld new_value (%ld)\n", entry->alarmIndex, new_value));
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
entry->alarmValue = (SAMPLE_TYPE_ABSOLUTE == entry->alarmSampleType) ?
|
|
Packit |
fcad23 |
new_value : new_value - entry->last_abs_value;
|
|
Packit |
fcad23 |
entry->last_abs_value = new_value;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if (ALARM_RISING != entry->prev_alarm &&
|
|
Packit |
fcad23 |
entry->alarmValue >= entry->alarmRisingThreshold) {
|
|
Packit |
fcad23 |
if (SNMP_ERR_NOERROR == event_api_send_alarm(1, entry->alarmIndex,
|
|
Packit |
fcad23 |
entry->alarmRisingEventIndex,
|
|
Packit |
fcad23 |
entry->alarmVariable,
|
|
Packit |
fcad23 |
entry->alarmVariable_len,
|
|
Packit |
fcad23 |
entry->alarmSampleType,
|
|
Packit |
fcad23 |
entry->alarmValue,
|
|
Packit |
fcad23 |
entry->alarmRisingThreshold,
|
|
Packit |
fcad23 |
"Rising"))
|
|
Packit |
fcad23 |
entry->prev_alarm = ALARM_RISING;
|
|
Packit |
fcad23 |
else
|
|
Packit |
fcad23 |
snmp_log(LOG_ERR,"failed to send rising alarm\n");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
else if (ALARM_FALLING != entry->prev_alarm &&
|
|
Packit |
fcad23 |
entry->alarmValue <= entry->alarmFallingThreshold) {
|
|
Packit |
fcad23 |
if (SNMP_ERR_NOERROR == event_api_send_alarm(0, entry->alarmIndex,
|
|
Packit |
fcad23 |
entry->alarmFallingEventIndex,
|
|
Packit |
fcad23 |
entry->alarmVariable,
|
|
Packit |
fcad23 |
entry->alarmVariable_len,
|
|
Packit |
fcad23 |
entry->alarmSampleType,
|
|
Packit |
fcad23 |
entry->alarmValue,
|
|
Packit |
fcad23 |
entry->alarmFallingThreshold,
|
|
Packit |
fcad23 |
"Falling"))
|
|
Packit |
fcad23 |
entry->prev_alarm = ALARM_FALLING;
|
|
Packit |
fcad23 |
else
|
|
Packit |
fcad23 |
snmp_log(LOG_ERR,"failed to send falling alarm\n");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
else
|
|
Packit |
fcad23 |
DEBUGMSGTL(("rmon:alarmTable", "no alarm sent\n"));
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
snmp_free_varbind(var);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
void
|
|
Packit |
fcad23 |
alarmTable_enable( struct alarmTable_entry *entry )
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
if (!entry)
|
|
Packit |
fcad23 |
return;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
DEBUGMSGTL(( "rmon:alarmTable", "alarmTable_enable called.\n"));
|
|
Packit |
fcad23 |
if (entry->alarm_reg) {
|
|
Packit |
fcad23 |
snmp_alarm_unregister( entry->alarm_reg );
|
|
Packit |
fcad23 |
entry->alarm_reg = 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if (entry->alarmInterval) {
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* register once to run ASAP, and another to run
|
|
Packit |
fcad23 |
* at the trigger frequency
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
snmp_alarm_register(0, 0, alarmTable_run, entry );
|
|
Packit |
fcad23 |
entry->alarm_reg = snmp_alarm_register(
|
|
Packit |
fcad23 |
entry->alarmInterval, SA_REPEAT,
|
|
Packit |
fcad23 |
alarmTable_run, entry );
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
void
|
|
Packit |
fcad23 |
alarmTable_disable( struct alarmTable_entry *entry )
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
if (!entry)
|
|
Packit |
fcad23 |
return;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
DEBUGMSGTL(( "rmon:alarmTable", "alarmTable_disable called.\n"));
|
|
Packit |
fcad23 |
if (entry->alarm_reg) {
|
|
Packit |
fcad23 |
snmp_alarm_unregister( entry->alarm_reg );
|
|
Packit |
fcad23 |
entry->alarm_reg = 0;
|
|
Packit |
fcad23 |
/* XXX - perhaps release any previous results */
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* create a new row in the table
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
netsnmp_tdata_row *
|
|
Packit |
fcad23 |
alarmTable_createEntry(netsnmp_tdata * table_data, long alarmIndex)
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
struct alarmTable_entry *entry;
|
|
Packit |
fcad23 |
netsnmp_tdata_row *row;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
DEBUGMSGTL(( "rmon:alarmTable", "alarmTable_createEntry called.\n"));
|
|
Packit |
fcad23 |
entry = SNMP_MALLOC_TYPEDEF(struct alarmTable_entry);
|
|
Packit |
fcad23 |
if (!entry)
|
|
Packit |
fcad23 |
return NULL;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
row = netsnmp_tdata_create_row();
|
|
Packit |
fcad23 |
if (!row) {
|
|
Packit |
fcad23 |
SNMP_FREE(entry);
|
|
Packit |
fcad23 |
return NULL;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
row->data = entry;
|
|
Packit |
fcad23 |
entry->alarmIndex = alarmIndex;
|
|
Packit |
fcad23 |
entry->alarmInterval = 1;
|
|
Packit |
fcad23 |
entry->alarmSampleType = SAMPLE_TYPE_ABSOLUTE;
|
|
Packit |
fcad23 |
entry->alarmStartupAlarm = ALARM_BOTH;
|
|
Packit |
fcad23 |
entry->alarmRisingThreshold = 10;
|
|
Packit |
fcad23 |
entry->alarmFallingThreshold = 5;
|
|
Packit |
fcad23 |
entry->alarmRisingEventIndex = alarmIndex;
|
|
Packit |
fcad23 |
entry->alarmFallingEventIndex = alarmIndex;
|
|
Packit |
fcad23 |
entry->prev_alarm = ALARM_NOTHING;
|
|
Packit |
fcad23 |
netsnmp_tdata_row_add_index(row, ASN_INTEGER,
|
|
Packit |
fcad23 |
&(entry->alarmIndex),
|
|
Packit |
fcad23 |
sizeof(entry->alarmIndex));
|
|
Packit |
fcad23 |
netsnmp_tdata_add_row(table_data, row);
|
|
Packit |
fcad23 |
return row;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* remove a row from the table
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
void
|
|
Packit |
fcad23 |
alarmTable_removeEntry(netsnmp_tdata * table_data, netsnmp_tdata_row * row)
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
struct alarmTable_entry *entry;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
DEBUGMSGTL(( "rmon:alarmTable", "alarmTable_removeEntry called.\n"));
|
|
Packit |
fcad23 |
if (!row)
|
|
Packit |
fcad23 |
return; /* Nothing to remove */
|
|
Packit |
fcad23 |
entry = (struct alarmTable_entry *)
|
|
Packit |
fcad23 |
netsnmp_tdata_remove_and_delete_row(table_data, row);
|
|
Packit |
fcad23 |
if (entry) {
|
|
Packit |
fcad23 |
alarmTable_disable(entry);
|
|
Packit |
fcad23 |
SNMP_FREE(entry); /* XXX - release any other internal resources */
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
/** handles requests for the alarmTable table */
|
|
Packit |
fcad23 |
int
|
|
Packit |
fcad23 |
alarmTable_handler(netsnmp_mib_handler *handler,
|
|
Packit |
fcad23 |
netsnmp_handler_registration *reginfo,
|
|
Packit |
fcad23 |
netsnmp_agent_request_info *reqinfo,
|
|
Packit |
fcad23 |
netsnmp_request_info *requests)
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
netsnmp_request_info *request;
|
|
Packit |
fcad23 |
netsnmp_table_request_info *table_info;
|
|
Packit |
fcad23 |
netsnmp_tdata *table_data;
|
|
Packit |
fcad23 |
netsnmp_tdata_row *table_row;
|
|
Packit |
fcad23 |
struct alarmTable_entry *table_entry;
|
|
Packit |
fcad23 |
int ret;
|
|
Packit |
fcad23 |
netsnmp_session *sess = NULL;
|
|
Packit |
fcad23 |
char *secName;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
DEBUGMSGTL(( "rmon:alarmTable", "alarmTable_handler called.\n"));
|
|
Packit |
fcad23 |
switch (reqinfo->mode) {
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* Read-support (also covers GetNext requests)
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
case MODE_GET:
|
|
Packit |
fcad23 |
for (request = requests; request; request = request->next) {
|
|
Packit |
fcad23 |
table_entry = (struct alarmTable_entry *)
|
|
Packit |
fcad23 |
netsnmp_tdata_extract_entry(request);
|
|
Packit |
fcad23 |
table_info = netsnmp_extract_table_info(request);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
switch (table_info->colnum) {
|
|
Packit |
fcad23 |
case COLUMN_ALARMINDEX:
|
|
Packit |
fcad23 |
snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
|
|
Packit |
fcad23 |
table_entry->alarmIndex);
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMINTERVAL:
|
|
Packit |
fcad23 |
snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
|
|
Packit |
fcad23 |
table_entry->alarmInterval);
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMVARIABLE:
|
|
Packit |
fcad23 |
snmp_set_var_typed_value(request->requestvb, ASN_OBJECT_ID,
|
|
Packit |
fcad23 |
(u_char *) table_entry->
|
|
Packit |
fcad23 |
alarmVariable,
|
|
Packit |
fcad23 |
table_entry->alarmVariable_len *
|
|
Packit |
fcad23 |
sizeof(oid));
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMSAMPLETYPE:
|
|
Packit |
fcad23 |
snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
|
|
Packit |
fcad23 |
table_entry->alarmSampleType);
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMVALUE:
|
|
Packit |
fcad23 |
snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
|
|
Packit |
fcad23 |
table_entry->alarmValue);
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMSTARTUPALARM:
|
|
Packit |
fcad23 |
snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
|
|
Packit |
fcad23 |
table_entry->alarmStartupAlarm);
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMRISINGTHRESHOLD:
|
|
Packit |
fcad23 |
snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
|
|
Packit |
fcad23 |
table_entry->
|
|
Packit |
fcad23 |
alarmRisingThreshold);
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMFALLINGTHRESHOLD:
|
|
Packit |
fcad23 |
snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
|
|
Packit |
fcad23 |
table_entry->
|
|
Packit |
fcad23 |
alarmFallingThreshold);
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMRISINGEVENTINDEX:
|
|
Packit |
fcad23 |
snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
|
|
Packit |
fcad23 |
table_entry->
|
|
Packit |
fcad23 |
alarmRisingEventIndex);
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMFALLINGEVENTINDEX:
|
|
Packit |
fcad23 |
snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
|
|
Packit |
fcad23 |
table_entry->
|
|
Packit |
fcad23 |
alarmFallingEventIndex);
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMOWNER:
|
|
Packit |
fcad23 |
snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
|
|
Packit |
fcad23 |
(u_char *) table_entry->
|
|
Packit |
fcad23 |
alarmOwner,
|
|
Packit |
fcad23 |
table_entry->alarmOwner_len);
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMSTATUS:
|
|
Packit |
fcad23 |
snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
|
|
Packit |
fcad23 |
table_entry->alarmStatus);
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* Write-support
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
case MODE_SET_RESERVE1:
|
|
Packit |
fcad23 |
for (request = requests; request; request = request->next) {
|
|
Packit |
fcad23 |
table_entry = (struct alarmTable_entry *)
|
|
Packit |
fcad23 |
netsnmp_tdata_extract_entry(request);
|
|
Packit |
fcad23 |
table_info = netsnmp_extract_table_info(request);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
switch (table_info->colnum) {
|
|
Packit |
fcad23 |
case COLUMN_ALARMINTERVAL:
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* or possibly 'netsnmp_check_vb_int_range'
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
ret = netsnmp_check_vb_int(request->requestvb);
|
|
Packit |
fcad23 |
if (ret != SNMP_ERR_NOERROR) {
|
|
Packit |
fcad23 |
netsnmp_set_request_error(reqinfo, request, ret);
|
|
Packit |
fcad23 |
return SNMP_ERR_NOERROR;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMVARIABLE:
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* or possibly 'netsnmp_check_vb_type_and_max_size'
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMSAMPLETYPE:
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* or possibly 'netsnmp_check_vb_int_range'
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
ret = netsnmp_check_vb_int(request->requestvb);
|
|
Packit |
fcad23 |
if (ret != SNMP_ERR_NOERROR) {
|
|
Packit |
fcad23 |
netsnmp_set_request_error(reqinfo, request, ret);
|
|
Packit |
fcad23 |
return SNMP_ERR_NOERROR;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMSTARTUPALARM:
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* or possibly 'netsnmp_check_vb_int_range'
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
ret = netsnmp_check_vb_int(request->requestvb);
|
|
Packit |
fcad23 |
if (ret != SNMP_ERR_NOERROR) {
|
|
Packit |
fcad23 |
netsnmp_set_request_error(reqinfo, request, ret);
|
|
Packit |
fcad23 |
return SNMP_ERR_NOERROR;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMRISINGTHRESHOLD:
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* or possibly 'netsnmp_check_vb_int_range'
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
ret = netsnmp_check_vb_int(request->requestvb);
|
|
Packit |
fcad23 |
if (ret != SNMP_ERR_NOERROR) {
|
|
Packit |
fcad23 |
netsnmp_set_request_error(reqinfo, request, ret);
|
|
Packit |
fcad23 |
return SNMP_ERR_NOERROR;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMFALLINGTHRESHOLD:
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* or possibly 'netsnmp_check_vb_int_range'
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
ret = netsnmp_check_vb_int(request->requestvb);
|
|
Packit |
fcad23 |
if (ret != SNMP_ERR_NOERROR) {
|
|
Packit |
fcad23 |
netsnmp_set_request_error(reqinfo, request, ret);
|
|
Packit |
fcad23 |
return SNMP_ERR_NOERROR;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMRISINGEVENTINDEX:
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* or possibly 'netsnmp_check_vb_int_range'
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
ret = netsnmp_check_vb_int(request->requestvb);
|
|
Packit |
fcad23 |
if (ret != SNMP_ERR_NOERROR) {
|
|
Packit |
fcad23 |
netsnmp_set_request_error(reqinfo, request, ret);
|
|
Packit |
fcad23 |
return SNMP_ERR_NOERROR;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMFALLINGEVENTINDEX:
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* or possibly 'netsnmp_check_vb_int_range'
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
ret = netsnmp_check_vb_int(request->requestvb);
|
|
Packit |
fcad23 |
if (ret != SNMP_ERR_NOERROR) {
|
|
Packit |
fcad23 |
netsnmp_set_request_error(reqinfo, request, ret);
|
|
Packit |
fcad23 |
return SNMP_ERR_NOERROR;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMOWNER:
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* or possibly 'netsnmp_check_vb_type_and_max_size'
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMSTATUS:
|
|
Packit |
fcad23 |
/*
|
|
Packit |
fcad23 |
* or possibly 'netsnmp_check_vb_int_range'
|
|
Packit |
fcad23 |
*/
|
|
Packit |
fcad23 |
ret = netsnmp_check_vb_int(request->requestvb);
|
|
Packit |
fcad23 |
if (ret != SNMP_ERR_NOERROR) {
|
|
Packit |
fcad23 |
netsnmp_set_request_error(reqinfo, request, ret);
|
|
Packit |
fcad23 |
return SNMP_ERR_NOERROR;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
default:
|
|
Packit |
fcad23 |
netsnmp_set_request_error(reqinfo, request,
|
|
Packit |
fcad23 |
SNMP_ERR_NOTWRITABLE);
|
|
Packit |
fcad23 |
return SNMP_ERR_NOERROR;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
case MODE_SET_RESERVE2:
|
|
Packit |
fcad23 |
for (request = requests; request; request = request->next) {
|
|
Packit |
fcad23 |
table_row = netsnmp_tdata_extract_row(request);
|
|
Packit |
fcad23 |
table_data = netsnmp_tdata_extract_table(request);
|
|
Packit |
fcad23 |
table_info = netsnmp_extract_table_info(request);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
switch (table_info->colnum) {
|
|
Packit |
fcad23 |
case COLUMN_ALARMINTERVAL:
|
|
Packit |
fcad23 |
case COLUMN_ALARMVARIABLE:
|
|
Packit |
fcad23 |
case COLUMN_ALARMSAMPLETYPE:
|
|
Packit |
fcad23 |
case COLUMN_ALARMSTARTUPALARM:
|
|
Packit |
fcad23 |
case COLUMN_ALARMRISINGTHRESHOLD:
|
|
Packit |
fcad23 |
case COLUMN_ALARMFALLINGTHRESHOLD:
|
|
Packit |
fcad23 |
case COLUMN_ALARMRISINGEVENTINDEX:
|
|
Packit |
fcad23 |
case COLUMN_ALARMFALLINGEVENTINDEX:
|
|
Packit |
fcad23 |
case COLUMN_ALARMOWNER:
|
|
Packit |
fcad23 |
case COLUMN_ALARMSTATUS:
|
|
Packit |
fcad23 |
if (!table_row) {
|
|
Packit |
fcad23 |
table_row =
|
|
Packit |
fcad23 |
alarmTable_createEntry(table_data,
|
|
Packit |
fcad23 |
*table_info->indexes->val.
|
|
Packit |
fcad23 |
integer);
|
|
Packit |
fcad23 |
if (table_row) {
|
|
Packit |
fcad23 |
netsnmp_insert_tdata_row(request, table_row);
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
netsnmp_set_request_error(reqinfo, request,
|
|
Packit |
fcad23 |
SNMP_ERR_RESOURCEUNAVAILABLE);
|
|
Packit |
fcad23 |
return SNMP_ERR_NOERROR;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
case MODE_SET_FREE:
|
|
Packit |
fcad23 |
for (request = requests; request; request = request->next) {
|
|
Packit |
fcad23 |
table_entry = (struct alarmTable_entry *)
|
|
Packit |
fcad23 |
netsnmp_tdata_extract_entry(request);
|
|
Packit |
fcad23 |
table_row = netsnmp_tdata_extract_row(request);
|
|
Packit |
fcad23 |
table_data = netsnmp_tdata_extract_table(request);
|
|
Packit |
fcad23 |
table_info = netsnmp_extract_table_info(request);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
switch (table_info->colnum) {
|
|
Packit |
fcad23 |
case COLUMN_ALARMINTERVAL:
|
|
Packit |
fcad23 |
case COLUMN_ALARMVARIABLE:
|
|
Packit |
fcad23 |
case COLUMN_ALARMSAMPLETYPE:
|
|
Packit |
fcad23 |
case COLUMN_ALARMSTARTUPALARM:
|
|
Packit |
fcad23 |
case COLUMN_ALARMRISINGTHRESHOLD:
|
|
Packit |
fcad23 |
case COLUMN_ALARMFALLINGTHRESHOLD:
|
|
Packit |
fcad23 |
case COLUMN_ALARMRISINGEVENTINDEX:
|
|
Packit |
fcad23 |
case COLUMN_ALARMFALLINGEVENTINDEX:
|
|
Packit |
fcad23 |
case COLUMN_ALARMOWNER:
|
|
Packit |
fcad23 |
case COLUMN_ALARMSTATUS:
|
|
Packit |
fcad23 |
if (table_entry && !table_entry->valid) {
|
|
Packit |
fcad23 |
alarmTable_removeEntry(table_data, table_row);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
case MODE_SET_ACTION:
|
|
Packit |
fcad23 |
for (request = requests; request; request = request->next) {
|
|
Packit |
fcad23 |
table_entry = (struct alarmTable_entry *)
|
|
Packit |
fcad23 |
netsnmp_tdata_extract_entry(request);
|
|
Packit |
fcad23 |
table_info = netsnmp_extract_table_info(request);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
switch (table_info->colnum) {
|
|
Packit |
fcad23 |
case COLUMN_ALARMINTERVAL:
|
|
Packit |
fcad23 |
table_entry->old_alarmInterval =
|
|
Packit |
fcad23 |
table_entry->alarmInterval;
|
|
Packit |
fcad23 |
table_entry->alarmInterval =
|
|
Packit |
fcad23 |
*request->requestvb->val.integer;
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMVARIABLE:
|
|
Packit |
fcad23 |
table_entry->alarmVariable_len =
|
|
Packit |
fcad23 |
request->requestvb->val_len / sizeof(oid);
|
|
Packit |
fcad23 |
memset(table_entry->alarmVariable, 0,
|
|
Packit |
fcad23 |
sizeof(table_entry->alarmVariable));
|
|
Packit |
fcad23 |
memcpy(table_entry->alarmVariable,
|
|
Packit |
fcad23 |
request->requestvb->val.objid,
|
|
Packit |
fcad23 |
request->requestvb->val_len);
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMSAMPLETYPE:
|
|
Packit |
fcad23 |
table_entry->old_alarmSampleType =
|
|
Packit |
fcad23 |
table_entry->alarmSampleType;
|
|
Packit |
fcad23 |
table_entry->alarmSampleType =
|
|
Packit |
fcad23 |
*request->requestvb->val.integer;
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMSTARTUPALARM:
|
|
Packit |
fcad23 |
table_entry->old_alarmStartupAlarm =
|
|
Packit |
fcad23 |
table_entry->alarmStartupAlarm;
|
|
Packit |
fcad23 |
table_entry->alarmStartupAlarm =
|
|
Packit |
fcad23 |
*request->requestvb->val.integer;
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMRISINGTHRESHOLD:
|
|
Packit |
fcad23 |
table_entry->old_alarmRisingThreshold =
|
|
Packit |
fcad23 |
table_entry->alarmRisingThreshold;
|
|
Packit |
fcad23 |
table_entry->alarmRisingThreshold =
|
|
Packit |
fcad23 |
*request->requestvb->val.integer;
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMFALLINGTHRESHOLD:
|
|
Packit |
fcad23 |
table_entry->old_alarmFallingThreshold =
|
|
Packit |
fcad23 |
table_entry->alarmFallingThreshold;
|
|
Packit |
fcad23 |
table_entry->alarmFallingThreshold =
|
|
Packit |
fcad23 |
*request->requestvb->val.integer;
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMRISINGEVENTINDEX:
|
|
Packit |
fcad23 |
table_entry->old_alarmRisingEventIndex =
|
|
Packit |
fcad23 |
table_entry->alarmRisingEventIndex;
|
|
Packit |
fcad23 |
table_entry->alarmRisingEventIndex =
|
|
Packit |
fcad23 |
*request->requestvb->val.integer;
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMFALLINGEVENTINDEX:
|
|
Packit |
fcad23 |
table_entry->old_alarmFallingEventIndex =
|
|
Packit |
fcad23 |
table_entry->alarmFallingEventIndex;
|
|
Packit |
fcad23 |
table_entry->alarmFallingEventIndex =
|
|
Packit |
fcad23 |
*request->requestvb->val.integer;
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMOWNER:
|
|
Packit |
fcad23 |
memcpy(table_entry->old_alarmOwner,
|
|
Packit |
fcad23 |
table_entry->alarmOwner,
|
|
Packit |
fcad23 |
sizeof(table_entry->alarmOwner));
|
|
Packit |
fcad23 |
table_entry->old_alarmOwner_len =
|
|
Packit |
fcad23 |
table_entry->alarmOwner_len;
|
|
Packit |
fcad23 |
memset(table_entry->alarmOwner, 0,
|
|
Packit |
fcad23 |
sizeof(table_entry->alarmOwner));
|
|
Packit |
fcad23 |
memcpy(table_entry->alarmOwner,
|
|
Packit |
fcad23 |
request->requestvb->val.string,
|
|
Packit |
fcad23 |
request->requestvb->val_len);
|
|
Packit |
fcad23 |
table_entry->alarmOwner_len = request->requestvb->val_len;
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMSTATUS:
|
|
Packit |
fcad23 |
table_entry->old_alarmStatus = table_entry->alarmStatus;
|
|
Packit |
fcad23 |
table_entry->alarmStatus =
|
|
Packit |
fcad23 |
*request->requestvb->val.integer;
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
case MODE_SET_UNDO:
|
|
Packit |
fcad23 |
for (request = requests; request; request = request->next) {
|
|
Packit |
fcad23 |
table_entry = (struct alarmTable_entry *)
|
|
Packit |
fcad23 |
netsnmp_tdata_extract_entry(request);
|
|
Packit |
fcad23 |
table_row = netsnmp_tdata_extract_row(request);
|
|
Packit |
fcad23 |
table_data = netsnmp_tdata_extract_table(request);
|
|
Packit |
fcad23 |
table_info = netsnmp_extract_table_info(request);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
switch (table_info->colnum) {
|
|
Packit |
fcad23 |
case COLUMN_ALARMINTERVAL:
|
|
Packit |
fcad23 |
if (table_entry && !table_entry->valid) {
|
|
Packit |
fcad23 |
alarmTable_removeEntry(table_data, table_row);
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
table_entry->alarmInterval =
|
|
Packit |
fcad23 |
table_entry->old_alarmInterval;
|
|
Packit |
fcad23 |
table_entry->old_alarmInterval = 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMVARIABLE:
|
|
Packit |
fcad23 |
if (table_entry && !table_entry->valid) {
|
|
Packit |
fcad23 |
alarmTable_removeEntry(table_data, table_row);
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
memcpy(table_entry->alarmVariable,
|
|
Packit |
fcad23 |
table_entry->old_alarmVariable,
|
|
Packit |
fcad23 |
sizeof(table_entry->alarmVariable));
|
|
Packit |
fcad23 |
memset(table_entry->old_alarmVariable, 0,
|
|
Packit |
fcad23 |
sizeof(table_entry->alarmVariable));
|
|
Packit |
fcad23 |
table_entry->alarmVariable_len =
|
|
Packit |
fcad23 |
table_entry->old_alarmVariable_len;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMSAMPLETYPE:
|
|
Packit |
fcad23 |
if (table_entry && !table_entry->valid) {
|
|
Packit |
fcad23 |
alarmTable_removeEntry(table_data, table_row);
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
table_entry->alarmSampleType =
|
|
Packit |
fcad23 |
table_entry->old_alarmSampleType;
|
|
Packit |
fcad23 |
table_entry->old_alarmSampleType = 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMSTARTUPALARM:
|
|
Packit |
fcad23 |
if (table_entry && !table_entry->valid) {
|
|
Packit |
fcad23 |
alarmTable_removeEntry(table_data, table_row);
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
table_entry->alarmStartupAlarm =
|
|
Packit |
fcad23 |
table_entry->old_alarmStartupAlarm;
|
|
Packit |
fcad23 |
table_entry->old_alarmStartupAlarm = 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMRISINGTHRESHOLD:
|
|
Packit |
fcad23 |
if (table_entry && !table_entry->valid) {
|
|
Packit |
fcad23 |
alarmTable_removeEntry(table_data, table_row);
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
table_entry->alarmRisingThreshold =
|
|
Packit |
fcad23 |
table_entry->old_alarmRisingThreshold;
|
|
Packit |
fcad23 |
table_entry->old_alarmRisingThreshold = 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMFALLINGTHRESHOLD:
|
|
Packit |
fcad23 |
if (table_entry && !table_entry->valid) {
|
|
Packit |
fcad23 |
alarmTable_removeEntry(table_data, table_row);
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
table_entry->alarmFallingThreshold =
|
|
Packit |
fcad23 |
table_entry->old_alarmFallingThreshold;
|
|
Packit |
fcad23 |
table_entry->old_alarmFallingThreshold = 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMRISINGEVENTINDEX:
|
|
Packit |
fcad23 |
if (table_entry && !table_entry->valid) {
|
|
Packit |
fcad23 |
alarmTable_removeEntry(table_data, table_row);
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
table_entry->alarmRisingEventIndex =
|
|
Packit |
fcad23 |
table_entry->old_alarmRisingEventIndex;
|
|
Packit |
fcad23 |
table_entry->old_alarmRisingEventIndex = 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMFALLINGEVENTINDEX:
|
|
Packit |
fcad23 |
if (table_entry && !table_entry->valid) {
|
|
Packit |
fcad23 |
alarmTable_removeEntry(table_data, table_row);
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
table_entry->alarmFallingEventIndex =
|
|
Packit |
fcad23 |
table_entry->old_alarmFallingEventIndex;
|
|
Packit |
fcad23 |
table_entry->old_alarmFallingEventIndex = 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMOWNER:
|
|
Packit |
fcad23 |
if (table_entry && !table_entry->valid) {
|
|
Packit |
fcad23 |
alarmTable_removeEntry(table_data, table_row);
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
memcpy(table_entry->alarmOwner,
|
|
Packit |
fcad23 |
table_entry->old_alarmOwner,
|
|
Packit |
fcad23 |
sizeof(table_entry->alarmOwner));
|
|
Packit |
fcad23 |
memset(table_entry->old_alarmOwner, 0,
|
|
Packit |
fcad23 |
sizeof(table_entry->alarmOwner));
|
|
Packit |
fcad23 |
table_entry->alarmOwner_len =
|
|
Packit |
fcad23 |
table_entry->old_alarmOwner_len;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMSTATUS:
|
|
Packit |
fcad23 |
if (table_entry && !table_entry->valid) {
|
|
Packit |
fcad23 |
alarmTable_removeEntry(table_data, table_row);
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
table_entry->alarmStatus =
|
|
Packit |
fcad23 |
table_entry->old_alarmStatus;
|
|
Packit |
fcad23 |
table_entry->old_alarmStatus = 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
case MODE_SET_COMMIT:
|
|
Packit |
fcad23 |
for (request = requests; request; request = request->next) {
|
|
Packit |
fcad23 |
table_entry = (struct alarmTable_entry *)
|
|
Packit |
fcad23 |
netsnmp_tdata_extract_entry(request);
|
|
Packit |
fcad23 |
table_info = netsnmp_extract_table_info(request);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
switch (table_info->colnum) {
|
|
Packit |
fcad23 |
case COLUMN_ALARMINTERVAL:
|
|
Packit |
fcad23 |
case COLUMN_ALARMVARIABLE:
|
|
Packit |
fcad23 |
case COLUMN_ALARMSAMPLETYPE:
|
|
Packit |
fcad23 |
case COLUMN_ALARMSTARTUPALARM:
|
|
Packit |
fcad23 |
case COLUMN_ALARMRISINGTHRESHOLD:
|
|
Packit |
fcad23 |
case COLUMN_ALARMFALLINGTHRESHOLD:
|
|
Packit |
fcad23 |
case COLUMN_ALARMRISINGEVENTINDEX:
|
|
Packit |
fcad23 |
case COLUMN_ALARMFALLINGEVENTINDEX:
|
|
Packit |
fcad23 |
case COLUMN_ALARMOWNER:
|
|
Packit |
fcad23 |
if (table_entry && !table_entry->valid) {
|
|
Packit |
fcad23 |
table_entry->valid = 1;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case COLUMN_ALARMSTATUS:
|
|
Packit |
fcad23 |
switch (*request->requestvb->val.integer) {
|
|
Packit |
fcad23 |
case RMON1_ENTRY_VALID:
|
|
Packit |
fcad23 |
alarmTable_enable( table_entry );
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case RMON1_ENTRY_UNDER_CREATION:
|
|
Packit |
fcad23 |
alarmTable_disable( table_entry );
|
|
Packit |
fcad23 |
#if 0
|
|
Packit |
fcad23 |
table_entry->session = (netsnmp_session *)
|
|
Packit |
fcad23 |
netsnmp_iquery_pdu_session(reqinfo->asp->pdu);
|
|
Packit |
fcad23 |
#else
|
|
Packit |
fcad23 |
secName = netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
|
|
Packit |
fcad23 |
NETSNMP_DS_AGENT_INTERNAL_SECNAME);
|
|
Packit |
fcad23 |
if (secName) {
|
|
Packit |
fcad23 |
sess = netsnmp_iquery_user_session(secName);
|
|
Packit |
fcad23 |
netsnmp_query_set_default_session(sess);
|
|
Packit |
fcad23 |
DEBUGMSGTL(("rmon:alarmTable", "user name %s\n", secName));
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
snmp_log(LOG_ERR, "user name %s not found\n", secName);
|
|
Packit |
fcad23 |
config_perror("Unknown user name\n");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if (NULL == sess) {
|
|
Packit |
fcad23 |
sess = netsnmp_query_get_default_session();
|
|
Packit |
fcad23 |
if (NULL == sess) {
|
|
Packit |
fcad23 |
config_perror
|
|
Packit |
fcad23 |
("You must specify a default user name using the agentSecName token\n");
|
|
Packit |
fcad23 |
return SNMP_ERR_NOERROR;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
#endif
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
case RMON1_ENTRY_INVALID:
|
|
Packit |
fcad23 |
table_row = netsnmp_tdata_extract_row(request);
|
|
Packit |
fcad23 |
table_data = netsnmp_tdata_extract_table(request);
|
|
Packit |
fcad23 |
alarmTable_removeEntry(table_data, table_row);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
break;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
return SNMP_ERR_NOERROR;
|
|
Packit |
fcad23 |
}
|