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

📄 mplsfunc.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 5 页
字号:
/********************************************************************          
*	Product Name:	MPLS                                      	          
*	Module  Name:	OAM    			 							
*	File    Name:   mplsfunc.c								        	          
*	Function    :	definition of function for use in mplscmd.c 
*   History:
*   Date          Version        modifier         Activities 
* ==================================================================
*   01-8-9          1.0        Sun Baoping         create		
*   sbp 2002-2-22 调整CR-LSP的显示
*   sbp 2002-2-22 change showing content for hop lsp
*   sbp 2002-4-17 simplify the printing method
*   Huyonghong 2002.11.11 show ip traffic configration              
*  sbp  2002-12-28  在线删除增加端口地址出错                                  
* sbp 2003-1-9 内存管理整理                                          
*   2003-7-9  szh 增加对M2000的处理
* 2003-10-30 szh mod for m2000 process GetModulePortIfIndex( )
*   2003-11-12 szh mod MplsPortDataTable1代替MplsPortDataTable
********************************************************************/ 
#include <stdio.h>
#include <stdlib.h>

#include "mplsfun.h"
#include "protocol/h/exec_cmd.h"
#include "mplsni.h"
#include "mplslsp.h"
#include "mplsmpue.h"
#include "r060file.h"
#include "mx_ax_bx.h"
#include "mplstype1.h"
#include "mplsevent.h"
/*#include "ldpmess.h"*/
#include "ldpstr.h"
#include "mbldpmes.h"
#include "mplserr.h"

extern bits32_t glue_now();

extern ushort  arrayLen[MPLS_DATA_ARRAY_MAX];            /* 用于存储各表的长度,具体对应关系在arraylen.h说明*/
extern mplsLsrAttr_t                               mplsLsrAttrEntry;
extern MplsInterfaceConfTable_t                    mplsInterfaceConfEntry[MPLS_LDP_INTERFACE_MAX];
extern MplsTrafficParamTable_t                     mplsTrafficParamEntry[MPLS_LDP_INTERFACE_MAX];
extern MplsLdpEntityTable_t                        mplsLdpEntityEntry[MPLS_LDP_INTERFACE_MAX];
extern MplsLdpEntityAtmParamsTable_t               mplsLdpEntityAtmParamsEntry[MPLS_LDP_INTERFACE_MAX];
extern MplsLdpEntityConfAtmLabelRangeTable_t       mplsLdpEntityConfAtmLabelRangeEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsLdpEntityStatsTable_t                   mplsLdpEntityStatsEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsLdpPeerTable_t                          mplsLdpPeerEntry[MPLS_LDP_PEER_MAX];     
extern mplsLdpHelloAdjacencyTable_t                mplsLdpHelloAdjacencyEntry[MPLS_LDP_PEER_MAX];
extern MplsLdpSessionTable_t                       mplsLdpSessionEntry[MPLS_LDP_SESSION_MAX];
extern mplsLdpSessionStatsTable_t                  mplsLdpSessionStatsEntry[MPLS_LDP_SESSION_MAX];
extern forwardingtable_t                           mplsForwardingEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsldpparamtable_t                         mplsLdpEntityParamEntry[MPLS_LDP_INTERFACE_MAX];
extern if_transport_table_t                        mplsIfTransportAddressEntry[MPLS_LDP_INTERFACE_MAX];
extern libtable_t                                  mplsLibEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsLdpDiscovery_t                          mplsLdpDiscoveryEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsAtmLdpCapability_t                      mplsAtmLdpCapEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsLdpAtmSessionTable_t                    mplsLdpAtmSessionEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsLdpSessionPeerAddressTable_t            mplsLdpSessionPeerAddressEntry[MPLS_LDP_SESSION_MAX];
extern MplsLdpEntityConfGenericLabelRangeTable_t   mplsLdpEntityConfGenericLabelRangeEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsLdpGeneralSessionTable_t                mplsLdpGeneralSessionEntry[MPLS_LDP_INTERFACE_MAX];

/*
extern mplsMIBInfo                                 mplsDataTable[ MPLS_DATA_ARRAY_MAX ];
*/
extern mplsPort_t          MplsPortDataTable1;     /* 存放从数据处要的板类型、模块号、端口号、
                                                  虚端口号、端口最大速率、svc VPI/VCI范围*/
extern Stnetifdata         MplsNiDataTable;      /* 存放NI表*/

extern uchar        globalModule[SDP_TELNET_NUMBER_PERMIT];   /* 全局变量,在端口状态用于记录模块号、端口号、虚端口号 ,非端口状态则为0*/
extern uchar        globalPort[SDP_TELNET_NUMBER_PERMIT];
extern ushort       globalIfIndex[SDP_TELNET_NUMBER_PERMIT];

extern mplsFecFilterAll_t   *mplsFecFilterHead, *mplsFecFilterPF, *mplsFecFilterPN;

