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

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