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

📄 mplslsp.h

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 H
字号:
#ifndef MPLS_LSP_H
#define MPLS_LSP_H

#include "mpls.h"
#include "oamldp.h"
#include "mplsOamS.h"
#include "mpls_avl.h"
#include "ldp.h"
#include "_noalign.h"
/* MPLS FEC filter */

MPLS_AVL_TREE lspConfigTree;
MPLS_AVL_TREE lspNhTree,lspNhTreeTemp;
MPLS_AVL_TREE mplsFilterTree,mplsLspPrioTree;

typedef struct{
	unsigned long	   IpAddr;		          /* network address for this route, or net for some addreses */
	union{
	   unsigned char   addrLen;
       unsigned long   addrMask;
	}mask;
}MPLS_PACK fecFilterAddr_t;

typedef struct{
    unsigned char            addrType;
    fecFilterAddr_t  ScrAddr;
    fecFilterAddr_t  DstAddr;
}MPLS_PACK TEFilterAddr_t;

typedef struct{
    unsigned short      minPort;
    unsigned short      maxPort;
}MPLS_PACK Port_t;

typedef struct{
    Port_t     ScrPort;
    Port_t     DstPort;   
}MPLS_PACK TEfilterPort_t;

typedef struct{
    unsigned short    filterNo;
}mpls_filter_key;

typedef struct filter_s{
    MPLS_AVL_NODE		filter_node;
    mpls_filter_key     filter_key;
    unsigned char     bindedLspNum;   /* 用于绑定和删除绑定,绑定是加1,删除绑定时减1 */
    unsigned char     ExistLspNum;    /* 标示实际与该FILTER绑定的LSP的条数,因为有时删除绑定,
                                 但LSP并一定删除,虽然应该删除,因为以后建立不起来了。
                                 绑定是加1,被绑定的LSP时减1 */
    unsigned short    lspNoEntry[QOS_FILTER_TO_LSP_MAX];
       
    TEFilterAddr_t          QosAddr;
    TEfilterPort_t          QosPort;
    short                   QosDscp;
    unsigned short          QosPhyPortNum;
    InterfaceNoCardtype_t   QosPhyPort[MPLS_MAX_QOSPHY];
    unsigned short				    QosProtoType;
    unsigned char				    QosTos;
    unsigned char                   QosPrio;
}MPLS_PACK QosMulitFieldFilter_t;

typedef struct singleFilter_s{
    unsigned char                       filterFlag;   /* MPLS_FEC_FILTER_ENABLE_ALL: enable all,
                                                 MPLS_FEC_FILTER_ENABLE_SINGLE:  enable single,
                                                 MPLS_FEC_FILTER_DISABLE_SINGLE: disable single ,
                                                 MPLS_FEC_FILTER_DISABLE_ALL: disable all */
    fecFilterAddr_t             fecAddr;
    
    struct singleFilter_s       *next;
}MPLS_PACK singleFecFilterAddr_t;

typedef struct mplsFecFilter{
    unsigned short                     listNo;        /* MPLS FEC filters No. */
    unsigned char                      allFilterFlag; /* only used for configuration 
                                                 if allFilterFlag equals to the following 
                                                 value, printe the warning information to 
                                                 operator.
                                                 MPLS_FEC_FILTER_ENABLE_ALL: enable all,
                                                 MPLS_FEC_FILTER_DISABLE_ALL: disable all
                                              */
    singleFecFilterAddr_t      *FecFilter;
    
    struct mplsFecFilter       *next;
}MPLS_PACK mplsFecFilterAll_t;

typedef struct{
    unsigned char          advFlag;       /* initial value is MPLS_NOT_ADVERTISE_LBLS,
                                     the value changes to MPLS_ADVERTISE_TAGS after setup*/
    unsigned short         num;           /* if(advFlag==MPLS_ADVERTISE_TAGS&&num==0),advertise all
                                     labels to all neighbors */
    unsigned short         filterListNo[MAX_MPLS_FEC_FILTER_ITEMS];  /* corresponding to listNo of
                                                                struct MplsFecFilterConfig_t*/
}MPLS_PACK mplsFecFilterAdvertiseLbls_t;

