📄 alarm.c
字号:
return ierr; } if (SAMPLE_TYPE_ABSOLUTE != body->sample_type) { /* * check startup alarm */ if (ALARM_RISING == body->startup_type || ALARM_BOTH == body->startup_type) { if (body->last_abs_value >= body->rising_threshold) { event_api_send_alarm(1, eptr->ctrl_index, body->rising_event_index, body->var_name.objid, body->var_name.length, ALARM_RISING, body->value, body->rising_threshold, "Startup Rising"); } } if (ALARM_FALLING == body->startup_type || ALARM_BOTH == body->startup_type) { if (body->last_abs_value <= body->falling_threshold) { event_api_send_alarm(0, eptr->ctrl_index, body->falling_event_index, body->var_name.objid, body->var_name.length, ALARM_RISING, body->value, body->falling_threshold, "Startup Falling"); } } } body->timer_id = snmp_alarm_register(body->interval, SA_REPEAT, alarm_check_var, eptr); return 0;}intalarm_Deactivate(RMON_ENTRY_T * eptr){ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body; snmp_alarm_unregister(body->timer_id);#if 0 /* KUKU */ ag_trace("kuku_sum=%ld kuku_cnt=%ld sp=%ld", (long) kuku_sum, (long) kuku_cnt, (long) (kuku_sum / kuku_cnt));#endif return 0;}intalarm_Copy(RMON_ENTRY_T * eptr){ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body; CRTL_ENTRY_T *clone = (CRTL_ENTRY_T *) eptr->tmp; if (RMON1_ENTRY_VALID == eptr->status && clone->rising_threshold <= clone->falling_threshold) { ag_trace("alarm_Copy failed: invalid thresholds"); return SNMP_ERR_BADVALUE; } if (clone->interval != body->interval) { if (RMON1_ENTRY_VALID == eptr->status) { snmp_alarm_unregister(body->timer_id); body->timer_id = snmp_alarm_register(clone->interval, SA_REPEAT, alarm_check_var, eptr); } body->interval = clone->interval; } if (snmp_oid_compare(clone->var_name.objid, clone->var_name.length, body->var_name.objid, body->var_name.length)) { memcpy(&body->var_name, &clone->var_name, sizeof(VAR_OID_T)); } body->sample_type = clone->sample_type; body->startup_type = clone->startup_type; body->sample_type = clone->sample_type; body->rising_threshold = clone->rising_threshold; body->falling_threshold = clone->falling_threshold; body->rising_event_index = clone->rising_event_index; body->falling_event_index = clone->falling_event_index; /* * ag_trace ("alarm_Copy: rising_threshold=%lu falling_threshold=%lu", * body->rising_threshold, body->falling_threshold); */ return 0;}static intwrite_alarmEntry(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){ long long_tmp; int leaf_id, snmp_status; static int prev_action = COMMIT; RMON_ENTRY_T *hdr; CRTL_ENTRY_T *cloned_body; CRTL_ENTRY_T *body; switch (action) { case RESERVE1: case FREE: case UNDO: case ACTION: case COMMIT: default: return ROWAPI_do_another_action(name, alarmEntryFirstIndexBegin, action, &prev_action, table_ptr, sizeof(CRTL_ENTRY_T)); case RESERVE2: /* * get values from PDU, check them and save them in the cloned entry */ long_tmp = name[alarmEntryFirstIndexBegin]; leaf_id = (int) name[alarmEntryFirstIndexBegin - 1]; hdr = ROWAPI_find(table_ptr, long_tmp); /* it MUST be OK */ cloned_body = (CRTL_ENTRY_T *) hdr->tmp; body = (CRTL_ENTRY_T *) hdr->body; switch (leaf_id) { case IDalarmInterval: snmp_status = AGUTIL_get_int_value(var_val, var_val_type, var_val_len, 0, MMM_MAX, &long_tmp); if (SNMP_ERR_NOERROR != snmp_status) { return snmp_status; } cloned_body->interval = long_tmp; break; case IDalarmVariable: snmp_status = AGUTIL_get_oid_value(var_val, var_val_type, var_val_len, &cloned_body->var_name); if (SNMP_ERR_NOERROR != snmp_status) { return snmp_status; } if (RMON1_ENTRY_UNDER_CREATION != hdr->status && snmp_oid_compare(cloned_body->var_name.objid, cloned_body->var_name.length, body->var_name.objid, body->var_name.length)) return SNMP_ERR_BADVALUE; break; break; case IDalarmSampleType: snmp_status = AGUTIL_get_int_value(var_val, var_val_type, var_val_len, SAMPLE_TYPE_ABSOLUTE, SAMPLE_TYPE_DELTE, &long_tmp); if (SNMP_ERR_NOERROR != snmp_status) { return snmp_status; } cloned_body->sample_type = long_tmp; break; case IDalarmStartupAlarm: snmp_status = AGUTIL_get_int_value(var_val, var_val_type, var_val_len, ALARM_RISING, ALARM_BOTH, &long_tmp); if (SNMP_ERR_NOERROR != snmp_status) { return snmp_status; } cloned_body->startup_type = long_tmp; break; case IDalarmRisingThreshold: snmp_status = AGUTIL_get_int_value(var_val, var_val_type, var_val_len, 0, MMM_MAX, &long_tmp); if (SNMP_ERR_NOERROR != snmp_status) { return snmp_status; } cloned_body->rising_threshold = long_tmp; break; case IDalarmFallingThreshold: snmp_status = AGUTIL_get_int_value(var_val, var_val_type, var_val_len, 0, 0xFFFFFFFFl, &long_tmp); if (SNMP_ERR_NOERROR != snmp_status) { return snmp_status; } cloned_body->falling_threshold = long_tmp; break; case IDalarmRisingEventIndex: snmp_status = AGUTIL_get_int_value(var_val, var_val_type, var_val_len, 0, /* min. value */ 0, /* max. value */ &long_tmp); if (SNMP_ERR_NOERROR != snmp_status) { return snmp_status; } cloned_body->rising_event_index = long_tmp; break; case IDalarmFallingEventIndex: snmp_status = AGUTIL_get_int_value(var_val, var_val_type, var_val_len, 0, /* min. value */ 0, /* max. value */ &long_tmp); if (SNMP_ERR_NOERROR != snmp_status) { return snmp_status; } cloned_body->falling_event_index = long_tmp; break; case IDalarmOwner: if (hdr->new_owner) AGFREE(hdr->new_owner); hdr->new_owner = AGMALLOC(MAX_OWNERSTRING);; if (!hdr->new_owner) return SNMP_ERR_TOOBIG; snmp_status = AGUTIL_get_string_value(var_val, var_val_type, var_val_len, MAX_OWNERSTRING, 1, NULL, hdr->new_owner); if (SNMP_ERR_NOERROR != snmp_status) { return snmp_status; } break; case IDalarmStatus: snmp_status = AGUTIL_get_int_value(var_val, var_val_type, var_val_len, RMON1_ENTRY_VALID, RMON1_ENTRY_INVALID, &long_tmp); if (SNMP_ERR_NOERROR != snmp_status) { return snmp_status; } hdr->new_status = long_tmp; break; default: ag_trace("%s:unknown leaf_id=%d\n", table_ptr->name, (int) leaf_id); return SNMP_ERR_NOSUCHNAME; } /* of switch by 'leaf_id' */ break; } /* of switch by actions */ prev_action = action; return SNMP_ERR_NOERROR;}u_char *var_alarmEntry(struct variable * vp, oid * name, size_t * length, int exact, size_t * var_len, WriteMethod ** write_method){ static long long_return; static CRTL_ENTRY_T theEntry; RMON_ENTRY_T *hdr; *write_method = write_alarmEntry; hdr = ROWAPI_header_ControlEntry(vp, name, length, exact, var_len, table_ptr, &theEntry, sizeof(CRTL_ENTRY_T)); if (!hdr) return NULL; *var_len = sizeof(long); /* default */ switch (vp->magic) { case IDalarmIndex: long_return = hdr->ctrl_index; return (u_char *) & long_return; case IDalarmInterval: long_return = theEntry.interval; return (u_char *) & long_return; case IDalarmVariable: *var_len = sizeof(oid) * theEntry.var_name.length; return (unsigned char *) theEntry.var_name.objid; return (u_char *) & long_return; case IDalarmSampleType: long_return = theEntry.sample_type; return (u_char *) & long_return; case IDalarmValue: long_return = theEntry.value; return (u_char *) & long_return; case IDalarmStartupAlarm: long_return = theEntry.startup_type; return (u_char *) & long_return; case IDalarmRisingThreshold: long_return = theEntry.rising_threshold; return (u_char *) & long_return; case IDalarmFallingThreshold: long_return = theEntry.falling_threshold; return (u_char *) & long_return; case IDalarmRisingEventIndex: long_return = theEntry.rising_event_index; return (u_char *) & long_return; case IDalarmFallingEventIndex: long_return = theEntry.falling_event_index; return (u_char *) & long_return; case IDalarmOwner: if (hdr->owner) { *var_len = strlen(hdr->owner); return (unsigned char *) hdr->owner; } else { *var_len = 0; return (unsigned char *) ""; } case IDalarmStatus: long_return = hdr->status; return (u_char *) & long_return; default: ag_trace("%s: unknown vp->magic=%d", table_ptr->name, (int) vp->magic); ERROR_MSG(""); }; /* of switch by 'vp->magic' */ return NULL;}/* * Registration & Initializatio section */oid oidalarmVariablesOid[] = { 1, 3, 6, 1, 2, 1, 16, 3 };struct variable7 oidalarmVariables[] = { {IDalarmIndex, ASN_INTEGER, RONLY, var_alarmEntry, 3, {1, 1, 1}}, {IDalarmInterval, ASN_INTEGER, RWRITE, var_alarmEntry, 3, {1, 1, 2}}, {IDalarmVariable, ASN_OBJECT_ID, RWRITE, var_alarmEntry, 3, {1, 1, 3}}, {IDalarmSampleType, ASN_INTEGER, RWRITE, var_alarmEntry, 3, {1, 1, 4}}, {IDalarmValue, ASN_INTEGER, RONLY, var_alarmEntry, 3, {1, 1, 5}}, {IDalarmStartupAlarm, ASN_INTEGER, RWRITE, var_alarmEntry, 3, {1, 1, 6}}, {IDalarmRisingThreshold, ASN_INTEGER, RWRITE, var_alarmEntry, 3, {1, 1, 7}}, {IDalarmFallingThreshold, ASN_INTEGER, RWRITE, var_alarmEntry, 3, {1, 1, 8}}, {IDalarmRisingEventIndex, ASN_INTEGER, RWRITE, var_alarmEntry, 3, {1, 1, 9}}, {IDalarmFallingEventIndex, ASN_INTEGER, RWRITE, var_alarmEntry, 3, {1, 1, 10}}, {IDalarmOwner, ASN_OCTET_STR, RWRITE, var_alarmEntry, 3, {1, 1, 11}}, {IDalarmStatus, ASN_INTEGER, RWRITE, var_alarmEntry, 3, {1, 1, 12}}};voidinit_alarm(void){ REGISTER_MIB("alarmTable", oidalarmVariables, variable7, oidalarmVariablesOid); ROWAPI_init_table(&AlarmCtrlTable, "Alarm", 0, &alarm_Create, NULL, /* &alarm_Clone, */ NULL, /* &alarm_Delete, */ &alarm_Validate, &alarm_Activate, &alarm_Deactivate, &alarm_Copy);}/* * end of file alarm.c */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -