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

📄 channelc.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   *//************************************************************************** MODULE INFORMATION **************************** FILE NAME:          channelc.c** SYSTEM NAME:        beholder** MODULE NAME:        channel** ORIGINAL AUTHOR(S): M.F.B. de Greeve** VERSION NUMBER:     1.0** CREATION DATE:      1992/9/16** DESCRIPTION:        channel of the RMON MIB filter group*************************************************************************/#include <stdlib.h>#include <memory.h>#include <dnpap.h>#include <message.h>#include <mac.h>#include <filter.h>#include <event.h>#include <capture.h>#include <host.h>#include <matrix.h>#include <discnod.h>#include <disccon.h>#include <trap.h>#include "channele.h"#include "channelc.h"IMPORT BOOLEAN BeholderStrictRMON;static BOOLEAN ChannelMacCallback(MAC_COLL * collector, PROT_PKT * pkt);/******************************************************************* NAME:        ChannelInit** SYNOPSIS:    BOOLEAN ChannelInit (CHANNEL *channel)** PARAMETERS:  pointer to data etherChannels entry** DESCRIPTION: initializes collector.** REMARKS:     called when status is CREATE_REQUEST: see channelm.c** RETURNS:     TRUE: everything OK**              FALSE: timer or net not initialized*******************************************************************/BOOLEAN ChannelInit(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, CHANNEL_NETINIT, "channel: network init");		return (FALSE);	}	BooleanSetAllTrue(channel->ObjectSet);	BooleanSetFalse(channel->ObjectSet, CHANNEL_BOOLEAN_INDEX);	BooleanSetFalse(channel->ObjectSet, CHANNEL_BOOLEAN_OWNER);	return (TRUE);}/******************************************************************* NAME:        ChannelStart** SYNOPSIS:    BOOLEAN ChannelStart (CHANNEL *channel)** PARAMETERS:  pointer to data etherChannels entry** DESCRIPTION: starts collector.** REMARKS:     called when status is VALID: see channelm.c** RETURNS:     TRUE: everything OK**              FALSE: timer or net not registered*******************************************************************/BOOLEAN ChannelStart(CHANNEL * channel){	if (BeholderStrictRMON && !BooleanCheckAllTrue(channel->ObjectSet))		return FALSE;	channel->Coll.Rcve = ChannelMacCallback;	channel->Coll.specific = channel;	if (!MacCollRegister(&(channel->Coll)))	{		DnpapMessage(DMC_ERROR, CHANNEL_NETINIT, "channel: network init");		return (FALSE);	}	return (TRUE);}/******************************************************************* NAME:        ChannelStop ** SYNOPSIS:    BOOLEAN ChannelcStop (CHANNEL *etherChannels)** PARAMETERS:  pointer to etherChannels entry** DESCRIPTION: stops collector.** REMARKS:     called when status is INVALID: see channelm.c** RETURNS:     TRUE: timer & net registration removed *******************************************************************/BOOLEAN ChannelStop(CHANNEL * channel){	CaptureChannelStop(channel->Index);	HostChannelStop(channel->Index);	MatrixChannelStop(channel->Index);	DiscNodeChannelStop(channel->Index);	DiscConnChannelStop(channel->Index);	MacCollRemove(&(channel->Coll));	return (TRUE);}/******************************************************************* NAME:        ChannelNetCallback** PARAMETERS:  see Net-manual** DESCRIPTION: analyses packets received from net** REMARKS:     none** RETURNS:     VOID*******************************************************************/BOOLEAN ChannelMacCallback(MAC_COLL * collector, PROT_PKT * pkt){	BOOLEAN filterFlag = FALSE, packetMatch;	CHANNEL *channel = collector->specific;	filterFlag = FilterPkt(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 (GenerateEvent("channel", channel->EventIndex, SNMP_TRAP_ENTSPECIFIC, TRAP_SPECIFIC_PACKETMATCH, NULL, 0) == TRUE)					channel->EventStatus = 2;				break;			case 3:					/* event always ready */				GenerateEvent("channel", channel->EventIndex, SNMP_TRAP_ENTSPECIFIC, TRAP_SPECIFIC_PACKETMATCH, NULL, 0);				break;			case 2:					/* event fired once */				break;			}			CapturePkt(channel->Index, pkt);			HostPkt(channel->Index, pkt);			MatrixPkt(channel->Index, pkt);			DiscNodePkt(channel->Index, pkt);			DiscConnPkt(channel->Index, pkt);		}	}	return TRUE;}

⌨️ 快捷键说明

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