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

📄 rstp_cli.c

📁 rstp for switch in vxworks
💻 C
📖 第 1 页 / 共 4 页
字号:
				{
					_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 + -