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

📄 dchanc.c

📁 嵌入式RMON,RMON为Remote monitor的缩写,基于SNMP为网络提供主动监控及错误告警,智能交换路由必备协议
💻 C
字号:
/* Beholder RMON ethernet network monitor,Copyright (C) 1993 DNPAP group *//* See file COPYING 'GNU General Public Licence' for copyright details   */#include <stdlib.h>#include <dnpap.h>#include <message.h>#include <mac.h>#include <devent.h>#include <dfilter.h>#include <dcapt.h>#include <dhost.h>#include <dmatrix.h>#include <trap.h>#include "dchane.h"#include "dchanc.h"IMPORT BOOLEAN BeholderStrictRMON;static BOOLEAN ChannelMacCallback(MAC_COLL * collector, PROT_PKT * pkt);BOOLEAN DnpapChannelInit(DNPAP_CHANNEL * channel){	channel->IfIndex = 1;				/* first interface */	channel->AcceptType = 1;			/* accept if filters TRUE */	channel->DataControl = 2;			/* no flow through channel */	channel->EventStatus = 1;			/* only one event is fired */	if ((channel->Iface =		 MacIfaceGet((WORD) channel->IfIndex)) == NULL)	{		DnpapMessage(DMC_ERROR, DCHANNEL_NETINIT, "channel: network init");		return (FALSE);	}	BooleanSetAllTrue(channel->ObjectSet);	BooleanSetFalse(channel->ObjectSet, CHANNEL_BOOLEAN_INDEX);	BooleanSetFalse(channel->ObjectSet, CHANNEL_BOOLEAN_OWNER);	return (TRUE);}BOOLEAN DnpapChannelStart(DNPAP_CHANNEL * channel){	if (BeholderStrictRMON && !BooleanCheckAllTrue(channel->ObjectSet))		return FALSE;	channel->Coll.Rcve = ChannelMacCallback;	channel->Coll.specific = channel;	if (!MacCollRegister(&(channel->Coll)))	{		DnpapMessage(DMC_ERROR, DCHANNEL_NETINIT, "channel: network init");		return (FALSE);	}	return (TRUE);}BOOLEAN DnpapChannelStop(DNPAP_CHANNEL * channel){	DnpapCaptureChannelStop(channel->Index);	DnpapHostChannelStop(channel->Index);	DnpapMatrixChannelStop(channel->Index);	MacCollRemove(&(channel->Coll));	return (TRUE);}BOOLEAN ChannelMacCallback(MAC_COLL * collector, PROT_PKT * pkt){	BOOLEAN filterFlag = FALSE, packetMatch;	DNPAP_CHANNEL *channel = collector->specific;	filterFlag = DnpapFilterPkt(channel->Index, pkt);	if ((channel->AcceptType == 1 && filterFlag == TRUE) ||		(channel->AcceptType == 2 && filterFlag == FALSE))	{		channel->Matches++;		packetMatch = TRUE;	}	else		packetMatch = FALSE;	if (channel->DataControl == 1)		/* channel on */	{		if (packetMatch == TRUE)		{			switch (channel->EventStatus)			{			case 1:					/* event ready */				if (DnpapGenerateEvent("channel", channel->EventIndex, SNMP_TRAP_ENTSPECIFIC, TRAP_SPECIFIC_PACKETMATCH, NULL, 0) == TRUE)					channel->EventStatus = 2;				break;			case 3:					/* event always ready */				DnpapGenerateEvent("channel", channel->EventIndex, SNMP_TRAP_ENTSPECIFIC, TRAP_SPECIFIC_PACKETMATCH, NULL, 0);				break;			case 2:					/* event fired once */				break;			}			DnpapCapturePkt(channel->Index, pkt);			DnpapHostPkt(channel->Index, pkt);			DnpapMatrixPkt(channel->Index, pkt);		}	}	return TRUE;}

⌨️ 快捷键说明

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