📄 rstp_cli.c
字号:
{
_p1 = strchr (_tmp_before_sub, ':');
if (_p1)
{
strncpy (_tmp1, _tmp_before_sub, _p1 - _tmp_before_sub);
_p1 = _p1 + 1;
_slotno = atoi (_tmp1);
portno = atoi (_p1);
cslot = translateslot_in (_slotno & 0xff); /*lirui modify 20058-26 for newslot*/
cportsel = portno & 0xffff;
portno = xdsl_slotport2port (&_index, cslot, cportsel);
}
else
{
portno = -1;
}
_no1 = portno;
}
{
_p1 = strchr (_p, ':');
if (_p1)
{
strncpy (_tmp2, _p, _p1 - _p);
_p1 = _p1 + 1;
_slotno = atoi (_tmp2);
portno = atoi (_p1);
cslot = translateslot_in (_slotno & 0xff); /*lirui modify 20058-26 for newslot*/
cportsel = portno & 0xffff;
portno = xdsl_slotport2port (&_index, cslot, cportsel);
}
else
{
portno = -1;
}
_no2 = portno;
}
}
else
{
_p1 = strchr (_tmp, ':');
if (_p1)
{
strncpy (_tmp1, _tmp, _p1 - _tmp);
_p1 = _p1 + 1;
_slotno = atoi (_tmp1);
portno = atoi (_p1);
cslot = translateslot_in (_slotno & 0xff); /*lirui modify 20058-26 for newslot*/
cportsel = portno & 0xffff;
portno = xdsl_slotport2port (&_index, cslot, cportsel);
}
else
{
portno = -1;
}
_no1 = portno;
_no2 = portno;
}
if (_no1 > _no2)
{
tmpno = _no1;
_no1 = _no2;
_no2 = tmpno;
}
if (_no1 == -1 || _no2 == -1)
{
_no2 = -1;
_no1 = -1;
}
for (_i = _no1; _i <= _no2; _i++)
{
portno = _i;
/**/
{
p = br_get_port_byno (portno);
if (!p)
{
#ifdef _xdsl_
NULL;
#else
vty_out (vty, "port:%d not exist\r\n", portno);
#endif
return 0;
}
for (j = 0; j < portno_num; j++)
{
if (portno_list[j] == portno)
{
if (vty)
vty_out (vty,
"%sPortno [%d] re-listed in portlist.%s",
VTY_NEWLINE, portno, VTY_NEWLINE);
return 0;
}
}
portno_list[portno_num] = portno;
portno_num++;
if (portno_num >= MAXPortNum)
{
if (vty)
vty_out (vty, "%sToo many portno in portlist.%s",
VTY_NEWLINE, VTY_NEWLINE);
return 0;
}
}
/*END_PARSE_PORT_LIST (); */
/**/ if (1 == _i)
_i += 15;
}
}
}
/**/ return 1;
}
int show_rstp_port(char* portlist, struct vty * vty)
{
char detail;
short portno;
struct net_bridge_port * p;
struct net_bridge *this;
if(strcmp(portlist,"all"))
{
if(!CheckPortListValid(portlist,vty))
{
if(vty)
vty_out(vty,"Invalid Port List <%s> \r\n",portlist);
return -1;
}
detail = 0;
BEGIN_PARSE_PORT_LIST(portlist,portno)
{
/*printf("portno = %d\r\n",portno);*/
if (!is_port_uplink_port(portno))
{
vty_out(vty,"Invalid Port List <%s> \r\n",portlist);
return -1;
}
show_rstp_port_detail(portno, g_detail,vty);
}END_PARSE_PORT_LIST();
}
else
{
BEGIN_PARSE_ALL_PORT_UPLINK(p)
{
/*gprintportstp(p->port_no,vty);*/
this = p->br;
#if 0
if( STP_ENABLED != this->admin_state )
{
vty_out(vty,"Bridge Rapid Spanning Tree Protocol is disabled \r\n");
return 0;
}
#endif
show_rstp_port_detail(p->port_no, g_detail,vty);
}END_PARSE_ALL_PORT_UPLINK(p);
}
return 0;
}
static void show_rstp_port_detail_old (short port_no, int detail,struct vty *vty)
{
UID_STP_STATE_T uid_state;
UID_STP_PORT_STATE_T uid_port;
UID_STP_PORT_CFG_T uid_cfg;
int port_index;
int rc;
struct net_bridge *br;
struct net_bridge_port * port;
port = br_get_port_byno(port_no);
if(!port)
{
vty_out(vty,"port:%d not created \r\n",port_no);
return;
}
br = port->br;
rc = STP_IN_stpm_get_state (br, &uid_state);
if (rc)
{
/*printf ("can't get rstp bridge state: %s\n",
STP_IN_get_error_explanation (rc));
*/
}
/*else if (!detail)
{
vty_out (vty,"BridgeId:\r\n ");
print_bridge_id (&uid_state.bridge_id, 0,vty);
vty_out (vty,"RootId:\r\n ");
print_bridge_id (&uid_state.designated_root, 1,vty);
}
*/
uid_port.port_no = port->port_no;
rc = STP_IN_port_get_state (port, &uid_port);
if (rc)
{
/* printf ("can't get rstp port state: %s\n",STP_IN_get_error_explanation (rc));*/
return;
}
memset (&uid_cfg, 0, sizeof (UID_STP_PORT_CFG_T));
rc = STP_IN_port_get_cfg (port, &uid_cfg);
if (rc)
{
/* printf ("can't get rstp port config: %s\n",
STP_IN_get_error_explanation (rc));*/
return ;
}
vty_out(vty,"---------------------------------------------------------------------------\r\n");
vty_out(vty," Port:%d 's RSTP Information \r\n",port_no);
if (detail)
{
/*vty_out (vty,"Stp Port\r\n ");*/
/*CLI_out_port_id (port_index, False);*/
#if 0
printf (": PortId: %04lx in vlan '%s' with tag %d:\n",
(unsigned long) uid_port.port_id, uid_state.vlan_name,
(int) uid_state.vlan_id);
#else
/* vty_out (vty,"PortId: %04lx in Bridge '%s':\r\n",
(unsigned long) uid_port.port_id, uid_state.vlan_name);*/
#endif
vty_out (vty,"Priority: %-d\r\n", (int) (uid_port.port_id >> 8));
vty_out (vty,"State: %-16s", stp_state2str (uid_port.state,
1));
vty_out (vty,"Uptime: %-9lu\r\n", uid_port.uptime);
vty_out (vty,"PortPathCost: admin: ");
if (ADMIN_PORT_PATH_COST_AUTO == uid_cfg.admin_port_path_cost)
{
vty_out (vty,"%-9s", "Auto");
}
else
{
vty_out (vty,"%-9lu\r\n", uid_cfg.admin_port_path_cost);
}
vty_out (vty,"oper: %-9lu\r\n", uid_port.oper_port_path_cost);
vty_out (vty,"Point2Point: admin: ");
switch (uid_cfg.admin_point2point)
{
case P2P_FORCE_TRUE:
vty_out (vty,"%-9s", "ForceYes");
break;
case P2P_FORCE_FALSE:
vty_out (vty,"%-9s", "ForceNo");
break;
case P2P_AUTO:
vty_out (vty,"%-9s", "Auto");
break;
}
vty_out (vty,"oper: %-9s\r\n",
uid_port.oper_point2point ? "Yes" : "No");
vty_out (vty,"Edge: admin: %-9soper: %-9s\r\n",
uid_cfg.admin_edge ? "Y" : "N", uid_port.oper_edge ? "Y" : "N");
vty_out (vty,"Partner: oper: %-9s\r\n",
uid_port.oper_stp_neigb ? "Slow" : "Rapid");
if (' ' != uid_port.role)
{
if ('-' != uid_port.role)
{
vty_out (vty,"PathCost: %-lu\r\n",
(unsigned long) (uid_port.path_cost));
vty_out (vty,"\r\n--Designated Root--\r\n");
print_bridge_id (&uid_port.designated_root, 1,vty);
vty_out (vty,"Designated Cost: %-ld\r\n",
(unsigned long) uid_port.designated_cost);
vty_out (vty,"\r\n--Designated Bridge--\r\n");
print_bridge_id (&uid_port.designated_bridge, 1,vty);
vty_out (vty,"\r\n--Designated Port: %-4lx\n\r--",
(unsigned long) uid_port.designated_port);
}
vty_out (vty,"Role: ");
switch (uid_port.role)
{
case 'A':
vty_out (vty,"Alternate\n\r");
break;
case 'B':
vty_out (vty,"Backup\n\r");
break;
case 'R':
vty_out (vty,"Root\n\r");
break;
case 'D':
vty_out(vty,"Designated\n\r");
break;
case '-':
vty_out (vty,"NonStp\n\r");
break;
default:
vty_out (vty,"Unknown(%c)\n\r", uid_port.role);
break;
}
vty_out(vty,"\r\n");
if ('R' == uid_port.role || 'D' == uid_port.role)
{
/* printf("Tc: %c ", uid_port.tc ? 'Y' : 'n'); */
vty_out (vty,"TcAck: %c ",
uid_port.top_change_ack ? 'Y' : 'N');
vty_out (vty,"TcWhile: %3d\n\r", (int) uid_port.tcWhile);
}
}
if (UID_PORT_DISABLED == uid_port.state || '-' == uid_port.role)
{
#if 0
printf ("helloWhen: %3d ", (int) uid_port.helloWhen);
printf ("lnkWhile: %3d\n", (int) uid_port.lnkWhile);
printf ("fdWhile: %3d\n", (int) uid_port.fdWhile);
#endif
}
else if ('-' != uid_port.role)
{
vty_out (vty,"fdWhile: %3d ", (int) uid_port.fdWhile);
vty_out (vty,"rcvdInfoWhile: %3d\n\r", (int) uid_port.rcvdInfoWhile);
vty_out (vty,"rbWhile: %3d ", (int) uid_port.rbWhile);
vty_out (vty,"rrWhile: %3d\n\r", (int) uid_port.rrWhile);
#if 0
printf ("mdelayWhile: %3d ", (int) uid_port.mdelayWhile);
printf ("lnkWhile: %3d\n", (int) uid_port.lnkWhile);
printf ("helloWhen: %3d ", (int) uid_port.helloWhen);
printf ("txCount: %3d\n", (int) uid_port.txCount);
#endif
}
vty_out (vty,"RSTP BPDU rx: %lu\n\r",
(unsigned long) uid_port.rx_rstp_bpdu_cnt);
vty_out (vty,"CONFIG BPDU rx: %lu\n\r",
(unsigned long) uid_port.rx_cfg_bpdu_cnt);
vty_out (vty,"TCN BPDU rx: %lu\n\r",
(unsigned long) uid_port.rx_tcn_bpdu_cnt);
}
else
{
vty_out (vty,"%c%c%c\r\n", (uid_port.oper_point2point) ? ' ' : '*',
(uid_port.oper_edge) ? 'E' : ' ',
(uid_port.oper_stp_neigb) ? 's' : ' ');
/* CLI_out_port_id (port_index, False);*/
/* vty_out (vty," %04lx %3s ", (unsigned long) uid_port.port_id,
stp_state2str (uid_port.state, 0));*/
vty_out (vty,"--designated_root--\r\n");
print_bridge_id (&uid_port.designated_root, 0,vty);
vty_out (vty,"--designated_bridge--\r\n");
print_bridge_id (&uid_port.designated_bridge, 0,vty);
vty_out (vty,"--designated_port--");
vty_out(vty,"%4lx\r\n", (unsigned long) uid_port.designated_port);
vty_out (vty,"Role: ");
switch (uid_port.role)
{
case 'A':
vty_out (vty,"Alternate\n\r");
break;
case 'B':
vty_out (vty,"Backup\n\r");
break;
case 'R':
vty_out (vty,"Root\n\r");
break;
case 'D':
vty_out(vty,"Designated\n\r");
break;
case '-':
vty_out (vty,"NonStp\n\r");
break;
default:
vty_out (vty,"Unknown(%c)\n\r", uid_port.role);
break;
}
vty_out (vty,"\r\n");
}
vty_out(vty,"---------------------------------------------------------------------------\r\n");
}
static void show_rstp_port_detail (short port_no, char detail,struct vty *vty)
{
UID_STP_STATE_T uid_state;
UID_STP_PORT_STATE_T uid_port;
UID_STP_PORT_CFG_T uid_cfg;
int port_index;
int rc;
#ifdef _BP5116_02_
char slot;
short slot_port;
#else
char slot,slot_port;
#endif
struct net_bridge *br;
struct net_bridge_port * port;
port = br_get_port_byno(port_no);
if(!port)
{
vty_out(vty,"port:%d not created \r\n",port_no);
return;
}
br = port->br;
#if 0
if( STP_ENABLED != br->admin_state )
{
vty_out(vty,"Bridge Rapid Spanning Tree Protocol is disabled \r\n");
return 0;
}
#endif
rc = STP_IN_stpm_get_state (br, &uid_state);
if (rc)
{
return;
}
uid_port.port_no = port->port_no;
rc = STP_IN_port_get_state (port, &uid_port);
if (rc)
{
return;
}
memset (&uid_cfg, 0, sizeof (UID_STP_PORT_CFG_T));
rc = STP_IN_port_get_cfg (port, &uid_cfg);
if (rc)
{
return ;
}
xdsl_port2slotport (port_no, &slot, &slot_port);
slot = translateslot_out(slot);
vty_out(vty,"---------------------------------------------------------------------------\r\n");
vty_out(vty," Port:%d:%d 's RSTP Information \r\n",slot,slot_port);
vty_out(vty ,"--port info--\r\n");
vty_out(vty ,"port no: %-2d",port_no);
vty_out (vty," Priority: %-d\r\n", (int) (uid_port.port_id >> 8));
vty_out (vty,"Role: ");
switch (uid_port.role)
{
case 'A':
vty_out (vty,"%-10s","Alternate");
break;
case 'B':
vty_out (vty,"%-10s","Backup");
break;
case 'R':
vty_out (vty,"%-10s","Root");
break;
case 'D':
vty_out(vty,"%-10s","Designated");
break;
case '-':
vty_out (vty,"%-10s","NonStp");
break;
default:
vty_out (vty,"%-10s","Unknown");
break;
}
if (STP_ENABLED == br->admin_state)
vty_out (vty," State: %-16s\r\n", stp_state2str (uid_port.state,1));
else
vty_out (vty," State: %-16s\r\n", "Disabled");
/*vty_out (vty,"Uptime: %-9lu\r\n", uid_port.uptime);*/ /*by wl*/
/*vty_out (vty,"PortPathCost: admin: ");*/ /*by wl*/
vty_out(vty,"PortPathCost: ");
/*if (ADMIN_PORT_PATH_COST_AUTO == uid_cfg.admin_port_path_cost)
{
vty_out (vty,"%-9s", "Auto");
}
else
{
vty_out (vty,"%-9lu\r\n", uid_cfg.admin_port_path_cost);
}
*/ /*by wl*/
/*vty_out (vty,"oper: %-9lu\r\n", uid_port.oper_port_path_cost);*/ /*by wl*/
vty_out (vty,"%-9lu", uid_port.oper_port_path_cost);
if (detail!=0)
{vty_out (vty,"Point2Point:");
switch (uid_cfg.admin_point2point)
{
case P2P_FORCE_TRUE:
vty_out (vty,"%-9s", "ForceYes");
break;
case P2P_FORCE_FALSE:
vty_out (vty,"%-9s", "ForceNo");
break;
case P2P_AUTO:
vty_out (vty,"%-9s", "Auto");
break;
} /*by wl*/
vty_out (vty,"oper: %-9s\r\n", uid_port.oper_point2point ? "Yes" : "No");
vty_out (vty,"Edge: admin: %-9soper: %-9s\r\n",
uid_cfg.admin_edge ? "Y" : "N", uid_port.oper_edge ? "Y" : "N");
vty_out(vty,"operEdge:%d\r\n",uid_port.oper_edge);
vty_out (vty,"Partner: oper: %-9s\r\n",
uid_port.oper_stp_neigb ? "Slow" : "Rapid");
vty_out (vty," Partner: %-9s\r\n",uid_port.oper_stp_neigb ? "Slow" : "Rapid");
}
#if 0
if (STP_ENABLED != br->admin_state)
{
vty_out(vty,"---------------------------------------------------------------------------\r\n");
return ;
}
#endif
if (' ' != uid_port.role)
{
if ('-' != uid_port.role)
{
/*vty_out (vty,"PathCost: %-lu\r\n", (unsigned long) (uid_port.path_cost));*/
vty_out (vty,"\r\n--Designated Root--\r\n");
/* print_bridge_id (&uid_port.designated_root, 1,vty);*/
vty_out (vty,"Priority: %d\r\n",uid_port.designated_root.prio);
vty_out (vty,"Mac address : %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\r\n",
uid_port.designated_root.addr[0], uid_port.designated_root.addr[1],
uid_port.designated_root.addr[2], uid_port.designated_root.addr[3],
uid_port.designated_root.addr[4], uid_port.designated_root.addr[5]);
vty_out (vty,"Designated Cost: %-ld\r\n",(unsigned long) uid_port.designated_cost);
vty_out (vty,"\r\n--Designated Bridge--\r\n");
/*print_bridge_id (&uid_port.designated_bridge, 1,vty);*/
vty_out (vty,"Priority: %d\r\n",uid_port.designated_bridge.prio);
vty_out (vty,"Mac address : %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\r\n",
uid_port.designated_bridge.addr[0], uid_port.designated_bridge.addr[1],
uid_port.designated_bridge.addr[2], uid_port.designated_bridge.addr[3],
uid_port.designated_bridge.addr[4], uid_port.designated_bridge.addr[5]);
/*vty_out (vty,"\r\n--Designated Port: %-4lx\n\r--",(unsigned long) uid_port.designated_port);*/
vty_out (vty,"\r\n--Designated Port--\r\n");
vty_out (vty,"Port no: %-2d", (int) (uid_port.designated_port&0xff));
vty_out (vty," Priority: %-d\r\n", (int) (uid_port.designated_port>> 8));
}
/* if ('R' == uid_port.role || 'D' == uid_port.role)
{
vty_out (vty,"TcAck: %c ", uid_port.top_change_ack ? 'Y' : 'N');
vty_out (vty,"TcWhile: %3d\n\r", (int) uid_port.tcWhile);
}
*//*by wl*/
}
if (detail)
{
if ('-' != uid_port.role)
{
vty_out (vty,"fdWhile: %3d ", (int) uid_port.fdWhile);
vty_out (vty,"rcvdInfoWhile: %3d\n\r", (int) uid_port.rcvdInfoWhile);
vty_out (vty,"rbWhile: %3d ", (int) uid_port.rbWhile);
vty_out (vty,"rrWhile: %3d\n\r", (int) uid_port.rrWhile);
}
vty_out (vty,"RSTP BPDU rx: %lu\n\r",(unsigned long) uid_port.rx_rstp_bpdu_cnt);
vty_out (vty,"CONFIG BPDU rx: %lu\n\r",(unsigned long) uid_port.rx_cfg_bpdu_cnt);
vty_out (vty,"TCN BPDU rx: %lu\n\r", (unsigned long) uid_port.rx_tcn_bpdu_cnt);
}
vty_out(vty,"---------------------------------------------------------------------------\r\n");
}
void rstp_cli_installment()
{
install_element (CONFIG_STP_NODE, &ConfigRstp_CMD);
install_element (CONFIG_STP_NODE, &ShowRstp_CMD);
install_element (CONFIG_STP_NODE, &ConfigRstpBridgePriority_CMD);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -