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

📄 dfilterm.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 <limits.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <memory.h>#include <mibsup.h>#include <message.h>#include <protocol.h>#include "dfiltere.h"#include "dfilterc.h"#include "dfilter.h"IMPORT BOOLEAN BeholderStrictRMON;#define INDEXSIZE   1static MIB_LOCAL    *filter = NULL;static BOOLEAN RmonNext (SNMP_OBJECT *Obj, MIB_LOCAL **Local, WORD IdLen, WORD IdSze, DNPAP_FILTER **Elm);BOOLEAN DnpapFilterMInit(VOID){    MessageConfig(DNPAP_FILTER_ERROR, "DnpapFilter");    return TRUE;}/******************************************************************* NAME:        RmonNext** SYNOPSIS:    BOOLEAN RmonNext (SNMP_OBJECT *Obj,**                                  MIB_LOCAL **Local, WORD IdLen,**                                  WORD IdSze, VOID **Elm)** PARAMETERS:  Obj: requested object**              Local: local datastructure: a collector**              IdLen: identifier length known to the MIB**              IdSze: size part application of identifier**                     including the collector index !!**              Elm: pointer to object if tables are used** DESCRIPTION: application specific RMON NEXT function.**              only called after MibRmon() for next requests **              searches the next object in the collector** REMARKS:     ONLY FOR INTERNAL USE** RETURNS:     TRUE: object found**                    OPTIONAL: Elm -> pointer to object in table*******************************************************************/static BOOLEAN RmonNext(SNMP_OBJECT *Obj, MIB_LOCAL **Local, WORD IdLen, WORD IdSze, DNPAP_FILTER **Elm){    MIB_LOCAL    *local = *Local;    if (local == NULL)        return FALSE;    if (Obj->IdLen == IdLen || local->Index > Obj->Id[IdLen])    {        /********************************************************************        **  OPTIONAL: search function to find first obj in a table !!         **  if (not found)        **      search next collector        **  adjust object identifier to identifier first object        **  Elm -> found table obj        ********************************************************************/        Obj->IdLen = IdLen + IdSze;        Obj->Id[IdLen] = local->Index;        return TRUE;    }    /********************************************************************    **  OPTIONAL: search function to find next obj in a table !!     **  if (found)    **      adjust object identifier to identifier next object    **      Elm -> found table obj    **      return TRUE    ********************************************************************/    *Local = local->Next;    return (RmonNext(Obj, Local, IdLen, IdSze, Elm));}WORD DnpapFilterIndex(SNMP_OBJECT *Obj, WORD IdLen){    MIB_LOCAL    *local = NULL;    if ((local = MibRmon (Obj, filter, IdLen, INDEXSIZE)) == NULL)        return(SNMP_NOSUCHNAME);    switch (Obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (Obj, &local, IdLen, INDEXSIZE, NULL) == 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 DnpapFilterChannelIndex(SNMP_OBJECT *Obj, WORD IdLen){    MIB_LOCAL   *local = NULL;    DNPAP_FILTER      *data;    if ((local = MibRmon(Obj, filter, IdLen, INDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;    switch (Obj->Request)    {               case SNMP_PDU_NEXT:        if (RmonNext (Obj, &local, IdLen, INDEXSIZE, NULL) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        data = (DNPAP_FILTER*) local->Data;		if (BeholderStrictRMON && !BooleanCheck(data->ObjectSet, FILTER_BOOLEAN_CHANNEL))			return SNMP_NOSUCHNAME;        Obj->Syntax.LngInt = data->Channel;        return SNMP_NOERROR;    case SNMP_PDU_SET:        data = (DNPAP_FILTER*) local->Data;        data->Channel = Obj->Syntax.LngInt;		BooleanSetTrue(data->ObjectSet, FILTER_BOOLEAN_CHANNEL);        return SNMP_NOERROR;    }    return SNMP_GENERROR;}WORD DnpapFilterPktDataOffset(SNMP_OBJECT *Obj, WORD IdLen){    MIB_LOCAL   *local = NULL;    DNPAP_FILTER      *data;    if ((local = MibRmon(Obj, filter, IdLen, INDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;    switch (Obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (Obj, &local, IdLen, INDEXSIZE, NULL) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        data = (DNPAP_FILTER*) local->Data;        Obj->Syntax.LngInt = data->PktDataOffset;        return SNMP_NOERROR;    case SNMP_PDU_SET:        data = (DNPAP_FILTER*) local->Data;        if (Obj->Syntax.LngInt < 0)            return SNMP_BADVALUE;        data->PktDataOffset = Obj->Syntax.LngInt;        return SNMP_NOERROR;    }    return SNMP_GENERROR;}WORD DnpapFilterPktData(SNMP_OBJECT *Obj, WORD IdLen){    MIB_LOCAL   *local = NULL;    DNPAP_FILTER      *data;    BYTE        *datap, *maskp, *notp;    WORD        i;    if ((local = MibRmon(Obj, filter, IdLen, INDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;    switch (Obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (Obj, &local, IdLen, INDEXSIZE, NULL) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        data = (DNPAP_FILTER*) local->Data;        memcpy(Obj->Syntax.BufChr, data->PktData, Obj->SyntaxLen = data->PktDataLen);        return SNMP_NOERROR;    case SNMP_PDU_SET:        data = (DNPAP_FILTER*) local->Data;        if (data->Status != SNMP_UNDERCREATION)            return SNMP_READONLY;        if (Obj->SyntaxLen > SNMP_SIZE_BUFCHR)            return SNMP_BADVALUE;        if ((datap = DnpapRealloc(data->PktData, Obj->SyntaxLen)) == NULL)            return SNMP_GENERROR;        if ((maskp = DnpapRealloc(data->PktDataMask, Obj->SyntaxLen)) == NULL)        {            DnpapFree(datap);            return SNMP_GENERROR;        }        if ((notp = DnpapRealloc(data->PktDataNotMask, Obj->SyntaxLen)) == NULL)        {            DnpapFree(datap);            DnpapFree(maskp);            return SNMP_GENERROR;        }        data->PktData = datap;        data->PktDataMask = maskp;        data->PktDataNotMask = notp;        for (i = data->PktDataMaskLen; i < Obj->SyntaxLen; i++)            data->PktDataMask[i] = 0xff;        if (Obj->SyntaxLen < data->PktDataMaskLen)            data->PktDataMaskLen = Obj->SyntaxLen;        for (i = data->PktDataNotMaskLen; i < Obj->SyntaxLen; i++)            data->PktDataNotMask[i] = 0x00;        if (Obj->SyntaxLen < data->PktDataNotMaskLen)            data->PktDataNotMaskLen = Obj->SyntaxLen;        memcpy(data->PktData, Obj->Syntax.BufChr, data->PktDataLen = Obj->SyntaxLen);        return SNMP_NOERROR;    }    return SNMP_GENERROR;}WORD DnpapFilterPktDataMask(SNMP_OBJECT *Obj, WORD IdLen){    MIB_LOCAL   *local = NULL;    DNPAP_FILTER      *data;    WORD        i;    if ((local = MibRmon(Obj, filter, IdLen, INDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;    switch (Obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (Obj, &local, IdLen, INDEXSIZE, NULL) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        data = (DNPAP_FILTER*) local->Data;        memcpy(Obj->Syntax.BufChr, data->PktDataMask, Obj->SyntaxLen = data->PktDataMaskLen);        return SNMP_NOERROR;    case SNMP_PDU_SET:        data = (DNPAP_FILTER*) local->Data;        if (data->Status != SNMP_UNDERCREATION)            return SNMP_READONLY;        if (Obj->SyntaxLen > SNMP_SIZE_BUFCHR || Obj->SyntaxLen > data->PktDataLen)            return SNMP_BADVALUE;        memcpy(data->PktDataMask, Obj->Syntax.BufChr, Obj->SyntaxLen);        for (i = Obj->SyntaxLen; i < data->PktDataLen; i++)            data->PktDataMask[i] = 0xff;        data->PktDataMaskLen = Obj->SyntaxLen;        return SNMP_NOERROR;    }    return SNMP_GENERROR;}WORD DnpapFilterPktDataNotMask(SNMP_OBJECT *Obj, WORD IdLen){    MIB_LOCAL   *local = NULL;    DNPAP_FILTER      *data;    WORD        i;    if ((local = MibRmon(Obj, filter, IdLen, INDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;    switch (Obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (Obj, &local, IdLen, INDEXSIZE, NULL) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        data = (DNPAP_FILTER*) local->Data;        memcpy(Obj->Syntax.BufChr, data->PktDataNotMask, Obj->SyntaxLen = data->PktDataNotMaskLen);        return SNMP_NOERROR;    case SNMP_PDU_SET:        data = (DNPAP_FILTER*) local->Data;        if (data->Status != SNMP_UNDERCREATION)            return SNMP_READONLY;        if (Obj->SyntaxLen > SNMP_SIZE_BUFCHR || Obj->SyntaxLen > data->PktDataLen)            return SNMP_BADVALUE;        memcpy(data->PktDataNotMask, Obj->Syntax.BufChr, Obj->SyntaxLen);        for (i = Obj->SyntaxLen; i < data->PktDataLen; i++)            data->PktDataNotMask[i] = 0x00;        data->PktDataNotMaskLen = Obj->SyntaxLen;        return SNMP_NOERROR;    }    return SNMP_GENERROR;

⌨️ 快捷键说明

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