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

📄 hist_m.c

📁 嵌入式RMON,RMON为Remote monitor的缩写,基于SNMP为网络提供主动监控及错误告警,智能交换路由必备协议
💻 C
📖 第 1 页 / 共 3 页
字号:
{MIB_LOCAL        *local = NULL;HISTORY_CONTROL  *data;ETHER_HISTORY    *etherentries;LONG             i, ni, j;    if ((local = MibRmon(obj, HistoryControlInstance, idlen, CONTROLINDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;            switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (obj, &local, idlen, CONTROLINDEXSIZE, NULL) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        data = (HISTORY_CONTROL*) local->Data;        obj->Syntax.LngInt = data->BucketsRequested;        return SNMP_NOERROR;    case SNMP_PDU_SET:        data = (HISTORY_CONTROL*) local->Data;        if (obj->Syntax.LngInt < 1)            return SNMP_BADVALUE;        data->BucketsGranted = LongMin(MemoryGetAvail(), MemoryGetMaxChunk())/sizeof(ETHER_HISTORY);        if (data->BucketsGranted > LongMin(obj->Syntax.LngInt, HistoryMaxNrBuckets))            data->BucketsGranted = LongMin(obj->Syntax.LngInt, HistoryMaxNrBuckets);        if (data->BucketsGranted == data->BucketsAllocated)        {            data->BucketsRequested = obj->Syntax.LngInt;            return SNMP_NOERROR;        }        if ((etherentries = NewEtherHistory(data->BucketsGranted)) == NULL)        {               DelEtherHistory(data->EtherBuckets);            data->EtherBuckets = NULL;            data->BucketsPos = 0;            data->BucketsGranted = 0;            data->BucketsAllocated = 0;            data->BucketsWrapped = FALSE;        }        else        {            if (data->BucketsWrapped == TRUE)                ni = LongMin(data->BucketsGranted, data->BucketsAllocated);            else                ni = LongMin(data->BucketsGranted, data->BucketsPos);            for (i = 0; i < ni; i++)                                   {                            j = data->BucketsPos - ni + i;                if (j < 0)                    j = j + data->BucketsAllocated;                memcpy(etherentries+i, data->EtherBuckets+j, sizeof(ETHER_HISTORY));            }            DelEtherHistory(data->EtherBuckets);            data->EtherBuckets = etherentries;            data->BucketsPos = ni;            data->BucketsAllocated = data->BucketsGranted;            data->BucketsWrapped = FALSE;        }        data->BucketsRequested = obj->Syntax.LngInt;        return SNMP_NOERROR;    }    return SNMP_GENERROR;}WORD HistoryControlBucketsGranted(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL        *local = NULL;HISTORY_CONTROL  *data;    if ((local = MibRmon(obj, HistoryControlInstance, idlen, CONTROLINDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;            switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (obj, &local, idlen, CONTROLINDEXSIZE, NULL) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        data = (HISTORY_CONTROL*) local->Data;        obj->Syntax.LngInt = data->BucketsGranted;        return SNMP_NOERROR;    case SNMP_PDU_SET:        return SNMP_READONLY;    }    return SNMP_GENERROR;}WORD HistoryControlInterval(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL        *local = NULL;HISTORY_CONTROL  *data;    if ((local = MibRmon(obj, HistoryControlInstance, idlen, CONTROLINDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;            switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (obj, &local, idlen, CONTROLINDEXSIZE, NULL) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        data = (HISTORY_CONTROL*) local->Data;        obj->Syntax.LngInt = data->Interval;        return SNMP_NOERROR;    case SNMP_PDU_SET:        data = (HISTORY_CONTROL*) local->Data;        if (data->Status != SNMP_UNDERCREATION)            return SNMP_READONLY;        if (obj->Syntax.LngInt < 1)            return SNMP_BADVALUE;        data->Interval = obj->Syntax.LngInt;        return SNMP_NOERROR;    }    return SNMP_GENERROR;}WORD HistoryControlOwner(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL        *local = NULL;HISTORY_CONTROL  *data;    if ((local = MibRmon(obj, HistoryControlInstance, idlen, CONTROLINDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;    switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, CONTROLINDEXSIZE, NULL) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        data = (HISTORY_CONTROL*) local->Data;		if (BeholderStrictRMON && !BooleanCheck(data->ObjectSet, HISTORY_BOOLEAN_OWNER))			return SNMP_NOSUCHNAME;        memcpy(obj->Syntax.BufChr, data->Owner, data->OwnerLen);        obj->SyntaxLen = data->OwnerLen;        return SNMP_NOERROR;    case SNMP_PDU_SET:        data = (HISTORY_CONTROL*) local->Data;        if (data->Status != SNMP_UNDERCREATION)            return SNMP_READONLY;        memcpy(data->Owner, obj->Syntax.BufChr, obj->SyntaxLen);        data->OwnerLen = obj->SyntaxLen;		BooleanSetTrue(data->ObjectSet, HISTORY_BOOLEAN_OWNER);        return SNMP_NOERROR;    }    return SNMP_GENERROR;}WORD HistoryControlStatus(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL        *local = NULL;HISTORY_CONTROL  *data;    local = MibRmon(obj, HistoryControlInstance, idlen, CONTROLINDEXSIZE);    switch (obj->Request)    {    case SNMP_PDU_GET:        if (local == NULL)        {            obj->Syntax.LngInt = SNMP_INVALID;            return SNMP_NOSUCHNAME;        }        data = (HISTORY_CONTROL*) local->Data;        obj->Syntax.LngInt = data->Status;        return SNMP_NOERROR;    case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, CONTROLINDEXSIZE, NULL) == FALSE)        {            obj->Syntax.LngInt = SNMP_INVALID;            return SNMP_NOSUCHNAME;        }        data = (HISTORY_CONTROL*) local->Data;        obj->Syntax.LngInt = data->Status;        return SNMP_NOERROR;    case SNMP_PDU_SET:        if (local == NULL)        {            switch (obj->Syntax.LngInt)            {            case SNMP_CREATEREQUEST:                if ((local = MibInsert(obj, &HistoryControlInstance, idlen, CONTROLINDEXSIZE)) == NULL)                    return SNMP_GENERROR;                if ((local->Data = DnpapMalloc(sizeof(HISTORY_CONTROL))) == NULL)                    return SNMP_GENERROR;                data = (HISTORY_CONTROL*) local->Data;                memset(data, 0, sizeof(HISTORY_CONTROL));                if (HistoryCInit(data) == TRUE)                {                    data->Status = SNMP_UNDERCREATION;                    DnpapMessage(DMC_MESSAGE, HISTORY_CREATE, "history: collector %ld created", local->Index);                    return SNMP_NOERROR;                }                DnpapFree(local->Data);                MibRemove (obj, &HistoryControlInstance, idlen, CONTROLINDEXSIZE);                return SNMP_GENERROR;            default:                return SNMP_NOSUCHNAME;            }        }        data = (HISTORY_CONTROL*) local->Data;        switch (data->Status)        {        case SNMP_UNDERCREATION:            switch (obj->Syntax.LngInt)            {            case SNMP_VALID:                if (HistoryCStart(data) == TRUE)                {                    data->Status = SNMP_VALID;                    DnpapMessage(DMC_MESSAGE, HISTORY_ACTIVE, "history: collector %ld active", local->Index);                    return SNMP_NOERROR;                }                return SNMP_BADVALUE;            case SNMP_INVALID:                if (HistoryCStop(data) == TRUE)                {                    DnpapFree(local->Data);                    DnpapMessage(DMC_MESSAGE, HISTORY_DESTROY, "history: collector %ld destroyed", local->Index);                    if (MibRemove (obj, &HistoryControlInstance, idlen, CONTROLINDEXSIZE) == TRUE)                        return SNMP_NOERROR;                }                return SNMP_GENERROR;            default:                return SNMP_BADVALUE;            }        case SNMP_VALID:            switch (obj->Syntax.LngInt)            {            case SNMP_VALID:                return SNMP_NOERROR;            case SNMP_INVALID:                if (HistoryCStop(data) == TRUE)                {                    DnpapFree(local->Data);                    DnpapMessage(DMC_MESSAGE, HISTORY_DESTROY, "history: collector %ld destroyed", local->Index);                    if (MibRemove (obj, &HistoryControlInstance, idlen, CONTROLINDEXSIZE) == TRUE)                        return SNMP_NOERROR;                }                return SNMP_GENERROR;            default:                return SNMP_BADVALUE;            }        }    }    return SNMP_GENERROR;}WORD EtherHistoryIndex(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL       *local = NULL;ETHER_HISTORY   *data = NULL;    if ((local = MibRmon (obj, HistoryControlInstance, idlen, HISTORYINDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;    switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (obj, &local, idlen, HISTORYINDEXSIZE, &data) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        if (data == NULL && (data = EtherHistorySearch(local->Data, obj, idlen)) == NULL)            return SNMP_NOSUCHNAME;        obj->Syntax.LngInt = local->Index;        return SNMP_NOERROR;    case SNMP_PDU_SET:        return SNMP_READONLY;    }    return SNMP_GENERROR;}WORD EtherHistorySampleIndex(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL       *local = NULL;ETHER_HISTORY   *data = NULL;    if ((local = MibRmon (obj, HistoryControlInstance, idlen, HISTORYINDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;    switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (obj, &local, idlen, HISTORYINDEXSIZE, &data) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        if (data == NULL && (data = EtherHistorySearch(local->Data, obj, idlen)) == NULL)            return SNMP_NOSUCHNAME;        obj->Syntax.LngInt = obj->Id[idlen+1];        return SNMP_NOERROR;    case SNMP_PDU_SET:        return SNMP_READONLY;    }    return SNMP_GENERROR;}WORD EtherHistoryIntervalStart(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL       *local = NULL;ETHER_HISTORY   *data = NULL;    if ((local = MibRmon (obj, HistoryControlInstance, idlen, HISTORYINDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;    switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (obj, &local, idlen, HISTORYINDEXSIZE, &data) == FALSE)

⌨️ 快捷键说明

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