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

📄 ldpmain.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 4 页
字号:
			fecMsg->Fec.fecElArray[0].addressEl.preLen);
           DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"==ldpmain FEC INQUIRE_TYPE addr %x,prelen %d,not exist\n", \
			fecMsg->Fec.fecElArray[0].addressEl.address, \
			fecMsg->Fec.fecElArray[0].addressEl.preLen);
		}
	}
	return;
}


/********************************************************************/          
/*							                                       	*/          
/*					4.LDP进程主处理函数								*/
/*														        	*/          
/********************************************************************/          
void testRouet();
/********************************************************************/
/*	Product Name:	MPLS PACK                                 
/*	Module  Name:	LDP    									    
/*	File    Name:   LdpProcess				        	      
/*  Func    Name:   seg_fec_msg                                   
/*	Author  Name:   weng.qing  shi.zhaohui  sun.baoping   hu.yonghong       
/*	Creat   Date:	2001/12/20                               
/*	Version		:	  1.0                                      
/*	Function    :	LDP main process           
/*  history:
/*      add response of LDP PROCESS To FEC process,   sbp 2002-1-3 
/********************************************************************/
void LdpProcess(void *ldpIn, void *ldpOut, void *Data)
{
	
	/* 定义局部变量 */
	TimerEventStruc 	        *   getTimer; 
    LDPMSG_COMM		            *	pudptcpMsg;	
	FecMsg                      *   fecMsg;
		
	unsigned long               eventType;
	TCP_CONNECT_MSG				* tcpConInd;	
	PID   sendPid;
	unsigned char               flag,MsgNo=0;
	mplsOAMLdpMessage_t         *oamldpmess;
    short                       oammsgtype;
    ldpFecAck_t                 fecAck;
    unsigned long           	tempid;
    PID                     	selfpid;
    
	switch(STATE()) 
	{
#if 1
		case LdpInitStatus:
            switch(EVENT())
            {

                case MPLS_PowerOnEvent:                 	
                    InitWholeVariable();
                    initldpdynmib( );
                    SELF(&selfLdpPid);
					GET_PID("FEC",&fecPid);
					fecPid.module = selfLdpPid.module;
					GET_PID("FEC",&mlsmanagePid);
                   GET_PID("A041MSGFUNC",&udptcpPid);
                    GET_PID("C010PROCESS",&pvcPid);
                    GET_PID("Snark_Task",&sbForwardPid);
                    sbForwardPid.module = selfLdpPid.module;
                    oamldpmess1.msgtype = MPLS_MIB_LDP_LSR_ATTR;
                    oamldpmess1.mplsLdpOAMflag = 1;
                    MPLS_PSEND(MPLS_LDP_OAM_MESSAGE, &oamldpmess1,sizeof(mplsLdpOAMMessage)+sizeof(unsigned char),mlsmanagePid);
                    TimerID_oamldp = EXTRA_SET_TIMER(TIMER7_LDPPERIOD,MPLS_TIMER7,MPLS_MIB_LDP_LSR_ATTR);
                    break;

  				case MPLS_LDP_OAM_MESSAGE:
                    EXTRA_KILL_TIMER(TimerID_oamldp);
                    oamldpmess = (mplsOAMLdpMessage_t *)ldpIn;
                    /* begin  response and print  sbp 2002-1-3  */
                    SENDER(&sendPid);  
                    printf("==== Module %d  send msg to Module %d.====",sendPid.module,selfLdpPid.module);
                    oamldpmess->msgtype = oamldpmess->msgtype;
                    oamldpmess->mplsLdpOAMflag = 2;
                    MPLS_PSEND(MPLS_LDP_OAM_MESSAGE,oamldpmess,sizeof(oamldpmess->msgtype)+sizeof(unsigned char),mlsmanagePid);
                    /* end  response and print  sbp 2002-1-3  */
                    
                    func_GetInitCfg(oamldpmess);
                    if(oamldpmess->msgtype == MPLS_MIB_LDP_ENTITY)
	                    InitHello();

                    if(oamldpmess->msgtype == MPLS_MIB_LDP_CONFIG)
                    {
	                      //EXTRA_SET_EVERY_TIMER(TIMER1_PERIOD,MPLS_TIMER1,0);
	                      EXTRA_SET_TIMER(TIMER1_PERIOD,MPLS_TIMER1,0);
		                  MPLS_SET_TIMER(XC_WAIT_TIME,(void *)Func_CR_Xc_wait,0,ldptime_q,tempid);                              
		                  MPLS_SET_TIMER(FECLBL_WAIT_TIME,(void *)Func_CR_FecLable_wait,0,ldptime_q,tempid);
		                  printf("set cr link timer\n");
	  	                  MPLS_SET_TIMER(LBLMSG_WAIT_TIME,(void *)Func_CR_Lblmsg_wait,0,ldptime_q,tempid); 
	                      
	                      MPLS_SET_TIMER(XC_WAIT_TIME,(void *)Func_Xc_wait,0,ldptime_q,tempid);                              
		                  MPLS_SET_TIMER(FECLBL_WAIT_TIME,(void *)Func_FecLable_wait,0,ldptime_q,tempid);
	   	                  MPLS_SET_TIMER(LBLMSG_WAIT_TIME,(void *)Func_Lblmsg_wait,0,ldptime_q,tempid); 
	   	                  
	  	                 
		                                	  
	                      NEXT_STATE(LdpWorkStatus);
                    }
                    break;

				case MPLS_Timer7Event: /* ldp to oam get config data timer */

				    getTimer = (TimerEventStruc *)ldpIn;
                    func_protimer7(getTimer);
                    break;

				default: break;
			} 
			break;
#endif

#if 0
		/* 不起FEC的初始化 */
		case LdpInitStatus:
            switch(EVENT())
            {

                case MPLS_PowerOnEvent:                 	
                    InitWholeVariable();
                    initldpdynmib( );
                    InitLdpData();
                    SELF(&selfLdpPid);
   					GET_PID("FEC",&fecPid);
   					GET_PID("FEC",&mlsmanagePid);
                    GET_PID("A041MSGFUNC",&udptcpPid);
                    GET_PID("C010PROCESS",&pvcPid);
                    GET_PID("Snark_Task",&sbForwardPid);
                    sbForwardPid.module = selfLdpPid.module;
                    InitHello();
                    testRouet();
                    EXTRA_SET_EVERY_TIMER(TIMER1_PERIOD,MPLS_TIMER1,0);
                    NEXT_STATE(LdpWorkStatus);
					break;
				default:
					break;
			}
			break;		
#endif

		case LdpWorkStatus:
            eventType = EVENT();
      		switch(eventType)
			{
				case MPLS_POLICY_ENABLE:
				    ldpPolicyReset();
				    break;
				case MPLS_LDP_OAM_MESSAGE:
			        oamldpmess = (mplsOAMLdpMessage_t *)ldpIn;
			              
                    oammsgtype = processLdpOnline(oamldpmess);
                    
                    oamldpmess->msgtype = oammsgtype;
                    oamldpmess->mplsLdpOAMflag = 2;
                    MPLS_PSEND(MPLS_LDP_OAM_MESSAGE,oamldpmess,sizeof(oamldpmess->msgtype)+sizeof(unsigned char),mlsmanagePid);
                    #ifdef DEBUG_LDP
			            #ifdef __BGS10_MPLS_DEBUG
						    printf("==== Module %d  Receive config ldp data oamtype : %d !!! ====",
						            selfLdpPid.module,oammsgtype);
					    #endif
					#endif
				 
			        break;
                   
				case MPLS_Timer1Event: /* 周期为100毫秒的轮询定时器 */
					EXTRA_SET_TIMER(TIMER1_PERIOD,MPLS_TIMER1,0);
					MPLS_AGE_TIMER(MPLS_AGE_ADD,ldptime_q);
				    break;
                                        	                   
        		case MSG_RECV_IND:	/* 收到其它交换机发来的PDU,必然触发LDP协议的处理进程 */
				
					pudptcpMsg = (LDPMSG_COMM	*)ldpIn;
					ProcUdpTcpMsg(pudptcpMsg);
					break;

                case TCP_CONNECT_IND:
                	
                	tcpConInd = (TCP_CONNECT_MSG *)ldpIn;   
                	#ifdef __BGS10_MPLS_DEBUG
					printf("========MODULE %d RECEIVE TCP_CONNECT_IND =====",selfLdpPid.module);
					printf("==== localAddr %x, peerAddr %x, LocalPort %d, PeerPort %d ====",
						tcpConInd->LocalIpaddr,tcpConInd->PeerIpaddr,tcpConInd->LocalPort,tcpConInd->PeerPort);
					#endif
                    ProcTcpCon(tcpConInd->PeerIpaddr,tcpConInd->LocalIpaddr,tcpConInd->PeerPort,
                                    tcpConInd->LocalPort,eventType);
                    break;
                	
                case TCP_RELEASE_IND:
              		
              		tcpConInd = (TCP_CONNECT_MSG *)ldpIn;   
              		#ifdef __BGS10_MPLS_DEBUG
					printf("========MODULE %d RECEIVE TCP_RELEASE_IND =====",selfLdpPid.module);
					printf("==== localAddr %x, peerAddr %x, LocalPort %d, PeerPort %d ====",
						tcpConInd->LocalIpaddr,tcpConInd->PeerIpaddr,tcpConInd->LocalPort,tcpConInd->PeerPort);
					#endif
                    ProcTcpRel(tcpConInd->PeerIpaddr,tcpConInd->LocalIpaddr,tcpConInd->PeerPort,
                                    tcpConInd->LocalPort,eventType);
                    break;

				case RCV_RELEASE_MSG:
					tcpConInd = (TCP_CONNECT_MSG *)ldpIn;   
              		#ifdef __BGS10_MPLS_DEBUG
					printf("========MODULE %d RECEIVE RCV_RELEASE_MSG =====",selfLdpPid.module);
					printf("==== localAddr %x, peerAddr %x, LocalPort %d, PeerPort %d ====",
						tcpConInd->LocalIpaddr,tcpConInd->PeerIpaddr,tcpConInd->LocalPort,tcpConInd->PeerPort);
					#endif
                    ProcTcpRel(tcpConInd->PeerIpaddr,tcpConInd->LocalIpaddr,tcpConInd->PeerPort,
                                    tcpConInd->LocalPort,eventType);
                    break;
				
				case Forwarding_Table_Change:
					fecAck.index = ((ROUTEMESSAGE_UPDATE *)ldpIn)->MsgNo;
					fecAck.index = (fecAck.index<<16)|(((ROUTEMESSAGE_UPDATE *)ldpIn)->changenumber);
					ASEND(MPLS_LDP_FEC_ACK,&fecAck,sizeof(ldpFecAck_t),fecPid);
					ProcessRoute(ldpIn);
					break;
     			/* 4.1 路由表的初始建立或者动态的更新都内部地触发LDP协议的处理进程 */
	     		case MPLS_FEC_SETUP:
					fecMsg = (FecMsg *)ldpIn;
					switch (fecMsg->OperateType)
					{
						case NEW_TYPE:
						case UPDATE_TYPE:
						case DELETE_PVC_TYPE:
						case LBLABORT_TYPE:
						    fecAck.index = ((ROUTEMESSAGE_UPDATE *)ldpIn)->MsgNo;
					        ASEND(MPLS_LDP_FEC_ACK,&fecAck,sizeof(ldpFecAck_t),fecPid);
							FecSetup(fecMsg);
							break;
						#if 0
						case ELEM_CHANGE_TYPE:
							FecElemChange(fecMsg);
				            break;
			            #endif
			            case INQUIRE_TYPE:
//							ProcFecInquire(ldpIn);
							break;
					}
					break;

				/* C回响应处理 */
				case AD_MPLS_BANDWIDTH_ACK:
					mpls_xc_req_confirm(ldpIn,BANDWIDTH_ACK);
					break;
				case AD_MPLS_RLSBW_ACK:
					mpls_xc_req_confirm(ldpIn,RLSBW_ACK);
					break;
                case AD_MPLS_CREATEPVC_ACK:
        	        mpls_xc_req_confirm(ldpIn,CRPVC_ACK);
        	        break;
				case AD_MPLS_RLSPVC_ACK:
					mpls_xc_req_confirm(ldpIn,RLSPVC_ACK);
					break;
				
				/* 4.2 处理队列响应消息 */
				case MPLS_LBL_QUE_CONF:
					mpls_feclabel_req_confirm(ldpIn);
					break;

				case MPLS_FEC_QUE_CONF:
					mpls_fec_req_confirm(ldpIn);
					break;
					
		        case MPLS_LBLMSG_QUE_CONF:
		                mpls_lblmsg_req_confirm(ldpIn);
				break;
					
			
				default:	break;
     
			} /* end of switch(event) of WORK_STATE */

			break;

		default:	break;

 	} /* end of switch(state) */
}
#if 0
void testRouet()
{
	int i;
	
	MPLS_MEMSET(&g_rte,0,sizeof(ROUTEMESSAGE_UPDATE));
	
	i = 0;
	
	g_rte.IpForwardingTab[i].Type = 		ROUTE_ADD;
	g_rte.IpForwardingTab[i].rt_type = 		MPLS_ROUTE_OWN;
	g_rte.IpForwardingTab[i].Dest = 		0x01010101;
	g_rte.IpForwardingTab[i].NetMask = 		0xffffffff;
	g_rte.IpForwardingTab[i].NextHop = 		0x00000000;
	g_rte.IpForwardingTab[i].IfIndex = 		0x01;
	g_rte.changenumber++;
	i++;

	g_rte.IpForwardingTab[i].Type = 		ROUTE_ADD;
	g_rte.IpForwardingTab[i].rt_type = 		MPLS_ROUTE_OWN;
	g_rte.IpForwardingTab[i].Dest = 		0x96000000;
	g_rte.IpForwardingTab[i].NetMask = 		0xff000000;
	g_rte.IpForwardingTab[i].NextHop = 		0x00000000;
	g_rte.IpForwardingTab[i].IfIndex = 		0x01;
	g_rte.changenumber++;
	i++;
		
	g_rte.IpForwardingTab[i].Type = 		ROUTE_ADD;
	g_rte.IpForwardingTab[i].rt_type = 		MPLS_ROUTE_OWN;
	g_rte.IpForwardingTab[i].Dest = 		0x97000000;
	g_rte.IpForwardingTab[i].NetMask = 		0xff000000;
	g_rte.IpForwardingTab[i].NextHop = 		0x00000000;
	g_rte.IpForwardingTab[i].IfIndex = 		0x01;
	g_rte.changenumber++;
	i++;
	
	g_rte.IpForwardingTab[i].Type = 		ROUTE_ADD;
	g_rte.IpForwardingTab[i].rt_type = 		MPLS_ROUTE_OWN;
	g_rte.IpForwardingTab[i].Dest = 		0x98000000;
	g_rte.IpForwardingTab[i].NetMask = 		0xff000000;
	g_rte.IpForwardingTab[i].NextHop = 		0x00000000;
	g_rte.IpForwardingTab[i].IfIndex = 		0x01;
	g_rte.changenumber++;
	i++;
	
	g_rte.IpForwardingTab[i].Type = 		ROUTE_ADD;
	g_rte.IpForwardingTab[i].rt_type = 		MPLS_ROUTE_DYN;
	g_rte.IpForwardingTab[i].Dest = 		0x99000000;
	g_rte.IpForwardingTab[i].NetMask = 		0xff000000;
	g_rte.IpForwardingTab[i].NextHop = 		0x00000000;
	g_rte.IpForwardingTab[i].IfIndex = 		0x600;
	g_rte.changenumber++;
	i++;
	
	g_rte.IpForwardingTab[i].Type = 		ROUTE_ADD;
	g_rte.IpForwardingTab[i].rt_type = 		MPLS_ROUTE_DYN;
	g_rte.IpForwardingTab[i].Dest = 		0x9A000000;
	g_rte.IpForwardingTab[i].NetMask = 		0xff000000;
	g_rte.IpForwardingTab[i].NextHop = 		0xD2010104;
	g_rte.IpForwardingTab[i].IfIndex = 		0x600;
	g_rte.changenumber++;
	i++;
	
	g_rte.IpForwardingTab[i].Type = 		ROUTE_ADD;
	g_rte.IpForwardingTab[i].rt_type = 		MPLS_ROUTE_DYN;
	g_rte.IpForwardingTab[i].Dest = 		0x9B000000;
	g_rte.IpForwardingTab[i].NetMask = 		0xff000000;
	g_rte.IpForwardingTab[i].NextHop = 		0xD2010104;
	g_rte.IpForwardingTab[i].IfIndex = 		0x600;
	g_rte.changenumber++;
	i++;
	
	g_rte.IpForwardingTab[i].Type = 		ROUTE_ADD;
	g_rte.IpForwardingTab[i].rt_type = 		MPLS_ROUTE_DYN;
	g_rte.IpForwardingTab[i].Dest = 		0x9C000000;
	g_rte.IpForwardingTab[i].NetMask = 		0xff000000;
	g_rte.IpForwardingTab[i].NextHop = 		0xC8010106;
	g_rte.IpForwardingTab[i].IfIndex = 		0x200;
	g_rte.changenumber++;
	i++;
	
	g_rte.IpForwardingTab[i].Type = 		ROUTE_ADD;
	g_rte.IpForwardingTab[i].rt_type = 		MPLS_ROUTE_DYN;
	g_rte.IpForwardingTab[i].Dest = 		0x9D000000;
	g_rte.IpForwardingTab[i].NetMask = 		0xff000000;
	g_rte.IpForwardingTab[i].NextHop = 		0xC8010106;
	g_rte.IpForwardingTab[i].IfIndex = 		0x200;
	g_rte.changenumber++;
	i++;
	
	g_rte.IpForwardingTab[i].Type = 		ROUTE_ADD;
	g_rte.IpForwardingTab[i].rt_type = 		MPLS_ROUTE_DYN;
	g_rte.IpForwardingTab[i].Dest = 		0x9E000000;
	g_rte.IpForwardingTab[i].NetMask = 		0xff000000;
	g_rte.IpForwardingTab[i].NextHop = 		0xC8010106;
	g_rte.IpForwardingTab[i].IfIndex = 		0x200;
	g_rte.changenumber++;
	i++;
	
	ProcessRoute(&g_rte);
	
	return;
}
#endif

⌨️ 快捷键说明

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