📄 dtopn_m.c
字号:
} } 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 + -