📄 ldpfunc.c
字号:
return LDP_TRUE;
}
else
{
/*缓冲失败,置重发缓冲定时器*/
MPLS_SET_TIMER(XC_QUE_FULL_RESND_TIME,(void *)ldp_crpvc_resend,LspCBVar,ldptime_q,LspCBVar->timerid);
return LDP_FALSE;
}
}
short ldp_fill_crpvcreq(STRUC_MPLS_AD_CRPVC_REQ *createPvcReq,
mplsLdpLspCB *LspCBVar,
unsigned short localLspId,
unsigned long LspCBNo,
mplsLdpTrafficTlv_t *Traffic,
char *pEntry)
{
short serviceClassValue;
unsigned long t;
createPvcReq->localLspId = localLspId;
createPvcReq->IngressId = LspCBVar->lspIndex;
createPvcReq->LspCBNo = LspCBNo;
createPvcReq->L_module = LspCBVar->upAtmLabel.module;
createPvcReq->L_port = LspCBVar->upAtmLabel.port;
createPvcReq->L_vpi = LspCBVar->upAtmLabel.vpi;
createPvcReq->L_vci = LspCBVar->upAtmLabel.vci;
createPvcReq->H_module = LspCBVar->downAtmLabel.module;
createPvcReq->H_port = LspCBVar->downAtmLabel.port;
createPvcReq->H_vpi = LspCBVar->downAtmLabel.vpi;
createPvcReq->H_vci = LspCBVar->downAtmLabel.vci;
createPvcReq->Connect_type = (VAL_ConnType_SVCC - 2);
createPvcReq->L_CPType = VAL_CPType_SegEndPtYes;
createPvcReq->H_CPType = VAL_CPType_SegEndPtYes;
createPvcReq->TrafficDescrType = atmNoClpNoScr;
createPvcReq->TrafficDescrParam1 = (Traffic->pdr.pdr)/48;
createPvcReq->TrafficDescrParam2 = (Traffic->pbs.pbs)/48;
createPvcReq->TrafficDescrParam3 = (Traffic->cdr.cdr)/48;
createPvcReq->TrafficDescrParam4 = (Traffic->cbs.cbs)/48;
createPvcReq->TrafficDescrParam5 = (Traffic->ebs.ebs)/48;
serviceClassValue = ServiceClass(Traffic);
if (serviceClassValue != LDP_FALSE)
createPvcReq->ServiceCategory = (unsigned char)(serviceClassValue);
else
{
#ifdef MPLS_ERR_PRINT
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"======== SERVICETYPE ERROR WHEN CREATE PVC =======\n");
printf("======== SERVICETYPE ERROR WHEN CREATE PVC =======\n");
#endif
/*response to fec ,2002-11-19 hyh */
if((LspCBVar->lspType == LDP_CR_LSP)&&(LspCBVar->nodeType == MPLS_NODE_INGRESS))
{
sendToFecCrlsp((mplsLdpCrLsp *)pEntry,RESPONSE_TYPE,TRAFPARAUNAVA);
}
/* hyh 2003.3.7 need to delete lspcb */
if(LspCBVar->nodeType != MPLS_NODE_INGRESS)
{
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"==== UpLspCbFsm,TRAFFIC PARAM IS FALSE ====\n");
printf("==== UpLspCbFsm,TRAFFIC PARAM IS FALSE ====");
LspCBVar -> errorcode = CRPVCTRAFFICFALSE;
SndNotMsg(LspCBVar->upSessionIndex,TRAFPARAUNAVA,LspCBVar->upMsgid,\
MPLS_LBLREQ_MSGTYPE);
}
if(LspCBVar->nodeType != MPLS_NODE_EGRESS)/*向下游发送RELEASE消息!!!! */
{
if((LspCBVar->lspType) == LDP_HOP_LSP)
wait_lsplblmsg_append(LspCBVar,pEntry,MPLS_NULL,MPLS_NULL,MPLS_LBLREL_MSGTYPE);
else
CR_wait_lsplblmsg_append(LspCBVar,pEntry,MPLS_NULL,MPLS_NULL,MPLS_LBLREL_MSGTYPE);
}
if(!((LspCBVar->lspType == LDP_HOP_LSP)&&(LspCBVar->nodeType == MPLS_NODE_INGRESS)))
{
if(LspCBVar->waitflag & 0xe0)
{
LspCBVar->waitflag |= 0x1;
}
else
{
ldp_del_lspCB(pEntry,LspCBVar);
}
}
/*2003-12-25 lixia add for dele p_s_f*/
else if((LspCBVar->lspType == LDP_HOP_LSP)&&(LspCBVar->nodeType == MPLS_NODE_INGRESS))
{
p_s_f = MPLS_NULL;
for(p_s_f = aggr_body.first; p_s_f; p_s_f = p_s_f->next)
{
if( (p_s_f->upAtmLabel.module == LspCBVar->upAtmLabel.module) && \
(p_s_f->upAtmLabel.port == LspCBVar->upAtmLabel.port) && \
(p_s_f->downAtmLabel.module == LspCBVar->downAtmLabel.module) && \
(p_s_f->downAtmLabel.port == LspCBVar->downAtmLabel.port) && \
(p_s_f->downAtmLabel.vpi == LspCBVar->downAtmLabel.vpi) && \
(p_s_f->downAtmLabel.vci == LspCBVar->downAtmLabel.vci) && \
(p_s_f->nodeType == LspCBVar->nodeType) )
/* (p_s_f->attr.hopcount == LspCBVar->pAttr.hopcount) */
break;
}
if(p_s_f)
aggr_delete(p_s_f);
}
return LDP_FALSE;
}
#ifdef __INSTALL_V22
if(createPvcReq->ServiceCategory == UBRService)
{
createPvcReq->TrafficDescrParam1 = (Traffic->pdr.pdr)/48;
createPvcReq->TrafficDescrParam2 = (Traffic->pbs.pbs)/48;
createPvcReq->TrafficDescrParam5 = 1;
createPvcReq->TrafficDescrType = atmNoClpNoScrCdvt;
}
else if(createPvcReq->ServiceCategory == CBRService)
{
createPvcReq->TrafficDescrParam1 = (Traffic->pdr.pdr)/48;
createPvcReq->TrafficDescrParam2 = (Traffic->pbs.pbs)/48;
createPvcReq->TrafficDescrParam5 = 1;
createPvcReq->TrafficDescrType = atmNoClpNoScrCdvt;
}
else if(createPvcReq->ServiceCategory == rtVBRService)
{
createPvcReq->TrafficDescrParam1 = (Traffic->pdr.pdr)/48;
createPvcReq->TrafficDescrParam2 = (Traffic->cdr.cdr)/48;
createPvcReq->TrafficDescrParam3 = (Traffic->cbs.cbs)/48;
createPvcReq->TrafficDescrParam4 = (Traffic->pbs.pbs)/48;
createPvcReq->TrafficDescrParam5 = 1;
createPvcReq->TrafficDescrType = atmNoClpScrCdvt;
}
else if(createPvcReq->ServiceCategory == nrtVBRService)
{
createPvcReq->TrafficDescrParam1 = (Traffic->pdr.pdr)/48;
createPvcReq->TrafficDescrParam2 = (Traffic->cdr.cdr)/48;
createPvcReq->TrafficDescrParam3 = (Traffic->cbs.cbs)/48;
createPvcReq->TrafficDescrParam4 = (Traffic->pbs.pbs)/48;
createPvcReq->TrafficDescrParam5 = 1;
createPvcReq->TrafficDescrType = atmNoClpScrCdvt;
}
#else
if(createPvcReq->ServiceCategory == UBRService)
{
createPvcReq->TrafficDescrParam2 = createPvcReq->TrafficDescrParam2*(1E7)/createPvcReq->TrafficDescrParam1;
createPvcReq->TrafficDescrParam3 = 0;
createPvcReq->TrafficDescrParam4 = 0;
createPvcReq->TrafficDescrType = atmNoClpTaggingNoScr;
}
else if(createPvcReq->ServiceCategory == CBRService)
{
createPvcReq->TrafficDescrParam2 = createPvcReq->TrafficDescrParam2*(1E7)/createPvcReq->TrafficDescrParam1;
createPvcReq->TrafficDescrParam3 = 0;
createPvcReq->TrafficDescrParam4 = 0;
createPvcReq->TrafficDescrType = atmNoClpNoScrCdvt;
}
else if(createPvcReq->ServiceCategory == rtVBRService)
{
t = createPvcReq->TrafficDescrParam4;
createPvcReq->TrafficDescrParam4 = createPvcReq->TrafficDescrParam2*(1E7)/createPvcReq->TrafficDescrParam1;
createPvcReq->TrafficDescrParam2 = createPvcReq->TrafficDescrParam3;
createPvcReq->TrafficDescrParam3 = t;
createPvcReq->TrafficDescrType = atmClpTaggingScrCdvt;
}
else if(createPvcReq->ServiceCategory == nrtVBRService)
{
t = createPvcReq->TrafficDescrParam4;
createPvcReq->TrafficDescrParam4 = createPvcReq->TrafficDescrParam2*(1E7)/createPvcReq->TrafficDescrParam1;
createPvcReq->TrafficDescrParam2 = createPvcReq->TrafficDescrParam3;
createPvcReq->TrafficDescrParam3 = t;
createPvcReq->TrafficDescrType = atmClpTaggingScrCdvt;
}
#endif
createPvcReq->Connect_struct = VAL_Connectstruct_Type0;
if (LspCBVar->nodeType == MPLS_NODE_INGRESS)
{
createPvcReq->L_uniflag = UNI_FLAG;
createPvcReq->H_uniflag = NNI_FLAG;
/* add by fengjun for guangzhou */
createPvcReq->flag = 1;
}
else if (LspCBVar->nodeType == MPLS_NODE_EGRESS)
{
createPvcReq->L_uniflag = NNI_FLAG;
createPvcReq->H_uniflag = UNI_FLAG;
createPvcReq->flag = 1;
}
else
{
createPvcReq->L_uniflag = NNI_FLAG;
createPvcReq->H_uniflag = NNI_FLAG;
/* add by fengjun for guangzhou */
createPvcReq->flag = 1;
}
return LDP_TRUE;
}
/* 同C010通信有问题,资源定时器超时 */
short ldp_crpvc_timeout(mplsLdpLspCB *LspCBVar)
{
char *pEntry = MPLS_NULL;
mplsLdpCrLsp *pCrEntry = MPLS_NULL;
mpls_sb_list * sb_list;
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"================ ldp create pvc timeout =============\n");
MPLS_ERR_LOG("================ ldp create pvc timeout =============index is %x",LspCBVar->lspIndex);
LspCBVar->timerid = 0;
/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$2004-5-17 fengjunjinan*/
/*if waitflag is 1,the label has been release before*/
if((LspCBVar->waitflag & 0x1) )
{
return LDP_FALSE;
printf("ldp_crpvc_timeout has undel lspcb!!!!!!!!!!!!");
}
/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$2004-5-17 fengjunjinan*/
if((LspCBVar->status == RESPONSE_AWAITED)&&
(LspCBVar->subStatus == CREATE_PVC_REQ_AWAITED))
{
/* 如果请求仍在缓冲中,则释放消息缓冲中的请求 */
/* delete_lqe_xcque(LspCBVar->lsp_loc);*/
delete_lspindex_xcque(LspCBVar->lspIndex);
/* 用LspCBVar查找Entry */
pEntry = lspcb_search_entry(LspCBVar);
if(pEntry == MPLS_NULL)
return LDP_FALSE;
/*处理与建立失败相同*/
if (LspCBVar->nodeType != MPLS_NODE_INGRESS)
{
/* 向上游发送notify消息*/
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"==== pvc timeout UpLspCbFsm,CREATE PVC REQ IS FAIL ====\n");
printf("==== UpLspCbFsm,CREATE PVC REQ IS FAIL ====");
LspCBVar -> errorcode = CRPVCTIMEOUT;
SndNotMsg(LspCBVar->upSessionIndex, RESRCUNAVA,LspCBVar->upMsgid,\
MPLS_LBLMAP_MSGTYPE);
}
if(LspCBVar->nodeType != MPLS_NODE_EGRESS)/*向下游发送release消息!!!! */
{
if((LspCBVar->lspType) == LDP_HOP_LSP)
wait_lsplblmsg_append(LspCBVar,pEntry,MPLS_NULL,MPLS_NULL,MPLS_LBLREL_MSGTYPE);
else
CR_wait_lsplblmsg_append(LspCBVar,pEntry,MPLS_NULL,MPLS_NULL,MPLS_LBLREL_MSGTYPE);
}
/*释放本地分配的标记 */
if(ldp_free_atm_label(pEntry,LspCBVar,FLAG_UPDOWN)==LDP_FALSE)
{
MPLS_ASSERT(0);
LspCBVar -> errorcode = CRPVCTIMEOUT_FREELBLFAIL;
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"ldp_crpvc_timeout,ldp_free_atm_label fail\n");
MPLS_ERR_LOG("ldp_free_atm_label fail");
}
/* 删除控制块 */
if((LspCBVar->lspType == LDP_CR_LSP)&&(LspCBVar->nodeType == MPLS_NODE_INGRESS))
{
pCrEntry = (mplsLdpCrLsp *)pEntry;
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_CR,"PVC timeout return fec response RESRCUNAVA\n");
MPLS_ERR_LOG("PVC timeout return fec response RESRCUNAVA");
sendToFecCrlsp(pCrEntry,RESPONSE_TYPE,RESRCUNAVA);
}
/* if ingress and hop,don't delete lspcb, hyh 2002-11-15 */
if((LspCBVar->lspType == LDP_HOP_LSP)&&(LspCBVar->nodeType == MPLS_NODE_INGRESS))
{
/* pvc create fail, delete from UP SB list */
sb_list = MPLS_NULL;
MPLS_SB_SEARCH(LspCBVar->upAtmLabel.module,\
LspCBVar->upAtmLabel.port,sb_list);
if(!sb_list)
{
MPLS_REMOVE_FROM_SESSION_UP_LSP_LIST(g_up_lsp_list,LspCBVar);
}
else
{
MPLS_REMOVE_FROM_SESSION_UP_LSP_LIST_A(sb_list->lsp_up_cb_list,LspCBVar);
if(!(sb_list->lsp_down_cb_list.first ||sb_list->lsp_up_cb_list.first))
MPLS_SB_DELETE(LspCBVar->upAtmLabel.module,\
LspCBVar->upAtmLabel.port,sb_list)
}
LspCBVar->resend = 1;
MPLS_ERR_LOG("========== set timer ldp_req_resend =========");
MPLS_SET_TIMER(REQ_DELAY,(void *)ldp_req_resend,LspCBVar,ldptime_q,LspCBVar->timerid);
/*2003-12-25 lixia add for dele p_s_f*/
p_s_f = MPLS_NULL;
for(p_s_f = aggr_body.first; p_s_f; p_s_f = p_s_f->next)
{
if( (p_s_f->upAtmLabel.module == LspCBVar->upAtmLabel.module) && \
(p_s_f->upAtmLabel.port == LspCBVar->upAtmLabel.port) && \
(p_s_f->downAtmLabel.module == LspCBVar->downAtmLabel.module) && \
(p_s_f->downAtmLabel.port == LspCBVar->downAtmLabel.port) && \
(p_s_f->downAtmLabel.vpi == LspCBVar->downAtmLabel.vpi) && \
(p_s_f->downAtmLabel.vci == LspCBVar->downAtmLabel.vci) && \
(p_s_f->nodeType == LspCBVar->nodeType))
/* (p_s_f->attr.hopcount == LspCBVar->pAttr.hopcount) */
break;
}
if(p_s_f)
aggr_delete(p_s_f);
}
else /* 删除控制块 */
{
if(LspCBVar->waitflag & 0xe0)
LspCBVar->waitflag |= 0x1;
else ldp_del_lspCB(pEntry,LspCBVar);
}
return LDP_TRUE;
}
else
return LDP_FALSE;
}
/* 重发缓冲定时器到时,再次向缓冲发送建立PVC请求 */
short ldp_crpvc_resend(mplsLdpLspCB *LspCBVar)
{
char *pEntry = MPLS_NULL;
int rtcode;
LspCBVar->timerid = 0;
if((LspCBVar->status == RESPONSE_AWAITED)&&
(LspCBVar->subStatus == CREATE_PVC_REQ_AWAITED))
{
/* 用LspCBVar查找Entry */
pEntry = lspcb_search_entry(LspCBVar);
/*重发建立请求*/
if(pEntry){
if(LspCBVar->lspType == LDP_HOP_LSP)
return wait_xc_append(LspCBVar,pEntry,0x1);
else
return CR_wait_xc_append(LspCBVar,pEntry,0x1);
}
else
return LDP_FALSE;
}
else
return LDP_FALSE;
}
/*预留资源的相关函数*/
short FuncResvBW(mplsLdpLspCB *LspCBVar, char *pEntry)
{
mplsLdpFecEntry *pFecEntry = MPLS_NULL;
mplsLdpCrLsp *pCrEntry = MPLS_NULL;
STRUC_MPLS_AD_BANDWIDTH_REQ bandwithReq;
unsigned short localLspId;
unsigned long LspCBNo;
mplsLdpTrafficTlv_t Traffic;
short rtcode;
lblmsgTlvExists tlvexists;
MPLS_MEMSET(&Traffic,0,sizeof(mplsLdpTrafficTlv_t));
if(LspCBVar->lspType == LDP_HOP_LSP)
{
pFecEntry = (mplsLdpFecEntry *)pEntry;
localLspId = pFecEntry->fec_key.mplsLdpFecAddrLen;
LspCBNo = pFecEntry->fec_key.mplsFecAddr;
Traffic.freq = UNSPECIFIED;
Traffic.pdr.pdr = DEFAULT_PDR;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -