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

📄 discnodm.c

📁 嵌入式RMON,RMON为Remote monitor的缩写,基于SNMP为网络提供主动监控及错误告警,智能交换路由必备协议
💻 C
📖 第 1 页 / 共 3 页
字号:
	if ((len = DiscTableLen(type, type, NULL, NULL)) == 0)		return SNMP_NOSUCHNAME;	if ((local = MibRmon(Obj, DiscNodeControlInstance, IdLen, len)) == NULL)		return SNMP_NOSUCHNAME;	switch (Obj->Request)	{	case SNMP_PDU_NEXT:		if (RmonNext(Obj, &local, IdLen, type, len, &data) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if (data == NULL && (data = DiscNodeSearchHash(local->Data, type, Obj, IdLen)) == NULL)			return SNMP_NOSUCHNAME;		Obj->Syntax.LngUns = data->InOctets;		return SNMP_NOERROR;	}	return SNMP_GENERROR;}WORD DiscNodeOutOctets(SNMP_OBJECT * Obj, WORD IdLen){	MIB_LOCAL *local = NULL;	DISCNODE *data = NULL;	INT type;	WORD len;	if ((type = DiscTableType(Obj, IdLen)) == 0)		return SNMP_NOSUCHNAME;	if ((len = DiscTableLen(type, type, NULL, NULL)) == 0)		return SNMP_NOSUCHNAME;	if ((local = MibRmon(Obj, DiscNodeControlInstance, IdLen, len)) == NULL)		return SNMP_NOSUCHNAME;	switch (Obj->Request)	{	case SNMP_PDU_NEXT:		if (RmonNext(Obj, &local, IdLen, type, len, &data) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if (data == NULL && (data = DiscNodeSearchHash(local->Data, type, Obj, IdLen)) == NULL)			return SNMP_NOSUCHNAME;		Obj->Syntax.LngUns = data->OutOctets;		return SNMP_NOERROR;	}	return SNMP_GENERROR;}WORD DiscNodeLRUTime(SNMP_OBJECT * Obj, WORD IdLen){	MIB_LOCAL *local = NULL;	DISCNODE *data = NULL;	INT type;	WORD len;	if ((type = DiscTableType(Obj, IdLen)) == 0)		return SNMP_NOSUCHNAME;	if ((len = DiscTableLen(type, type, NULL, NULL)) == 0)		return SNMP_NOSUCHNAME;	if ((local = MibRmon(Obj, DiscNodeControlInstance, IdLen, len)) == NULL)		return SNMP_NOSUCHNAME;	switch (Obj->Request)	{	case SNMP_PDU_NEXT:		if (RmonNext(Obj, &local, IdLen, type, len, &data) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if (data == NULL && (data = DiscNodeSearchHash(local->Data, type, Obj, IdLen)) == NULL)			return SNMP_NOSUCHNAME;		Obj->Syntax.LngUns = data->LRUTime;		return SNMP_NOERROR;	}	return SNMP_GENERROR;}WORD DiscNodeTimeCreationOrder(SNMP_OBJECT * Obj, WORD IdLen){	MIB_LOCAL *local = NULL;	DISCNODE *data = NULL;	INT type;	WORD len;	if ((type = DiscTableType(Obj, IdLen)) == 0)		return SNMP_NOSUCHNAME;	if ((len = DiscTableLen(type, type, NULL, NULL)) == 0)		return SNMP_NOSUCHNAME;	if ((local = MibRmon(Obj, DiscNodeControlInstance, IdLen, len)) == NULL)		return SNMP_NOSUCHNAME;	switch (Obj->Request)	{	case SNMP_PDU_NEXT:		if (RmonNext(Obj, &local, IdLen, type, len, &data) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if (data == NULL && (data = DiscNodeTimeSearch(local->Data, type, Obj, IdLen)) == NULL)			return SNMP_NOSUCHNAME;		Obj->Syntax.LngInt = Obj->Id[IdLen + 1];		return SNMP_NOERROR;	}	return SNMP_GENERROR;}WORD DiscNodeTimeIndex(SNMP_OBJECT * Obj, WORD IdLen){	MIB_LOCAL *local = NULL;	DISCNODE *data = NULL;	INT type;	WORD len;	if ((type = DiscTableType(Obj, IdLen)) == 0)		return SNMP_NOSUCHNAME;	if ((len = DiscTableLen(type, type, NULL, NULL)) == 0)		return SNMP_NOSUCHNAME;	if ((local = MibRmon(Obj, DiscNodeControlInstance, IdLen, len)) == NULL)		return SNMP_NOSUCHNAME;	switch (Obj->Request)	{	case SNMP_PDU_NEXT:		if (RmonNext(Obj, &local, IdLen, type, len, &data) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if (data == NULL && (data = DiscNodeTimeSearch(local->Data, type, Obj, IdLen)) == NULL)			return SNMP_NOSUCHNAME;		Obj->Syntax.LngInt = local->Index;		return SNMP_NOERROR;	}	return SNMP_GENERROR;}WORD DiscNodeTimeInPkts(SNMP_OBJECT * Obj, WORD IdLen){	MIB_LOCAL *local = NULL;	DISCNODE *data = NULL;	INT type;	WORD len;	if ((type = DiscTableType(Obj, IdLen)) == 0)		return SNMP_NOSUCHNAME;	if ((len = DiscTableLen(type, type, NULL, NULL)) == 0)		return SNMP_NOSUCHNAME;	if ((local = MibRmon(Obj, DiscNodeControlInstance, IdLen, len)) == NULL)		return SNMP_NOSUCHNAME;	switch (Obj->Request)	{	case SNMP_PDU_NEXT:		if (RmonNext(Obj, &local, IdLen, type, len, &data) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if (data == NULL && (data = DiscNodeTimeSearch(local->Data, type, Obj, IdLen)) == NULL)			return SNMP_NOSUCHNAME;		Obj->Syntax.LngUns = data->InPkts;		return SNMP_NOERROR;	}	return SNMP_GENERROR;}WORD DiscNodeTimeOutPkts(SNMP_OBJECT * Obj, WORD IdLen){	MIB_LOCAL *local = NULL;	DISCNODE *data = NULL;	INT type;	WORD len;	if ((type = DiscTableType(Obj, IdLen)) == 0)		return SNMP_NOSUCHNAME;	if ((len = DiscTableLen(type, type, NULL, NULL)) == 0)		return SNMP_NOSUCHNAME;	if ((local = MibRmon(Obj, DiscNodeControlInstance, IdLen, len)) == NULL)		return SNMP_NOSUCHNAME;	switch (Obj->Request)	{	case SNMP_PDU_NEXT:		if (RmonNext(Obj, &local, IdLen, type, len, &data) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if (data == NULL && (data = DiscNodeTimeSearch(local->Data, type, Obj, IdLen)) == NULL)			return SNMP_NOSUCHNAME;		Obj->Syntax.LngUns = data->OutPkts;		return SNMP_NOERROR;	}	return SNMP_GENERROR;}WORD DiscNodeTimeInOctets(SNMP_OBJECT * Obj, WORD IdLen){	MIB_LOCAL *local = NULL;	DISCNODE *data = NULL;	INT type;	WORD len;	if ((type = DiscTableType(Obj, IdLen)) == 0)		return SNMP_NOSUCHNAME;	if ((len = DiscTableLen(type, type, NULL, NULL)) == 0)		return SNMP_NOSUCHNAME;	if ((local = MibRmon(Obj, DiscNodeControlInstance, IdLen, len)) == NULL)		return SNMP_NOSUCHNAME;	switch (Obj->Request)	{	case SNMP_PDU_NEXT:		if (RmonNext(Obj, &local, IdLen, type, len, &data) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if (data == NULL && (data = DiscNodeTimeSearch(local->Data, type, Obj, IdLen)) == NULL)			return SNMP_NOSUCHNAME;		Obj->Syntax.LngUns = data->InOctets;		return SNMP_NOERROR;	}	return SNMP_GENERROR;}WORD DiscNodeTimeOutOctets(SNMP_OBJECT * Obj, WORD IdLen){	MIB_LOCAL *local = NULL;	DISCNODE *data = NULL;	INT type;	WORD len;	if ((type = DiscTableType(Obj, IdLen)) == 0)		return SNMP_NOSUCHNAME;	if ((len = DiscTableLen(type, type, NULL, NULL)) == 0)		return SNMP_NOSUCHNAME;	if ((local = MibRmon(Obj, DiscNodeControlInstance, IdLen, len)) == NULL)		return SNMP_NOSUCHNAME;	switch (Obj->Request)	{	case SNMP_PDU_NEXT:		if (RmonNext(Obj, &local, IdLen, type, len, &data) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if (data == NULL && (data = DiscNodeTimeSearch(local->Data, type, Obj, IdLen)) == NULL)			return SNMP_NOSUCHNAME;		Obj->Syntax.LngUns = data->OutOctets;		return SNMP_NOERROR;	}	return SNMP_GENERROR;}WORD DiscNodeTimeLRUTime(SNMP_OBJECT * Obj, WORD IdLen){	MIB_LOCAL *local = NULL;	DISCNODE *data = NULL;	INT type;	WORD len;	if ((type = DiscTableType(Obj, IdLen)) == 0)		return SNMP_NOSUCHNAME;	if ((len = DiscTableLen(type, type, NULL, NULL)) == 0)		return SNMP_NOSUCHNAME;	if ((local = MibRmon(Obj, DiscNodeControlInstance, IdLen, len)) == NULL)		return SNMP_NOSUCHNAME;	switch (Obj->Request)	{	case SNMP_PDU_NEXT:		if (RmonNext(Obj, &local, IdLen, type, len, &data) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if (data == NULL && (data = DiscNodeTimeSearch(local->Data, type, Obj, IdLen)) == NULL)			return SNMP_NOSUCHNAME;		Obj->Syntax.LngUns = data->LRUTime;		return SNMP_NOERROR;	}	return SNMP_GENERROR;}LONG TableSize(DISCNODE_CONTROL * discnodecontrol, INT type){	switch (type)	{	case DISC_TYPE_ETHTIME:		return discnodecontrol->EthTableSize;	case DISC_TYPE_IPTIME:		return discnodecontrol->IPTableSize;	case DISC_TYPE_UDPTIME:		return discnodecontrol->UDPTableSize;	case DISC_TYPE_TCPTIME:		return discnodecontrol->TCPTableSize;	default:		DnpapMessage(DMC_FATAL, DISC_TYPE, "discnodecontrol: unknown type");		DnpapExit(DISC_TYPE);	}	return 0;}INT DiscTableType(SNMP_OBJECT * obj, WORD idlen){	LONG disctable[] =	{BTNG_MIB, 16};	INT disctablelen = sizeof(disctable) / sizeof(disctable[0]);	if (obj->Id[disctablelen] == DISC_TABLE_ETHNODE)		return DISC_TYPE_ETH;	if (obj->Id[disctablelen] == DISC_TABLE_IPNODE)		return DISC_TYPE_IP;	if (obj->Id[disctablelen] == DISC_TABLE_UDPNODE)		return DISC_TYPE_UDP;	if (obj->Id[disctablelen] == DISC_TABLE_TCPNODE)		return DISC_TYPE_TCP;	if (obj->Id[disctablelen] == DISC_TABLE_ETHTIME)		return DISC_TYPE_ETHTIME;	if (obj->Id[disctablelen] == DISC_TABLE_IPTIME)		return DISC_TYPE_IPTIME;	if (obj->Id[disctablelen] == DISC_TABLE_UDPTIME)		return DISC_TYPE_UDPTIME;	if (obj->Id[disctablelen] == DISC_TABLE_TCPTIME)		return DISC_TYPE_TCPTIME;	return 0;}WORD DiscTableLen(INT type, INT addrtype, WORD * offset, WORD * sublen){	LONG disctable[] =	{BTNG_MIB, 16};	INT disctablelen = sizeof(disctable) / sizeof(disctable[0]);	switch (addrtype)	{	case DISC_TYPE_ETH:	case DISC_TYPE_ETHTIME:		offset != NULL ? *offset = 0 : 0;		sublen != NULL ? *sublen = DISC_SIZE_ETHADDR : 0;		break;	case DISC_TYPE_IP:	case DISC_TYPE_IPTIME:		offset != NULL ? *offset = DISC_SIZE_ETHADDR : 0;		sublen != NULL ? *sublen = DISC_SIZE_IPADDR : 0;		break;	case DISC_TYPE_UDP:	case DISC_TYPE_UDPTIME:		offset != NULL ? *offset = DISC_SIZE_TOIPADDR : 0;		sublen != NULL ? *sublen = DISC_SIZE_UDPADDR : 0;		break;	case DISC_TYPE_TCP:	case DISC_TYPE_TCPTIME:		offset != NULL ? *offset = DISC_SIZE_TOIPADDR : 0;		sublen != NULL ? *sublen = DISC_SIZE_TCPADDR : 0;		break;	default:		DnpapMessage(DMC_FATAL, DISC_TYPE, "discnodecontrol: unknown type");		DnpapExit(DISC_TYPE);	}	switch (type)	{	case DISC_TYPE_ETH:		return DISC_ETHNODEINDEXSIZE;	case DISC_TYPE_IP:		return DISC_IPNODEINDEXSIZE;	case DISC_TYPE_UDP:		return DISC_UDPNODEINDEXSIZE;	case DISC_TYPE_TCP:		return DISC_TCPNODEINDEXSIZE;	case DISC_TYPE_ETHTIME:		return DISC_ETHTIMEINDEXSIZE;	case DISC_TYPE_IPTIME:		return DISC_IPTIMEINDEXSIZE;	case DISC_TYPE_UDPTIME:		return DISC_UDPTIMEINDEXSIZE;	case DISC_TYPE_TCPTIME:		return DISC_TCPTIMEINDEXSIZE;	default:		DnpapMessage(DMC_FATAL, DISC_TYPE, "discnodecontrol: unknown type");		DnpapExit(DISC_TYPE);	}	return 0;}VOID DiscNodeChannelStop(LONG channelIndex){	MIB_LOCAL *discinstance;	DISCNODE_CONTROL *discnodecontrol;	for (discinstance = DiscNodeControlInstance; discinstance != NULL; discinstance = discinstance->Next)	{		discnodecontrol = discinstance->Data;		if (discnodecontrol->Status == SNMP_VALID &&			discnodecontrol->Channel == TRUE &&			discnodecontrol->ChannelAccept == TRUE &&			discnodecontrol->Source[discnodecontrol->SourceLen - 1] == channelIndex)			discnodecontrol->ChannelAccept = FALSE;	}}VOID DiscNodePkt(LONG channelIndex, PROT_PKT * pkt){	MIB_LOCAL *discinstance;	DISCNODE_CONTROL *discnodecontrol;	for (discinstance = DiscNodeControlInstance; discinstance != NULL; discinstance = discinstance->Next)	{		discnodecontrol = discinstance->Data;		if (discnodecontrol->Status == SNMP_VALID &&			discnodecontrol->Channel == TRUE &&			discnodecontrol->ChannelAccept == TRUE &&			discnodecontrol->Source[discnodecontrol->SourceLen - 1] == channelIndex)			DiscNodeHandlePkt(discnodecontrol, pkt);	}}

⌨️ 快捷键说明

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