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