📄 igmpcon_cli.c
字号:
}
else if (ptmp->state == failmaxgroup)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) fails to join group(%s): reachs the groups limit.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip);
}
else if (ptmp->state == failvlan)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) fails to join group(%s): vlan mismatched.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip);
}
else if (ptmp->state == failupbd)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) fails to join group(%s): reachs the bandwidth limit.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip);
}
else
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) fails to join group(%s).\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip);
}
}
else
{
if (ptmp->state == success)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) joins group(%s) successfully.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip);
}
else if (ptmp->state == failauth)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) fails to join group(%s): not passed authentication.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip);
}
else if (ptmp->state == failmaxgroup)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) fails to join group(%s): reachs the groups limit.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip);
}
else if (ptmp->state == failvlan)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) fails to join group(%s): vlan mismatched.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip);
}
else if (ptmp->state == failupbd)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) fails to join group(%s): reachs the bandwidth limit.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip);
}
else
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) fails to join group(%s).\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip);
}
}
}
/*离开 */
if (ptmp->cmd == 0)
{
if (ptmp->preview == 2)
{
if (ptmp->state == leavenormal)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) leaves group(%s).\n", j, j,
ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip);
}
else
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) forced to leave group(%s).\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip);
}
}
else
{
if (ptmp->state == leavenormal)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) leaves group(%s).\n", j,
ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip);
}
else
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) forced to leave group(%s).\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip);
}
}
}
if (ptmp->cmd == 2)
{
if (ptmp->preview == 2)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) staying in group(%s) %d minutes.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip,
ptmp->staying);
}
else
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) staying in group(%s) %d minutes.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip,
ptmp->staying);
}
}
ptmp = ptmp->pNext;
count--;
}
semGive (semConLog);
}
/*显示指定端口的日志信息*/
/*************************************************
Function: ShowPortRecord
Description: show igmp record by port
Input: UCHAR slot, UCHAR onu, UCHAR onuPort, int count,
struct vty *vty
Output:
Return:
Others:
*************************************************/
void ShowPortRecord (UCHAR slot, UCHAR onu, UCHAR onuPort, int count,
struct vty *vty)
{
PortRecord *ptmp;
struct in_addr gip;
char ip[20];
int countmax;
int i = 0, j = 0;
int slotnew;
int pvc;
int semlog;
countmax = recordcount;
/*显示全部 */
if (!count)
{
count = recordcount;
}
if (count >= recordcount)
{
count = recordcount;
}
semlog = semTake (semConLog, 1);
if (ERROR == semlog)
{
printf ("Take semConLog error!\r\n");
semtakeerror++;
return;
}
ptmp = recordlist;
while (ptmp && count && countmax)
{
if (ptmp->onu == onu && ptmp->onuPort == onuPort && ptmp->slot == slot)
{
j++;
slotnew = ptmp->slot;
if (slotnew > 8)
{
slotnew = slotnew + 2;
}
gip.s_addr = ptmp->groupaddress;
inet_ntoa_b (gip, ip);
if (ptmp->cmd == 1)
{
if (ptmp->preview == 2)
{
if (ptmp->state == success)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) joins group(%s) successfully.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort,
ip);
}
else if (ptmp->state == failpreview)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) fails to join group(%s): not has preview right this moment.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort,
ip);
}
else if (ptmp->state == failmaxgroup)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) fails to join group(%s): reachs the groups limit.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort,
ip);
}
else if (ptmp->state == failvlan)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) fails to join group(%s): vlan mismatched.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort,
ip);
}
else if (ptmp->state == failupbd)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) fails to join group(%s): reachs the bandwidth limit.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort,
ip);
}
else
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) fails to join group(%s).\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort,
ip);
}
}
else
{
if (ptmp->state == success)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) joins group(%s) successfully.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort,
ip);
}
else if (ptmp->state == failauth)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) fails to join group(%s): not passed authentication.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort,
ip);
}
else if (ptmp->state == failmaxgroup)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) fails to join group(%s): reachs the groups limit.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort,
ip);
}
else if (ptmp->state == failvlan)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) fails to join group(%s): vlan mismatched.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort,
ip);
}
else if (ptmp->state == failupbd)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) fails to join group(%s): reachs the bandwidth limit.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort,
ip);
}
else
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) fails to join group(%s).\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort,
ip);
}
}
}
/*离开 */
if (ptmp->cmd == 0)
{
if (ptmp->preview == 2)
{
if (ptmp->state == 0)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) leaves group(%s).\n",
j, j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort,
ip);
}
else
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) forced to leave group(%s).\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort,
ip);
}
}
else
{
if (ptmp->state == 0)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) leaves group(%s).\n", j,
ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip);
}
else
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) forced to leave group(%s).\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort,
ip);
}
}
}
if (ptmp->cmd == 2)
{
if (ptmp->preview == 2)
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d)(p) staying in group(%s) %d minutes.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip,
ptmp->staying);
}
else
{
vty_out (vty,
"%d.%s, port(%2d:%2d:%1d) staying in group(%s) %d minutes.\n",
j, ptmp->time, slotnew, ptmp->onu, ptmp->onuPort, ip,
ptmp->staying);
}
}
count--;
}
ptmp = ptmp->pNext;
countmax--;
}
semGive (semConLog);
}
/*************************************************
Function: CreateAuthGroup
Description: create an auth group node, and set it default group parameters
Input: UINT groupaddress
Output: n/a
Return: none
Others:
*************************************************/
GroupAuth *CreateAuthGroup (UINT groupaddress)
{
GroupAuth *authgroup;
authgroup = (GroupAuth *) malloc (sizeof (GroupAuth));
if (NULL == authgroup)
return NULL;
memset (authgroup, 0, sizeof (GroupAuth));
authgroup->groupaddress = groupaddress;
authgroup->preCount = previewcount;
authgroup->preTime = previewtime;
authgroup->preInterval = previewinterval;
authgroup->preReset = previewresettime;
authgroup->pretotaltime = previewTotalTime;
authgroup->vlanid = 0;
return authgroup;
}
/*************************************************
Function: AddAuthGroupToList
Description: add an auth
Input: GroupAuth * authgroup
Output: none
Return: none
Others:
*************************************************/
void AddAuthGroupToList (GroupAuth * authgroup)
{
authgroup->pNext = authlist;
authgroup->pPrv = NULL;
if (NULL == authlist)
{
authlist = authgroup;
}
else
{
authlist->pPrv = authgroup;
authlist = authgroup;
}
Totalauthgroup++;
}
/*************************************************
Function: DelAuthGroupFromList
Description: del auth group node from authlist
Input: GroupAuth * authgroup
Output: none
Return: none
Others:
*************************************************/
void DelAuthGroupFromList (GroupAuth * authgroup)
{
GroupAuth *ptmp;
ptmp = authgroup;
/*case single port */
if (authgroup->pPrv == NULL && NULL == authgroup->pNext)
{
free (authgroup);
authlist = NULL;
}
/*case first */
else if (authgroup->pPrv == NULL && NULL != authgroup->pNext)
{
authlist = authgroup->pNext;
authlist->pPrv = NULL;
free (authgroup);
}
/*case last */
else if (authgroup->pPrv != NULL && NULL == authgroup->pNext)
{
authgroup->pPrv->pNext = NULL;
free (authgroup);
}
/*case middle */
else
{
authgroup->pPrv->pNext = authgroup->pNext;
authgroup->pNext->pPrv = authgroup->pPrv;
free (authgroup);
}
Totalauthgroup--;
return;
}
/*配置端口控制使能,1表示打开控制,0表示关闭控制*/
/*************************************************
Function: SetPortControl
Description: set onu whether be controled
Input: UCHAR slot, UCHAR onu, UCHAR onuPort, UCHAR act
Output:
Return: 0
Others: the onuport can only set 1, cos the control is set to a onu not a port
*************************************************/
int SetPortControl (UCHAR slot, UCHAR onu, UCHAR onuPort, UCHAR act)
{
portstatlist[slot][onu][onuPort].control = act;
return OK;
}
/*显示一个组的信息*/
/*************************************************
Function: ShowOnePort
Description: show onu port informations
Input: UCHAR slot, UCHAR onu, UCHAR onuPort, struct vty *vty
Output: none
Return: none
Others:
*************************************************/
void ShowOnePort (UCHAR slot, UCHAR onu, UCHAR onuPort, struct vty *vty)
{
int auth, state;
int curbd;
int count, temp;
int slotnew;
GroupAuth *atmp;
GroupInfo *itmp;
struct in_addr gip;
char ip[20];
temp = portstatlist[slot][onu][onuPort].tmpno;
/*槽位变化20051027 aibin */
slotnew = slot;
if (slot > 8)
{
slotnew = slot + 2;
}
vty_out (vty, "Port(%d:%d:%2d)\r\n", slotnew, onu, onuPort);
if (portstatlist[slot][onu][onuPort].control == 1)
{
vty_out (vty, "Auth : ON\r\n");
}
else
{
vty_out (vty, "Auth : OFF\r\n");
}
if (temp)
{
vty_out (vty, "Profile : %s\r\n", profile[temp].name);
}
else
{
vty_out (vty, "Profile : None\r\n");
}
vty_out (vty, "Group limit : %d\r\n",
portstatlist[slot][onu][onuPort].gouplimit);
if (portstatlist[slot][onu][onuPort].bandwidth)
{
curbd = GetCurPortBd (slot, onu, onuPort);
vty_out (vty, "Bandwidth : %d/%d(kbps)\r\n", curbd,
portstatlist[slot][onu][onuPort].bandwidth);
}
else
{
vty_out (vty, "Bandwidth : Not set\r\n");
}
if (portstatlist[slot][onu][onuPort].vlanpeer == 1)
{
vty_out (vty, "VLAN strip : ON\r\n");
}
else
{
vty_out (vty, "VLAN strip : OFF\r\n");
}
if (portstatlist[slot][onu][1].fast_leave_state == 1)
{
vty_out (vty, "Leave mode : Fast\r\n");
}
else
{
vty_out (vty, "Leave mode : Non-fast\r\n");
}
return;
}
/*************************************************
Function: SetConTemp
Description: add a group to an igmp profile and set its state
1:normal, 2:preview
Input: int act, int tmpno, UINT groupaddress, char state
Output: none
Return: success 0, error -1;
Others:
*************************************************/
int SetConTemp (int act, int tmpno, UINT groupaddress, char state)
{
int i, j;
GroupAuth *ptmp;
GroupInfo *onlinegroup;
ptmp = (GroupAuth *) GetAuthGroup (groupaddress);
onlinegroup = (GroupInfo *) GetCurGroup (groupaddress);
/*if (onlinegroup)
{
printf ("\r\nERROR, this group is online\r\n");
return ERROR;
} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -