📄 reachm.c
字号:
return SNMP_NOSUCHNAME; case SNMP_PDU_GET: data = (Reach*)local->Data; obj->Syntax.LngUns = data->UDPDropped; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD ReachICMPTime(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL; if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, 1) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: data = (Reach*)local->Data; obj->Syntax.LngInt = data->ICMPTime; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD ReachUDPTime(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL; if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, 1) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: data = (Reach*)local->Data; obj->Syntax.LngInt = data->UDPTime; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD ReachICMPTimeMin(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL; if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, 1) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: data = (Reach*)local->Data; obj->Syntax.LngInt = data->ICMPTimeMin; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD ReachUDPTimeMin(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL; if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, 1) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: data = (Reach*)local->Data; obj->Syntax.LngInt = data->UDPTimeMin; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD ReachICMPTimeMax(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL; if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, 1) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: data = (Reach*)local->Data; obj->Syntax.LngInt = data->ICMPTimeMax; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD ReachUDPTimeMax(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL; if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, 1) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: data = (Reach*)local->Data; obj->Syntax.LngInt = data->UDPTimeMax; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD ReachTotalICMPTime(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL; if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, 1) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: data = (Reach*)local->Data; obj->Syntax.LngInt = data->TotalICMPTime; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD ReachTotalUDPTime(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL; if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, 1) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: data = (Reach*)local->Data; obj->Syntax.LngInt = data->TotalUDPTime; return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD ReachValue(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL *local = NULL;Reach *data;DOUBLE ICMPvalue, UDPvalue, subtotalICMPtime, subtotalUDPtime;LONG i, ICMPsteps, UDPsteps; if ((local = MibRmon(obj, ReachInstance, idlen, CONTROLINDEXSIZE)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext (obj, &local, idlen, CONTROLINDEXSIZE) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: data = (Reach*) local->Data; /* do calculation here because the routines */ /* in reachc.c may never be called */ ICMPsteps = LongMin(data->ICMPReceived, data->ValueSteps); UDPsteps = LongMin(data->UDPReceived, data->ValueSteps); /* determine the harmonic mean */ for (i = 0, subtotalICMPtime = 0; i < ICMPsteps; i++) if (data->PingBuffer[i] != 0) subtotalICMPtime += (DOUBLE)1.0/data->PingBuffer[i]; for (i = 0, subtotalUDPtime = 0; i < UDPsteps; i++) if (data->EchoBuffer[i] != 0) subtotalUDPtime += (DOUBLE)1.0/data->EchoBuffer[i]; ICMPvalue = (ICMPsteps == 0 || subtotalICMPtime == 0) ? (DOUBLE)1.0 : (DOUBLE)data->ICMPWeight*(ICMPsteps/subtotalICMPtime - data->ICMPTimeMin); UDPvalue = (UDPsteps == 0 || subtotalUDPtime == 0) ? (DOUBLE)1.0 : (DOUBLE)data->UDPWeight*(UDPsteps/subtotalUDPtime - data->UDPTimeMin); if ((data->Value = (DOUBLE)1.0 - ICMPvalue - UDPvalue) < 0) data->Value = (DOUBLE)0.0; obj->Syntax.LngInt = (LONG)(data->Value*FLOAT_SCALE); return SNMP_NOERROR; case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD ReachOwner(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;Reach* data = NULL; if ((local = MibRmon(obj, ReachInstance, idlen, 1)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, 1) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: data = (Reach*)local->Data; if (BeholderStrictRMON && !BooleanCheck(data->ObjectSet, REACH_BOOLEAN_OWNER)) return SNMP_NOSUCHNAME; memcpy(obj->Syntax.BufChr, data->Owner, obj->SyntaxLen = data->OwnerLen); return SNMP_NOERROR; case SNMP_PDU_SET: data = (Reach*)local->Data; if (data->Status != SNMP_UNDERCREATION) return SNMP_READONLY; memcpy(data->Owner, obj->Syntax.BufChr, data->OwnerLen = obj->SyntaxLen); BooleanSetTrue(data->ObjectSet, REACH_BOOLEAN_OWNER); return SNMP_NOERROR; } return SNMP_GENERROR;}WORD ReachStatus(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL *local = NULL;Reach *data; local = MibRmon(obj, ReachInstance, idlen, 1); switch (obj->Request) { case SNMP_PDU_GET: if (local == NULL) { obj->Syntax.LngInt = SNMP_INVALID; return SNMP_NOSUCHNAME; } data = (Reach*)local->Data; obj->Syntax.LngInt = data->Status; return SNMP_NOERROR; case SNMP_PDU_NEXT: if (RmonNext(obj, &local, idlen, 1) == FALSE) { obj->Syntax.LngInt = SNMP_INVALID; return SNMP_NOSUCHNAME; } data = (Reach*)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, &ReachInstance, idlen, 1)) == NULL) return SNMP_GENERROR; if ((local->Data = DnpapMalloc(sizeof(Reach))) == NULL) return SNMP_GENERROR; data = (Reach*) local->Data; if (ReachCInit(data) == TRUE) { data->Status = SNMP_UNDERCREATION; DnpapMessage(DMC_MESSAGE, REACH_CREATE, "reach: collector %ld created", local->Index); return SNMP_NOERROR; } DnpapFree(local->Data); MibRemove(obj, &ReachInstance, idlen, 1); return SNMP_GENERROR; default: return SNMP_NOSUCHNAME; } } data = (Reach*)local->Data; switch (data->Status) { case SNMP_UNDERCREATION: switch (obj->Syntax.LngInt) { case SNMP_VALID: if (ReachCStart(data) == TRUE) { data->Status = SNMP_VALID; DnpapMessage(DMC_MESSAGE, REACH_ACTIVE, "reach: collector %ld active", local->Index); return SNMP_NOERROR; } return SNMP_BADVALUE; case SNMP_INVALID: if (ReachCStop(data) == TRUE) { DnpapFree(local->Data); DnpapMessage(DMC_MESSAGE, REACH_DESTROY, "reach: collector %ld destroyed", local->Index); if (MibRemove(obj, &ReachInstance, idlen, 1) == TRUE) return SNMP_NOERROR; } return SNMP_GENERROR; default: return SNMP_BADVALUE; } case SNMP_VALID: switch (obj->Syntax.LngInt) { case SNMP_INVALID: if (ReachCStop(data) == TRUE) { DnpapFree(local->Data); DnpapMessage(DMC_MESSAGE, REACH_DESTROY, "reach: collector %ld destroyed", local->Index); if (MibRemove(obj, &ReachInstance, idlen, 1) == TRUE) return SNMP_NOERROR; } return SNMP_GENERROR; case SNMP_VALID: return SNMP_NOERROR; default: return SNMP_BADVALUE; } } } return SNMP_GENERROR;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -