int alarm_Activate(RMON_ENTRY_T * eptr) { CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body; int ierr; #if 0 /* KUKU */ kuku_sum = 0; kuku_cnt = 0; #endif ierr = fetch_var_val(body->var_name.objid, body->var_name.length, &body->last_abs_value); if (SNMP_ERR_NOERROR != ierr) { ag_trace("Can't fetch var_name"); 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; }
static void alarm_check_var (unsigned int clientreg, void *clientarg) { RMON_ENTRY_T *hdr_ptr; CRTL_ENTRY_T *body; u_long new_value; int ierr; hdr_ptr = (RMON_ENTRY_T *) clientarg; if (!hdr_ptr) { ag_trace ("Err: history_get_backet: hdr_ptr=NULL ? (Inserted in shock)"); return; } body = (CRTL_ENTRY_T *) hdr_ptr->body; if (!body) { ag_trace ("Err: history_get_backet: body=NULL ? (Inserted in shock)"); return; } if (RMON1_ENTRY_VALID != hdr_ptr->status) { ag_trace ("Err: history_get_backet when entry %d is not valid ?!!", (int) hdr_ptr->ctrl_index); snmp_alarm_unregister (body->timer_id); return; } ierr = fetch_var_val (body->var_name.objid, body->var_name.length, &new_value); if (SNMP_ERR_NOERROR != ierr) { ag_trace ("Err: Can't fetch var_name"); return; } body->value = (SAMPLE_TYPE_ABSOLUTE == body->sample_type) ? new_value : new_value - body->last_abs_value; body->last_abs_value = new_value; /* * ag_trace ("fetched value=%ld check %ld", (long) new_value, (long) body->value); */ #if 0 /* KUKU */ kuku_sum += body->value; kuku_cnt++; #endif if (ALARM_RISING != body->prev_alarm && body->value >= body->rising_threshold && SNMP_ERR_NOERROR == event_api_send_alarm (1, hdr_ptr->ctrl_index, body->rising_event_index, body->var_name.objid, body->var_name.length, ALARM_RISING, body->value, body->rising_threshold, "Rising")) body->prev_alarm = ALARM_RISING; else if (ALARM_FALLING != body->prev_alarm && body->value <= body->falling_threshold && SNMP_ERR_NOERROR == event_api_send_alarm (0, hdr_ptr->ctrl_index, body->falling_event_index, body->var_name.objid, body->var_name.length, ALARM_RISING, body->value, body->falling_threshold, "Falling")) body->prev_alarm = ALARM_FALLING; }