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

📄 reachm.c

📁 嵌入式RMON,RMON为Remote monitor的缩写,基于SNMP为网络提供主动监控及错误告警,智能交换路由必备协议
💻 C
📖 第 1 页 / 共 2 页
字号:
			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 + -