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

📄 mtetriggertable.c

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 C
📖 第 1 页 / 共 5 页
字号:
         * this one is not *all* that useful, because the error is         * only kept for 30 seconds at most.  Maybe scan it every 30         * seconds, but I'm not doing so without seeking other peoples         * opinions first.          */        MTE_PROCESS_LINE            ("-o snmperrErrMessage  \"snmperrs\" snmperrErrorFlag != 0");    }}static int      monitor_call_count = 0;voidparse_simple_monitor(const char *token, char *line){    char            buf[SPRINT_MAX_LEN], *cp, ebuf[SPRINT_MAX_LEN],                    eventname[64];    oid             obuf[MAX_OID_LEN];    size_t          obufLen;    struct mteTriggerTable_data *StorageNew;    monitor_call_count++;    eventname[0] = '\0';    StorageNew = create_mteTriggerTable_data();    StorageNew->storageType = ST_READONLY;    StorageNew->mteTriggerEnabled = MTETRIGGERENABLED_TRUE;    StorageNew->mteTriggerEntryStatus = RS_ACTIVE;    StorageNew->mteTriggerValueIDWildcard = MTETRIGGERVALUEIDWILDCARD_TRUE;    StorageNew->mteTriggerBooleanStartup = MTETRIGGERBOOLEANSTARTUP_TRUE;    StorageNew->mteTriggerThresholdStartup =        MTETRIGGERTHRESHOLDSTARTUP_RISINGORFALLING;    StorageNew->mteTriggerExistenceTest[0] = 0;    /*     * owner = snmpd.conf, why not?      */    StorageNew->mteOwner = strdup("snmpd.conf");    StorageNew->mteOwnerLen = strlen(StorageNew->mteOwner);    StorageNew->pdu_version = SNMP_VERSION_3;    StorageNew->pdu_securityModel = SNMP_SEC_MODEL_USM;    StorageNew->pdu_securityLevel = SNMP_SEC_LEVEL_AUTHNOPRIV;    cp = line;    while (cp && *cp == '-') {        cp = copy_nword(cp, buf, sizeof(buf));        switch (buf[1]) {        case 't':           /*            * Threshold toggle            */           StorageNew->mteTriggerTest[0] = MTETRIGGERTEST_THRESHOLD;           break;        case 'i':           /*            * Single instance            */           StorageNew->mteTriggerValueIDWildcard = MTETRIGGERVALUEIDWILDCARD_FALSE;           break;        case 'r':            if (cp) {                cp = copy_nword(cp, buf, sizeof(buf));                StorageNew->mteTriggerFrequency = strtoul(buf, NULL, 0);            } else {                config_perror("No parameter after -r given\n");                /*                 * XXX: free StorageNew                  */                return;            }            break;        case 'u':            if (cp) {                cp = copy_nword(cp, buf, sizeof(buf));                StorageNew->pdu_securityName = strdup(buf);                StorageNew->pdu_securityNameLen = strlen(buf);            } else {                config_perror("No parameter after -u given\n");                /*                 * XXX: free StorageNew                  */                return;            }            break;        case 'e':            if (cp) {                cp = copy_nword(cp, eventname, sizeof(eventname));            } else {                config_perror("No parameter after -e given\n");                /*                 * XXX: free StorageNew                  */                return;            }            break;        case 'o':            /*             * oid              */            cp = copy_nword(cp, buf, sizeof(buf));            obufLen = MAX_OID_LEN;            if (!snmp_parse_oid(buf, obuf, &obufLen)) {                sprintf(ebuf, "unable to parse oid: %s", buf);                config_perror(ebuf);                /*                 * XXX: free StorageNew                  */                return;            }            sprintf(buf, "snmpd.conf%d", monitor_call_count);            mte_add_object_to_table("snmpd.conf", buf, obuf, obufLen, 1);            if (StorageNew->mteTriggerObjectsOwnerLen == 0) {                SNMP_FREE(StorageNew->mteTriggerObjectsOwner);                StorageNew->mteTriggerObjectsOwner = strdup("snmpd.conf");                StorageNew->mteTriggerObjectsOwnerLen =                    strlen("snmpd.conf");            }            if (StorageNew->mteTriggerObjectsLen == 0) {                SNMP_FREE(StorageNew->mteTriggerObjects);                StorageNew->mteTriggerObjects = strdup(buf);                StorageNew->mteTriggerObjectsLen = strlen(buf);            }            break;        }    }    if (StorageNew->pdu_securityNameLen == 0) {        char           *mte_default_user =            netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_INTERNAL_SECNAME);        if (mte_default_user) {            StorageNew->pdu_securityName = strdup(mte_default_user);            StorageNew->pdu_securityNameLen = strlen(mte_default_user);        } else {            config_perror("-u USER parameter required\n");            /*             * XXX: free StorageNew              */            return;        }    }    /*     * name      */    cp = copy_nword(cp, buf, sizeof(buf));    if (!cp) {        config_perror("illegal monitor: no name specified");        /*         * XXX: free StorageNew          */        return;    }    StorageNew->mteTriggerName = strdup(buf);    StorageNew->mteTriggerNameLen = strlen(StorageNew->mteTriggerName);    /*     * oid      */    cp = copy_nword(cp, buf, sizeof(buf));    obufLen = MAX_OID_LEN;    if (!snmp_parse_oid(buf, obuf, &obufLen)) {        sprintf(ebuf, "unable to parse oid: %s", buf);        config_perror(ebuf);        /*         * XXX: free StorageNew          */        return;    }    if (StorageNew->mteTriggerValueID)        free(StorageNew->mteTriggerValueID);    StorageNew->mteTriggerValueID = snmp_duplicate_objid(obuf, obufLen);    StorageNew->mteTriggerValueIDLen = obufLen;    if (StorageNew->mteTriggerTest[0] == MTETRIGGERTEST_THRESHOLD) {       /*        * it's a threshold        * grab 'low' and 'high' params        */        if (!cp) {            config_perror("no lower threshold value specified");       }       cp = copy_nword(cp, buf, sizeof(buf));       StorageNew->mteTriggerThresholdFalling = strtol(buf, NULL, 0);        if (!cp) {            config_perror("no upper threshold value specified");       }       cp = copy_nword(cp, buf, sizeof(buf));       StorageNew->mteTriggerThresholdRising = strtol(buf, NULL, 0);    } else {        /*         * if nothing beyond here, it's an existence test          */        if (!cp) {            StorageNew->mteTriggerTest[0] = (u_char)MTETRIGGERTEST_EXISTENCE;            if (eventname[0] != '\0') {                StorageNew->mteTriggerExistenceEventOwner =                    strdup("snmpd.conf");                StorageNew->mteTriggerExistenceEventOwnerLen =                    strlen(StorageNew->mteTriggerExistenceEventOwner);                StorageNew->mteTriggerExistenceEvent =                    strdup(eventname);                StorageNew->mteTriggerExistenceEventLen =                    strlen(eventname);            }            mteTriggerTable_add(StorageNew);            return;        }        /*         * assume boolean (need to deal with threshold statements)          */        cp = copy_nword(cp, buf, sizeof(buf));        if ((StorageNew->mteTriggerBooleanComparison =             se_find_value_in_slist("mteBooleanOperators", buf)) == -1) {            config_perror("illegal boolean operator");            return;        }        /*         * XXX: add threshold          */        StorageNew->mteTriggerTest[0] = MTETRIGGERTEST_BOOLEAN;        if (!cp) {            config_perror("no comparison value specified");            /*             * XXX: free StorageNew              */            return;        }        cp = copy_nword(cp, buf, sizeof(buf));        StorageNew->mteTriggerBooleanValue = strtol(buf, NULL, 0);        if (eventname[0] != '\0') {            StorageNew->mteTriggerBooleanEventOwner =                strdup("snmpd.conf");            StorageNew->mteTriggerBooleanEventOwnerLen =                strlen(StorageNew->mteTriggerBooleanEventOwner);            StorageNew->mteTriggerBooleanEvent =                strdup(eventname);            StorageNew->mteTriggerBooleanEventLen =                strlen(eventname);        }    }    mteTriggerTable_add(StorageNew);    mte_enable_trigger(StorageNew);    DEBUGMSGTL(("mteTriggerTable", "added simple monitor: %s\n",                StorageNew->mteTriggerName));}/* * parse_mteTriggerTable(): *   parses .conf file entries needed to configure the mib. */voidparse_mteTriggerTable(const char *token, char *line){    size_t          tmpint;    oid            *tmpoid = NULL;    struct mteTriggerTable_data *StorageTmp =        SNMP_MALLOC_STRUCT(mteTriggerTable_data);    DEBUGMSGTL(("mteTriggerTable", "parsing config...  "));    if (StorageTmp == NULL) {        config_perror("malloc failure");        return;    }    line =        read_config_read_data(ASN_OCTET_STR, line, &StorageTmp->mteOwner,                              &StorageTmp->mteOwnerLen);    if (StorageTmp->mteOwner == NULL) {        config_perror("invalid specification for mteOwner");        return;    }    line =        read_config_read_data(ASN_OCTET_STR, line,                              &StorageTmp->mteTriggerName,                              &StorageTmp->mteTriggerNameLen);    if (StorageTmp->mteTriggerName == NULL) {        config_perror("invalid specification for mteTriggerName");        return;    }    line =        read_config_read_data(ASN_OCTET_STR, line,                              &StorageTmp->mteTriggerComment,                              &StorageTmp->mteTriggerCommentLen);    if (StorageTmp->mteTriggerComment == NULL) {        config_perror("invalid specification for mteTriggerComment");        return;    }    line =        read_config_read_data(ASN_OCTET_STR, line,                              &StorageTmp->mteTriggerTest,                              &StorageTmp->mteTriggerTestLen);    if (StorageTmp->mteTriggerTest == NULL) {        config_perror("invalid specification for mteTriggerTest");        return;    }    line =        read_config_read_data(ASN_INTEGER, line,                              &StorageTmp->mteTriggerSampleType, &tmpint);    line =        read_config_read_data(ASN_OBJECT_ID, line,                              &StorageTmp->mteTriggerValueID,                              &StorageTmp->mteTriggerValueIDLen);    if (StorageTmp->mteTriggerValueID == NULL) {        config_perror("invalid specification for mteTriggerValueID");        return;    }    line =        read_config_read_data(ASN_INTEGER, line,                              &StorageTmp->mteTriggerValueIDWildcard,                              &tmpint);    line =        read_config_read_data(ASN_OCTET_STR, line,                              &StorageTmp->mteTriggerTargetTag,                              &StorageTmp->mteTriggerTargetTagLen);    if (StorageTmp->mteTriggerTargetTag == NULL) {        config_perror("invalid specification for mteTriggerTargetTag");        return;    }    line =        read_config_read_data(ASN_OCTET_STR, line,                              &StorageTmp->mteTriggerContextName,                              &StorageTmp->mteTriggerContextNameLen);    if (StorageTmp->mteTriggerContextName == NULL) {        config_perror("invalid specification for mteTriggerContextName");        return;    }    line =        read_config_read_data(ASN_INTEGER, line,                              &StorageTmp->mteTriggerContextNameWildcard,                              &tmpint);    line =        read_config_read_data(ASN_UNSIGNED, line,                              &StorageTmp->mteTriggerFrequency, &tmpint);    line =

⌨️ 快捷键说明

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