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

📄 ldpmain.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 4 页
字号:
/************************************************************************/          
/*	Product Name:	ZXB10                                       	    */          
/*	Module  Name:	A075    										    */
/*	File    Name:   Ldpmain.c							        	    */          
/*	Author  Name:   Jing Xiaoyuan, Li Jianping						    */          
/*	Creat   Date:	12/20/99										    */
/*	Version		:	1.0                                         	    */          
/*	Function    :	Ldp主进程文件,先定义了与LDP协议有关的所有全局变	*/
/*					量,本进程收到的所有外部消息的处理函数,和主函数	*/
/*  History     :   2001.8.30 WengQing add process for TCP Message		*/
/*					delete process to timer 7 & 8						*/
/*					modify TCP_CON_IND process function					*/
/*                  hu.yonghong 2002-7-3 mod timer for mplspack1.0      */
/* 2002.11.07 for no mpls ldp routerid, protection lspidTlv.routerId == 0 */
/* 2003.1.26 wengqing change set timer1                                  */
/* 2003.6.24 Wengqing 增加对M2K的支持                                     */
/* 2003-7-29 shizhaohui增加对于HOP LSP建立时对FEC进程传过来nexthop的判断处理 */
/* 2003.12.30 fengjun 增加对全局待删除session链的初始化操作 */
/* 2003.12.30 直接调用CR控制快删除宏是不安全操作,改掉删除函数 */
/* 2004-1-6 lixia add for debug mpls    */
/************************************************************************/          

#define DEF_LDP_VAR
#include "ldpvars.h"
#undef 	DEF_LDP_VAR
extern void initldpdynmib( );
void func_GetInitCfg(mplsOAMLdpMessage_t *oammess);
void  setlocallabel();
/********************************************************************/          
/*							                                       	*/          
/*					1.本文件中使用的公共子函数						*/
/*														        	*/          
/********************************************************************/
      
//  wengqing 2001/03/21 LDP online modification
#ifdef ENABLE_LDP_ONLINE
short   processLdpOnline(mplsOAMLdpMessage_t *oammess)
{
    short       value, i,ii;

    switch(oammess->msgtype)
    {
        case MPLS_MIB_LDP_DEF_TRAFFIC:
          if(oammess->data.trafficParamData.num != 0)
        	 {
            	def_value.valid = 1;
	            def_value.defTraffic.freq     = oammess->data.trafficParamData.paraData.freq;
	            def_value.defTraffic.pdr.pdr  = oammess->data.trafficParamData.paraData.pdr;
	            def_value.defTraffic.pbs.pbs  = oammess->data.trafficParamData.paraData.pbs;
	            def_value.defTraffic.cdr.cdr  = oammess->data.trafficParamData.paraData.cdr;
	            def_value.defTraffic.cbs.cbs  = oammess->data.trafficParamData.paraData.cbs;
	            def_value.defTraffic.ebs.ebs  = oammess->data.trafficParamData.paraData.ebs;
	            def_value.defTraffic.weight   = oammess->data.trafficParamData.paraData.weight;
	            def_value.defTraffic.flags.mark = oammess->data.trafficParamData.paraData.flag;
	            def_value.defTraffic.res      = 0; 
         	 }
         	 else
         	{
            	def_value.valid = 1;
	            def_value.defTraffic.freq     = UNSPECIFIED;
	            def_value.defTraffic.pdr.pdr  = 300000.0*48;
	            def_value.defTraffic.pbs.pbs  = 180000.0*48;
         	}
          value = MPLS_MIB_LDP_DEF_TRAFFIC;
          break;
        case MPLS_INTERNAL_PORT_VPI_VCI:
          if(oammess->data.VpiVciData.num != 0)
      	 {
          	def_value.inLabel.maxvpi = 
          	  oammess->data.VpiVciData.internalVpData.atmfAtmLayerMaxSvccVpi;
          	def_value.inLabel.minvpi = 0;
          	def_value.inLabel.maxvci = 
          	  (1 << oammess->data.VpiVciData.internalVpData.atmInterfaceMaxActiveVciBits)-1;
          	def_value.inLabel.minvci = 
          	  oammess->data.VpiVciData.internalVpData.atmfAtmLayerMinSvccVci;
          	#ifdef __BGS10_MPLS_DEBUG
			    	 printf("==== Get maxvpi %d, maxvci %d, minvpi %d, minvci %d====",
			        	def_value.inLabel.maxvpi,def_value.inLabel.maxvci,
			        	def_value.inLabel.minvpi,def_value.inLabel.minvci);
			      #endif
       	 }
       	 else
       	 {
       	  printf("no internal vpi vci");
       	 }
          value = MPLS_INTERNAL_PORT_VPI_VCI;
          break;
        case MPLS_MIB_LDP_LSR_ATTR:
            if(oammess->data.lsrData.num != 0)
            {
                memcpy(&lsrAttr,&(oammess->data.lsrData),sizeof(lsrAttr));
                switch (oammess->data.lsrData.PlatformType)
                {
                  case 49:  //1
                    local_platform = MPLS_PLATFORM_BX;
                     break;
                  case 50: //2
                    local_platform = MPLS_PLATFORM_AX;
                     break;
                  case 51: //3
                    local_platform = MPLS_PLATFORM_M1000;
                     break;
                  case 52: //3
                    local_platform = MPLS_PLATFORM_M2000;
                     break;
                  default:
                    local_platform = MPLS_PLATFORM_ROS;
                    break;
                }
                printf("   local_platform  %d ",local_platform);
            }
            else
            {
                memset(&lsrAttr,0,sizeof(lsrAttr));
            }
            value = MPLS_MIB_LDP_LSR_ATTR;
            break;

        case MPLS_MIB_LDP_INTERFACE:
            if(oammess->msgtype == MPLS_MIB_LDP_INTERFACE)
				ldp_set_ifdata_oam(oammess); /* by hyh 02-7-17  */
            value = MPLS_MIB_LDP_INTERFACE;
            break;

        case MPLS_MIB_LDP_ENTITY:
           if(oammess->msgtype == MPLS_MIB_LDP_ENTITY)
				ldp_set_entitydata_oam(oammess);	/* by hyh 02-7-17  */
           value = MPLS_MIB_LDP_ENTITY;
           break;

		case MPLS_MIB_LDP_CONFIG: 
			 memcpy(&LdpConfigData,&(oammess->data.configData),
			      oammess->data.configData.num*sizeof(mplsPortData_t)+3*sizeof(unsigned char));	
			 #ifdef DEBUG_LDP
            	#ifdef __BGS10_MPLS_DEBUG
			    	printf("==== Module %d  Get configdata successful.====",
			        	selfLdpPid.module);
	        	#endif
	    	#endif
			value = MPLS_MIB_LDP_CONFIG;	    
           break;
        case MPLS_CONTROL_MODE_AGGREGATE:
        	aggr_enable = oammess->data.CtrAggrData.aggregate;
        	value = MPLS_CONTROL_MODE_AGGREGATE;
        	break;
        default:  break;
     }
     return value;
}
#endif