typedef struct lsp_key
{
    unsigned short 		            localLspId;          /* er lsp 的标识号 */
    unsigned long                   IngressId;  	      /* er lsp 的标识号 */
} LSP_KEY;
	

typedef struct ErLsp
{
	MPLS_AVL_NODE					lsp_node;
	LSP_KEY							lsp_key;
	struct{
	    struct ErLsp                *sbNext;
	    struct ErLsp                *sbFront; 
	    struct ErLsp                *NhNext;
	    struct ErLsp                *NhFront; 
	    struct ErLsp                *dstNext;
	    struct ErLsp                *dstFront;
	    unsigned  long              *NhListHead;
	    unsigned  long              *dstListHead;
	}cr_lsp_list;  /* 路由 业务板链表 */
	#define          MPLS_TUNNEL_BACKUP  16   /* 进行或操作 */
	#define          MPLS_TUNNEL_MASTER   0  /* 进行与操作 */
	#define          MPLS_ROUTE_DOWN      1   /* 进行或操作 */
	#define          MPLS_ROUTE_UP        240   /* 进行与操作 */
	unsigned char                   backup_routedown;  /* 备份和路由标志,高四位为:backup ; 低四位为:route down*/
	unsigned char                   metric;           /* traffic metric,用于提供给转发决定优选
                                                      哪一条lsp*/
    unsigned long                   nexthop[2];
	
    unsigned char                   ConnStatus;
    /* down(1),up(2),abort(4), down表示此LSP建立了或已经发下去,up表示此LSP已发下去且收到
    建立成功的消息, abort表示对此LSP发送了abort消息。用于表示LSP配置完毕后的状态 */
    unsigned short                  ReqNum;              /*  label request number  */

	unsigned char			        ErlspWcElemExists;     /*  通配类型FEC是否存在 */
	unsigned char                   ErlspLooseRouteChange; /* loose route change or not */
	unsigned char                   ErlspFecElemType;      /*  FEC type: it's num should correspond to num of ErAddresses */

	unsigned char			        ErlspNumberFecElements;	   /*  此lsp中的FEC单元数*/
	fecTlv_t	            FecTlv[FECS_MAX_IN_LSP];	/*     FEC */
	unsigned short			        ErlspNumberErHops;		    /* 此lsp中的hop数 */
	ErLspAddr_t		        ErAddress[NEXT_HOPS_MAX_IN_LSP]; /* next hop address*/
    unsigned char           validHopNo;     /* first valide hop no. */
	mplsLdpTraffic_t        traffic;
	unsigned char			        ErlspPinFlag;	 /* route pinning */
	unsigned long			        ErlspRsCls;		 /* resource class, 32位 in the draft */
	unsigned char			        ErlspQosMark;
/*add by xjs,2003-7-24 10:00*/	  
#define   CBR_CDR_CBS_NULL   0      /*表示没有CDR/CBS配置*/ 
#define   CBR_CDR_DEFAULT    1      /*表示CDR为默认值*/
#define   CBR_CDR_CONFIG     2      /*表示CDR为配置值*/
#define   CBR_CBS_DEFAULT    4      /*表示CBS为默认值*/
#define	  CBR_CBS_CONFIG     8      /*表示CBS为配置值*/
/*add end*/
	mplsLdpPreemption_t     preempt;

    unsigned long					statusCode;      /*错误代码 */
	unsigned long			        lspbytes;        /* bytes throughout the lsp */
	unsigned char                   flag;            /* 用于表示LSP配置过程中的状态:
	                                           LSP_FLAG_NOT_SET:  空,
	                                           LSP_FLAG_SETTING: 正建立,
	                                           LSP_FLAG_SETUP_OK:建立完毕 
	                                           */
	#define    MPLS_FILTER_TUNNEL_REPEATE    16
	#define    MPLS_FILTER_TUNNEL_DELETE     32                                           
    unsigned char				    FecGetSource;   /* 高位: 是否为重新绑定, 低位: lsp 建立方式 */
   /*  lspCBNo_t               upLspCBStru; szh mod 2001-12-24 11:09*/
    unsigned long                   TimerId;
    unsigned long                   hopchanTimerId;
    unsigned char                   SbModule;
    unsigned short                  setFilterNo;      /* 指向 TE Filter,建立LSP时用 */
    unsigned short                  delFilterNo;      /* 指向 TE Filter,删除LSP时用 */
    fec_msg_tlvs_flags      tlvExist;
    unsigned char                   cos;              /* class of service  sbp 2001-12-27 */
    unsigned char                   lspType;          /* PATH_DYNAMIC: 1; PATH_EXPLICIT: 2  */
    unsigned char                   loadbalance;
    
    mplsLdpAtmLabel upAtmLabel;
    unsigned long   upGenLabel;
    mplsLdpAtmLabel downAtmLabel;
    unsigned long   downGenLabel;
    
}MPLS_PACK mplsErLspTable_t;

