📄 ptypec.c
字号:
/* Beholder RMON ethernet network monitor,Copyright (C) 1993 DNPAP group *//* See file COPYING 'GNU General Public Licence' for copyright details */#include <stdio.h>#include <stdlib.h>#include <stdarg.h>#include <string.h>#include <dnpap.h>#include <message.h>#include <mac.h>#include <protocol.h>#include "ptypee.h"#include "ptypec.h"IMPORT BOOLEAN BeholderStrictRMON;static BOOLEAN PacketTypeMacCallback(MAC_COLL * collector, PROT_PKT * pkt);/******************************************************************* NAME: PacketTypeCInit** SYNOPSIS: BOOLEAN PacketTypeCInit (PACKET_TYPE *packetType)** PARAMETERS: pointer to data packetType entry** DESCRIPTION: initializes collector.** REMARKS: called when status is CREATE_REQUEST: see typem.c** RETURNS: TRUE: everything OK** FALSE: net not initialized*******************************************************************/BOOLEAN PacketTypeCInit(PACKET_TYPE * packetType){ LONG source[] = {1, 3, 6, 1, 2, 1, 2, 2, 1, 1, 1}; packetType->SourceLen = sizeof(source) / sizeof(long); memcpy(packetType->Source, source, sizeof(source)); if (MacIfaceGet((WORD) packetType->Source[packetType->SourceLen - 1]) == NULL) { DnpapMessage(DMC_ERROR, TYPE_NETINIT, "packetType: network initialization failed"); return (FALSE); } BooleanSetAllTrue(packetType->ObjectSet); BooleanSetFalse(packetType->ObjectSet, TYPE_BOOLEAN_DATASOURCE); BooleanSetFalse(packetType->ObjectSet, TYPE_BOOLEAN_OWNER); return TRUE;}/******************************************************************* NAME: PacketTypeCStart** SYNOPSIS: BOOLEAN PacketTypeCStart (PACKET_TYPE *packetType)** PARAMETERS: pointer to data packetType entry** DESCRIPTION: starts collector.** REMARKS: called when status is VALID: see typem.c** RETURNS: TRUE: everything OK** FALSE: net not registered*******************************************************************/BOOLEAN PacketTypeCStart(PACKET_TYPE * packetType){ if (BeholderStrictRMON && !BooleanCheckAllTrue(packetType->ObjectSet)) return FALSE; packetType->Coll.Rcve = PacketTypeMacCallback; packetType->Coll.specific = packetType; if (!MacCollRegister(&(packetType->Coll))) { DnpapMessage(DMC_ERROR, TYPE_NETINIT, "packetType: network initialization failed"); return (FALSE); } packetType->Octets = 0; packetType->Pkts = 0; return TRUE;}/******************************************************************* NAME: PacketTypeCStop ** SYNOPSIS: BOOLEAN PacketTypeCStop (PACKET_TYPE *packetType)** PARAMETERS: pointer to packetType entry** DESCRIPTION: stops collector.** REMARKS: called when status is INVALID: see typem.c** RETURNS: TRUE: net registration removed *******************************************************************/BOOLEAN PacketTypeCStop(PACKET_TYPE * packetType){ MacCollRemove(&(packetType->Coll)); return TRUE;}/******************************************************************* NAME: StatMacCallback** PARAMETERS: see Net manual** DESCRIPTION: analyses packets received from net** REMARKS: none** RETURNS: VOID*******************************************************************/BOOLEAN PacketTypeMacCallback(MAC_COLL * collector, PROT_PKT * pkt){ PACKET_TYPE *packetType = collector->specific; PROT_OBJ Interface = {1, {1, 2}}; PROT_OBJ Size = {1, {1, 4}}; PROT_OBJ Type = {1, {2, 3}}; /* ethernet type field */ ULONG size; if (ProtGetField(pkt, &Interface) == TRUE && Interface.Syntax.LngInt == packetType->Source[packetType->SourceLen - 1]) { if (ProtGetField(pkt, &Type) == TRUE) if ((WORD) Type.Syntax.LngUns == packetType->Match) if (ProtGetField(pkt, &Size) == TRUE) { packetType->Pkts++; size = Size.Syntax.LngUns + 4L; /* + 4L because of 'forgotten' CRC octets */ packetType->Octets += size; } } return TRUE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -