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

📄 ifmib.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 <stdlib.h>#include <stdio.h>#include <config.h>#include <snmp.h>#include <mibrqs.h>#include <mibsup.h>#include <mac.h>#include "ifmib.h"static MAC_STAT stats;static BOOLEAN IfMib(SNMP_OBJECT* obj, WORD idlen);static BOOLEAN IfMibNext(SNMP_OBJECT* obj, WORD idlen);BOOLEAN IfMib(SNMP_OBJECT* obj, WORD idlen){    if (obj->Request != SNMP_PDU_NEXT)    {        if (obj->IdLen != idlen + 1)            return FALSE;        return TRUE;    }    if (obj->IdLen < idlen || obj->IdLen > idlen + 1)	/* bad index */        return FALSE;    return TRUE;}BOOLEAN IfMibNext(SNMP_OBJECT* obj, WORD idlen){    if (obj->IdLen == idlen)	{        obj->Id[idlen] = 1;        obj->IdLen = idlen + 1;        return TRUE;	}	else	if (MacIfaceCount() > obj->Id[idlen])    {        obj->Id[idlen]++;        obj->IdLen = idlen + 1;        return TRUE;    }    return FALSE;}WORD ifNumber(SNMP_OBJECT *obj, WORD idlen){    if (MibSimple(obj, idlen) == FALSE)        return SNMP_NOSUCHNAME;    obj->Syntax.LngInt = MacIfaceCount();    return SNMP_NOERROR;}WORD ifIndex(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		obj->Syntax.LngInt = obj->Id[idlen];		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifDescr(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;    	sprintf(obj->Syntax.BufChr, "%s", iface->descr);		obj->SyntaxLen = strlen(obj->Syntax.BufChr);		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifType(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		obj->Syntax.LngInt = iface->type;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifMtu(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		obj->Syntax.LngInt = iface->mtu;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifSpeed(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		obj->Syntax.LngUns = iface->speed;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifPhysAddress(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		memcpy(obj->Syntax.BufChr, iface->addr, obj->SyntaxLen = iface->addrLength);		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifAdminStatus(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		obj->Syntax.LngInt = (iface->statusAdmin == TRUE ? 1 : 2);		return SNMP_NOERROR;	case SNMP_PDU_SET:									if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		if (obj->Syntax.LngInt != 1 && obj->Syntax.LngInt != 2)			return SNMP_BADVALUE;		iface->statusAdmin = (obj->Syntax.LngInt == 1 ? TRUE : FALSE);		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifOperStatus(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		obj->Syntax.LngInt = (iface->statusOper == TRUE ? 1 : 2);		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifLastChange(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		obj->Syntax.LngUns = 0;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifInOctets(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		MacStatistics(iface, &stats);		obj->Syntax.LngUns = stats.inOctets;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifInUcastPkts(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		MacStatistics(iface, &stats);		obj->Syntax.LngUns = stats.inUcastPkts;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifInNUcastPkts(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		MacStatistics(iface, &stats);		obj->Syntax.LngUns = stats.inNUcastPkts;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifInDiscards(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		MacStatistics(iface, &stats);		obj->Syntax.LngUns = stats.inDiscards;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifInErrors(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		MacStatistics(iface, &stats);		obj->Syntax.LngUns = stats.inErrors;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifInUnknownProtos(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		MacStatistics(iface, &stats);		obj->Syntax.LngUns = stats.inUnknownProtos;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifOutOctets(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		MacStatistics(iface, &stats);		obj->Syntax.LngUns = stats.outOctets;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifOutUcastPkts(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		MacStatistics(iface, &stats);		obj->Syntax.LngUns = stats.outUcastPkts;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifOutNUcastPkts(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		MacStatistics(iface, &stats);		obj->Syntax.LngUns = stats.outNUcastPkts;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifOutDiscards(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		MacStatistics(iface, &stats);		obj->Syntax.LngUns = stats.outDiscards;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifOutErrors(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		MacStatistics(iface, &stats);		obj->Syntax.LngUns = stats.outErrors;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifOutQLen(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		MacStatistics(iface, &stats);		obj->Syntax.LngUns = stats.outQLen;		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}WORD ifSpecific(SNMP_OBJECT *obj, WORD idlen){MAC_IFACE *iface;				   LONG dot3[] = { 1,3,6,1,2,1,10,7 };LONG oidnull[] = { 0, 0 };			    if (IfMib(obj, idlen) == FALSE)		return SNMP_NOSUCHNAME;			switch (obj->Request)	{	case SNMP_PDU_NEXT:        if (IfMibNext(obj, idlen) == FALSE)			return SNMP_NOSUCHNAME;	case SNMP_PDU_GET:		if ((iface = MacIfaceGet(obj->Id[idlen])) == NULL)			return SNMP_NOSUCHNAME;		switch (iface->type)		{		case MAC_TYPE_ETHERNET_CSMACD:		case MAC_TYPE_88023_CSMACD:			memcpy(obj->Syntax.BufInt, dot3, sizeof(dot3));			obj->SyntaxLen = sizeof(dot3)/sizeof(dot3[0]);			break;		default:			memcpy(obj->Syntax.BufInt, oidnull, sizeof(oidnull));			obj->SyntaxLen = sizeof(oidnull)/sizeof(oidnull[0]);			break;		}		return SNMP_NOERROR;	case SNMP_PDU_SET:		return SNMP_READONLY;	}    return SNMP_GENERROR;}

⌨️ 快捷键说明

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