/* wengqing 2001/03/21 LDP online modification end */
/* 2003.12.30 fengjun 增加对全局待删除session链的初始化操作 */
/********************************************************************/          
/*							                                       	*/          
/*					2.只被某一个case状态函数调用的子函数				*/
/*														        	*/          
/********************************************************************/          
/********  初始化全局变量 **********/
void InitWholeVariable()
{
	unsigned char   ii;
	unsigned long  tmid;
	
	rt_change = 0;

	/* 初始化扫描链 */
#if MPLS_PROTECT
	lspcb_scan = 0;
	fec_lspcb_scan.timer   = 0;
	fec_lspcb_scan.addr    = 0;
	fec_lspcb_scan.addrLen = 0;
	fec_lspcb_scan.stop    = 0;
#endif
	
	HelloIndex	=	mplsINDEX_MAX;
	SessionIndex	=	mplsINDEX_MAX;
	PeerIndex	=	mplsINDEX_MAX;
	SessPeerIndex	=	mplsINDEX_MAX;
	ppp1 = ppp2 = ppp3=ppp4=ppp5=ppp10 = ppp11 = ppp12 =  0;
	XC2=XC3=XC4=XC5=XC6=XC7=XC8=0;
	cur_crreq_num = 0;
    for (ii=0 ; ii< LDP_MESSAGE_MAXNUM; ii++)
	    messageId[ii]    = 1;

	MPLS_MEMSET(&def_value,0,sizeof(def_ldp_value));
	
	def_value.valid = 1;
	def_value.defTraffic.freq     = UNSPECIFIED;
	def_value.defTraffic.pdr.pdr  = 300000.0*48;
	def_value.defTraffic.pbs.pbs  = 180000.0*48;
	
	/* add by hyh 2002-7-2 */
    MPLS_TIMER_INIT(ldptime_q);
	mpls_init_queue();
    /* end */

	/* global initialization function */
	MPLS_AVL_INIT_TREE(g_fec_avl_tree, fec_key_compare);
	MPLS_AVL_INIT_TREE(g_crfec_avl_tree, crfec_key_compare);
	MPLS_AVL_INIT_TREE(g_local_address_avl_tree, address_key_compare);
	MPLS_AVL_INIT_TREE(g_sb_avl_tree, sb_key_compare);
	MPLS_MEMSET(&ldpIndex,0,sizeof(mpls_ldpIndex)); 
        aggr_init();

	if(mpls_LdpMemInit()==MPLS_FALSE)
	{
		printf("mpls_err_log,mpls_LdpMemInit()==MPLS_FALSE");
	    mpls_LdpMemBlockFree();
	    return;
	}	       		    
	MPLS_SET_TIMER(LDP_HELLO_CHECK_INTERVAL,
					(void *)ldpHelloSnd,
					MPLS_NULL,
					ldptime_q,
					tmid);
	#ifdef DEBUG_LDP
		printf("==== LDP set Hello send Timer %d====",tmid);
    #endif
	MPLS_SET_TIMER(LDP_SESSION_CHECK_INTERVAL,
					(void *)ldpSessionSnd,
					MPLS_NULL,
					ldptime_q,
					tmid);
	#ifdef DEBUG_LDP
		printf("==== LDP set Session send Timer %d====",tmid);
    #endif
    MPLS_SET_TIMER(LDP_LIST_CHECK_INTERVAL,
					(void *)ldpListCheck,
					MPLS_NULL,
					ldptime_q,
					tmid);
	#ifdef DEBUG_LDP
		printf("==== LDP set list check Timer %d====",tmid);
    #endif
    
    MPLS_MEMSET(&g_up_list, 0, sizeof(mpls_up_list));
    MPLS_MEMSET(&g_down_list, 0, sizeof(mpls_down_list));
    MPLS_MEMSET(&g_up_lsp_list, 0, sizeof(mpls_lsp_list));
    MPLS_MEMSET(&g_down_lsp_list, 0, sizeof(mpls_lsp_list));
    MPLS_MEMSET(&g_fec_search_list, 0, sizeof(mpls_fec_search_list));
   
	return;
}


