📄 rstp_cli.~c
字号:
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, 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)
{
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 ;
}
vty_out(vty,"---------------------------------------------------------------------------\r\n");
vty_out(vty," Port:%d 's RSTP Information \r\n",port_no);
vty_out(vty ,"--port info--\r\n");
vty_out(vty ,"port no: %-2d\r\n",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,"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,"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,"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,"Priority: %-d\r\n", (int) (uid_port.designated_port>> 8));
vty_out (vty,"Port no: %-2d\r\n", (int) (uid_port.designated_port&0xff));
}
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);
}
}
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_Init()
{
install_element (CONFIG_RSTP_NODE, &ConfigRstp_CMD);
install_element (CONFIG_RSTP_NODE, &ShowRstp_CMD);
install_element (CONFIG_RSTP_NODE, &ConfigRstpBridgePriority_CMD);
install_element (CONFIG_RSTP_NODE, &ConfigRstpBridgeMaxAge_CMD);
install_element (CONFIG_RSTP_NODE, &ConfigRstpBridgeForwarddelay_CMD);
install_element (CONFIG_RSTP_NODE, &ConfigRstpBridgeHelloTime_CMD);
install_element (CONFIG_RSTP_NODE, & ConfigRstp_ForceVersion_CMD);
install_element (CONFIG_RSTP_NODE, &RstpOneSecond_CMD);
install_element (DEBUG_HIDDEN_NODE, &ConfigRstp_PortDetail_CMD);
}
static void print_bridge_id (UID_BRIDGE_ID_T * bridge_id, unsigned char cr,struct vty *vty)
{
int priority = 0;
priority = bridge_id->prio;
vty_out (vty,"Priority : %d\r\n",priority);
vty_out (vty,"Mac address : %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\r\n",
bridge_id->addr[0], bridge_id->addr[1],bridge_id->addr[2],
bridge_id->addr[3], bridge_id->addr[4], bridge_id->addr[5]);
}
static char *stp_state2str (RSTP_PORT_STATE stp_port_state, int detail)
{
if (detail)
{
switch (stp_port_state)
{
case UID_PORT_DISABLED:
return "Disabled";
case UID_PORT_DISCARDING:
return "Discarding";
case UID_PORT_LEARNING:
return "Learning";
case UID_PORT_FORWARDING:
return "Forwarding";
case UID_PORT_NON_STP:
return "NoStp";
default:
return "Unknown";
}
}
switch (stp_port_state)
{
case UID_PORT_DISABLED:
return "Dis";
case UID_PORT_DISCARDING:
return "Blk";
case UID_PORT_LEARNING:
return "Lrn";
case UID_PORT_FORWARDING:
return "Fwd";
case UID_PORT_NON_STP:
return "Non";
default:
return "Unk";
}
}
static void set_bridge_cfg_value (int long value, unsigned long val_mask,struct vty *vty)
{
UID_STP_CFG_T uid_cfg;
char *val_name;
int rc;
uid_cfg.field_mask = val_mask;
switch (val_mask)
{
case BR_CFG_STATE:
uid_cfg.stp_enabled = value;
val_name = "state";
break;
case BR_CFG_PRIO:
uid_cfg.bridge_priority = value;
val_name = "priority";
break;
case BR_CFG_AGE:
uid_cfg.max_age = value;
val_name = "max_age";
break;
case BR_CFG_HELLO:
uid_cfg.hello_time = value;
val_name = "hello_time";
break;
case BR_CFG_DELAY:
uid_cfg.forward_delay = value;
val_name = "forward_delay";
break;
case BR_CFG_FORCE_VER:
uid_cfg.force_version = value;
val_name = "force_version";
break;
case BR_CFG_AGE_MODE:
case BR_CFG_AGE_TIME:
default:
vty_out (vty,"Invalid value mask 0X%lx\n", val_mask);
return;
break;
}
rc = STP_IN_stpm_set_cfg (&uid_cfg,vty);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -