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

📄 portinfo.c

📁 rstp for switch in vxworks
💻 C
📖 第 1 页 / 共 2 页
字号:
			if (port->admin_non_stp)
				return;
			port->rcvdBpdu = True;
			break;
		case BPDU_TOPO_CHANGE_TYPE:
			port->rx_tcn_bpdu_cnt++;
#if 0	/* def STP_DBG */
			if (port->info->debug)
				stp_trace ("TcnBpdu on port %s", port->port_name);
#endif
			if (port->admin_non_stp)
				return;
			port->rcvdBpdu = True;
			port->msgBpduVersion = bpdu->hdr.version;
			port->msgBpduType = bpdu->hdr.bpdu_type;
			return;
		default:
			#ifdef _INFO_DEBUG_
			mn_fd_printf (cl_serv_console_fd,"RX undef bpdu type=%d", (int) bpdu->hdr.bpdu_type);
			#endif
			return;
		case BPDU_RSTP:
			port->rx_rstp_bpdu_cnt++;
			if (port->admin_non_stp)
				return;
			if (port->br->ForceVersion >= NORMAL_RSTP)
			{
				port->rcvdBpdu = True;
			}
			else
			{
				return;
			}
#if 0	/* def STP_DBG */
			if (port->info->debug)
				stp_trace ("BPDU_RSTP on port %s", port->port_name);
#endif
			break;
	}

	port->msgBpduVersion = bpdu->hdr.version;
	port->msgBpduType = bpdu->hdr.bpdu_type;
	port->msgFlags = bpdu->body.flags;

	/* 17.18.11 */
	STP_VECT_get_vector (&bpdu->body, &port->msgPrio);
	port->msgPrio.bridge_port = port->port_id;

	/* 17.18.12 */
	STP_get_times (&bpdu->body, &port->msgTimes);

	/* 17.18.25, 17.18.26 : see setTcFlags() */
}


/************************************************************************************
  function:
  purpose:   Port Information状态机的状态操作
  input:
  output:
  return:
  remark:

 #define DISABLED  2
#define ENABLED   3
#define AGED      4
#define UPDATE    5
#define CURRENT   6
#define RECEIVE   7
#define SUPERIOR  8
#define REPEAT    9
#define AGREEMENT 10
   *************************************************************************************/
