⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alarm.c

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 C
📖 第 1 页 / 共 2 页
字号:
        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 + -