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

📄 mibgetlib.c

📁 VxWorks操作系统下的SNMP协议以及MIB协议的实现源码,并且实现了HP标准打印类的MIB框架.
💻 C
字号:

#include "VxWorks.h"
#include "sockLib.h"
#include "inetLib.h"
#include "taskLib.h"
#include "stdioLib.h"
#include "strLib.h"
#include "ioLib.h"
#include "fioLib.h"

#include "snmp.h"

int GetOidValue(SNMP_PDU *snmp,VARLIST *vartemp)
{
	int 	flag = OK;
	u_char  *tempbuf;
	long    tempoid;

static	u_char oid_start[8] = {0x2b,6,1,4,1,0xa9,0x56,0x64};
static	u_char oid_hp[7] 	= {0x2b,6,1,4,1,0xb,2};
static	u_char oid_sys[6] 	= {0x2b,6,1,2,1,1};
static	u_char oid_if[6] 	= {0x2b,6,1,2,1,2};
static	u_char oid_ip[6] 	= {0x2b,6,1,2,1,4};
static	u_char oid_icmp[6] 	= {0x2b,6,1,2,1,5};
static	u_char oid_tcp[6]	= {0x2b,6,1,2,1,6};
static	u_char oid_udp[6] 	= {0x2b,6,1,2,1,7};
static	u_char oid_snmp[6] 	= {0x2b,6,1,2,1,11};
static	u_char oid_hr[6]	= {0x2b,6,1,2,1,25};
static	u_char oid_prn[6]	= {0x2b,6,1,2,1,43};

	if(snmp->command == TAG_GETNEXT)
		GetNextOID(vartemp);
	//0x2b,6,1,4,1
	if(memcmp(vartemp->oid,oid_start,8) == 0)//1.3.6.1.4.1.5334.100
	{
		flag = STARTGetVar(vartemp);
	}
	else if(memcmp(vartemp->oid,oid_sys,6) == 0)//1.3.6.1.2.1.1
	{
		flag = SystemGetVar(vartemp);
	}
	else if(memcmp(vartemp->oid,oid_if,6) == 0)//1.3.6.1.2.1.2
	{
		flag = InterfaceGetVar(vartemp);
	}
	else if(memcmp(vartemp->oid,oid_ip,6) == 0)//1.3.6.1.2.1.4
	{
		flag = IPGetVar(vartemp);
	}
	else if(memcmp(vartemp->oid,oid_icmp,6) == 0)//1.3.6.1.2.1.5
	{
		flag = IcmpGetVar(vartemp);
	}
	else if(memcmp(vartemp->oid,oid_tcp,6) == 0)//1.3.6.1.2.1.6
	{
		flag = TcpGetVar(vartemp);
	}
	else if(memcmp(vartemp->oid,oid_udp,6) == 0)//1.3.6.1.2.1.7
	{
		flag = UdpGetVar(vartemp);
	}
	else if(memcmp(vartemp->oid,oid_snmp,6) == 0)//1.3.6.1.2.1.11
	{
		flag = SnmpGetVar(vartemp);
	}
	else if(memcmp(vartemp->oid,oid_hr,6) == 0)//1.3.6.1.2.1.25
	{
		flag = HRGetVar(vartemp);
	}
	else if(memcmp(vartemp->oid,oid_prn,6) == 0)//1.3.6.1.2.1.4
	{
		flag = PrinterGetVar(vartemp);
	}
	else if(memcmp(vartemp->oid,oid_hp,7) == 0)//1.3.6.1.4.1.12.2
	{
		flag = HPGetVar(vartemp);
	}
	else
	{
		flag = ERROR;
	}
	
	if (OK != flag)
	{
		vartemp->value_len = 0;
		vartemp->type = TAG_OCTET;
		snmp->errstat  = PDU_NOSUCHNAME;
		snmp->errindex = 1;
		return OK;
	}
	
	return flag;
}


int SetOidValue(SNMP_PDU *snmp,VARLIST *vartemp)
{
	
	u_char  flag = OK;
	long    tempoid;
static	u_char oid_start[8] = {0x2b,6,1,4,1,0xa9,0x56,0x64};
static	u_char oid_hp[7] 	= {0x2b,6,1,4,1,0xb,2};
static	u_char oid_sys[6] 	= {0x2b,6,1,2,1,1};
static	u_char oid_if[6] 	= {0x2b,6,1,2,1,2};
static	u_char oid_ip[6] 	= {0x2b,6,1,2,1,4};
static	u_char oid_icmp[6] 	= {0x2b,6,1,2,1,5};
static	u_char oid_tcp[6]	= {0x2b,6,1,2,1,6};
static	u_char oid_udp[6] 	= {0x2b,6,1,2,1,7};
static	u_char oid_snmp[6] 	= {0x2b,6,1,2,1,11};
static	u_char oid_hr[6]	= {0x2b,6,1,2,1,25};
static	u_char oid_prn[6]	= {0x2b,6,1,2,1,43};

	if (memcmp(vartemp->oid, oid_sys, 6) == 0)//1.3.6.1.2.1.1
	{
		flag = SystemSetVar(vartemp);
	}
	else if (memcmp(vartemp->oid, oid_start, 8) == 0)//1.3.6,1,4,1,0xa9,0x56,0x64
	{
		flag = STARTSetVar(vartemp);		
	}
	else
	{
		flag = PDU_NOSUCHNAME;
	}
	
	if (flag != PDU_NOERROR)
	{
		snmp->errstat  = flag;
		snmp->errindex = 1;
	}
	
	return flag;

}

