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

📄 discconm.c

📁 嵌入式RMON,RMON为Remote monitor的缩写,基于SNMP为网络提供主动监控及错误告警,智能交换路由必备协议
💻 C
📖 第 1 页 / 共 3 页
字号:
    if ((local = MibRmon(obj, DiscConnControlInstance, idlen, len)) == NULL)        return SNMP_NOSUCHNAME;    switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, type, len, &data, FALSE) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        if (data == NULL && (data = DiscConnSearchHash(local->Data, type, obj, idlen, FALSE)) == NULL)            return SNMP_NOSUCHNAME;        for (i = 0; i < sublen; i++)            obj->Syntax.BufChr[i] = (BYTE)data->SrcDst[offset+i];        obj->SyntaxLen = sublen;        return SNMP_NOERROR;    case SNMP_PDU_SET:    	return SNMP_READONLY;    }    return SNMP_GENERROR;}WORD DiscConnDSIPSourceAddress(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL  *local = NULL;DISCCONN     *data = NULL;INT type;WORD i, len, offset, sublen;    if ((type = DiscTableType(obj, idlen)) == 0)        return SNMP_NOSUCHNAME;    if ((len = DiscTableLen(type, DISC_TYPE_IP, &offset, &sublen, FALSE)) == 0)        return SNMP_NOSUCHNAME;    if ((local = MibRmon(obj, DiscConnControlInstance, idlen, len)) == NULL)        return SNMP_NOSUCHNAME;    switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, type, len, &data, FALSE) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        if (data == NULL && (data = DiscConnSearchHash(local->Data, type, obj, idlen, FALSE)) == NULL)            return SNMP_NOSUCHNAME;        for (i = 0; i < sublen; i++)            obj->Syntax.BufChr[i] = (BYTE)data->SrcDst[offset+i];        obj->SyntaxLen = sublen;        return SNMP_NOERROR;    case SNMP_PDU_SET:    	return SNMP_READONLY;    }    return SNMP_GENERROR;}WORD DiscConnDSIPDestAddress(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL  *local = NULL;DISCCONN     *data = NULL;INT type;WORD i, len, offset, sublen;    if ((type = DiscTableType(obj, idlen)) == 0)        return SNMP_NOSUCHNAME;    if ((len = DiscTableLen(type, DISC_TYPE_IP, &offset, &sublen, TRUE)) == 0)        return SNMP_NOSUCHNAME;    if ((local = MibRmon(obj, DiscConnControlInstance, idlen, len)) == NULL)        return SNMP_NOSUCHNAME;    switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, type, len, &data, FALSE) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        if (data == NULL && (data = DiscConnSearchHash(local->Data, type, obj, idlen, FALSE)) == NULL)            return SNMP_NOSUCHNAME;        for (i = 0; i < sublen; i++)            obj->Syntax.BufChr[i] = (BYTE)data->SrcDst[offset+i];        obj->SyntaxLen = sublen;        return SNMP_NOERROR;    case SNMP_PDU_SET:    	return SNMP_READONLY;    }    return SNMP_GENERROR;}WORD DiscConnDSUDPSourceAddress(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL  *local = NULL;DISCCONN     *data = NULL;INT type;WORD len, offset, sublen;    if ((type = DiscTableType(obj, idlen)) == 0)        return SNMP_NOSUCHNAME;    if ((len = DiscTableLen(type, DISC_TYPE_UDP, &offset, &sublen, FALSE)) == 0)        return SNMP_NOSUCHNAME;    if ((local = MibRmon(obj, DiscConnControlInstance, idlen, len)) == NULL)        return SNMP_NOSUCHNAME;    switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, type, len, &data, FALSE) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        if (data == NULL && (data = DiscConnSearchHash(local->Data, type, obj, idlen, FALSE)) == NULL)            return SNMP_NOSUCHNAME;        obj->Syntax.LngInt = 256*(LONG)data->SrcDst[offset] + data->SrcDst[offset+1];        return SNMP_NOERROR;    case SNMP_PDU_SET:    	return SNMP_READONLY;    }    return SNMP_GENERROR;}WORD DiscConnDSUDPDestAddress(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL  *local = NULL;DISCCONN     *data = NULL;INT type;WORD len, offset, sublen;    if ((type = DiscTableType(obj, idlen)) == 0)        return SNMP_NOSUCHNAME;    if ((len = DiscTableLen(type, DISC_TYPE_UDP, &offset, &sublen, TRUE)) == 0)        return SNMP_NOSUCHNAME;    if ((local = MibRmon(obj, DiscConnControlInstance, idlen, len)) == NULL)        return SNMP_NOSUCHNAME;    switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, type, len, &data, FALSE) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        if (data == NULL && (data = DiscConnSearchHash(local->Data, type, obj, idlen, FALSE)) == NULL)            return SNMP_NOSUCHNAME;        obj->Syntax.LngInt = 256*(LONG)data->SrcDst[offset] + data->SrcDst[offset+1];        return SNMP_NOERROR;    case SNMP_PDU_SET:    	return SNMP_READONLY;    }    return SNMP_GENERROR;}WORD DiscConnDSTCPSourceAddress(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL  *local = NULL;DISCCONN     *data = NULL;INT type;WORD len, offset, sublen;    if ((type = DiscTableType(obj, idlen)) == 0)        return SNMP_NOSUCHNAME;    if ((len = DiscTableLen(type, DISC_TYPE_TCP, &offset, &sublen, FALSE)) == 0)        return SNMP_NOSUCHNAME;    if ((local = MibRmon(obj, DiscConnControlInstance, idlen, len)) == NULL)        return SNMP_NOSUCHNAME;    switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, type, len, &data, FALSE) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        if (data == NULL && (data = DiscConnSearchHash(local->Data, type, obj, idlen, FALSE)) == NULL)            return SNMP_NOSUCHNAME;        obj->Syntax.LngInt = 256*(LONG)data->SrcDst[offset] + data->SrcDst[offset+1];        return SNMP_NOERROR;    case SNMP_PDU_SET:    	return SNMP_READONLY;    }    return SNMP_GENERROR;}WORD DiscConnDSTCPDestAddress(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL  *local = NULL;DISCCONN     *data = NULL;INT type;WORD len, offset, sublen;    if ((type = DiscTableType(obj, idlen)) == 0)        return SNMP_NOSUCHNAME;    if ((len = DiscTableLen(type, DISC_TYPE_TCP, &offset, &sublen, TRUE)) == 0)        return SNMP_NOSUCHNAME;    if ((local = MibRmon(obj, DiscConnControlInstance, idlen, len)) == NULL)        return SNMP_NOSUCHNAME;    switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, type, len, &data, FALSE) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        if (data == NULL && (data = DiscConnSearchHash(local->Data, type, obj, idlen, FALSE)) == NULL)            return SNMP_NOSUCHNAME;        obj->Syntax.LngInt = 256*(LONG)data->SrcDst[offset] + data->SrcDst[offset+1];        return SNMP_NOERROR;    case SNMP_PDU_SET:    	return SNMP_READONLY;    }    return SNMP_GENERROR;}WORD DiscConnDSIndex(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL  *local = NULL;DISCCONN     *data = NULL;INT type;WORD len;    if ((type = DiscTableType(obj, idlen)) == 0)        return SNMP_NOSUCHNAME;    if ((len = DiscTableLen(type, type, NULL, NULL, FALSE)) == 0)        return SNMP_NOSUCHNAME;    if ((local = MibRmon(obj, DiscConnControlInstance, idlen, len)) == NULL)        return SNMP_NOSUCHNAME;    switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, type, len, &data, FALSE) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        if (data == NULL && (data = DiscConnSearchHash(local->Data, type, obj, idlen, TRUE)) == NULL)            return SNMP_NOSUCHNAME;        obj->Syntax.LngInt = local->Index;        return SNMP_NOERROR;    case SNMP_PDU_SET:    	return SNMP_READONLY;    }    return SNMP_GENERROR;}WORD DiscConnDSPkts(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL  *local = NULL;DISCCONN     *data = NULL;INT type;WORD len;    if ((type = DiscTableType(obj, idlen)) == 0)        return SNMP_NOSUCHNAME;    if ((len = DiscTableLen(type, type, NULL, NULL, FALSE)) == 0)        return SNMP_NOSUCHNAME;    if ((local = MibRmon(obj, DiscConnControlInstance, idlen, len)) == NULL)        return SNMP_NOSUCHNAME;            switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, type, len, &data, FALSE) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        if (data == NULL && (data = DiscConnSearchHash(local->Data, type, obj, idlen, FALSE)) == NULL)            return SNMP_NOSUCHNAME;        obj->Syntax.LngUns = data->Pkts;        return SNMP_NOERROR;    case SNMP_PDU_SET:    	return SNMP_READONLY;    }    return SNMP_GENERROR;}WORD DiscConnDSOctets(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL  *local = NULL;DISCCONN     *data = NULL;INT type;WORD len;    if ((type = DiscTableType(obj, idlen)) == 0)        return SNMP_NOSUCHNAME;    if ((len = DiscTableLen(type, type, NULL, NULL, FALSE)) == 0)        return SNMP_NOSUCHNAME;    if ((local = MibRmon(obj, DiscConnControlInstance, idlen, len)) == NULL)        return SNMP_NOSUCHNAME;            switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, type, len, &data, FALSE) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        if (data == NULL && (data = DiscConnSearchHash(local->Data, type, obj, idlen, FALSE)) == NULL)            return SNMP_NOSUCHNAME;        obj->Syntax.LngUns = data->Octets;        return SNMP_NOERROR;    case SNMP_PDU_SET:    	return SNMP_READONLY;    }    return SNMP_GENERROR;}WORD DiscConnDSLRUTime(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL  *local = NULL;DISCCONN     *data = NULL;INT type;WORD len;    if ((type = DiscTableType(obj, idlen)) == 0)        return SNMP_NOSUCHNAME;    if ((len = DiscTableLen(type, type, NULL, NULL, FALSE)) == 0)        return SNMP_NOSUCHNAME;    if ((local = MibRmon(obj, DiscConnControlInstance, idlen, len)) == NULL)        return SNMP_NOSUCHNAME;            switch (obj->Request)    {    case SNMP_PDU_NEXT:        if (RmonNext(obj, &local, idlen, type, len, &data, FALSE) == FALSE)            return SNMP_NOSUCHNAME;    case SNMP_PDU_GET:        if (data == NULL && (data = DiscConnSearchHash(local->Data, type, obj, idlen, FALSE)) == NULL)            return SNMP_NOSUCHNAME;        obj->Syntax.LngUns = data->LRUTime;        return SNMP_NOERROR;    case SNMP_PDU_SET:    	return SNMP_READONLY;    }    return SNMP_GENERROR;}INT DiscTableType(SNMP_OBJECT *obj, WORD idlen){LONG disctable[] = { BTNG_MIB,16 };INT disctablelen = sizeof(disctable)/sizeof(disctable[0]);    if (obj->Id[disctablelen] == DISC_TABLE_ETHCONNSD ||        obj->Id[disctablelen] == DISC_TABLE_ETHCONNDS)        return DISC_TYPE_ETH;    if (obj->Id[disctablelen] == DISC_TABLE_IPCONNSD ||        obj->Id[disctablelen] == DISC_TABLE_IPCONNDS)        return DISC_TYPE_IP;    if (obj->Id[disctablelen] == DISC_TABLE_UDPCONNSD ||        obj->Id[disctablelen] == DISC_TABLE_UDPCONNDS)        return DISC_TYPE_UDP;    if (obj->Id[disctablelen] == DISC_TABLE_TCPCONNSD ||        obj->Id[disctablelen] == DISC_TABLE_TCPCONNDS)        return DISC_TYPE_TCP;        return 0;}WORD DiscTableLen(INT type, INT addrtype, WORD *offset, WORD *sublen, BOOLEAN sd){LONG disctable[] = { BTNG_MIB,16 };INT disctablelen = sizeof(disctable)/sizeof(disctable[0]);WORD base = 0;    switch (type)    {    case DISC_TYPE_ETH:        base = DISC_SIZE_ETHADDR;        break;    case DISC_TYPE_IP:        base = DISC_SIZE_TOIPADDR;        break;    case DISC_TYPE_UDP:        base = DISC_SIZE_TOUDPADDR;        break;    case DISC_TYPE_TCP:        base = DISC_SIZE_TOTCPADDR;        break;    }        switch (addrtype)    {    case DISC_TYPE_ETH:        if (sd == TRUE)            offset != NULL ? *offset = 0 : 0;                                          else            offset != NULL ? *offset = base : 0;        sublen != NULL ? *sublen = DISC_SIZE_ETHADDR : 0;        break;    case DISC_TYPE_IP:        if (sd == TRUE)            offset != NULL ? *offset = DISC_SIZE_ETHADDR : 0;        else            offset != NULL ? *offset = DISC_SIZE_ETHADDR + base : 0;        sublen != NULL ? *sublen = DISC_SIZE_IPADDR : 0;        break;    case DISC_TYPE_UDP:        if (sd == TRUE)            offset != NULL ? *offset = DISC_SIZE_TOIPADDR : 0;        else            offset != NULL ? *offset = DISC_SIZE_TOIPADDR + base : 0;        sublen != NULL ? *sublen = DISC_SIZE_UDPADDR : 0;        break;    case DISC_TYPE_TCP:        if (sd == TRUE)            offset != NULL ? *offset = DISC_SIZE_TOIPADDR : 0;        else            offset != NULL ? *offset = DISC_SIZE_TOIPADDR + base : 0;        sublen != NULL ? *sublen = DISC_SIZE_TCPADDR : 0;        break;    }        switch (type)    {    case DISC_TYPE_ETH:        return DISC_ETHCONNINDEXSIZE;    case DISC_TYPE_IP:        return DISC_IPCONNINDEXSIZE;    case DISC_TYPE_UDP:        return DISC_UDPCONNINDEXSIZE;    case DISC_TYPE_TCP:        return DISC_TCPCONNINDEXSIZE;    }        return 0;}VOID DiscConnChannelStop(LONG channelIndex){MIB_LOCAL *discconninstance;DISCCONN_CONTROL *discconncontrol;	for (discconninstance = DiscConnControlInstance; discconninstance != NULL; discconninstance = discconninstance->Next)	{		discconncontrol = discconninstance->Data;		if (discconncontrol->Status == SNMP_VALID &&            discconncontrol->Channel == TRUE &&            discconncontrol->ChannelAccept == TRUE &&            discconncontrol->Source[discconncontrol->SourceLen-1] == channelIndex)            discconncontrol->ChannelAccept = FALSE;	}}VOID DiscConnPkt(LONG channelIndex, PROT_PKT *pkt){MIB_LOCAL *discconninstance;DISCCONN_CONTROL *discconncontrol;	for (discconninstance = DiscConnControlInstance; discconninstance != NULL; discconninstance = discconninstance->Next)	{		discconncontrol = discconninstance->Data;		if (discconncontrol->Status == SNMP_VALID &&            discconncontrol->Channel == TRUE &&            discconncontrol->ChannelAccept == TRUE &&            discconncontrol->Source[discconncontrol->SourceLen-1] == channelIndex)			DiscConnHandlePkt(discconncontrol, pkt);	}}

⌨️ 快捷键说明

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