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

📄 mtetriggerconf.c

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 C
📖 第 1 页 / 共 4 页
字号:
                object = mteObjects_addOID( "snmpd.conf", tname, idx, buf, 0 );                if (!object) {                    snmp_log(LOG_ERR, "Unknown payload OID: %s\n", buf);                    config_perror("Unknown payload OID");                    mteObjects_removeEntries( "snmpd.conf", tname );                } else                    idx = object->mteOIndex;                break;                case 'o':   /*  object  */                idx++;                cp     = copy_nword(cp, buf, SPRINT_MAX_LEN);                object = mteObjects_addOID( "snmpd.conf", tname, idx, buf, 1 );                if (!object) {                    snmp_log(LOG_ERR, "Unknown payload OID: %s\n", buf);                    config_perror("Unknown payload OID");                    mteObjects_removeEntries( "snmpd.conf", tname );                } else                    idx = object->mteOIndex;                break;                case 'r':   /*  repeat frequency */                cp     = copy_nword(cp, buf, SPRINT_MAX_LEN);                repeat = strtoul(buf, NULL, 0);                break;                case 'S':   /* disable startup tests */                startup = 0;                break;            case 's':   /* enable startup tests (default?) */                startup = 1;                break;            case 't':   /* threshold test - already handled */                break;                case 'u':   /*  user */                cp     = copy_nword(cp, buf, SPRINT_MAX_LEN);                sess   = netsnmp_iquery_user_session(buf);                if (NULL == sess) {                    snmp_log(LOG_ERR, "user name %s not found\n", buf);                    config_perror("Unknown user name\n");                    mteObjects_removeEntries( "snmpd.conf", tname );                    return;                }                break;            }        } else {            /*             * Skip the first non-option token - the trigger             *  name (which has already been processed earlier).             */            if ( !seen_name ) {                seen_name = 1;            } else {                /*                 * But the next non-option token encountered will                 *  mark the start of the expression to be monitored.                 *                 * There are three possible expression formats:                 *      [op] OID               (existence tests)                 *      OID op value           (boolean tests)                 *      OID val val [val val]  (threshold tests)                 *                  * Extract the OID, operation and (first) value.                 */                switch ( test ) {                case MTE_TRIGGER_EXISTENCE:                    /*                     * Identify the existence operator (if any)...                     */                    op = MTE_EXIST_PRESENT;                    if (buf[0] == '!') {                       if (buf[1] == '=') {                           op = MTE_EXIST_CHANGED;                       } else {                           op = MTE_EXIST_ABSENT;                       }                       cp = copy_nword(cp, buf, SPRINT_MAX_LEN);                    }                    /*                     * ... then extract the monitored OID.                     *     (ignoring anything that remains)                     */                    memcpy(oid_name_buf, buf, SPRINT_MAX_LEN);                    cp = NULL;  /* To terminate the processing loop */                    DEBUGMSGTL(("disman:event:conf", "%s: Exist (%s, %d)\n",                                                     tname, oid_name_buf, op));                    break;                    case MTE_TRIGGER_BOOLEAN:                    /*                     * Extract the monitored OID, and                      *   identify the boolean operator ...                     */                    memcpy(oid_name_buf, buf, SPRINT_MAX_LEN);                    cp = copy_nword(cp, buf, SPRINT_MAX_LEN);                    if (buf[0] == '!') {                       op = MTE_BOOL_UNEQUAL;                    } else if (buf[0] == '=') {                       op = MTE_BOOL_EQUAL;                    } else if (buf[0] == '<') {                       if (buf[1] == '=') {                           op = MTE_BOOL_LESSEQUAL;                       } else {                           op = MTE_BOOL_LESS;                       }                    } else if (buf[0] == '>') {                       if (buf[1] == '=') {                           op = MTE_BOOL_GREATEREQUAL;                       } else {                           op = MTE_BOOL_GREATER;                       }                    }                    /*                     * ... then extract the comparison value.                     *     (ignoring anything that remains)                     */                    cp    = copy_nword(cp, buf, SPRINT_MAX_LEN);                    value = strtol(buf, NULL, 0);                    cp = NULL;  /* To terminate the processing loop */                    DEBUGMSGTL(("disman:event:conf", "%s: Bool (%s, %d, %d)\n",                                              tname, oid_name_buf, op, value));                    break;                    case MTE_TRIGGER_THRESHOLD:                    /*                     * Extract the monitored OID, and                      *   the first comparison value...                     */                    memcpy(oid_name_buf, buf, SPRINT_MAX_LEN);                    memset(         buf,   0, SPRINT_MAX_LEN);                    cp  = copy_nword(cp, buf, SPRINT_MAX_LEN);                    if ( buf[0] != '-' )                        value = strtol(buf, NULL, 0);                        /*                     * ... then save the rest of the line for later.                     */                    memset( buf, 0,  strlen(buf));                    memcpy( buf, cp, strlen(cp));                    cp = NULL;  /* To terminate the processing loop */                    DEBUGMSGTL(("disman:event:conf", "%s: Thresh (%s, %d, %s)\n",                                              tname, oid_name_buf, op, buf));                    break;                }            }        }        if (!cp)            break;    }    if (NULL == sess) {        sess = netsnmp_query_get_default_session();        if (NULL == sess) {            config_perror                ("You must specify a default user name using the agentSecName token\n");            mteObjects_removeEntries( "snmpd.conf", tname );            return;        }    }    /*     *  ... and then create the new trigger entry...     */    entry = _find_typed_mteTrigger_entry( "snmpd.conf", tname+2, test );    if (!entry) {        /* mteObjects_removeEntries( "snmpd.conf", tname ); */        return;    }    /*     *  ... populate the type-independent fields...     *     (setting the delta discontinuity OID first)     */    if ( (flags & MTE_TRIGGER_FLAG_DELTA) &&        !(flags & MTE_TRIGGER_FLAG_SYSUPT)) {        memset( entry->mteDeltaDiscontID, 0, sizeof(entry->mteDeltaDiscontID));        memcpy( entry->mteDeltaDiscontID, name_buf, name_buf_len*sizeof(oid));        entry->mteDeltaDiscontID_len = name_buf_len;    }    name_buf_len = MAX_OID_LEN;    if (!snmp_parse_oid(oid_name_buf, name_buf, &name_buf_len)) {        snmp_log(LOG_ERR, "trigger OID: %s\n", oid_name_buf);        config_perror("unknown monitor OID");        mteObjects_removeEntries( "snmpd.conf", tname );        return;    }    entry->session               = sess;    entry->flags                |= flags;    entry->mteTriggerTest       |= test;    entry->mteTriggerFrequency   = repeat;    entry->mteTriggerValueID_len = name_buf_len;    memcpy(entry->mteTriggerValueID, name_buf, name_buf_len*sizeof(oid));    /*     * ... and the relevant test-specific fields.     */    switch (test) {    case MTE_TRIGGER_EXISTENCE:        entry->mteTExTest = op;        if (op != MTE_EXIST_CHANGED && startup)            entry->mteTExStartup = op;        if ( idx > 0 ) {            /*             * Refer to the objects for this trigger (if any)...             */            memset(entry->mteTExObjOwner, 0,     MTE_STR1_LEN+1);            memcpy(entry->mteTExObjOwner, "snmpd.conf",      10);            memcpy(entry->mteTExObjects,  tname, MTE_STR1_LEN+1);        }        if ( ename[0] ) {            /*             * ... and the specified event...             */            memset(entry->mteTExEvOwner,  0,     MTE_STR1_LEN+1);            if ( ename[0] == '_' )                memcpy(entry->mteTExEvOwner,  "_snmpd",       6);            else                memcpy(entry->mteTExEvOwner,  "snmpd.conf",  10);            memcpy(entry->mteTExEvent,    ename, MTE_STR1_LEN+1);        } else {            /*             * ... or the hardcoded default event.             */            memset(entry->mteTExEvOwner,  0,     MTE_STR1_LEN+1);            memset(entry->mteTExEvent,    0,     MTE_STR1_LEN+1);            memcpy(entry->mteTExEvOwner,  "_snmpd",           6);            memcpy(entry->mteTExEvent,    "_mteTriggerFired", 16);        }        break;    case MTE_TRIGGER_BOOLEAN:        entry->mteTBoolComparison = op;        entry->mteTBoolValue      = value;        if (!startup)            entry->flags &= ~MTE_TRIGGER_FLAG_BSTART;        if ( idx > 0 ) {            /*             * Refer to the objects for this trigger (if any)...             */            memset(entry->mteTBoolObjOwner, 0,     MTE_STR1_LEN+1);            memcpy(entry->mteTBoolObjOwner, "snmpd.conf",      10);            memcpy(entry->mteTBoolObjects,  tname, MTE_STR1_LEN+1);        }        if ( ename[0] ) {            /*             * ... and the specified event...             */            memset(entry->mteTBoolEvOwner,  0,     MTE_STR1_LEN+1);            if ( ename[0] == '_' )                memcpy(entry->mteTBoolEvOwner,  "_snmpd",       6);            else                memcpy(entry->mteTBoolEvOwner,  "snmpd.conf",  10);            memcpy(entry->mteTBoolEvent,    ename, MTE_STR1_LEN+1);        } else {            /*             * ... or the hardcoded default event.             */            memset(entry->mteTBoolEvOwner,  0,     MTE_STR1_LEN+1);            memset(entry->mteTBoolEvent,    0,     MTE_STR1_LEN+1);            memcpy(entry->mteTBoolEvOwner,  "_snmpd",           6);            memcpy(entry->mteTBoolEvent,    "_mteTriggerFired", 16);        }        break;    case MTE_TRIGGER_THRESHOLD:        if ( buf[0] != '-' ) {            entry->mteTThFallValue  = value;            value = strtol(buf, NULL, 0);            entry->mteTThRiseValue  = value;            if (!startup)                entry->mteTThStartup = 0;            if ( idx > 0 ) {                /*                 * Refer to the objects for this trigger (if any)...                 */                memset(entry->mteTThObjOwner,   0,     MTE_STR1_LEN+1);                memcpy(entry->mteTThObjOwner,   "snmpd.conf",      10);                memcpy(entry->mteTThObjects,    tname, MTE_STR1_LEN+1);            }            if ( ename[0] ) {                /*                 * ... and the specified event...                 *  (using the same event for all triggers)                 */                memset(entry->mteTThRiseOwner,  0,     MTE_STR1_LEN+1);                if ( ename[0] == '_' )                    memcpy(entry->mteTThRiseOwner,  "_snmpd",       6);                else                    memcpy(entry->mteTThRiseOwner,  "snmpd.conf",  10);                memcpy(entry->mteTThRiseEvent,  ename, MTE_STR1_LEN+1);                memset(entry->mteTThFallOwner,  0,     MTE_STR1_LEN+1);                if ( ename[0] == '_' )                    memcpy(entry->mteTThFallOwner,  "_snmpd",       6);                else                    memcpy(entry->mteTThFallOwner,  "snmpd.conf",  10);                memcpy(entry->mteTThFallEvent,  ename, MTE_STR1_LEN+1);            } else {                /*                 * ... or the hardcoded default events.                 */                memset(entry->mteTThRiseOwner,  0,     MTE_STR1_LEN+1);                memset(entry->mteTThFallOwner,  0,     MTE_STR1_LEN+1);                memset(entry->mteTThRiseEvent,  0,     MTE_STR1_LEN+1);                memset(entry->mteTThFallEvent,  0,     MTE_STR1_LEN+1);                memcpy(entry->mteTThRiseOwner,  "_snmpd",           6);                memcpy(entry->mteTThFallOwner,  "_snmpd",           6);                memcpy(entry->mteTThRiseEvent,  "_mteTriggerRising", 17);                memcpy(entry->mteTThFallEvent,  "_mteTriggerFalling", 18);            }            cp = skip_token(buf);   /* skip riseThreshold value */        } else {            /* Skip absolute threshold placeholders */            cp = skip_token(buf);        }        /*         * Parse and set (optional) Delta thresholds & events         */        if ( cp && *cp != '\0' ) {            if (entry->flags & MTE_TRIGGER_FLAG_DELTA) {                config_perror("Delta-threshold on delta-samples not supported");                mteObjects_removeEntries( "snmpd.conf", tname );                return;            }            value = strtol(cp, NULL, 0);            entry->mteTThDFallValue  = value;            cp = skip_token(cp);            value = strtol(cp, NULL, 0);            entry->mteTThDRiseValue  = value;            /*             * Set the events in the same way as before             */            if ( ename[0] ) {                memset(entry->mteTThDRiseOwner,  0,     MTE_STR1_LEN+1);                if ( ename[0] == '_' )                    memcpy(entry->mteTThDRiseOwner,  "_snmpd",       6);                else                    memcpy(entry->mteTThDRiseOwner,  "snmpd.conf",  10);                memcpy(entry->mteTThDRiseEvent,  ename, MTE_STR1_LEN+1);                memset(entry->mteTThDFallOwner,  0,     MTE_STR1_LEN+1);                if ( ename[0] == '_' )                    memcpy(entry->mteTThDFallOwner,  "_snmpd",       6);                else                    memcpy(entry->mteTThDFallOwner,  "snmpd.conf",  10);                memcpy(entry->mteTThDFallEvent,  ename, MTE_STR1_LEN+1);            } else {                memset(entry->mteTThDRiseOwner,  0,     MTE_STR1_LEN+1);                memset(entry->mteTThDFallOwner,  0,     MTE_STR1_LEN+1);                memset(entry->mteTThDRiseEvent,  0,     MTE_STR1_LEN+1);                memset(entry->mteTThDFallEvent,  0,     MTE_STR1_LEN+1);                memcpy(entry->mteTThDRiseOwner,  "_snmpd",           6);                memcpy(entry->mteTThDFallOwner,  "_snmpd",           6);                memcpy(entry->mteTThDRiseEvent,  "_mteTriggerRising", 17);                memcpy(entry->mteTThDFallEvent,  "_mteTriggerFalling", 18);            }        }         break;    }    snmp_register_callback(SNMP_CALLBACK_LIBRARY,                            SNMP_CALLBACK_POST_READ_CONFIG,                           _mteTrigger_callback_enable, entry );    return;}voidparse_linkUpDown_traps(const char *token, char *line){    /*     * XXX - This isn't strictly correct according to the

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -