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

📄 mplsfun.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 5 页
字号:
   -  2001-8-14      2.1.2      孙保平            创建                                                      
 *********************************************************************************/
void mplsHelloRecv(mplsOAMLdpMessage_t *data)
{
	/*PID                  *sendPid;*/
	ushort               num;
	ushort               num1;
	ushort               num2;
	ushort               num3,num4;
	ushort               moduleNum,portNum;
	MIB_LDPHELLO_REQ     helloData;
	MIB_LDPHELLO_ACK     helloAck;
	uchar                module;
/*	mplsOAMLdpMessage_t  mplsLdpOamData;  */
	
	/*sendPid       = sPid;*/
	helloData     = data->data.helloDataReq;
	num           = arrayLen[NOADJACENCY];
	num3          = num;
	module = mplsGetModuleDynamic(helloData.req.set.entityLdpId,helloData.req.set.ifIndex);          
    if(module == MPLS_MODULE_ERROR)
     {
        // #if _MPLS_DEBUG
         DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_SESSION,"======mplsHelloRecv,ldp to OAM  ldp entity stats module error=======\n ");
         printf("======hello,ldp to OAM  ldp entity stats module error=======");
       //  #endif
         return;
     }
	if(helloData.operateType==MPLS_OAM_SETUP)
	{
	   /*2004-6-5 lixia dele it,when setting up,it's new and needn't find */
	   /*for(num4=0;num4<num3;num4++)
	    {	
	  	   if(mplsLdpHelloAdjacencyEntry[num4].ifIndex == helloData.req.set.ifIndex &&
	          mplsLdpHelloAdjacencyEntry[num4].ifName.module == module)
	       {
	       	   num = num4;
	       	   break;
	       }
	    }*/
	    mplsLdpHelloAdjacencyEntry[num].entityLdpId     = helloData.req.set.entityLdpId;
	    mplsLdpHelloAdjacencyEntry[num].entityindex     = helloData.req.set.index;
	    mplsLdpHelloAdjacencyEntry[num].ifIndex         = helloData.req.set.ifIndex;
	    mplsLdpHelloAdjacencyEntry[num].peerLdpId       = helloData.req.set.peerLdpId;
	    mplsLdpHelloAdjacencyEntry[num].adjacencyindex  = helloData.req.set.sessionIndex;
	    mplsLdpHelloAdjacencyEntry[num].adjacencyholdtimeremaining  
	                                                    = helloData.req.set.holdTimeRemaining;
	    mplsLdpHelloAdjacencyEntry[num].adjacencytype   = helloData.req.set.helloType;
	    mplsLdpHelloAdjacencyEntry[num].ifName.module   = module;
	    
	    for(moduleNum=0; moduleNum<MplsPortDataTable1.num; moduleNum++)
	    {
	    	if(module==MplsPortDataTable1.mplsModule[moduleNum].module )
	    	 {  
	    	 	for(portNum=0; portNum<MplsPortDataTable1.mplsModule[moduleNum].num; portNum++)
	    	 	{
	    	 		if(helloData.req.set.ifIndex==MplsPortDataTable1.mplsModule[moduleNum].portData[portNum].ifIndex)
	    	 	    {
	    	 	    	mplsLdpHelloAdjacencyEntry[num].ifName.port=MplsPortDataTable1.mplsModule[moduleNum].portData[portNum].port;
	    	 	        break;
	    	 	    }
	    	 	}
	    	 	break;
	    	 }
	    }
	    /* connect 在收到session消息时填 */
	    
	    num1 = arrayLen[NOSESSION];
	    for(num2=0; num2<num1; num2++)
	    {
	    	if(module==mplsLdpSessionEntry[num2].ifName.module && 
	    	   helloData.req.set.ifIndex == mplsLdpSessionEntry[num2].ifIndex )
	    	 {
	    	 	 mplsLdpHelloAdjacencyEntry[num].connect=mplsLdpSessionEntry[num2].connect;
	    	 }
	    }
	    
	    if(num==num3)
	       arrayLen[NOADJACENCY]++;
	}
	else if(helloData.operateType==MPLS_OAM_SEARCH)
	{ ;}
	else
	{
	   for(num1=0;num1<num;num1++)
	   {	
	  	  /*2004-6-5 lixia 修改匹配条件,防止删除错误*/
	  	  if((mplsLdpHelloAdjacencyEntry[num1].entityLdpId.lsrAddress == helloData.req.set.entityLdpId.lsrAddress) &&
		          ( mplsLdpHelloAdjacencyEntry[num1].entityLdpId.labelSpace == helloData.req.set.entityLdpId.labelSpace) &&
		          ( mplsLdpHelloAdjacencyEntry[num1].ifIndex == helloData.req.set.ifIndex) &&
		           ( mplsLdpHelloAdjacencyEntry[num1].peerLdpId.lsrAddress == helloData.req.set.peerLdpId.lsrAddress) &&
		           ( mplsLdpHelloAdjacencyEntry[num1].peerLdpId.labelSpace == helloData.req.set.peerLdpId.labelSpace)&&
		           (mplsLdpHelloAdjacencyEntry[num1].ifName.module == module))
	  	 // if(mplsLdpHelloAdjacencyEntry[num1].ifIndex == (ushort)helloData.req.set.ifIndex &&
	  	  /* (mplsLdpHelloAdjacencyEntry[num1].ifIndex == (ushort)helloData.req.del.helloIndex && */
	     //     mplsLdpHelloAdjacencyEntry[num1].ifName.module == module)
	       {
	  	      for(num2=num1; num2<num-1; num2++)
	          {
	    	      mplsLdpHelloAdjacencyEntry[num2]=mplsLdpHelloAdjacencyEntry[num2+1];
	          }
	          MPLS_MEMSET(&mplsLdpHelloAdjacencyEntry[num2],0,sizeof(mplsLdpHelloAdjacencyTable_t));
	          if(arrayLen[NOADJACENCY]>0)
	          arrayLen[NOADJACENCY]--;
	          break;
	       }
	    }
    }
    /* 暂时不回
    helloAck.result = OAM_MPLS_RCV;
    mplsLdpOamData.msg = MPLS_MIB_LDP_HELLO;
    mplsLdpOamData.data.helloDataAck = helloAck;
    ASEND(MPLS_LDP_OAM_MESSAGE,&mplsLdpOamData,sizeof(MIB_LDPHELLO_ACK)+40,sendPid);
    */
}

/*********************************************************************************
 * 函 数 名: mplsSessionRecv() 
 * 功    能: 接收session数据                                                
 * 输    入: sPid:   发送方的PID
 *            data:   接收的数据          
 * 输    出: 无
 * 返    回: 无               
 * 全局变量: mplsInterfaceConfEntry 、MplsPortDataTable1   
 * 修改记录:
   -  修改日期       版本      修 改 人       修改原因及内容
 =========================================================
   -  2001-8-14      2.1.2      孙保平            创建                                                      
 *********************************************************************************/
void mplsSessionRecv(mplsOAMLdpMessage_t *data)
{
   /* PID                    *sendPid;*/
	ushort                 num;
	ushort                 num1;
	ushort                 num2,num3,num4,num5;
	ushort                 portNum,moduleNum;
	ulong                  timeh;
	MIB_LDP_SESSION_REQ    sessionData;
	MIB_LDP_SESSION_ACK    sessionAck;
	uchar                  module;
/*	mplsOAMLdpMessage_t    mplsLdpOamData;  */
	
	num          =  arrayLen[NOSESSION];
	num5         =  num;
	sessionData  =  data->data.ssnDataReq;
	/*sendPid      =  sPid;*/
	
	module = mplsGetModuleDynamic(sessionData.req.set.entityLdpId,sessionData.req.set.ifIndex);          
    if(module == MPLS_MODULE_ERROR)
     {
        // #if _MPLS_DEBUG
         DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_SESSION,"======mplsSessionRecv,ldp to OAM  ldp entity stats module error=======\n ");
         printf("======session,ldp to OAM  ldp entity stats module error=======");
       //  #endif
         temperror = 1;
         return;
     }
	temperror = 0;
	if(sessionData.operateType==MPLS_OAM_SETUP)
	{
		for(num4=0; num4<num5; num4++)
	    {
	        /*2004-6-5 lixia 修改匹配条件,防止增加错误,覆盖原来正确的*/
	        if(mplsLdpSessionEntry[num4].ifName.module == module &&
	          mplsLdpSessionEntry[num4].ifIndex == sessionData.req.set.ifIndex&&
	          mplsLdpSessionEntry[num4].entityLdpId.labelSpace == sessionData.req.set.entityLdpId.labelSpace&&
	           mplsLdpSessionEntry[num4].peerLdpId.labelSpace == sessionData.req.set.peerLdpId.labelSpace) /*2004-5-18 lixia add*/
	        {
	            num = num4;
	            break;
	        }
	    }
		/* 如果是刷新,并且session index不同,也更新session建立时间。hyh 2003.1.19 */
		if(num==num5)
		    CURRENT_TIME(&timeh,&mplsLdpSessionEntry[num].discontinuitytime); 
		else if(mplsLdpSessionEntry[num].index != sessionData.req.set.index)
		    CURRENT_TIME(&timeh,&mplsLdpSessionEntry[num].discontinuitytime); 
		
		mplsLdpSessionEntry[num].entityLdpId      = sessionData.req.set.entityLdpId;
		mplsLdpSessionEntry[num].peerLdpId        = sessionData.req.set.peerLdpId;
		mplsLdpSessionEntry[num].index            = sessionData.req.set.index;
		mplsLdpSessionEntry[num].ifIndex            = sessionData.req.set.ifIndex;
		mplsLdpSessionEntry[num].state            = sessionData.req.set.state;
		mplsLdpSessionEntry[num].protocolversion  = sessionData.req.set.protocolVersion;
		mplsLdpSessionEntry[num].keepaliveholdtimeremaining
		                                          = sessionData.req.set.keepAliveHoldTimeRemaining;
		mplsLdpSessionEntry[num].maxpdulength     = sessionData.req.set.maxPduLength;
		/* 注意*/
/*		if(num==num5)
		    CURRENT_TIME(&timeh,&mplsLdpSessionEntry[num].discontinuitytime); */
		mplsLdpSessionEntry[num].role             = sessionData.req.set.role;
		mplsLdpSessionEntry[num].vcNumeberdType   = sessionData.req.set.vcNumeberdType;
		/*
		mplsLdpSessionEntry[num].lblRngList[0]    = sessionData.req.set.lblRngList[0];
		*/
		mplsLdpSessionEntry[num].helloArray[0]    = sessionData.req.set.helloArray[0];
		#if _MPLS_DEBUG
		printf("mplsSessionRecv %u",mplsLdpSessionEntry[num].helloArray[0]);
		#endif
		mplsLdpSessionEntry[num].tcpConRetry      = sessionData.req.set.tcpConRetry;
		/*
		mplsLdpSessionEntry[num].tmidRetry        = sessionData.req.set.tmidRetry;
		*/
		mplsLdpSessionEntry[num].tmidCon          = sessionData.req.set.tmidCon;
		/*
		mplsLdpSessionEntry[num].tmidRel          = sessionData.req.set.tmidRel;
		mplsLdpSessionEntry[num].mark             = sessionData.req.set.mark; 
		*/
		mplsLdpSessionEntry[num].connect.localAddr= sessionData.req.set.localIpaddr;
		mplsLdpSessionEntry[num].connect.peerAddr = sessionData.req.set.peerIpaddr;
		mplsLdpSessionEntry[num].ifName.module    = module;
		
		
	    for(moduleNum=0; moduleNum<MplsPortDataTable1.num; moduleNum++)
	    {
	    	if(module==MplsPortDataTable1.mplsModule[moduleNum].module )
	    	 {  
	    	 	for(portNum=0; portNum<MplsPortDataTable1.mplsModule[moduleNum].num; portNum++)
	    	 	{
	    	 		if(sessionData.req.set.ifIndex==MplsPortDataTable1.mplsModule[moduleNum].portData[portNum].ifIndex)
	    	 	    {
	    	 	    	mplsLdpSessionEntry[num].ifName.port=MplsPortDataTable1.mplsModule[moduleNum].portData[portNum].port;
	    	 	        break;
	    	 	    }
	    	 	}
	    	 	break;
	    	 }
	    }
		
		mplsLdpSessionEntry[num].connect.localPort= sessionData.req.set.LocalPort;
		mplsLdpSessionEntry[num].connect.peerPort = sessionData.req.set.PeerPort;
		#if 0  /* 保留 */
		mplsLdpSessionEntry[num].connect.localPort    = sessionData.req.set.LocalPort;
		mplsLdpSessionEntry[num].connect.peerIfName.module   = sessionData.req.set.PeerPort;
		mplsLdpSessionEntry[num].connect.peerIfName.port     = sessionData.req.set.PeerPort;
		mplsLdpSessionEntry[num].connect.peerPort         = sessionData.req.set.PeerPort;
		#endif
		
		for(moduleNum=0; moduleNum<arrayLen[NOSESTATS]; moduleNum++)
		{
		    if(mplsLdpSessionStatsEntry[moduleNum].ifName.module==mplsLdpSessionEntry[num].ifName.module &&
		       mplsLdpSessionStatsEntry[moduleNum].ifIndex==mplsLdpSessionEntry[num].ifIndex)
		    {
		        mplsLdpSessionStatsEntry[moduleNum].connect   = mplsLdpSessionEntry[num].connect;
		        mplsLdpSessionStatsEntry[moduleNum].peerLdpId = mplsLdpSessionEntry[num].peerLdpId;
      	  	     
		        break;
		    }
		}
		
		/* 填connect of peer table  */
	    num1 = arrayLen[NOPEER];
	    for(num2=0; num2<num1; num2++)
	    {
	    	if(mplsLdpSessionEntry[num].ifName.module==mplsLdpPeerEntry[num2].ifName.module && 
	    	   mplsLdpSessionEntry[num].ifIndex == mplsLdpPeerEntry[num2].ifIndex )
	    	 {
	    	 	mplsLdpPeerEntry[num2].connect = mplsLdpSessionEntry[num].connect;
	    	 }
	    }
		
		if(num==num5)
		    arrayLen[NOSESSION]++;
		
		/* 写ATM SESSION 表,此表保留 */
		if(sessionData.req.set.lblflag==IF_TYPE_GENERAL)
		{
			num3=arrayLen[NOGENSSN];
			num5 = num3;
			for(num4=0; num4<num5; num4++)
	        {
	            if(mplsLdpGeneralSessionEntry[num4].module == module &&
	               mplsLdpGeneralSessionEntry[num4].ifIndex == sessionData.req.set.ifIndex)
	            {
	               num3 = num4;
	               break;
	            }
	        }
	        if(num5==num3)
		        arrayLen[NOATMSESSION]++;
		    mplsLdpGeneralSessionEntry[num3].entityLdpId = sessionData.req.set.entityLdpId;
		    mplsLdpGeneralSessionEntry[num3].peerLdpId   = sessionData.req.set.peerLdpId;
		    mplsLdpGeneralSessionEntry[num3].entityindex = sessionData.req.set.index;
		    mplsLdpGeneralSessionEntry[num3].ifIndex     = sessionData.req.set.ifIndex;
		    mplsLdpGeneralSessionEntry[num3].lblRngListmin  = 
		                                sessionData.req.set.LdpLblRng.genlblrnglist.lblRngListmin;
		    mplsLdpGeneralSessionEntry[num3].lblRngListmax  = 
		                                sessionData.req.set.LdpLblRng.genlblrnglist.lblRngListmax;
		    mplsLdpGeneralSessionEntry[num3].module      = module;
		}
		else if(sessionData.req.set.lblflag==IF_TYPE_ATM)
		{
		    num3=arrayLen[NOATMSESSION];
		    num5 = num3;
			for(num4=0; num4<num5; num4++)
	        {
	            if(mplsLdpAtmSessionEntry[num4].module == module &&
	               mplsLdpAtmSessionEntry[num4].ifIndex == sessionData.req.set.ifIndex)
	            {
	               num3 = num4;
	               break;
	            }
	        }
	        if(num5==num3)
		       arrayLen[NOATMSESSION]++;
		       
		    mplsLdpAtmSessionEntry[num3].entityLdpId = sessionData.req.set.entityLdpId;
		    mplsLdpAtmSessionEntry[num3].peerLdpId   = sessionData.req.set.peerLdpId;
		    mplsLdpAtmSessionEntry[num3].entityindex = sessionData.req.set.index;

⌨️ 快捷键说明

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