extern ushort        currentLspId;

extern FilterLspId_t  FilterNo[FILTER_MAX_NUM];
extern ushort         currentFilterNo;
extern uchar    mplsOamLocalPlatformType;

extern mpls_SwitchAttribute	 Switcher;

extern mplsLdpParam_t  mplsLdpParam;
extern mplsIfConf_t   mplsIfConf[MPLS_MAX_BOARD];
extern char    FRootDir[];

mplsOAMLdpMessage_t  lspData;

extern PID    mplsManagerOamPID;

ushort mplsQosFilterNoGetPtr(ushort filterNo,QosMulitFieldFilter_t **Ptr);
ushort mplsQosCheckFilterNo(ushort filterNo);
void mplsCRLspConfigSend(mplsErLspTable_t **ptr);
short mplsCRLspSearchQosFilter(mplsErLspTable_t **ptr);
void MplsAccessListPrint(struct sty *sty,mplsFecFilterAll_t **tempFilterPtr);
void MplsTrafficEngConfigurationPrint(struct sty *sty,QosMulitFieldFilter_t  **tempFilterPtr);
char *changePrefixIntoStr(ulong prefix,ushort len);

extern ulong   CURRENT_TIME(ulong *pSecondsHi,ulong *pSecondsLo);
unsigned long tranLen2mask(unsigned char len);

extern PROTO_MEM_MGR          MPLS_OAM_MEM[MAX_OAM_UTIL_MEM_TYPES];
/************************************************************************
 * FUNCTION NAME  : IpAddrMaskLenMatching()	                            
 * DESCRIPTION:   : compare ip address、mask(len)  			    
 *  INPUT         : srcAddr: source address 
 *                  srcLen : len of source address mask 
 *                  dstAddr: destination address
 *                  dstLen : len of destination address mask                  				
 *  OUTPUT        : success or fail message		                           				
 *  AUTHOR/DATE   : Sun Baoping/ 01.12.12                               
 *  GLOBAL        : 								
 *  NOTE          :  ..                                                 
/************************************************************************/
ushort IpAddrMaskLenMatching(ulong srcAddr,uchar srcLen,ulong dstAddr,uchar dstLen)
{
	if(srcAddr==dstAddr && srcLen==dstLen)
	    return MPLS_LSP_ADDR_REPEAT_ERROR;
	    
	return MPLS_SDP_CMD_SUCCESS;
}

/************************************************************************
 * FUNCTION NAME  : mplsIfDelete()	                            
 * DESCRIPTION:   : no mpls ip when deleting interface  			    
 *  AUTHOR/DATE   : sbp 2002-11-26                      
 *  GLOBAL        : 								
 *  NOTE          :  ..                                                 
/************************************************************************/
void mplsIfDelete(unsigned char module,unsigned char port)
{
   if(mplsOamLocalPlatformType==MPLS_OAM_PLATFORM_M1000)
    {
        mplsIfConf[module].port[port-1].Ip_maskLen &=NO_MPLS_IP;
    }
    else
    {
        mplsIfConf[module-1].port[port-1].Ip_maskLen &=NO_MPLS_IP;
    }
}
/************************************************************************
 * FUNCTION NAME  : IpAddrMaskMatching()	                            
 * DESCRIPTION:   : compare ip address、mask  			    
 *  INPUT         : srcAddr : source address 
 *                  srcMask : source address mask 
 *                  dstAddr : destination address
 *                  dstMask : destination address mask                  				
 *  OUTPUT        : success or fail message		                           				
 *  AUTHOR/DATE   : Sun Baoping/ 01.12.12                               
 *  GLOBAL        : 								
 *  NOTE          :  ..                                                 
/************************************************************************/
ushort IpAddrMaskMatching(ulong srcAddr,ulong srcMask,ulong dstAddr,ulong dstMask)
{
	if(srcAddr==dstAddr && srcMask==dstMask)
	    return MPLS_LSP_ADDR_REPEAT_ERROR;
	    
	return MPLS_SDP_CMD_SUCCESS;
}