void STP_info_enter_state (STATE_MACH_T * this)
{
	register struct net_bridge_port *port = this->owner.port;

	switch (this->State)
	{
		case BEGIN:
			#ifdef _INFO_DEBUG_
			mn_fd_printf(cl_serv_console_fd,"INFO EnterState :Begin\r\n");
#endif
			port->rcvdMsg = OtherMsg;
			port->msgBpduType = -1;
			port->msgPortRole = RSTP_PORT_ROLE_UNKN;
			port->msgFlags = 0;

			/* clear port statistics */
			port->rx_cfg_bpdu_cnt = port->rx_rstp_bpdu_cnt =
				port->rx_tcn_bpdu_cnt = 0;

		case DISABLED:
			#ifdef _INFO_DEBUG_
			mn_fd_printf(cl_serv_console_fd,"INFO EnterState :Disabled\r\n");
#endif

			port->rcvdBpdu = port->rcvdRSTP = port->rcvdSTP = False;
			port->updtInfo = port->proposing = False;	/* In DISABLED */
			port->agreed = port->proposed = False;
			port->rcvdInfoWhile = 0;
			port->infoIs = Disabled;
			port->reselect = True;
			port->selected = False;
			break;
		case ENABLED:	/* IEEE 802.1y, 17.21, Z.14 */
						#ifdef _INFO_DEBUG_
			mn_fd_printf(cl_serv_console_fd,"INFO EnterState :Enabled\r\n");
#endif
			STP_VECT_copy (&port->portPrio, &port->designPrio);
			STP_copy_times (&port->portTimes, &port->designTimes);
			break;
		case AGED:
						#ifdef _INFO_DEBUG_
			mn_fd_printf(cl_serv_console_fd,"INFO EnterState :Aged\r\n");
#endif
			port->infoIs = Aged;
			port->reselect = True;
			port->selected = False;
			break;
		case UPDATE:
						#ifdef _INFO_DEBUG_
			mn_fd_printf(cl_serv_console_fd,"INFO EnterState :Update\r\n");
#endif
			STP_VECT_copy (&port->portPrio, &port->designPrio);
			STP_copy_times (&port->portTimes, &port->designTimes);
			port->updtInfo = False;
			port->agreed = port->synced = False;	/* In UPDATE */
			port->proposed = port->proposing = False;	/* in UPDATE */
			port->infoIs = Mine;
			port->newInfo = True;
#ifdef STP_DBG
			if (this->debug)
			{
				STP_VECT_br_id_print ("updated: portPrio.design_bridge",
					&port->portPrio.design_bridge, True);
			}
#endif
			break;
		case CURRENT:

						#ifdef _INFO_DEBUG_
			mn_fd_printf(cl_serv_console_fd,"INFO EnterState :Current\r\n");
#endif
			break;
		case RECEIVE:
						#ifdef _INFO_DEBUG_

			mn_fd_printf(cl_serv_console_fd,"INFO EnterState :Receive\r\n");
#endif
			port->rcvdMsg = rcvBpdu (this);
			updtBPDUVersion (this);
			setTcFlags (this);
			port->rcvdBpdu = False;
			break;
		case SUPERIOR:
			STP_VECT_copy (&port->portPrio, &port->msgPrio);
			STP_copy_times (&port->portTimes, &port->msgTimes);
			updtRcvdInfoWhile (this);
#if 1	/* due 802.1y, Z.7 */
			port->agreed = False;	/* deleted due 802.y in SUPERIOR */
			port->synced = False;	/* due 802.y deleted in SUPERIOR */
#endif
			port->proposing = False;	/* in SUPERIOR */
			port->proposed = recordProposed (this, "SUPERIOR");
			port->infoIs = Received;
			port->reselect = True;
			port->selected = False;
#ifdef STP_DBG
			if (this->debug)
			{
				STP_VECT_br_id_print ("stored: portPrio.design_bridge",
					&port->portPrio.design_bridge, True);
				stp_trace ("proposed=%d on port %s", (int) port->proposed,
					port->port_name);
			}
#endif
			break;
		case REPEAT:

						#ifdef _INFO_DEBUG_
			mn_fd_printf(cl_serv_console_fd,"INFO EnterState :Repeat\r\n");
#endif
			port->proposed = recordProposed (this, "REPEAT");
			updtRcvdInfoWhile (this);
			break;
		case AGREEMENT:
#ifdef STP_DBG
			if (port->roletrns->debug)
			{
				stp_trace ("(%s-%s) rx AGREEMENT flag !", port->owner->name,
					port->port_name);
			}
#endif
			#ifdef _INFO_DEBUG_
			mn_fd_printf(cl_serv_console_fd,"INFO EnterState :Agreement\r\n");
#endif
			port->agreed = True;
			port->proposing = False;	/* In AGREEMENT */
			break;
	}

}

/************************************************************************************
  function:
  purpose:   Port Information状态机的状态转移
  input:
  output:
  return:
  remark:

   *************************************************************************************/

