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

📄 igmpcon_snmp.c

📁 igmp for switch in vxworks
💻 C
📖 第 1 页 / 共 5 页
字号:
	if (!gEnableCrossVlan)
	{
		return OK;
	}

	/*when in cross vlan mode, if this igmp vlan no group use,delete the group vlan in vlan table */
	else
	{
		if (prevlan && !GroupVlanExist (prevlan))
		{
			if (delete_igmp_vlan (prevlan) < 0)
			{
				printf ("\r\nVLAN %d can't be removed!\r\n", prevlan);
				return ERROR;
			}
		}

		return OK;
	}
}

int AddGroupVlanbySnmp (GroupAuth * authgroup, short vlan)
{
	GroupAuth *ptmp, *ptmp2;
	short prevlan;
	int exist;

	if (vlan > 4085 || vlan < 1)
	{
		printf ("\r\nInvalid VLAN tag or this is default vlan!\r\n");
		return ERROR;
	}

	if (authgroup->vlanid == vlan)
	{
		return OK;
	}

	exist = GroupVlanExist (vlan);

	/*in uncross vlan mode, it must exist an unicast vlan */
	if (gEnableCrossVlan == FALSE)
	{
		ptmp->vlanid = vlan;
		return OK;
	}

	/*in crossvlan mode */
	else
	{
		/*this vlan exist in another group */
		if (exist && vlan != ptmp->vlanid)
		{
			prevlan = ptmp->vlanid;
			ptmp->vlanid = vlan;
			/*之前的VLAN不存在了,删除 */
			if (prevlan && !GroupVlanExist (prevlan))
			{
				if (delete_igmp_vlan (prevlan) < 0)
				{
					printf ("\r\nVLAN %d can't be removed!\r\n", prevlan);
					return ERROR;
				}
			}
			return OK;
		}

		/*确保VLAN不在单播VLAN中 */
		if (is_vlan_exist (vlan))
		{
			printf ("\r\nSuch VLAN is already used for unicast!\r\n");
			return ERROR;
		}

		prevlan = ptmp->vlanid;
		ptmp->vlanid = 0;
		/*之前的VLAN不存在了,删除 */
		if (prevlan && !GroupVlanExist (prevlan))
		{
			if (delete_igmp_vlan (prevlan) < 0)
			{
				printf ("\r\nVLAN %d can't be removed!\r\n", prevlan);
				return ERROR;
			}
		}

		/*新的VLAN还未建立,则创建新VLAN */
		if (!GroupVlanExist (vlan))
		{
			if (create_igmp_vlan (vlan) < 0)
			{
				printf ("\r\nCreat VLAN %d failed!\r\n", vlan);
				return ERROR;
			}
		}
		ptmp->vlanid = vlan;
		return OK;
	}
}

void test_group_parameters_set ()
{
	char buf[2000];
	char *p;
	short len;
	STRUCT_ERROR_INFO *err;

	memset (buf, 0, sizeof (buf));
	p = buf;
	*p = 4;
	p++;
	*(UINT *) p = 0xe1000001;
	*(USHORT *) (p + 9) = 20;
	*(USHORT *) (p + 11) = 100;
	p += 15;
	*(UINT *) p = 0xe1000002;
	*(USHORT *) (p + 9) = 30;
	*(USHORT *) (p + 11) = 200;
	p += 15;
	*(UINT *) p = 0xe1000003;
	p += 15;
	*(UINT *) p = 0xe1000004;
	p += 15;

	len = p - buf;
	group_parameters_set (buf, len,err);
	typePkt (buf, len);
}

void test_group_parameters_get (void)
{
	char buf[2000];
	char *p;
	short len;

	memset (buf, 0, sizeof (buf));
	p = buf;

	group_parameters_get (buf, &len);
	typePkt (buf, len);
	return;
}

int xxxx = 1;

int group_parameters_set (){}
void test_group_parameters_get_new(int count)
{
	char buf[500];
	int len;
	int index;

	for (index = 1; index <= count; index++)
	{
		memset (buf, 0, sizeof(buf));
		group_parameters_get_new(index, buf, &len);
		printf ("Packet %d\r\n", index);
		typePkt (buf, len);
	}
}
	
int  test_igmp_profile_create (unsigned char count)
{
	char buf[5000];
	char temp[30];
	char *p;
	short len;
	STRUCT_ERROR_INFO *err;
	int i, j,index;

	memset (buf, 0, sizeof (buf));
	p = buf;
	*(short *)p = 3;
	p += 2;
	strcpy (p, "profile1");
	p += 20;
	*p = count;
	p++;
	i = 0;
	for (j = 1; j <= count; j++)
	{
		*(UINT *) p = 0xe1000001+j;
		p = p + 4;
		*p = 1;
		p += 1;
	}

	strcpy (p, "profile2");
	p += 20;
	*p = count;
	p++;
	i = 0;
	for (j = 11; j <= count+10; j++)
	{
		*(UINT *) p = 0xe1000001+j;
		p = p + 4;
		*p = 1;
		p += 1;
	}

	strcpy (p, "profile3");
	p += 20;
	*p = count;
	p++;
	i = 0;
	for (j = 21; j <= count+20; j++)
	{
		*(UINT *) p = 0xe1000001+j;
		p = p + 4;
		*p = 1;
		p += 1;
	}
	len = p - buf;

	if (type_snmp)
	{
		typePkt(buf, len);
		printf ("len=%d\r\n", len);
	}

	if (xxxx)
		{
		index = 1;
		while (len > SNMP_MAX_PACKET_LENGTH)
		{
			igmp_profile_set_new (index, buf+(index-1)*SNMP_MAX_PACKET_LENGTH, SNMP_MAX_PACKET_LENGTH, err);
			len -= SNMP_MAX_PACKET_LENGTH;
			index++;
		}

		igmp_profile_set_new (index, buf+(index-1)*SNMP_MAX_PACKET_LENGTH, len, err);	
	}
	else
	igmp_profile_set_all(buf, len, err);
	printf ("\r\nerr:");
	typePkt((char *)err, 6);
	return len;
	/*typePkt (buf, len);*/
}

int igmp_profile_info_get_first (char *buf, unsigned short *len)
{
	int i, j, k, count, size;
	char *p;
	char tmpno;
	GroupAuth *ptmp;
	int gcount = 0;

	for (tmpno = 1; tmpno<= MaxTemp; tmpno++)
	{
		if (profile[tmpno].used==1)
		break;
	}

	if (tmpno == MaxTemp+1)
	{
		*len = 0;
		return -1;
	}

	p = buf;
	strcpy (p, profile[tmpno].name);
	p = p + 20;
	*p = 0xff;					/*加入字段不显示 */
	p++;
	count = profile[tmpno].Groupcount;
	*p = count;
	size = 21 + count * 5 + 1;
	memset (p, 0, size);
	*len = size;
	p++;

	semTake (semConauth, WAIT_FOREVER);
	ptmp = authlist;
	while (ptmp)
	{
		if (ptmp->profile[tmpno] != MEMBER_NONE)
		{
			*(UINT *) p = ptmp->groupaddress;
			p = p + 4;
			*p = ptmp->profile[tmpno];
			p++;
			gcount++;
		}
		ptmp = ptmp->pNext;
	}
	*(buf + 21) = gcount;

	if (bConDebugSnmp)
	{
		typePkt (buf, *len);
	}

	semGive (semConauth);

	return OK;
}


/*输入当前模板名,获取下一个模板的信息,成功返回0,失败-1*/
int igmp_profile_info_get_next (char *profilename, char *buf, unsigned short *len)
{
	int i, j, k, count, size;
	char *p;
	char tmpno, tmpnopre;
	GroupAuth *ptmp;
	int gcount = 0;

	tmpnopre = GetProfliebyName (profilename);
	if (!tmpnopre)
	{
		*len = 0;
		return -1;
	}

	for (tmpno = tmpnopre+1; profile[tmpno].used != 1 && tmpno<= MaxTemp; tmpno++);

	if (tmpno == MaxTemp && profile[tmpno].used == 0)
	{
		*len = 0;
		return -1;
	}
		

	p = buf;
	strcpy (p, profile[tmpno].name);
	p = p + 20;
	*p = 0xff;					/*加入字段不显示 */
	p++;
	count = profile[tmpno].Groupcount;
	*p = count;
	size = 21 + count * 5 + 1;
	memset (p, 0, size);
	*len = size;
	p++;

	semTake (semConauth, WAIT_FOREVER);
	ptmp = authlist;
	while (ptmp)
	{
		if (ptmp->profile[tmpno] != MEMBER_NONE)
		{
			*(UINT *) p = ptmp->groupaddress;
			p = p + 4;
			*p = ptmp->profile[tmpno];
			p++;
			gcount++;
		}
		ptmp = ptmp->pNext;
	}
	*(buf + 21) = gcount;

	if (bConDebugSnmp)
	{
		typePkt (buf, *len);
	}

	semGive (semConauth);

	return OK;
}


int test_igmp_profile_info_get_first (void)
{
	char buf[2000];
	char *p;
	short len;

	memset (buf, 0, sizeof (buf));
	p = buf;

	igmp_profile_info_get_first (buf, &len);
	typePkt (buf, len);
	return len;
}


int test_igmp_profile_info_get_next (char *profilename)
{
	char buf[2000];
	char *p;
	short len;

	memset (buf, 0, sizeof (buf));
	p = buf;

	igmp_profile_info_get_next (profilename, buf, &len);
	typePkt (buf, len);
	return len;
}



int test_igmp_profile_info_get (char *profilename)
{
	char buf[2000];
	char *p;
	short len;

	memset (buf, 0, sizeof (buf));
	p = buf;

	igmp_profile_info_get (profilename, buf, &len);
	typePkt (buf, len);
	return len;
}


int igmp_profile_del (char *profilename, STRUCT_ERROR_INFO *err)
{
	char tmpno;
	GroupAuth *authgroup;
	GroupInfo *onlinegroup;
	int i, j, k;
	char err_value[50], start, end;
	
	set_error_code(err, SNMP_SUCCESS, 0,0);
	
	tmpno = GetProfliebyName (profilename);
	if (!tmpno)
	{
		set_error_code(err, SNMP_ERROR, 0x0030fffb,  profilename);
		return -5;
	}
	
	DelConTempGroup (tmpno);
	
	PASS_ONU(i, j)
	{
		if (1 == j) 
		SendCfgPkt (groupcfgmsg, i, 1, 1, 0);
		if (onulist[i][j].used)
		{
			
			if (onulist[i][j].flag_ftth)
			{
				start = onulist[i][j].igmp_port;
				end =start;
			}
			else
			{
				start = 1;
				end = onulist[i][j].total_port;
			}
			for (k = start; k <= end; ++k)
			{
				if (portstatlist[i][j][k].tmpno == tmpno)
				SendCfgPkt (port2groupmsg, i, j, k, 1);
			}
		}
	}
	END_PASS_ONU

	profile[tmpno].Groupcount = 0;
	memset (profile[tmpno].name, 0, 20);
	profile[tmpno].used = 0;
	return OK;
}


void test_prejoin_group_set ()
{
	char buf[2000];
	char *p;
	short len;
	STRUCT_ERROR_INFO *err;

	memset (buf, 0, sizeof (buf));
	p = buf;
	*p = 4;
	p++;
	strcpy (p, "profile1");
	*(UINT *) p = 0xe2000001;
	p = p + 4;
	*(UINT *) p = 0xe2000002;
	p = p + 4;
	*(UINT *) p = 0xe2000003;
	p = p + 4;
	*(UINT *) p = 0xe2000004;
	p = p + 4;

	len = p - buf;
	prejoin_group_set (buf, len, err);
	typePkt (buf, len);
}

int test_prejoin_group_get (void)
{
	char buf[2000];
	char *p;
	short len;

	memset (buf, 0, sizeof (buf));
	p = buf;

	prejoin_group_get (buf, &len);
	typePkt (buf, len);
	return len;
}

int test_igmp_proxy_ipaddress_get (void)
{
	char buf[2000];
	char *p;
	short len;

	len = 4;
	memset (buf, 0, sizeof (buf));
	p = buf;

	igmp_proxy_ipaddress_get ((int *)buf);
	typePkt (buf, len);
	return len;
}

void test_multicast_vlan_set (short vlan, char mode)
{
	char buf[4];
	char *p;
	int i;
	STRUCT_ERROR_INFO *err;
	
	p = buf;
	*p = mode;
	p++;
	*(short *) p = vlan;
	multicast_vlan_set (buf, 4, err);
	return;
}

int test_online_groups_Membercount_get (void)
{
	char buf[2000];
	char *p;
	short len;

	memset (buf, 0, sizeof (buf));
	p = buf;

	online_groups_Membercount_get (buf, &len);
	typePkt (buf, len);
	return len;
}

int test_online_port_groupnum_get (UCHAR slot, UCHAR onu, UCHAR onuPort)
{
	char buf[2000];
	char *p;
	short len;

	memset (buf, 0, sizeof (buf));
	p = buf;

	online_port_groupnum_get (slot, onu, onuPort, buf, &len);
	typePkt (buf, len);
	return len;
}

int igmp_information_get (short *groupcount)
{
	*groupcount = Totalgroup;
	return OK;
}

int test_igmp_records_get (void)
{
	char buf[2000];
	char *p;
	short len;

	memset (buf, 0, sizeof (buf));
	p = buf;

	igmp_records_get (1000, buf, &len);
	typePkt (buf, len);
	return len;
}

int statistic_information_bygroup_get (unsigned int groupaddr, char *buf,
	unsigned short *len)
{
	GroupStat *ptmp;
	char *p;
	short count;
	char max[10], time[10], every[10], prev[10];
	int size;

	size = 48;
	p = buf;
	memset (buf, 0, size);
	count = groupstatcount;
	ptmp = groupstatlist;
	while (ptmp && count)
	{
		if (ptmp->groupaddress == groupaddr)
		{
			memset (max, 0, 10);
			memset (time, 0, 10);
			memset (every, 0, 10);
			memset (prev, 0, 10);
			TimeConvert (ptmp->totaltime, time);
			TimeConvert (ptmp->previewtime, prev);
			TimeConvert (ptmp->maxtime, max);
			TimeConvert ((ptmp->totaltime / ptmp->totalcount), every);
			*(UINT *) p = ptmp->groupaddress;
			p += 4;
			*(USHORT *) p = ptmp->totalcount;
			p += 2;
			memcpy (p, every, 10);
			p += 10;
			memcpy (p, max, 10);
			p += 10;
			memcpy (p, time, 10);
			p += 10;
			*(USHORT *) p = ptmp->previewcount;
			p += 2;
			memcpy (p, prev, 10);
			p += 10;
			*len = size;
			return OK;
		}
		ptmp = ptmp->pNext;
		count--;
	}

	return ERROR;
}

void test_statistic_information_bygroup_get (UINT groupaddress)
{
	char buf[2000];
	char *p;
	short len;

	memset (buf, 0, sizeof (buf));
	p = buf;

	statistic_information_bygroup_get (groupaddress, buf, &len);
	typePkt (buf, len);
	return;
}

int statistics_byport_get (char slotno, char onuno, char portno, char *buf,
	unsigned short *len)
{
	char *p;
	short count;
	char max[10], time[10], every[10], prev[10];
	int size;
	char inter_slot;

	if (slotno > 8)
	{
		inter_slot = slotno - 2;
	}
	else
	{
		inter_slot = slotno;
	}

	size = 35;
	p = buf;
	memset (p, 0, size);

	*p = slotno;
	p++;
	*p = onuno;
	p++;
	*p = portno;
	p++;

	*(short *) p = portstatlist[inter_slot][onuno][portno].totalcount;
	p += 2;
	memset (max, 0, 10);
	memset (time, 0, 10);
	memset (every, 0, 10);
	TimeConvert (portstatlist[inter_slot][onuno][portno].totaltime, time);
	TimeConvert (portstatlist[inter_slot][onuno][portno].maxtime, max);
	TimeConvert ((portstatlist[inter_slot][onuno][portno].totaltime /
			portstatlist[inter_slot][onuno][portno].totalcount), every);

	memcpy (p, every, 10);
	p += 10;
	memcpy (p, max, 10);
	p += 10;
	memcpy (p, time, 10);
	p += 10;

	*len = p - buf;
	return OK;
}


int test_statistics_byport_get (char slotno, char onuno, char portno)
{
	char buf[2000];
	char *p;
	short len;

	memset (buf, 0, sizeof (buf));
	p = buf;

	statistics_byport_get (slotno, onuno, portno, buf, &len);
	typePkt (buf, len);
	return len;
}

void test_igmp_all_profilenum (void)
{
	char buf[2000];
	char *p;
	short len;

	memset (buf, 0, sizeof (buf));
	p = buf;

	igmp_all_profilenum (buf, &len);
	typePkt (buf, len);
}

int onu_fastleave_state_set (char *buf, int len,unsigned char *ucpErrString,unsigned short *npErrLen)
{
	char slot, onu,state, port;
	char *p;

	p = buf;
	slot = translateslot_in(*p);
	p++;
	onu = *p;
	p++;
	po

⌨️ 快捷键说明

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