📄 matrix_m.c
字号:
memcpy(obj->Syntax.BufChr, data->Owner, data->OwnerLen); obj->SyntaxLen = data->OwnerLen; return SNMP_NOERROR; case SNMP_PDU_SET: data = (MATRIX_CONTROL *) local->Data; if (data->Status != SNMP_UNDERCREATION) return SNMP_READONLY; memcpy(data->Owner, obj->Syntax.BufChr, obj->SyntaxLen); data->OwnerLen = obj->SyntaxLen; BooleanSetTrue(data->ObjectSet, MATRIX_BOOLEAN_OWNER); return SNMP_NOERROR; } return SNMP_GENERROR;}WORD MatrixControlStatus(SNMP_OBJECT * obj, WORD idlen){ MIB_LOCAL *local = NULL; MATRIX_CONTROL *data; local = MibRmon(obj, MatrixControlInstance, idlen, CONTROLINDEXSIZE); switch (obj->Request) { case SNMP_PDU_GET: if (local == NULL) { obj->Syntax.LngInt = SNMP_INVALID; return SNMP_NOSUCHNAME; } data = (MATRIX_CONTROL *) local->Data; obj->Syntax.LngInt = data->Status; return SNMP_NOERROR; case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, CONTROLINDEXSIZE, NULL, FALSE) == FALSE) { obj->Syntax.LngInt = SNMP_INVALID; return SNMP_NOSUCHNAME; } data = (MATRIX_CONTROL *) local->Data; obj->Syntax.LngInt = data->Status; return SNMP_NOERROR; case SNMP_PDU_SET: if (local == NULL) { switch (obj->Syntax.LngInt) { case SNMP_CREATEREQUEST: if ((local = MibInsert(obj, &MatrixControlInstance, idlen, CONTROLINDEXSIZE)) == NULL) return SNMP_GENERROR; if ((local->Data = DnpapMalloc(sizeof(MATRIX_CONTROL))) == NULL) return SNMP_GENERROR; data = (MATRIX_CONTROL *) local->Data; memset(data, 0, sizeof(MATRIX_CONTROL)); if (MatrixCInit(data) == TRUE) { data->Status = SNMP_UNDERCREATION; DnpapMessage(DMC_MESSAGE, MATRIX_CREATE, "matrix: collector %ld created", local->Index); return SNMP_NOERROR; } DnpapFree(local->Data); MibRemove(obj, &MatrixControlInstance, idlen, CONTROLINDEXSIZE); return SNMP_GENERROR; default: return SNMP_NOSUCHNAME; } } data = (MATRIX_CONTROL *) local->Data; switch (data->Status) { case SNMP_UNDERCREATION: switch (obj->Syntax.LngInt) { case SNMP_VALID: if (MatrixCStart(data) == TRUE) { data->Status = SNMP_VALID; DnpapMessage(DMC_MESSAGE, MATRIX_START, "matrix: collector %ld active", local->Index); return SNMP_NOERROR; } return SNMP_BADVALUE; case SNMP_INVALID: if (MatrixCStop(data) == TRUE) { DnpapFree(local->Data); DnpapMessage(DMC_MESSAGE, MATRIX_DESTROY, "matrix: collector %ld destroyed", local->Index); if (MibRemove(obj, &MatrixControlInstance, idlen, CONTROLINDEXSIZE) == TRUE) return SNMP_NOERROR; } return SNMP_GENERROR; default: return SNMP_BADVALUE; } case SNMP_VALID: switch (obj->Syntax.LngInt) { case SNMP_VALID: return SNMP_NOERROR; case SNMP_INVALID: if (MatrixCStop(data) == TRUE) { DnpapFree(local->Data); DnpapMessage(DMC_MESSAGE, MATRIX_DESTROY, "matrix: collector %ld destroyed", local->Index); if (MibRemove(obj, &MatrixControlInstance, idlen, CONTROLINDEXSIZE) == TRUE) return SNMP_NOERROR; } return SNMP_GENERROR; default: return SNMP_BADVALUE; } } } return SNMP_GENERROR;}WORD MatrixSDSourceAddress(SNMP_OBJECT * obj, WORD idlen){ MIB_LOCAL *local = NULL; SRCDST *data = NULL; if ((local = MatrixMibRmon(obj, MatrixControlInstance, idlen)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, SRCDSTINDEXSIZE, &data, TRUE) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if (data == NULL && (data = MatrixSearchHash(local->Data, obj, idlen, TRUE)) == NULL) return SNMP_NOSUCHNAME; memcpy(obj->Syntax.BufChr, data->SrcDst, obj->SyntaxLen = ((MATRIX_CONTROL *) local->Data)->AddressLen); return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD MatrixSDDestAddress(SNMP_OBJECT * obj, WORD idlen){ MIB_LOCAL *local = NULL; SRCDST *data = NULL; if ((local = MatrixMibRmon(obj, MatrixControlInstance, idlen)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, SRCDSTINDEXSIZE, &data, TRUE) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if (data == NULL && (data = MatrixSearchHash(local->Data, obj, idlen, TRUE)) == NULL) return SNMP_NOSUCHNAME; memcpy(obj->Syntax.BufChr, data->SrcDst + ((MATRIX_CONTROL *) local->Data)->AddressLen, obj->SyntaxLen = ((MATRIX_CONTROL *) local->Data)->AddressLen); return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD MatrixSDIndex(SNMP_OBJECT * obj, WORD idlen){ MIB_LOCAL *local = NULL; SRCDST *data = NULL; if ((local = MatrixMibRmon(obj, MatrixControlInstance, idlen)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, SRCDSTINDEXSIZE, &data, TRUE) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if (data == NULL && (data = MatrixSearchHash(local->Data, obj, idlen, TRUE)) == NULL) return SNMP_NOSUCHNAME; obj->Syntax.LngInt = local->Index; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD MatrixSDPkts(SNMP_OBJECT * obj, WORD idlen){ MIB_LOCAL *local = NULL; SRCDST *data = NULL; if ((local = MatrixMibRmon(obj, MatrixControlInstance, idlen)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, SRCDSTINDEXSIZE, &data, TRUE) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if (data == NULL && (data = MatrixSearchHash(local->Data, obj, idlen, TRUE)) == NULL) return SNMP_NOSUCHNAME; obj->Syntax.LngUns = data->Pkts; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD MatrixSDOctets(SNMP_OBJECT * obj, WORD idlen){ MIB_LOCAL *local = NULL; SRCDST *data = NULL; if ((local = MatrixMibRmon(obj, MatrixControlInstance, idlen)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, SRCDSTINDEXSIZE, &data, TRUE) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if (data == NULL && (data = MatrixSearchHash(local->Data, obj, idlen, TRUE)) == NULL) return SNMP_NOSUCHNAME; obj->Syntax.LngUns = data->Octets; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD MatrixSDErrors(SNMP_OBJECT * obj, WORD idlen){ MIB_LOCAL *local = NULL; SRCDST *data = NULL; if ((local = MatrixMibRmon(obj, MatrixControlInstance, idlen)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, SRCDSTINDEXSIZE, &data, TRUE) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if (data == NULL && (data = MatrixSearchHash(local->Data, obj, idlen, TRUE)) == NULL) return SNMP_NOSUCHNAME; obj->Syntax.LngUns = data->Errors; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD MatrixDSSourceAddress(SNMP_OBJECT * obj, WORD idlen){ MIB_LOCAL *local = NULL; SRCDST *data = NULL; if ((local = MatrixMibRmon(obj, MatrixControlInstance, idlen)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, SRCDSTINDEXSIZE, &data, FALSE) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if (data == NULL && (data = MatrixSearchHash(local->Data, obj, idlen, FALSE)) == NULL) return SNMP_NOSUCHNAME; memcpy(obj->Syntax.BufChr, data->SrcDst, obj->SyntaxLen = ((MATRIX_CONTROL *) local->Data)->AddressLen); return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD MatrixDSDestAddress(SNMP_OBJECT * obj, WORD idlen){ MIB_LOCAL *local = NULL; SRCDST *data = NULL; if ((local = MatrixMibRmon(obj, MatrixControlInstance, idlen)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, SRCDSTINDEXSIZE, &data, FALSE) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if (data == NULL && (data = MatrixSearchHash(local->Data, obj, idlen, FALSE)) == NULL) return SNMP_NOSUCHNAME; memcpy(obj->Syntax.BufChr, data->SrcDst + ((MATRIX_CONTROL *) local->Data)->AddressLen, obj->SyntaxLen = ((MATRIX_CONTROL *) local->Data)->AddressLen); return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD MatrixDSIndex(SNMP_OBJECT * obj, WORD idlen){ MIB_LOCAL *local = NULL; SRCDST *data = NULL; if ((local = MatrixMibRmon(obj, MatrixControlInstance, idlen)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, SRCDSTINDEXSIZE, &data, FALSE) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if (data == NULL && (data = MatrixSearchHash(local->Data, obj, idlen, TRUE)) == NULL) return SNMP_NOSUCHNAME; obj->Syntax.LngInt = local->Index; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD MatrixDSPkts(SNMP_OBJECT * obj, WORD idlen){ MIB_LOCAL *local = NULL; SRCDST *data = NULL; if ((local = MatrixMibRmon(obj, MatrixControlInstance, idlen)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, SRCDSTINDEXSIZE, &data, FALSE) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if (data == NULL && (data = MatrixSearchHash(local->Data, obj, idlen, FALSE)) == NULL) return SNMP_NOSUCHNAME; obj->Syntax.LngUns = data->Pkts; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD MatrixDSOctets(SNMP_OBJECT * obj, WORD idlen){ MIB_LOCAL *local = NULL; SRCDST *data = NULL; if ((local = MatrixMibRmon(obj, MatrixControlInstance, idlen)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, SRCDSTINDEXSIZE, &data, FALSE) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if (data == NULL && (data = MatrixSearchHash(local->Data, obj, idlen, FALSE)) == NULL) return SNMP_NOSUCHNAME; obj->Syntax.LngUns = data->Octets; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD MatrixDSErrors(SNMP_OBJECT * obj, WORD idlen){ MIB_LOCAL *local = NULL; SRCDST *data = NULL; if ((local = MatrixMibRmon(obj, MatrixControlInstance, idlen)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, SRCDSTINDEXSIZE, &data, FALSE) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if (data == NULL && (data = MatrixSearchHash(local->Data, obj, idlen, FALSE)) == NULL) return SNMP_NOSUCHNAME; obj->Syntax.LngUns = data->Errors; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}VOID MatrixChannelStop(LONG channelIndex){ MIB_LOCAL *matrixinstance; MATRIX_CONTROL *matrixcontrol; for (matrixinstance = MatrixControlInstance; matrixinstance != NULL; matrixinstance = matrixinstance->Next) { matrixcontrol = matrixinstance->Data; if (matrixcontrol->Status == SNMP_VALID && matrixcontrol->Channel == TRUE && matrixcontrol->ChannelAccept == TRUE && matrixcontrol->Source[matrixcontrol->SourceLen - 1] == channelIndex) matrixcontrol->ChannelAccept = FALSE; }}VOID MatrixPkt(LONG channelIndex, PROT_PKT * pkt){ MIB_LOCAL *matrixinstance; MATRIX_CONTROL *matrixcontrol; for (matrixinstance = MatrixControlInstance; matrixinstance != NULL; matrixinstance = matrixinstance->Next) { matrixcontrol = matrixinstance->Data; if (matrixcontrol->Status == SNMP_VALID && matrixcontrol->Channel == TRUE && matrixcontrol->ChannelAccept == TRUE && matrixcontrol->Source[matrixcontrol->SourceLen - 1] == channelIndex) MatrixHandlePkt(matrixcontrol, pkt); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -