📄 igmpcon_snmp.c
字号:
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 + -