/************************************************************************
 * FUNCTION NAME  : printIntefaceInfo()	                            
 * DESCRIPTION:   : print interface information configed  			    
 *  INPUT         :                				
 *  OUTPUT        : NONE		                           				
 *  AUTHOR/DATE   : Sun Baoping/ 01.12.12                               
 *  GLOBAL        : 								
 *  NOTE          :  ..                                                 
/************************************************************************/
void printIntefaceInfo(struct sty *sty,interface_name_t *IfPortArray, ushort portNum,uchar *cardStr)
{
    ushort    num;
    ushort    num1;
    interface_name_t  portConf[MAX_PORTS_ONE_BORAD];
    
    memcpy(portConf,IfPortArray,sizeof(interface_name_t)*portNum); 
    if(portNum>0)
    {
    	sdp_printf(sty, " \n");
        sdp_printf(sty, "  %s Interface configed: \n",cardStr);
        
        num1=0;
        for(num=0; num<portNum; num++)
        {
        	if(num1==0)
        	{
        		if(portConf[num].module>9)
                   sdp_printf(sty, "  %s%-u/%-5u", cardStr,portConf[num].module,
                          portConf[num].port);
                else
                   sdp_printf(sty, "  %s%-u/%-6u", cardStr,portConf[num].module,
                          portConf[num].port);
            }
            else
            {              
                if(portConf[num].module>9)
                   sdp_printf(sty, "%s%-u/%-5u", cardStr,portConf[num].module,
                          portConf[num].port);
                else
                   sdp_printf(sty, "%s%-u/%-6u", cardStr,portConf[num].module,
                          portConf[num].port);
            }     
            
            num1++;
            
            if(num1==7)  
            {
               sdp_printf(sty, "\n");
               num1=0;
            }      
        }
        sdp_printf(sty, "\n");
    } 
}

/************************************************************************
 * FUNCTION NAME  : GetModulePortIfIndex()	                            
 * DESCRIPTION:   : 计算module, port, ifIndex 			    
 *  INPUT         : str:       module/port              				
 *  OUTPUT        : MPIfIndex : module port ifindex		                           				
 *  AUTHOR/DATE   : Sun Baoping/ 01.12.12                               
 *  GLOBAL        : 								
 *  NOTE          :  ..                                                 
 *  History       : 2003-10-30 szh mod for m2000 process                                              
/************************************************************************/
modulePortIfIndex_t  GetModulePortIfIndex(int8 * str)
{
	ushort      num;
    ushort      num1;
    ushort      ifIndex;
    uchar       module;
    uchar       port;
    uchar       numFnd;
    int16       count_num=0,count_num1=0;
    int8       * p_temp;
    int8       f_temp[3];
    int8       n_temp[3];
        
    modulePortIfIndex_t  MPIfIndex;
    
    memset(f_temp,0,sizeof(int8)*3);
    memset(n_temp,0,sizeof(int8)*3);
    
    p_temp=str;
    while ((*p_temp >= '0') && (*p_temp <= '9'))
    {
       f_temp[count_num]=*p_temp;
       p_temp++;
       count_num++;
    }
        
    p_temp++;
                 
    while ((*p_temp >= '0') && (*p_temp <= '9'))
    {
      	n_temp[count_num1]=*p_temp;
        p_temp++;
        count_num1++;
    } 
       
    module = (uchar)(attache_atoi( f_temp ));
    port   = (uchar)(attache_atoi( n_temp ));

    	/*计算IFINDEX号*/
    numFnd = 0;
    if(mplsOamLocalPlatformType==MPLS_OAM_PLATFORM_M1000)
    {   
    for(num1=0; num1<MplsPortDataTable1.num; num1++)
    {
       if(MplsPortDataTable1.mplsModule[num1].module==module)
       {
           for(num=0; num<MplsPortDataTable1.mplsModule[num1].num; num++)
           {
           	  if((module==0&&MplsPortDataTable1.mplsModule[num1].portData[num].port<5)||module!=0)
              {
              	 if(MplsPortDataTable1.mplsModule[num1].portData[num].port==port)
                 {
                     ifIndex = MplsPortDataTable1.mplsModule[num1].portData[num].ifIndex;
                     numFnd  = 1;
                     break;
                 }
              }
              else
                 break;
           }
             	
           break;
       }
   }
  }
  else if(mplsOamLocalPlatformType==MPLS_OAM_PLATFORM_M2000)
  {   
    for(num1=0; num1<MplsPortDataTable1.num; num1++)
    {
       if(MplsPortDataTable1.mplsModule[num1].module==module)
       {
           for(num=0; num<MplsPortDataTable1.mplsModule[num1].num; num++)
           {
           	  if((module==0&&MplsPortDataTable1.mplsModule[num1].portData[num].port<17)||module!=0)
              {
              	 if(MplsPortDataTable1.mplsModule[num1].portData[num].port==port)
                 {
                     ifIndex = MplsPortDataTable1.mplsModule[num1].portData[num].ifIndex;
                     numFnd  = 1;
                     break;
                 }
              }
              else
                 break;
           }
           break;
       }
   }
  }  
  else
  {
   for(num1=1; num1<MplsPortDataTable1.num; num1++)
    {
       if(MplsPortDataTable1.mplsModule[num1].module==module)
       {
           for(num=0; num<MplsPortDataTable1.mplsModule[num1].num; num++)
           {
               if(MplsPortDataTable1.mplsModule[num1].portData[num].port==port)
                {
                   ifIndex = MplsPortDataTable1.mplsModule[num1].portData[num].ifIndex;
                   numFnd  = 1;
                   break;
                 }

⌨️ 快捷键说明

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