typedef struct HopLsp_s
{
	unsigned char	 		       ConnStatus;		/* RowStatus */  /* down(LSP_SET_STATUS_DOWN),
	                                           up(LSP_SET_STATUS_UP),down表示此LSP建立了或已经发下去,
                                               up表示此LSP已发下去且收到建立成功的消息
                                               用于表示LSP配置完毕后的状态 */
    unsigned char                  flag;            /* 用于表示LSP配置过程中的状态:
	                                           LSP_FLAG_NOT_SET:  空,
	                                           LSP_FLAG_SETTING: 正建立,
	                                           LSP_FLAG_SETUP_OK:建立完毕 */
	unsigned short                 LspNo;           /*  localLspId  */
    unsigned short                 ReqNum;          /*  label request number  */
  /*  unsigned char                  LspFecElemType;    FEC type: it's num should correspond to num of ErAddresses */

/*	unsigned char			       ErlspNumberFecElements;	          此lsp中的FEC单元数*/
/*	fecTlv_t	           FecTlv[FECS_MAX_IN_LSP];	         FEC */
/*	unsigned short			       ingressNumber;		              此lsp中的hop数 */
/* 	hopLspAddr_t	       inAddr[NEXT_HOPS_MAX_IN_LSP];     next hop address*/
	unsigned short			       egressNumber;		             /* 此lsp中的hop数 */
	hopLspAddr_t   		   egressAddr[NEXT_HOPS_MAX_IN_LSP]; /* next hop address*/

    unsigned long				   statusCode;      /*错误代码 */
	unsigned long			       lspbytes;        /* bytes throughout the lsp */
	unsigned long                  TimerId;
	unsigned long                  hopchanTimerId;
    unsigned char                  SbModule;
   /* lspCBNo_t              upLspCBStru;  szh mod 2001-12-24 11:09*/

	unsigned char                  lspType;         /* fec filter setup(1),  hop by hop lsp(2)  */
    unsigned char				   FecGetSource;

	struct HopLsp_s        *front;          /* 指向父节点 */
	struct HopLsp_s        *next;           /* 指向子节点 */
}MPLS_PACK mplsHopLspTable_t;

/* sbp 2002-11-14 deal sb offline quikly */
typedef struct lsp_sb{
    mplsErLspTable_t    *next;
}MPLS_PACK lsp_sb_t;

/* sbp 2002-11-14 deal route changing quikly */
typedef struct lsp_nh{
    MPLS_AVL_NODE		lsp_nh_node;
    mpls_fec_key        lsp_nh_key;
    unsigned char       operType;    
	unsigned long       NextHop;        /*下一跳的IP地址*/
    mplsErLspTable_t    *dst_lspPtr;    /* dst  */
    mplsErLspTable_t    *nh_lspPtr;    /* next hop  */
}MPLS_PACK lsp_nh_t;

typedef struct lsp_nh_temp{
    lsp_nh_t            *lsp_nh;
    struct lsp_nh_temp  *next;
}lsp_nh_temp_t;


/* sbp 2003-1-14   */

typedef struct lsp_prio_key
{
    unsigned char 		            metric;          /* er lsp 的标识号 */
    unsigned long                   dst;  	      /* er lsp 的标识号 */
} LSP_PRIO_KEY;
	
typedef struct lsp_prio{
    MPLS_AVL_NODE		lsp_prio_node;
    LSP_PRIO_KEY        lsp_prio_key;
    unsigned char       lsp_num;    
}MPLS_PACK lsp_prio_t;


#include"_restore.h"

#endif /* MPLS_LSP_H */

⌨️ 快捷键说明

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