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

📄 rstp_cli.~c

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