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

📄 ldpmib.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 4 页
字号:
    mplsLdpPeer_t *peer = MPLS_NULL;
    
    peerReq.operateType      = flag;
    switch(flag)
    {
        case LDP_SET:    /*  置表  */
        	peerSet = (mplsLdpPeer_t *)input;
            memcpy(&(peerReq.req.set),peerSet,sizeof(mplsLdpPeer_t));
			peer = func_peerset(&peerReq);
            break;
       
        case LDP_SEARCH:  /*  检索  */    
            peerIndex  = (ldpMibPeerIndexReq_t *)input;
            memcpy(&(peerReq.req.loc),peerIndex,\
                            sizeof(ldpMibPeerIndexReq_t));
			peer = func_peersearch(&peerReq);
            break;
            
        case LDP_DELETE:  /*  删除  */
            peerIndex  = (ldpMibPeerIndexReq_t *)input;
            memcpy(&(peerReq.req.del),peerIndex,\
                            sizeof(ldpMibPeerIndexReq_t ));
			peer = func_peerdel(&peerReq);
            break;
        
        default: break;
    }
    return peer;
}

/* ******************************************************************** */
/* FUNCTION NAME : func_peerset( ) 			                    	    */
/* DESCRIPTION   : set Dyanmic Data ldp To mib                          */
/* INPUT         : MIB_LDP_PEER_REQ *in, MIB_LDP_PEER_ACK *ack   		*/
/* OUTPUT        : No.                                 			        */
/* AUTHOR/DATE   : Shi.ZhaoHui / 1999.12.04                             */
/* GLOBAL        : none                                                 */
/* NOTE          :  ....                                                */
/********************************************************************** */

mplsLdpPeer_t *func_peerset(MIB_LDP_PEER_REQ *in )
{
    short           i,temp = -1;
    mplsLdpPeer_t 	*peer = MPLS_NULL;
    mplsOAMLdpMessage_t   oamldpmess;

    for(i = 0; i < MPLSLDP_MAX; i++)
    {
        if((MplsLdpPeerEntry[i].RowStatus ==  VAL_RowStatus_active) &&
           (MplsLdpPeerEntry[i].ldpId.lsrAddress == in -> req.set.ldpId.lsrAddress)&&
           (MplsLdpPeerEntry[i].ldpId.labelSpace == in -> req.set.ldpId.labelSpace))
      {
        in -> req.set.index = MplsLdpPeerEntry[i].index;
        memcpy((unsigned char *)&MplsLdpPeerEntry[i]+1,&(in -> req.set),sizeof(mplsLdpPeer_t) );
        peer = (mplsLdpPeer_t *)(&MplsLdpPeerEntry[i].ldpId);
        oamldpmess.msgtype = MPLS_MIB_LDP_PEER ;
        oamldpmess.data.peerDataReq.operateType = 1;
        memcpy(&(oamldpmess.data.peerDataReq.req.set),&(in -> req.set),
                    sizeof(mplsLdpPeer_t));
       /* MPLS_PSEND(MPLS_LDP_OAM_MESSAGE,&oamldpmess,sizeof(MIB_LDP_PEER_ACK)
        		+sizeof(mplsLdpOAMMessage)+sizeof(unsigned char),mlsmanagePid);*/
        mplsPeerRecv(&oamldpmess);  /* 2003-10-9 lixia add */
        temp = 0;
        break;
      }
    }
    if(temp == 0)
        return peer;

    for(i = 0; i < MPLSLDP_MAX; i++)
    {
        if(MplsLdpPeerEntry[i].RowStatus ==  VAL_RowStatus_null)
        {
            in -> req.set.index = PeerIndex;
            MplsLdpPeerEntry[i].RowStatus =  VAL_RowStatus_active;
            memcpy((unsigned char *)&MplsLdpPeerEntry[i]+1,&(in -> req.set),sizeof(mplsLdpPeer_t) );
        	peer = (mplsLdpPeer_t *)(&MplsLdpPeerEntry[i].ldpId);
            PeerIndex--;
		    if( PeerIndex == 0)
			    PeerIndex = mplsINDEX_MAX;
			oamldpmess.msgtype = MPLS_MIB_LDP_PEER ;
            oamldpmess.data.peerDataReq.operateType = 1;
            memcpy(&(oamldpmess.data.peerDataReq.req.set),&(in -> req.set),
                    sizeof(mplsLdpPeer_t));
           /* MPLS_PSEND(MPLS_LDP_OAM_MESSAGE,&oamldpmess,sizeof(MIB_LDP_PEER_ACK)
        		+sizeof(mplsLdpOAMMessage)+sizeof(unsigned char),mlsmanagePid);*/
        	mplsPeerRecv(&oamldpmess);  /* 2003-10-9 lixia add */
            break;
        }
    }
    return peer;
}