int GetNextOID(VARLIST *vartemp)
{
static	u_char oid_sys[8] 	= {0x2b,6,1,2,1,1,1,0};//sysMIB第一个节点
static	u_char oid_if[8] 	= {0x2b,6,1,2,1,2,1,0};//ifMIB第一个节点
static	u_char oid_ip[8] 	= {0x2b,6,1,2,1,4,1,0};//ipMIB第一个节点
static	u_char oid_icmp[8]	= {0x2b,6,1,2,1,5,1,0};//icmpMIB第一个节点
static	u_char oid_tcp[8]	= {0x2b,6,1,2,1,6,1,0};
static	u_char oid_udp[8]	= {0x2b,6,1,2,1,7,1,0};
static	u_char oid_snmp[8]	= {0x2b,6,1,2,1,11,1,0};
static	u_char oid_hr[11]	= {0x2b,6,1,2,1,25,3,2,1,1,0};
static	u_char oid_prt[11]	= {0x2b,6,1,2,1,43,5,1,1,1,0};
static	u_char oid_start[11]= {0x2b,6,1,4,1,0xa9,0x56,0x64,1,1,0};

	if(memcmp(vartemp->oid,oid_sys,6) == 0)//sys MIB
	{
		if(vartemp->oid[6] > 0 && vartemp->oid[6] < 7)
		{			
			vartemp->oid[6] += 1;
			vartemp->oid[7] = 0;
			vartemp->oid_len = 8;
			return OK;
		}
		memcpy(vartemp->oid,oid_if,8);
		vartemp->oid_len = 8;
		return OK;
	}//结束System MIB的遍历查找
	else if(memcmp(vartemp->oid,oid_if,6) == 0)//if MIB
	{
		if(vartemp->oid[6] == 1)
		{
			vartemp->oid[6] = 2;
			vartemp->oid[7] = 1;
			vartemp->oid[8] = 1;
			vartemp->oid[9] = 0;
			vartemp->oid_len = 10;
			return OK;
		}
		else if(vartemp->oid[6] == 2 && vartemp->oid[7] == 1)
		{
			if(vartemp->oid[8] >0 && vartemp->oid[8]<22 )
			{
				vartemp->oid[8] += 1;
				vartemp->oid[9] = 0;
				vartemp->oid_len = 10;
				return OK;
			}
		}
		memcpy(vartemp->oid,oid_ip,8);
		vartemp->oid_len = 8;
		return OK;
	}//结束InterFace MIB的遍历查找
	else if(memcmp(vartemp->oid,oid_ip,6) == 0)//ip MIB
	{
		if(vartemp->oid[6] > 0 && vartemp->oid[6] < 19)
		{
			vartemp->oid[6] += 1;
			vartemp->oid[7] = 0;
			vartemp->oid_len = 8;
			return OK;
		}
		else if(vartemp->oid[6] == 19)
		{
			vartemp->oid[6] = 20;
			vartemp->oid[7] = 1;
			vartemp->oid[8] = 1;
			vartemp->oid[9] = 0;
			vartemp->oid_len = 10;
			return OK;
		}
		else if(vartemp->oid[6] == 20)
		{
			if(vartemp->oid[7] == 1)
			{
				if(vartemp->oid[8] > 0 && vartemp->oid[8] < 5)
				{
					vartemp->oid[8] += 1;
					vartemp->oid[9] = 0;
					vartemp->oid_len = 10;
					return OK;
				}
				vartemp->oid[6] = 21;
				vartemp->oid[7] = 1;
				vartemp->oid[8] = 1;
				vartemp->oid[9] = 0;
				vartemp->oid_len = 10;
				return OK;
			}
		}//结束ipAddrTable
		else if(vartemp->oid[6] == 21)
		{
			if(vartemp->oid[7] == 1)
			{
				if(vartemp->oid[8] > 0 && vartemp->oid[8] < 13)
				{
					vartemp->oid[8] += 1;
					vartemp->oid[9] = 0;
					vartemp->oid_len = 10;
					return OK;
				}
				vartemp->oid[6] = 22;
				vartemp->oid[7] = 1;
				vartemp->oid[8] = 1;
				vartemp->oid[9] = 0;
				vartemp->oid_len = 10;
				return OK;
			}
		}//结束ipRouteTable
		else if(vartemp->oid[6] == 22)
		{
			if(vartemp->oid[7] == 1)
			{
				if(vartemp->oid[8] > 0 && vartemp->oid[8] < 4)
				{
					vartemp->oid[8] += 1;
					vartemp->oid[9] = 0;
					vartemp->oid_len = 10;
					return OK;
				}
				vartemp->oid[6] = 23;
				vartemp->oid[7] = 0;
				vartemp->oid_len = 8;
				return OK;
			}
		}//结束ipNetToMediaTable
		memcpy(vartemp->oid,oid_icmp,8);
		vartemp->oid_len = 8;
		return OK;
	}
	//结束IP MIB  的遍历查找
	//开始ICMP MIB的遍历查找
	else if(memcmp(vartemp->oid,oid_icmp,6) == 0)//icmp MIB
	{
		if(vartemp->oid[6] > 0 && vartemp->oid[6] < 26)
		{
			vartemp->oid[6] += 1;
			vartemp->oid[7] = 0;
			vartemp->oid_len = 8;
			return OK;
		}
		memcpy(vartemp->oid,oid_tcp,8);
		vartemp->oid_len = 8;
		return OK;
	}
	//结束ICMP MIB的遍历查找
	//开始TCP MIB 的遍历查找
	else if(memcmp(vartemp->oid,oid_tcp,6) == 0)//tcp MIB
	{
		if(vartemp->oid[6] > 0 && vartemp->oid[6] < 12)
		{
			vartemp->oid[6] += 1;
			vartemp->oid[7] = 0;
			vartemp->oid_len = 8;
			return OK;
		}
		else if(vartemp->oid[6] == 12)
		{
			vartemp->oid[6] = 13;
			vartemp->oid[7] = 1;
			vartemp->oid[8] = 1;
			vartemp->oid[9] = 0;
			vartemp->oid_len = 10;
			return OK;
		}
		else if(vartemp->oid[6] == 13)
		{
			if(vartemp->oid[7] == 1)
			{
				if(vartemp->oid[8] > 0 && vartemp->oid[8] < 5)
				{
					vartemp->oid[8] += 1;
					vartemp->oid[9] = 0;
					vartemp->oid_len = 10;
					return OK;
				}
				vartemp->oid[6] = 14;
				vartemp->oid[7] = 0;
				vartemp->oid_len = 8;
				return OK;
			}
		}//结束TcpConnTable
		else if(vartemp->oid[6] == 14)
		{
			vartemp->oid[6] = 15;
			vartemp->oid[7] = 0;
			vartemp->oid_len = 8;
			return OK;
		}
		memcpy(vartemp->oid,oid_udp,8);
		vartemp->oid_len = 8;
		return OK;
	}
	//结束TCP MIB的遍历查找
	//开始UDP MIB的遍历查找
	else if(memcmp(vartemp->oid,oid_udp,6) == 0)//udp MIB
	{
		if(vartemp->oid[6] > 0 && vartemp->oid[6] < 4)
		{
			vartemp->oid[6] += 1;
			vartemp->oid[7] = 0;
			vartemp->oid_len = 8;
			return OK;
		}
		else if(vartemp->oid[6] == 4)
		{
			vartemp->oid[6] = 5;
			vartemp->oid[7] = 1;
			vartemp->oid[8] = 1;
			vartemp->oid[9] = 0;
			vartemp->oid_len = 10;
			return OK;
		}
		else if(vartemp->oid[6] == 5)
		{
			if(vartemp->oid[7] == 1)
			{
				if(vartemp->oid[8] > 0 && vartemp->oid[8] < 2)
				{
					vartemp->oid[8] += 1;
					vartemp->oid[9] = 0;
					vartemp->oid_len = 10;
					return OK;
				}
			}
		}//结束udpTable
		memcpy(vartemp->oid,oid_snmp,8);
		vartemp->oid_len = 8;
		return OK;
	}//结束UDP MIB的遍历查找
	//开始SNMP MIB的遍历查找
	else if(memcmp(vartemp->oid,oid_snmp,6) == 0)//snmp MIB
	{
		if(vartemp->oid[6] > 0 && vartemp->oid[6] < 30)
		{
			vartemp->oid[6] += 1;
			vartemp->oid[7] = 0;
			vartemp->oid_len = 8;
			if(vartemp->oid[6] == 7)
				vartemp->oid[6] = 8;
			if(vartemp->oid[6] == 23)
				vartemp->oid[6] = 24;
			return OK;
		}
		memcpy(vartemp->oid,oid_start,11);
		vartemp->oid_len = 11;
		return OK;
	}//结束SNMP MIB的遍历查找
	//开始START MIB的遍历查找
	else if(memcmp(vartemp->oid,oid_start,8) == 0)
	{
		if(vartemp->oid[8] == 1)
		{
			if(vartemp->oid[9] > 0 && vartemp->oid[9] < 5)
			{
				vartemp->oid[9] += 1;
				vartemp->oid[10] = 0;
				vartemp->oid_len = 11;
				return OK;
			}
			vartemp->oid[8]  = 2;
			vartemp->oid[9] = 1;
			vartemp->oid[10] = 1;
			vartemp->oid[11] = 0;
			vartemp->oid_len = 12;
			return OK;
		}
		else if(vartemp->oid[8] == 2)
		{
			if(vartemp->oid[9] == 1)
			{
				if(vartemp->oid[10] > 0 && vartemp->oid[10] < 8)
				{
					vartemp->oid[10] += 1;
					vartemp->oid[11] = 0;
					vartemp->oid_len = 12;
					return OK;
				}
				vartemp->oid[9] = 2;
				vartemp->oid[10] = 1;
				vartemp->oid[11] = 0;
				vartemp->oid_len = 12;
				return OK;
			}
			else if(vartemp->oid[9] == 2)
			{
				if(vartemp->oid[10] > 0 && vartemp->oid[10] < 5)
				{
					vartemp->oid[10] += 1;
					vartemp->oid[11] = 0;
					vartemp->oid_len = 12;
					return OK;
				}
				vartemp->oid[9] = 3;
				vartemp->oid[10] = 1;
				vartemp->oid[11] = 0;
				vartemp->oid_len = 12;
				return OK;
			}
			else if(vartemp->oid[9] == 3)
			{
				if(vartemp->oid[10] > 0 && vartemp->oid[10] < 10)
				{
					vartemp->oid[10] += 1;
					vartemp->oid[11] = 0;
					vartemp->oid_len = 12;
					return OK;
				}
				vartemp->oid[8]  = 3;
				vartemp->oid[9] = 1;
				vartemp->oid[10] = 1;
				vartemp->oid[11] = 0;
				vartemp->oid_len = 12;
				return OK;
			}
		}
		else if(vartemp->oid[8] == 3)
		{
			if(vartemp->oid[9] == 1)
			{
				if(vartemp->oid[10] > 0 && vartemp->oid[10] < 7)
				{
					vartemp->oid[10] += 1;
					vartemp->oid[11] = 0;
					vartemp->oid_len = 12;
					return OK;
				}
				vartemp->oid[9] = 2;
				vartemp->oid[10] = 1;
				vartemp->oid[11] = 0;
				vartemp->oid_len = 12;
				return OK;
			}
			else if(vartemp->oid[9] == 2)
			{
				if(vartemp->oid[10] > 0 && vartemp->oid[10] < 5)
				{
					vartemp->oid[10] += 1;
					vartemp->oid[11] = 0;
					vartemp->oid_len = 12;
					return OK;
				}
				vartemp->oid[9] = 3;
				vartemp->oid[10] = 1;
				vartemp->oid[11] = 0;
				vartemp->oid_len = 12;
				return OK;
			}
			else if(vartemp->oid[9] == 3)
			{
				if(vartemp->oid[10] > 0 && vartemp->oid[10] < 4)
				{
					vartemp->oid[10] += 1;
					vartemp->oid[11] = 0;
					vartemp->oid_len = 12;
					return OK;
				}
				vartemp->oid[9] = 4;
				vartemp->oid[10] = 1;
				vartemp->oid[11] = 0;
				vartemp->oid_len = 12;
				return OK;
			}
			else if(vartemp->oid[9] == 4)
			{
				if(vartemp->oid[10] > 0 && vartemp->oid[10] < 4)
				{
					vartemp->oid[10] += 1;
					vartemp->oid[11] = 0;
					vartemp->oid_len = 12;
					return OK;
				}
				vartemp->oid[9] = 5;
				vartemp->oid[10] = 1;
				vartemp->oid[11] = 0;
				vartemp->oid_len = 12;
				return OK;
			}
			else if(vartemp->oid[9] == 5)
			{
				if(vartemp->oid[10] > 0 && vartemp->oid[10] < 4)
				{
					vartemp->oid[10] += 1;
					vartemp->oid[11] = 0;
					vartemp->oid_len = 12;
					return OK;
				}
			}
		}
		
		memcpy(vartemp->oid,oid_sys,8);
		vartemp->oid_len = 8;
		return OK;
	}//结束START MIB的遍历查找
	memcpy(vartemp->oid,oid_sys,8);
	vartemp->oid_len = 8;
	return OK;
}

⌨️ 快捷键说明

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