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

📄 matrix_m.c

📁 嵌入式RMON,RMON为Remote monitor的缩写,基于SNMP为网络提供主动监控及错误告警,智能交换路由必备协议
💻 C
📖 第 1 页 / 共 2 页
字号:
		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 + -