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

📄 dtopn_m.c

📁 嵌入式RMON,RMON为Remote monitor的缩写,基于SNMP为网络提供主动监控及错误告警,智能交换路由必备协议
💻 C
📖 第 1 页 / 共 2 页
字号:
            }        }        data = (DNPAP_TOPN_CONTROL*) local->Data;        switch (data->Status)        {        case SNMP_UNDERCREATION:            switch (obj->Syntax.LngInt)            {            case SNMP_VALID:                if (DnpapTopNCStart(data) == TRUE)                {                    data->Status = SNMP_VALID;                    DnpapMessage(DMC_MESSAGE, DTOPN_START, "dtopN: collector %ld active", local->Index);                    return SNMP_NOERROR;                }                return SNMP_BADVALUE;            case SNMP_INVALID:                if (DnpapTopNCStop(data) == TRUE)                {                    DnpapFree(local->Data);                    DnpapMessage(DMC_MESSAGE, DTOPN_DESTROY, "dtopN: collector %ld destroyed", local->Index);                    if (MibRemove (obj, &TopNControlInstance, 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 (DnpapTopNCStop(data) == TRUE)                {                    DnpapFree(local->Data);                    DnpapMessage(DMC_MESSAGE, DTOPN_DESTROY, "dtopN: collector %ld destroyed", local->Index);                    if (MibRemove (obj, &TopNControlInstance, idlen, CONTROLINDEXSIZE) == TRUE)                        return SNMP_NOERROR;                }                return SNMP_GENERROR;            default:                return SNMP_BADVALUE;            }        }    }    return SNMP_GENERROR;}WORD DnpapHostTopNReport(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL   *local = NULL;DNPAP_TOPN_ENTRY  *data = NULL;    if ((local = MibRmon(obj, TopNControlInstance, idlen, TOPNINDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;            switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (obj, &local, idlen, TOPNINDEXSIZE, &data) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:                                                  if (data == NULL && (data = DnpapTopNEntrySearch(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 DnpapHostTopNIndex(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL   *local = NULL;DNPAP_TOPN_ENTRY  *data = NULL;    if ((local = MibRmon(obj, TopNControlInstance, idlen, TOPNINDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;            switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (obj, &local, idlen, TOPNINDEXSIZE, &data) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:                                                  if (data == NULL && (data = DnpapTopNEntrySearch(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 DnpapHostTopNAddress(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL   *local = NULL;DNPAP_TOPN_ENTRY  *data = NULL;    if ((local = MibRmon(obj, TopNControlInstance, idlen, TOPNINDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;            switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (obj, &local, idlen, TOPNINDEXSIZE, &data) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:                                                  if (data == NULL && (data = DnpapTopNEntrySearch(local->Data, obj, idlen)) == NULL)            return SNMP_NOSUCHNAME;        memcpy(obj->Syntax.BufChr, data->Address, obj->SyntaxLen = ((DNPAP_TOPN_CONTROL *)local->Data)->AddressLen);        return SNMP_NOERROR;    case SNMP_PDU_SET:        return SNMP_READONLY;    }    return SNMP_GENERROR;}WORD DnpapHostTopNRate(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL   *local = NULL;DNPAP_TOPN_ENTRY  *data = NULL;    if ((local = MibRmon(obj, TopNControlInstance, idlen, TOPNINDEXSIZE)) == NULL)        return SNMP_NOSUCHNAME;            switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext (obj, &local, idlen, TOPNINDEXSIZE, &data) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:                                                  if (data == NULL && (data = DnpapTopNEntrySearch(local->Data, obj, idlen)) == NULL)            return SNMP_NOSUCHNAME;        obj->Syntax.LngInt = data->Rate;        return SNMP_NOERROR;    case SNMP_PDU_SET:        return SNMP_READONLY;    }    return SNMP_GENERROR;}BOOLEAN DnpapTopNEntryReset(LONG hostcontrolindex, DNPAP_HOST *host, WORD addrlen){                                 DNPAP_TOPN_CONTROL *topncontrol;DNPAP_TOPN_ENTRY   *entry;MIB_LOCAL    *local;    for (local = TopNControlInstance; local != NULL; local = local->Next)    {        topncontrol = local->Data;        if (topncontrol->Status == SNMP_VALID && topncontrol->HostIndex == hostcontrolindex &&            topncontrol->TimeRemaining > 0)        {			if (topncontrol->AddressLen == 0)				topncontrol->AddressLen = addrlen;			else			if (topncontrol->AddressLen != addrlen)			{				DnpapMessage(DMC_FATAL, DTOPN_INCONSISTENT, "dtopncontrol: inconsistent address length encountered");				DnpapExit(1);			}														   			            if ((entry = HashSearch(topncontrol->Table, host->Address, addrlen)) != NULL)                entry->PrevValue = 0;        }    }    return TRUE;}BOOLEAN DnpapTopNEntryUpdate(LONG hostcontrolindex, DNPAP_HOST *host, WORD addrlen){                                 DNPAP_TOPN_CONTROL *topncontrol;DNPAP_TOPN_ENTRY   *entry;MIB_LOCAL    *local;    for (local = TopNControlInstance; local != NULL; local = local->Next)    {        topncontrol = local->Data;        if (topncontrol->Status == SNMP_VALID && topncontrol->HostIndex == hostcontrolindex &&            topncontrol->TimeRemaining > 0)        {			if (topncontrol->AddressLen == 0)				topncontrol->AddressLen = addrlen;			else			if (topncontrol->AddressLen != addrlen)			{				DnpapMessage(DMC_FATAL, DTOPN_INCONSISTENT, "dtopncontrol: inconsistent address length encountered");				DnpapExit(1);			}														   			            if ((entry = HashSearch(topncontrol->Table, host->Address, addrlen)) == NULL)            {                if ((entry = DnpapMalloc(sizeof(DNPAP_TOPN_ENTRY))) == NULL)                    return FALSE;                else                {                    memset(entry, 0, sizeof(DNPAP_TOPN_ENTRY));                    memcpy(entry->Address, host->Address, addrlen);                    entry->Rate = 0;                    switch (topncontrol->RateBase)                    {                    case DTOPN_RATEINPKTS:                        entry->PrevValue = host->InPkts;                        break;                    case DTOPN_RATEOUTPKTS:                        entry->PrevValue = host->OutPkts;                        break;                    case DTOPN_RATEINOCTETS:                        entry->PrevValue = host->InOctets;                        break;                    case DTOPN_RATEOUTOCTETS:                        entry->PrevValue = host->OutOctets;                        break;                    case DTOPN_RATEOUTERRORS:                        entry->PrevValue = host->OutErrors;                        break;                    case DTOPN_RATEOUTBROADCASTPKTS:                        entry->PrevValue = host->OutBroadcastPkts;                        break;                    case DTOPN_RATEOUTMULTICASTPKTS:                        entry->PrevValue = host->OutMulticastPkts;                        break;#ifdef NOT_HOST_GENERIC    				case DTOPN_RATEINTCPPKTS:                        entry->PrevValue = host->InTCPPkts;						break;    				case DTOPN_RATEOUTTCPPKTS:                        entry->PrevValue = host->OutTCPPkts;						break;    				case DTOPN_RATEINOTHERPKTS:                        entry->PrevValue = host->InOtherPkts;						break;    				case DTOPN_RATEOUTOTHERPKTS:                        entry->PrevValue = host->OutOtherPkts;						break;#endif    				case DTOPN_RATEINPKTS64:						entry->PrevValue = host->InBucket1Pkts;						break;    				case DTOPN_RATEINPKTS65TO127:						entry->PrevValue = host->InBucket2Pkts;						break;    				case DTOPN_RATEINPKTS128TO255:						entry->PrevValue = host->InBucket3Pkts;						break;    				case DTOPN_RATEINPKTS256TO511:						entry->PrevValue = host->InBucket4Pkts;						break;    				case DTOPN_RATEINPKTS512TO1023:						entry->PrevValue = host->InBucket5Pkts;						break;    				case DTOPN_RATEINPKTS1024TO1518:						entry->PrevValue = host->InBucket6Pkts;						break;    				case DTOPN_RATEOUTPKTS64:						entry->PrevValue = host->OutBucket1Pkts;						break;    				case DTOPN_RATEOUTPKTS65TO127:						entry->PrevValue = host->OutBucket2Pkts;						break;    				case DTOPN_RATEOUTPKTS128TO255:						entry->PrevValue = host->OutBucket3Pkts;						break;    				case DTOPN_RATEOUTPKTS256TO511:						entry->PrevValue = host->OutBucket4Pkts;						break;    				case DTOPN_RATEOUTPKTS512TO1023:						entry->PrevValue = host->OutBucket5Pkts;						break;    				case DTOPN_RATEOUTPKTS1024TO1518:						entry->PrevValue = host->OutBucket6Pkts;						break;                    }                    if (HashAdd(topncontrol->Table, entry->Address, addrlen, entry) == NULL)                    {                        DnpapFree(entry);                        return FALSE;                    }                    else                    {                        DnpapEntryAddList(topncontrol, entry);                        topncontrol->TableSize++;                    }                }            }            else            {                switch (topncontrol->RateBase)                {                case DTOPN_RATEINPKTS:					DTOPN_UPDATE_ENTRY(InPkts);                    break;                case DTOPN_RATEOUTPKTS:					DTOPN_UPDATE_ENTRY(OutPkts);                    break;                case DTOPN_RATEINOCTETS:					DTOPN_UPDATE_ENTRY(InOctets);                    break;                case DTOPN_RATEOUTOCTETS:					DTOPN_UPDATE_ENTRY(OutOctets);                    break;                case DTOPN_RATEOUTERRORS:					DTOPN_UPDATE_ENTRY(OutErrors);                    break;                case DTOPN_RATEOUTBROADCASTPKTS:					DTOPN_UPDATE_ENTRY(OutBroadcastPkts);                    break;                case DTOPN_RATEOUTMULTICASTPKTS:					DTOPN_UPDATE_ENTRY(OutMulticastPkts);                    break;#ifdef NOT_HOST_GENERIC    			case DTOPN_RATEINTCPPKTS:					DTOPN_UPDATE_ENTRY(InTCPPkts);					break;    			case DTOPN_RATEOUTTCPPKTS:					DTOPN_UPDATE_ENTRY(OutTCPPkts);					break;    			case DTOPN_RATEINOTHERPKTS:					DTOPN_UPDATE_ENTRY(InOtherPkts);					break;    			case DTOPN_RATEOUTOTHERPKTS:					DTOPN_UPDATE_ENTRY(OutOtherPkts);					break;#endif    			case DTOPN_RATEINPKTS64:					DTOPN_UPDATE_ENTRY(InBucket1Pkts);					break;    			case DTOPN_RATEINPKTS65TO127:					DTOPN_UPDATE_ENTRY(InBucket2Pkts);					break;    			case DTOPN_RATEINPKTS128TO255:					DTOPN_UPDATE_ENTRY(InBucket3Pkts);					break;    			case DTOPN_RATEINPKTS256TO511:					DTOPN_UPDATE_ENTRY(InBucket4Pkts);					break;    			case DTOPN_RATEINPKTS512TO1023:					DTOPN_UPDATE_ENTRY(InBucket5Pkts);					break;    			case DTOPN_RATEINPKTS1024TO1518:					DTOPN_UPDATE_ENTRY(InBucket6Pkts);					break;    			case DTOPN_RATEOUTPKTS64:					DTOPN_UPDATE_ENTRY(OutBucket1Pkts);					break;    			case DTOPN_RATEOUTPKTS65TO127:					DTOPN_UPDATE_ENTRY(OutBucket2Pkts);					break;    			case DTOPN_RATEOUTPKTS128TO255:					DTOPN_UPDATE_ENTRY(OutBucket3Pkts);					break;    			case DTOPN_RATEOUTPKTS256TO511:					DTOPN_UPDATE_ENTRY(OutBucket4Pkts);					break;    			case DTOPN_RATEOUTPKTS512TO1023:					DTOPN_UPDATE_ENTRY(OutBucket5Pkts);					break;    			case DTOPN_RATEOUTPKTS1024TO1518:					DTOPN_UPDATE_ENTRY(OutBucket6Pkts);					break;                }                DnpapEntryUpdateList(topncontrol, entry);            }        }    }    return TRUE;}BOOLEAN DnpapTopNHostStop(LONG hostcontrolindex){                                 DNPAP_TOPN_CONTROL *topncontrol;MIB_LOCAL    *local;    for (local = TopNControlInstance; local != NULL; local = local->Next)    {        topncontrol = local->Data;        if (topncontrol->Status == SNMP_VALID && topncontrol->HostIndex == hostcontrolindex &&            topncontrol->TimeRemaining > 0)        {            topncontrol->TimeRemaining = 0;            if (DnpapFillEntryTable(topncontrol, topncontrol->RequestedSize) != TRUE)                DnpapMessage(DMC_WARNING, DTOPN_FILLFAIL, "dtopN: creation of entry array failed");            TimerRemove(topncontrol->Timer);            topncontrol->Timer = NULL;        }    }    return TRUE;}

⌨️ 快捷键说明

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