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