📄 channelc.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 + -