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

📄 expobjecttable.c

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 C
📖 第 1 页 / 共 2 页
字号:
                    memset(expName,  0, sizeof(expName));                    memcpy(expName,                           tinfo->indexes->next_variable->val.string,                           tinfo->indexes->next_variable->val_len);                    vp = tinfo->indexes->next_variable->next_variable;                    objIndex = *vp->val.integer;                    row = expObject_createRow(expOwner, expName, objIndex, 0);                    if (!row) {                        netsnmp_set_request_error(reqinfo, request,                                                  SNMP_ERR_RESOURCEUNAVAILABLE);                        return SNMP_ERR_NOERROR;                    }                    netsnmp_insert_tdata_row( request, row );                }            }        }        break;    case MODE_SET_FREE:        for (request = requests; request; request = request->next) {            tinfo = netsnmp_extract_table_info(request);            switch (tinfo->colnum) {            case COLUMN_EXPOBJECTENTRYSTATUS:                switch (*request->requestvb->val.integer) {                case RS_CREATEANDGO:                case RS_CREATEANDWAIT:                    /*                     * Tidy up after a failed row creation request                     */                     entry = (struct expObject *)                                netsnmp_tdata_extract_entry(request);                    if (entry &&                      !(entry->flags & EXP_OBJ_FLAG_VALID)) {                        row = (netsnmp_tdata_row *)                                netsnmp_tdata_extract_row(request);                        expObject_removeEntry( row );                    }                }            }        }        break;    case MODE_SET_ACTION:        for (request = requests; request; request = request->next) {            tinfo = netsnmp_extract_table_info(request);            entry = (struct expObject *)                    netsnmp_tdata_extract_entry(request);            if (!entry) {                /*                 * New rows must be created via the RowStatus column                 */                netsnmp_set_request_error(reqinfo, request,                                          SNMP_ERR_NOCREATION);                                      /* or inconsistentName? */                return SNMP_ERR_NOERROR;            }        }        break;    case MODE_SET_UNDO:        break;    case MODE_SET_COMMIT:        /*         * All these assignments are "unfailable", so it's         *  (reasonably) safe to apply them in the Commit phase         */        ret = 0;  /* Flag to re-check expExpressionPrefix settings */        for (request = requests; request; request = request->next) {            entry = (struct expObject *) netsnmp_tdata_extract_entry(request);            tinfo = netsnmp_extract_table_info(request);            switch (tinfo->colnum) {            case COLUMN_EXPOBJECTID:                memset(entry->expObjectID, 0, sizeof(entry->expObjectID));                memcpy(entry->expObjectID, request->requestvb->val.string,                                           request->requestvb->val_len);                entry->expObjectID_len = request->requestvb->val_len;                break;            case COLUMN_EXPOBJECTIDWILDCARD:                if (*request->requestvb->val.integer == TV_TRUE)                    entry->flags |=  EXP_OBJ_FLAG_OWILD;                else                    entry->flags &= ~EXP_OBJ_FLAG_OWILD;                break;            case COLUMN_EXPOBJECTSAMPLETYPE:                entry->expObjectSampleType = *request->requestvb->val.integer;                break;            case COLUMN_EXPOBJECTDELTADISCONTINUITYID:                memset(entry->expObjDeltaD, 0, sizeof(entry->expObjDeltaD));                memcpy(entry->expObjDeltaD, request->requestvb->val.string,                                            request->requestvb->val_len);                entry->expObjDeltaD_len = request->requestvb->val_len/sizeof(oid);               /* XXX                if ( snmp_oid_compare( entry->expObjDeltaD,                                       entry->expObjDeltaD_len,                                        sysUpTime_inst,                                       sysUpTime_inst_len ) != 0 )                    entry->flags |= EXP_OBJ_FLAG_DDISC;               */                /*                 * If the OID used for the expExpressionPrefix object                 *   has changed, then update the expression structure.                 */                if ( entry->flags & EXP_OBJ_FLAG_PREFIX ) {                    exp = expExpression_getEntry( entry->expOwner,                                                  entry->expName );                    memcpy( exp->expPrefix, entry->expObjDeltaD,                            MAX_OID_LEN*sizeof(oid));                    exp->expPrefix_len = entry->expObjDeltaD_len;                }                break;            case COLUMN_EXPOBJECTDISCONTINUITYIDWILDCARD:                if (*request->requestvb->val.integer == TV_TRUE) {                    /*                     * Possible new prefix OID candidate                     * Can't set the value here, since the OID                     *    assignment might not have been processed yet.                     */                    exp = expExpression_getEntry( entry->expOwner,                                                  entry->expName );                    if (exp && exp->expPrefix_len == 0 )                        ret = 1;   /* Set the prefix later  */                    entry->flags |=  EXP_OBJ_FLAG_DWILD;                } else {                    if ( entry->flags | EXP_OBJ_FLAG_PREFIX ) {                        exp = expExpression_getEntry( entry->expOwner,                                                      entry->expName );                        memset( exp->expPrefix, 0, MAX_OID_LEN*sizeof(oid));                        exp->expPrefix_len = 0;                        ret = 1;   /* Need a new prefix OID */                    }                    entry->flags &= ~EXP_OBJ_FLAG_DWILD;                }                break;            case COLUMN_EXPOBJECTDISCONTINUITYIDTYPE:                entry->expObjDiscontinuityType =                           *request->requestvb->val.integer;                break;            case COLUMN_EXPOBJECTCONDITIONAL:                memset(entry->expObjCond, 0, sizeof(entry->expObjCond));                memcpy(entry->expObjCond, request->requestvb->val.string,                                          request->requestvb->val_len);                entry->expObjCond_len = request->requestvb->val_len/sizeof(oid);                break;            case COLUMN_EXPOBJECTCONDITIONALWILDCARD:                if (*request->requestvb->val.integer == TV_TRUE)                    entry->flags |=  EXP_OBJ_FLAG_CWILD;                else                    entry->flags &= ~EXP_OBJ_FLAG_CWILD;                break;            case COLUMN_EXPOBJECTENTRYSTATUS:                switch (*request->requestvb->val.integer) {                case RS_ACTIVE:                    entry->flags |= EXP_OBJ_FLAG_ACTIVE;                    break;                case RS_NOTINSERVICE:                    entry->flags &= ~EXP_OBJ_FLAG_ACTIVE;                    break;                case RS_CREATEANDGO:                    entry->flags |= EXP_OBJ_FLAG_ACTIVE;                    entry->flags |= EXP_OBJ_FLAG_VALID;                    break;                case RS_CREATEANDWAIT:                    entry->flags |= EXP_OBJ_FLAG_VALID;                    break;                case RS_DESTROY:                    row = (netsnmp_tdata_row *)                               netsnmp_tdata_extract_row(request);                    expObject_removeEntry(row);                }            }        }        /*         * Need to check for changes in expExpressionPrefix handling         */        for (request = requests; request; request = request->next) {            entry = (struct expObject *) netsnmp_tdata_extract_entry(request);            tinfo = netsnmp_extract_table_info(request);            switch (tinfo->colnum) {            case COLUMN_EXPOBJECTDISCONTINUITYIDWILDCARD:                /*                 * If a column has just been marked as wild,                 *   then consider using it as the prefix OID                 */                if (*request->requestvb->val.integer == TV_TRUE) {                    exp = expExpression_getEntry( entry->expOwner,                                                  entry->expName );                    if ( exp->expPrefix_len == 0 ) {                        memcpy( exp->expPrefix, entry->expObjDeltaD,                                MAX_OID_LEN*sizeof(oid));                        exp->expPrefix_len = entry->expObjDeltaD_len;                        entry->flags |= EXP_OBJ_FLAG_PREFIX;                    }                }                /*                 * If it's just been marked as non-wildcarded                 *   then we need to look for a new candidate.                 */                else {                }                break;            }        }        break;    }    DEBUGMSGTL(("disman:expr:mib", "Expression Object handler - done \n"));    return SNMP_ERR_NOERROR;}

⌨️ 快捷键说明

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