/*******  获取初始配置 *********/
	
void func_GetInitCfg(mplsOAMLdpMessage_t *oammess)
{
	short	i;
	
    switch(oammess->msgtype)
    {
    	case MPLS_MIB_LDP_LSR_ATTR:
    	{
         	if(oammess->data.lsrData.num != 0)
         	{
         	    switch (oammess->data.lsrData.PlatformType)
              {
                case 49:
                  	local_platform = MPLS_PLATFORM_BX;
                   break;
                case 50:
                  local_platform = MPLS_PLATFORM_AX;
                   break;
                case 51:
                  local_platform = MPLS_PLATFORM_M1000;
                   break;
                case 52:
                  local_platform = MPLS_PLATFORM_M2000;
                   break;
                default:
                  local_platform = MPLS_PLATFORM_ROS;
                  break;
              }
              printf("   local_platform  %d ",local_platform);
            	memcpy(&lsrAttr,&(oammess->data.lsrData),sizeof(oammess->data.lsrData));
         	}
         	else
         	{
            	memset(&lsrAttr,0,sizeof(lsrAttr));
         	}
         	oammess->msgtype = MPLS_MIB_LDP_INTERFACE;
         	oammess->mplsLdpOAMflag = 1;
         	MPLS_PSEND(MPLS_LDP_OAM_MESSAGE, oammess,sizeof(mplsLdpOAMMessage)+sizeof(unsigned char),mlsmanagePid);
         	TimerID_oamldp = EXTRA_SET_TIMER(TIMER7_LDPPERIOD,MPLS_TIMER7,MPLS_MIB_LDP_INTERFACE);
     	}
     	break;
     	
     	case MPLS_MIB_LDP_INTERFACE:
	    {
         	ldp_set_ifdata_oam(oammess);	/* by hyh 02-7-17 */
         	oammess->msgtype = MPLS_MIB_LDP_ENTITY;
         	oammess->mplsLdpOAMflag = 1;
         	MPLS_PSEND(MPLS_LDP_OAM_MESSAGE, oammess,sizeof(mplsLdpOAMMessage)+sizeof(unsigned char),mlsmanagePid);
         	TimerID_oamldp = EXTRA_SET_TIMER(TIMER7_LDPPERIOD,MPLS_TIMER7,\
            	 MPLS_MIB_LDP_ENTITY);
     	}
     	break;
     	
     	case MPLS_MIB_LDP_ENTITY:
	    {
    	     ldp_set_entitydata_oam(oammess); /* by hyh 02-7-17  */
         	oammess->msgtype = MPLS_MIB_LDP_DEF_TRAFFIC;
          oammess->mplsLdpOAMflag = 1;
          MPLS_PSEND(MPLS_LDP_OAM_MESSAGE, oammess,
                             sizeof(mplsLdpOAMMessage)+sizeof(unsigned char),mlsmanagePid);
          TimerID_oamldp = EXTRA_SET_TIMER(TIMER7_LDPPERIOD,MPLS_TIMER7,\
            	 MPLS_MIB_LDP_DEF_TRAFFIC);
		}
		break;
		case MPLS_MIB_LDP_DEF_TRAFFIC:
	    {
    	     if(oammess->data.trafficParamData.num != 0)
        	 {
            	def_value.valid = 1;
	            def_value.defTraffic.freq     = oammess->data.trafficParamData.paraData.freq;
	            def_value.defTraffic.pdr.pdr  = oammess->data.trafficParamData.paraData.pdr;
	            def_value.defTraffic.pbs.pbs  = oammess->data.trafficParamData.paraData.pbs;
	            def_value.defTraffic.cdr.cdr  = oammess->data.trafficParamData.paraData.cdr;
	            def_value.defTraffic.cbs.cbs  = oammess->data.trafficParamData.paraData.cbs;
	            def_value.defTraffic.ebs.ebs  = oammess->data.trafficParamData.paraData.ebs;
	            def_value.defTraffic.weight   = oammess->data.trafficParamData.paraData.weight;
	            def_value.defTraffic.flags.mark = oammess->data.trafficParamData.paraData.flag;
	            def_value.defTraffic.res      = 0; 
         	 }
         	 else
         	{
            	def_value.valid = 1;
	            def_value.defTraffic.freq     = UNSPECIFIED;
	            def_value.defTraffic.pdr.pdr  = 300000.0*48;
	            def_value.defTraffic.pbs.pbs  = 180000.0*48;
         	}
         	oammess->msgtype = MPLS_INTERNAL_PORT_VPI_VCI;
          oammess->mplsLdpOAMflag = 1;
          MPLS_PSEND(MPLS_LDP_OAM_MESSAGE, oammess,
                             sizeof(mplsLdpOAMMessage)+sizeof(unsigned char),mlsmanagePid);
          TimerID_oamldp = EXTRA_SET_TIMER(TIMER7_LDPPERIOD,MPLS_TIMER7,\
            	 MPLS_INTERNAL_PORT_VPI_VCI);
		}
		break;
		case MPLS_INTERNAL_PORT_VPI_VCI:
	    {
  	     if(oammess->data.VpiVciData.num != 0)
      	 {
          	def_value.inLabel.maxvpi = 
          	  oammess->data.VpiVciData.internalVpData.atmfAtmLayerMaxSvccVpi;
          	def_value.inLabel.minvpi = 0;
          	def_value.inLabel.maxvci = 
          	  (1 << oammess->data.VpiVciData.internalVpData.atmInterfaceMaxActiveVciBits)-1;
          	def_value.inLabel.minvci = 
          	  oammess->data.VpiVciData.internalVpData.atmfAtmLayerMinSvccVci;
          	#ifdef __BGS10_MPLS_DEBUG
			    	 printf("==== Get maxvpi %d, maxvci %d, minvpi %d, minvci %d====",
			        	def_value.inLabel.maxvpi,def_value.inLabel.maxvci,
			        	def_value.inLabel.minvpi,def_value.inLabel.minvci);
			      #endif
       	 }
       	 else
       	 {
       	  printf("no internal vpi vci");
       	 }
         	oammess->msgtype = MPLS_MIB_LDP_CONFIG;
         	oammess->mplsLdpOAMflag = 1;
        	MPLS_PSEND(MPLS_LDP_OAM_MESSAGE, oammess,sizeof(mplsLdpOAMMessage)+sizeof(unsigned char),mlsmanagePid);
         	TimerID_oamldp = EXTRA_SET_TIMER(TIMER7_LDPPERIOD,MPLS_TIMER7,\
            	 MPLS_MIB_LDP_CONFIG);
		}
		break;
		case MPLS_MIB_LDP_CONFIG: 
		{
			 memcpy(&LdpConfigData,&(oammess->data.configData),
  	    oammess->data.configData.num*sizeof(mplsPortData_t)+3*sizeof(unsigned char));	
			 #ifdef DEBUG_LDP
            	#ifdef __BGS10_MPLS_DEBUG
			    	printf("==== Module %d  Get configdata successful.====",
			        	selfLdpPid.module);
	        	#endif
	    	#endif
		}	    
		break;
		default : break;
	}	
}

⌨️ 快捷键说明

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