/* ******************************************************************** */
/* FUNCTION NAME : func_peersearch( ) 	     		                    */
/* DESCRIPTION   : search Dyanmic Data from mib                         */
/* INPUT         : MIB_LDP_PEER_REQ *in, MIB_LDP_PEER_ACK *ack          */
/* OUTPUT        : No.                                 			        */
/* AUTHOR/DATE   : Shi.ZhaoHui / 2001.3.26                              */
/* GLOBAL        : none                                                 */
/* NOTE          :  ....                                                */
/********************************************************************** */

mplsLdpPeer_t *func_peersearch( MIB_LDP_PEER_REQ *in)
{
    short           i;
	mplsLdpPeer_t   *peer = MPLS_NULL;
	 
    for(i = 0; i < MPLSLDP_MAX; i++)
    {
        if((MplsLdpPeerEntry[i].RowStatus ==  VAL_RowStatus_active) &&
           (MplsLdpPeerEntry[i].ldpId.lsrAddress == in -> req.loc.lsrAddress) &&
           (MplsLdpPeerEntry[i].ldpId.labelSpace == in -> req.loc.labelSpace))
        {
        	peer = (mplsLdpPeer_t *)(&MplsLdpPeerEntry[i].ldpId);
           break;
        }
    }
    #ifdef DEBUG_LDP
        #ifdef __BGS10_MPLS_DEBUG
	        if(peer == MPLS_NULL)
		        printf("!!! In func_peersearch, search data is not exist");
	    #endif
	#endif
	return peer;
}

/* ******************************************************************** */
/* FUNCTION NAME : func_peerdel( ) 			                        	*/
/* DESCRIPTION   : search Dyanmic Data from mib                         */
/* INPUT         : MIB_LDP_PEER_REQ *in, MIB_LDP_PEER_ACK *ack        	*/
/* OUTPUT        : No.                                 			        */
/* AUTHOR/DATE   : Shi.ZhaoHui / 2001.3.26                              */
/* GLOBAL        : none                                                 */
/* NOTE          :  ....                                                */
/********************************************************************** */

mplsLdpPeer_t *func_peerdel(MIB_LDP_PEER_REQ *in)
{
    short               i;
    mplsLdpPeer_t 		*peer = MPLS_NULL;
    mplsOAMLdpMessage_t   oamldpmess;

    for(i = 0; i < MPLSLDP_MAX; i++)
    {
        if((MplsLdpPeerEntry[i].RowStatus ==  VAL_RowStatus_active) &&
           (MplsLdpPeerEntry[i].ldpId.lsrAddress == in -> req.del.lsrAddress)&&
           (MplsLdpPeerEntry[i].ldpId.labelSpace == in -> req.del.labelSpace))
        {
            MplsLdpPeerEntry[i].RowStatus = VAL_RowStatus_null;
        	peer = (mplsLdpPeer_t *)(&MplsLdpPeerEntry[i].ldpId);
            oamldpmess.msgtype = MPLS_MIB_LDP_PEER ;
            oamldpmess.data.peerDataReq.operateType = 3;
			/*oamldpmess.data.peerDataReq.req.del.labelSpace = MplsLdpPeerEntry[i].ifIndex;
            MPLS_PSEND(MPLS_LDP_OAM_MESSAGE,&oamldpmess,sizeof(MIB_LDP_PEER_ACK)
        		+sizeof(mplsLdpOAMMessage)+sizeof(unsigned char),mlsmanagePid);*/
            memcpy(&(oamldpmess.data.peerDataReq.req.set),peer,
                    sizeof(mplsLdpPeer_t));
           /* MPLS_PSEND(MPLS_LDP_OAM_MESSAGE,&oamldpmess,sizeof(MIB_LDP_PEER_ACK)
        		+sizeof(mplsLdpOAMMessage)+sizeof(unsigned char),mlsmanagePid);*/
        	mplsPeerRecv(&oamldpmess);  /* 2003-10-9 lixia add */
        		
            break;
        }
    }
    #ifdef DEBUG_LDP
        #ifdef __BGS10_MPLS_DEBUG
	        if(peer == MPLS_NULL)
		        printf("!!! In func_peerdel, del data is not exist");
	    #endif
	#endif
	return peer;
}

/*  对PeerAddress表的置表、检索和删除操作  
*/
sessionPeerAddr_t *MibPeerAddr(void * input, unsigned char flag)
{
    MIB_LDP_SESSION_PEERADDR_REQ     peerAddrReq;
    ldpMibPeerAddrIndexReq_t         * peerAddrIndex;
    sessionPeerAddr_t *peerAddrSet;
    sessionPeerAddr_t *peerAddr = MPLS_NULL;
    
    peerAddrReq.operateType      = flag;
    switch(flag)
    {
        case LDP_SET:    /*  置表  */
        	peerAddrSet = (sessionPeerAddr_t *)input;
            memcpy(&(peerAddrReq.req.set),peerAddrSet,sizeof(sessionPeerAddr_t));
			peerAddr = func_sess_peerset(&peerAddrReq);
            break;
       
        case LDP_SEARCH:  /*  检索  */    
            peerAddrIndex  = (ldpMibPeerAddrIndexReq_t *)input;
            memcpy(&(peerAddrReq.req.loc),peerAddrIndex,\
                            sizeof(ldpMibPeerAddrIndexReq_t));
			peerAddr = func_sess_peersearch(&peerAddrReq);
            break;
            
        case LDP_DELETE:  /*  删除  */
            peerAddrIndex  = (ldpMibPeerAddrIndexReq_t *)input;
            memcpy(&(peerAddrReq.req.del),peerAddrIndex,\
                            sizeof(ldpMibPeerAddrIndexReq_t ));
			peerAddr = func_sess_peerdel(&peerAddrReq);
            break;
        
        default: break;
    }
	return peerAddr;
}

/* ******************************************************************** */
/* FUNCTION NAME : func_sess_peerset( ) 			                    */
/* DESCRIPTION   : set Dyanmic Data ldp To mib                          */
/* INPUT         : MIB_LDP_SESSION_PEERADDR_REQ *in, 					*/
/*					MIB_LDP_SESSION_PEERADDR_ACK *ack                   */
/* OUTPUT        : No.                                 			        */
/* AUTHOR/DATE   : Shi.ZhaoHui / 2001.3.26                              */
/* GLOBAL        : none                                                 */
/* NOTE          :  ....                                                */
/********************************************************************** */

sessionPeerAddr_t *func_sess_peerset(MIB_LDP_SESSION_PEERADDR_REQ *in)
{
    short           i,temp = -1;
    sessionPeerAddr_t *peerAddr  = MPLS_NULL;
    mplsOAMLdpMessage_t   oamldpmess;

    for(i = 0; i < MPLSLDP_MAX; i++)
    {
        if((MplsLdpSessionPeerAddrEntry[i].RowStatus ==  VAL_RowStatus_active) &&
           (MplsLdpSessionPeerAddrEntry[i].nextHopAddressType == in -> req.set.nextHopAddressType) &&
           (MplsLdpSessionPeerAddrEntry[i].nextHopAddress == in -> req.set.nextHopAddress))
      {
        in -> req.set.index = MplsLdpSessionPeerAddrEntry[i].index;
        memcpy((unsigned char *)&MplsLdpSessionPeerAddrEntry[i]+1,&(in -> req.set),sizeof(sessionPeerAddr_t) );
        peerAddr = (sessionPeerAddr_t *)(&MplsLdpSessionPeerAddrEntry[i].index);
        temp = 0;
        oamldpmess.msgtype = MPLS_MIB_LDP_SESSION_PEERADDR ;
        oamldpmess.data.ssnPeerAddrDataReq.operateType = 1;
        memcpy(&(oamldpmess.data.ssnPeerAddrDataReq.req.set),&(in -> req.set),
                    sizeof(sessionPeerAddr_t));
        /*MPLS_PSEND(MPLS_LDP_OAM_MESSAGE,&oamldpmess,sizeof(MIB_LDP_SESSION_PEERADDR_ACK)
        		+sizeof(mplsLdpOAMMessage)+sizeof(unsigned char),mlsmanagePid);*/
        mplsSessionPeerRecv(&oamldpmess); /* 2003-10-9 lixia add */
        break;
      }
    }
    if(temp == 0)
        return peerAddr;

    for(i = 0; i < MPLSLDP_MAX; i++)
    {
        if(MplsLdpSessionPeerAddrEntry[i].RowStatus ==  VAL_RowStatus_null)
        {
            MplsLdpSessionPeerAddrEntry[i].RowStatus =  VAL_RowStatus_active;
            in -> req.set.index = SessPeerIndex;
            memcpy((unsigned char *)&MplsLdpSessionPeerAddrEntry[i]+1,&(in -> req.set),sizeof(sessionPeerAddr_t) );
        	peerAddr = (sessionPeerAddr_t *)(&MplsLdpSessionPeerAddrEntry[i].index);
            SessPeerIndex--;
		    if( SessPeerIndex == 0 )
			    SessPeerIndex = mplsINDEX_MAX;
			oamldpmess.msgtype = MPLS_MIB_LDP_SESSION_PEERADDR ;
            oamldpmess.data.ssnPeerAddrDataReq.operateType = 1;
            memcpy(&(oamldpmess.data.ssnPeerAddrDataReq.req.set),&(in -> req.set),
                    sizeof(sessionPeerAddr_t));
           /* MPLS_PSEND(MPLS_LDP_OAM_MESSAGE,&oamldpmess,sizeof(MIB_LDP_SESSION_PEERADDR_ACK)
        		+sizeof(mplsLdpOAMMessage)+sizeof(unsigned char),mlsmanagePid); */
        	mplsSessionPeerRecv(&oamldpmess); /* 2003-10-9 lixia add */
            break;
        }
    }
    return peerAddr;
}

/* ******************************************************************** */
/* FUNCTION NAME : func_sess_peersearch( ) 			                    */
/* DESCRIPTION   : search Dyanmic Data from mib                         */
/* AUTHOR/DATE   : Shi.ZhaoHui / 2001.3.26                              */
/* Modify        : hu.yonghong 2002-7-11                                */
/********************************************************************** */
sessionPeerAddr_t *func_sess_peersearch( MIB_LDP_SESSION_PEERADDR_REQ *in)
{
    short       i;
	sessionPeerAddr_t *peerAddr = MPLS_NULL;
	
	switch ( in -> req.loc.indexFlag )
	{
		case 1  :
		     if(( in -> req.loc.index < 0 )||( in -> req.loc.index > mplsINDEX_MAX ))
		    {
				#ifdef DEBUG_LDP
				    #ifdef __BGS10_MPLS_DEBUG
			  	        printf("!!! In func_sess_peersearch1, index error.");
			  	    #endif
			  	#endif
			  	return MPLS_NULL;
			}
			for(i = 0; i < MPLSLDP_MAX; i++)
		    {
		        if((MplsLdpSessionPeerAddrEntry[i].RowStatus ==  VAL_RowStatus_active) &&
		           (MplsLdpSessionPeerAddrEntry[i].index == in -> req.loc.index))
		        {
        			peerAddr = (sessionPeerAddr_t *)(&MplsLdpSessionPeerAddrEntry[i].index);
		            break;
		        }
		    }
		    #ifdef DEBUG_LDP
		        #ifdef __BGS10_MPLS_DEBUG
		        	if(peerAddr == MPLS_NULL)
				        printf("!!! In func_sess_peersearch1, search data is not exist");
			    #endif
			#endif
			break;
		case 2 :
		    for(i = 0; i < MPLSLDP_MAX; i++)
		    {
		        if((MplsLdpSessionPeerAddrEntry[i].RowStatus ==  VAL_RowStatus_active) &&
		           (MplsLdpSessionPeerAddrEntry[i].nextHopAddressType == in -> req.loc.address.nextHopAddressType)&&
		           (MplsLdpSessionPeerAddrEntry[i].nextHopAddress == in -> req.loc.address.nextHopAddress))
		        {
        			peerAddr = (sessionPeerAddr_t *)(&MplsLdpSessionPeerAddrEntry[i].index);
		            break;
		        }
		    }
		    #ifdef DEBUG_LDP

⌨️ 快捷键说明

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