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

📄 reachm.c

📁 嵌入式RMON,RMON为Remote monitor的缩写,基于SNMP为网络提供主动监控及错误告警,智能交换路由必备协议
💻 C
📖 第 1 页 / 共 2 页
字号:
/* Beholder RMON ethernet network monitor,Copyright (C) 1993 DNPAP group *//* See file COPYING 'GNU General Public Licence' for copyright details   */#include <dnpap.h>#include <dmath.h>#include <dmemory.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <mibsup.h>#include <message.h>#include "reache.h"#include "reachc.h"#include "reach.h"IMPORT BOOLEAN BeholderStrictRMON;#define CONTROLINDEXSIZE    1#define FLOAT_SCALE         1000#define DOUBLE_SCALE        1000000000Lstatic MIB_LOCAL    *ReachInstance = NULL;static BOOLEAN RmonNext(SNMP_OBJECT *obj, MIB_LOCAL **local, WORD idlen, WORD indexsize);BOOLEAN ReachMInit(VOID){    MessageConfig(REACH_ERROR, "Reachability");    return ReachConfigInit();}BOOLEAN RmonNext(SNMP_OBJECT *obj, MIB_LOCAL **local, WORD idlen, WORD indexsize){    if (*local == NULL || indexsize < 1)        return FALSE;    if (obj->IdLen == idlen || (*local)->Index > obj->Id[idlen] ||        (*local = (*local)->Next) != NULL)    {        obj->Id[idlen] = (*local)->Index;        obj->IdLen = idlen + indexsize;        return TRUE;    }    return FALSE;}WORD ReachIndex(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL    *local = NULL;    if ((local = MibRmon (obj, ReachInstance, idlen, CONTROLINDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;    switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (obj, &local, idlen, CONTROLINDEXSIZE) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        obj->Syntax.LngInt = local->Index;        return SNMP_NOERROR;    case SNMP_PDU_SET:        return SNMP_READONLY;    }    return SNMP_GENERROR;}WORD ReachIPAddress(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL;			    if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, 1) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:        data = (Reach*)local->Data;		if (BeholderStrictRMON && !BooleanCheck(data->ObjectSet, REACH_BOOLEAN_ADDRESS))			return SNMP_NOSUCHNAME;        obj->Syntax.LngUns = mem2ulong(data->IPAddress);		return SNMP_NOERROR;	case SNMP_PDU_SET:        data = (Reach*)local->Data;		if (data->Status != SNMP_UNDERCREATION)			return SNMP_READONLY;        ulong2mem(data->IPAddress, obj->Syntax.LngUns);		BooleanSetTrue(data->ObjectSet, REACH_BOOLEAN_ADDRESS);		return SNMP_NOERROR;	}    return SNMP_GENERROR;}WORD ReachDelay(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL;			    if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, 1) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:        data = (Reach*)local->Data;        obj->Syntax.LngInt = data->Delay;		return SNMP_NOERROR;	case SNMP_PDU_SET:        data = (Reach*)local->Data;        if (data->Status != SNMP_UNDERCREATION)            return SNMP_READONLY;        if (obj->Syntax.LngInt <= 0 || obj->Syntax.LngInt > 2000000L)            return SNMP_BADVALUE;        data->Delay = obj->Syntax.LngInt;        return SNMP_NOERROR;	}    return SNMP_GENERROR;}WORD ReachTimeout(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL;			    if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, 1) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:        data = (Reach*)local->Data;        obj->Syntax.LngInt = data->Timeout;		return SNMP_NOERROR;	case SNMP_PDU_SET:        data = (Reach*)local->Data;        if (data->Status != SNMP_UNDERCREATION)            return SNMP_READONLY;        if (obj->Syntax.LngInt <= 10 || obj->Syntax.LngInt > 2000000L)            return SNMP_BADVALUE;        data->Timeout = obj->Syntax.LngInt;        return SNMP_NOERROR;	}    return SNMP_GENERROR;}WORD ReachValueSteps(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL;			    if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, 1) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:        data = (Reach*)local->Data;        obj->Syntax.LngInt = data->ValueSteps;		return SNMP_NOERROR;	case SNMP_PDU_SET:        data = (Reach*)local->Data;        if (data->Status != SNMP_UNDERCREATION)            return SNMP_READONLY;        if (obj->Syntax.LngInt < 1 || obj->Syntax.LngInt > 100)            return SNMP_BADVALUE;        data->ValueSteps = obj->Syntax.LngInt;        return SNMP_NOERROR;	}    return SNMP_GENERROR;}WORD ReachICMPWeight(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL;			    if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, 1) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:        data = (Reach*)local->Data;        obj->Syntax.LngInt = (LONG)(data->ICMPWeight*DOUBLE_SCALE);		return SNMP_NOERROR;	case SNMP_PDU_SET:        data = (Reach*)local->Data;        if (data->Status != SNMP_UNDERCREATION)            return SNMP_READONLY;        data->ICMPWeight = ((DOUBLE)obj->Syntax.LngInt)/DOUBLE_SCALE;        return SNMP_NOERROR;	}    return SNMP_GENERROR;}WORD ReachUDPWeight(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL;			    if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, 1) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:        data = (Reach*)local->Data;        obj->Syntax.LngInt = (LONG)(data->UDPWeight*DOUBLE_SCALE);		return SNMP_NOERROR;	case SNMP_PDU_SET:        data = (Reach*)local->Data;        if (data->Status != SNMP_UNDERCREATION)            return SNMP_READONLY;        data->UDPWeight = ((DOUBLE)obj->Syntax.LngInt)/DOUBLE_SCALE;        return SNMP_NOERROR;	}    return SNMP_GENERROR;}WORD ReachRemaining(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL;			    if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, 1) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:        data = (Reach*)local->Data;        obj->Syntax.LngInt = data->Remaining;		return SNMP_NOERROR;	case SNMP_PDU_SET:        data = (Reach*)local->Data;        if (obj->Syntax.LngInt < 1)            return SNMP_BADVALUE;        data->Remaining = obj->Syntax.LngInt;        if (data->Status == SNMP_VALID)        {            if (ReachCStop(data) == FALSE)            {                DnpapMessage(DMC_ERROR, REACH_STOP, "reach: collector %ld could not be stopped", local->Index);                return SNMP_GENERROR;            }            if (ReachCStart(data) == FALSE)            {                DnpapMessage(DMC_ERROR, REACH_START, "reach: collector %ld could not be started", local->Index);                return SNMP_BADVALUE;            }        }        return SNMP_NOERROR;	}    return SNMP_GENERROR;}WORD ReachICMPReceived(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL;			    if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, 1) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:        data = (Reach*)local->Data;        obj->Syntax.LngUns = data->ICMPReceived;		return SNMP_NOERROR;	case SNMP_PDU_SET:        return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ReachUDPReceived(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL;			    if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, 1) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:        data = (Reach*)local->Data;        obj->Syntax.LngUns = data->UDPReceived;		return SNMP_NOERROR;	case SNMP_PDU_SET:        return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ReachICMPDropped(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL;			    if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, 1) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:        data = (Reach*)local->Data;        obj->Syntax.LngUns = data->ICMPDropped;		return SNMP_NOERROR;	case SNMP_PDU_SET:        return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ReachUDPDropped(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL;			    if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, 1) == FALSE)

⌨️ 快捷键说明

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