📄 expobjecttable.c
字号:
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 + -