📄 hist_m.c
字号:
{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 + -