Bool STP_info_check_conditions (STATE_MACH_T * this)
{
	register struct net_bridge_port  *port = this->owner.port;

	if ((!port->portEnabled && port->infoIs != Disabled) ||
		BEGIN == this->State)
	{

				#ifdef _INFO_DEBUG_
		mn_fd_printf(cl_serv_console_fd,"INFO change :To Disabled\r\n");
#endif
		return STP_hop_2_state (this, DISABLED);
	}

	switch (this->State)
	{
		case DISABLED:
			if (port->updtInfo)
			{
			#ifdef _INFO_DEBUG_
				mn_fd_printf(cl_serv_console_fd,"INFO change :From Disable To Disabled\r\n");
			
#endif
				return STP_hop_2_state (this, DISABLED);
			}
			if (port->portEnabled && port->selected)
			{
			#ifdef _INFO_DEBUG_
				mn_fd_printf(cl_serv_console_fd,"INFO change :From Disable To Enabled\r\n");
	#endif
				return STP_hop_2_state (this, ENABLED);
			}
			if (port->rcvdBpdu)				
			{
			#ifdef _INFO_DEBUG_
				mn_fd_printf(cl_serv_console_fd,"INFO change :From Disable To Disabled\r\n");
	#endif

				return STP_hop_2_state (this, DISABLED);
			}
			break;

		case ENABLED:	/* IEEE 802.1y, 17.21, Z.14 */
		{
			#ifdef _INFO_DEBUG_
			mn_fd_printf(cl_serv_console_fd,"INFO change :From Enable To Aged\r\n");
#endif
			return STP_hop_2_state (this, AGED);
		}
			break;
		case AGED:
			if (port->selected && port->updtInfo)
			{

						#ifdef _INFO_DEBUG_
				mn_fd_printf(cl_serv_console_fd,"INFO change :From Aged To Update\r\n");
			#endif
				return STP_hop_2_state (this, UPDATE);
			}
			break;
		case UPDATE:
			{

							#ifdef _INFO_DEBUG_
				mn_fd_printf(cl_serv_console_fd,"INFO change :From Update To Current\r\n");
		#endif
				return STP_hop_2_state (this, CURRENT);
			}
			break;
		case CURRENT:
			if (port->selected && port->updtInfo)
			{

						#ifdef _INFO_DEBUG_
				mn_fd_printf(cl_serv_console_fd,"INFO change :From Current To Update\r\n");
#endif
				return STP_hop_2_state (this, UPDATE);
			}

			if (Received == port->infoIs && !port->rcvdInfoWhile &&
				!port->updtInfo && !port->rcvdBpdu)
			{

						#ifdef _INFO_DEBUG_
				mn_fd_printf(cl_serv_console_fd,"INFO change :From Current To Aged\r\n");
	#endif
				return STP_hop_2_state (this, AGED);
			}
			if (port->rcvdBpdu && !port->updtInfo)
			{
			#ifdef _INFO_DEBUG_
				mn_fd_printf(cl_serv_console_fd,"INFO change :From Current To Received\r\n");
		#endif
				return STP_hop_2_state (this, RECEIVE);
			}
			break;
		case RECEIVE:
			switch (port->rcvdMsg)
			{
				case SuperiorDesignateMsg:
				{
				#ifdef _INFO_DEBUG_
					mn_fd_printf(cl_serv_console_fd,"INFO change :From Receive To Superior\r\n");
 			#endif
					return STP_hop_2_state (this, SUPERIOR);
				}
				case RepeatedDesignateMsg:
				{
							#ifdef _INFO_DEBUG_
					mn_fd_printf(cl_serv_console_fd,"INFO change :From Receive To Repeat\r\n");
 		#endif
					return STP_hop_2_state (this, REPEAT);
				}
				case ConfirmedRootMsg:
				{
							#ifdef _INFO_DEBUG_
					mn_fd_printf(cl_serv_console_fd,"INFO change :From Receive To Agreement\r\n");
 		#endif
					return STP_hop_2_state (this, AGREEMENT);
				}
				default:
				{
							#ifdef _INFO_DEBUG_
					mn_fd_printf(cl_serv_console_fd,"INFO change :From Receive To Current\r\n");
 			#endif
					return STP_hop_2_state (this, CURRENT);
				}
			}
			break;
		case SUPERIOR:
			{
				return STP_hop_2_state (this, CURRENT);
			}
			break;
		case REPEAT:
			{
						#ifdef _INFO_DEBUG_
				mn_fd_printf(cl_serv_console_fd,"INFO change :From Repeat To Current\r\n");
 		#endif
				return STP_hop_2_state (this, CURRENT);
			}
			break;
		case AGREEMENT:
			{
						#ifdef _INFO_DEBUG_
				mn_fd_printf(cl_serv_console_fd,"INFO change :From Agreement To \r\n");
 		
#endif
				return STP_hop_2_state (this, CURRENT);
			}
			break;
	}

	return False;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -