📄 ldpmain.c
字号:
fecMsg->Fec.fecElArray[0].addressEl.preLen);
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"==ldpmain FEC INQUIRE_TYPE addr %x,prelen %d,not exist\n", \
fecMsg->Fec.fecElArray[0].addressEl.address, \
fecMsg->Fec.fecElArray[0].addressEl.preLen);
}
}
return;
}
/********************************************************************/
/* */
/* 4.LDP进程主处理函数 */
/* */
/********************************************************************/
void testRouet();
/********************************************************************/
/* Product Name: MPLS PACK
/* Module Name: LDP
/* File Name: LdpProcess
/* Func Name: seg_fec_msg
/* Author Name: weng.qing shi.zhaohui sun.baoping hu.yonghong
/* Creat Date: 2001/12/20
/* Version : 1.0
/* Function : LDP main process
/* history:
/* add response of LDP PROCESS To FEC process, sbp 2002-1-3
/********************************************************************/
void LdpProcess(void *ldpIn, void *ldpOut, void *Data)
{
/* 定义局部变量 */
TimerEventStruc * getTimer;
LDPMSG_COMM * pudptcpMsg;
FecMsg * fecMsg;
unsigned long eventType;
TCP_CONNECT_MSG * tcpConInd;
PID sendPid;
unsigned char flag,MsgNo=0;
mplsOAMLdpMessage_t *oamldpmess;
short oammsgtype;
ldpFecAck_t fecAck;
unsigned long tempid;
PID selfpid;
switch(STATE())
{
#if 1
case LdpInitStatus:
switch(EVENT())
{
case MPLS_PowerOnEvent:
InitWholeVariable();
initldpdynmib( );
SELF(&selfLdpPid);
GET_PID("FEC",&fecPid);
fecPid.module = selfLdpPid.module;
GET_PID("FEC",&mlsmanagePid);
GET_PID("A041MSGFUNC",&udptcpPid);
GET_PID("C010PROCESS",&pvcPid);
GET_PID("Snark_Task",&sbForwardPid);
sbForwardPid.module = selfLdpPid.module;
oamldpmess1.msgtype = MPLS_MIB_LDP_LSR_ATTR;
oamldpmess1.mplsLdpOAMflag = 1;
MPLS_PSEND(MPLS_LDP_OAM_MESSAGE, &oamldpmess1,sizeof(mplsLdpOAMMessage)+sizeof(unsigned char),mlsmanagePid);
TimerID_oamldp = EXTRA_SET_TIMER(TIMER7_LDPPERIOD,MPLS_TIMER7,MPLS_MIB_LDP_LSR_ATTR);
break;
case MPLS_LDP_OAM_MESSAGE:
EXTRA_KILL_TIMER(TimerID_oamldp);
oamldpmess = (mplsOAMLdpMessage_t *)ldpIn;
/* begin response and print sbp 2002-1-3 */
SENDER(&sendPid);
printf("==== Module %d send msg to Module %d.====",sendPid.module,selfLdpPid.module);
oamldpmess->msgtype = oamldpmess->msgtype;
oamldpmess->mplsLdpOAMflag = 2;
MPLS_PSEND(MPLS_LDP_OAM_MESSAGE,oamldpmess,sizeof(oamldpmess->msgtype)+sizeof(unsigned char),mlsmanagePid);
/* end response and print sbp 2002-1-3 */
func_GetInitCfg(oamldpmess);
if(oamldpmess->msgtype == MPLS_MIB_LDP_ENTITY)
InitHello();
if(oamldpmess->msgtype == MPLS_MIB_LDP_CONFIG)
{
//EXTRA_SET_EVERY_TIMER(TIMER1_PERIOD,MPLS_TIMER1,0);
EXTRA_SET_TIMER(TIMER1_PERIOD,MPLS_TIMER1,0);
MPLS_SET_TIMER(XC_WAIT_TIME,(void *)Func_CR_Xc_wait,0,ldptime_q,tempid);
MPLS_SET_TIMER(FECLBL_WAIT_TIME,(void *)Func_CR_FecLable_wait,0,ldptime_q,tempid);
printf("set cr link timer\n");
MPLS_SET_TIMER(LBLMSG_WAIT_TIME,(void *)Func_CR_Lblmsg_wait,0,ldptime_q,tempid);
MPLS_SET_TIMER(XC_WAIT_TIME,(void *)Func_Xc_wait,0,ldptime_q,tempid);
MPLS_SET_TIMER(FECLBL_WAIT_TIME,(void *)Func_FecLable_wait,0,ldptime_q,tempid);
MPLS_SET_TIMER(LBLMSG_WAIT_TIME,(void *)Func_Lblmsg_wait,0,ldptime_q,tempid);
NEXT_STATE(LdpWorkStatus);
}
break;
case MPLS_Timer7Event: /* ldp to oam get config data timer */
getTimer = (TimerEventStruc *)ldpIn;
func_protimer7(getTimer);
break;
default: break;
}
break;
#endif
#if 0
/* 不起FEC的初始化 */
case LdpInitStatus:
switch(EVENT())
{
case MPLS_PowerOnEvent:
InitWholeVariable();
initldpdynmib( );
InitLdpData();
SELF(&selfLdpPid);
GET_PID("FEC",&fecPid);
GET_PID("FEC",&mlsmanagePid);
GET_PID("A041MSGFUNC",&udptcpPid);
GET_PID("C010PROCESS",&pvcPid);
GET_PID("Snark_Task",&sbForwardPid);
sbForwardPid.module = selfLdpPid.module;
InitHello();
testRouet();
EXTRA_SET_EVERY_TIMER(TIMER1_PERIOD,MPLS_TIMER1,0);
NEXT_STATE(LdpWorkStatus);
break;
default:
break;
}
break;
#endif
case LdpWorkStatus:
eventType = EVENT();
switch(eventType)
{
case MPLS_POLICY_ENABLE:
ldpPolicyReset();
break;
case MPLS_LDP_OAM_MESSAGE:
oamldpmess = (mplsOAMLdpMessage_t *)ldpIn;
oammsgtype = processLdpOnline(oamldpmess);
oamldpmess->msgtype = oammsgtype;
oamldpmess->mplsLdpOAMflag = 2;
MPLS_PSEND(MPLS_LDP_OAM_MESSAGE,oamldpmess,sizeof(oamldpmess->msgtype)+sizeof(unsigned char),mlsmanagePid);
#ifdef DEBUG_LDP
#ifdef __BGS10_MPLS_DEBUG
printf("==== Module %d Receive config ldp data oamtype : %d !!! ====",
selfLdpPid.module,oammsgtype);
#endif
#endif
break;
case MPLS_Timer1Event: /* 周期为100毫秒的轮询定时器 */
EXTRA_SET_TIMER(TIMER1_PERIOD,MPLS_TIMER1,0);
MPLS_AGE_TIMER(MPLS_AGE_ADD,ldptime_q);
break;
case MSG_RECV_IND: /* 收到其它交换机发来的PDU,必然触发LDP协议的处理进程 */
pudptcpMsg = (LDPMSG_COMM *)ldpIn;
ProcUdpTcpMsg(pudptcpMsg);
break;
case TCP_CONNECT_IND:
tcpConInd = (TCP_CONNECT_MSG *)ldpIn;
#ifdef __BGS10_MPLS_DEBUG
printf("========MODULE %d RECEIVE TCP_CONNECT_IND =====",selfLdpPid.module);
printf("==== localAddr %x, peerAddr %x, LocalPort %d, PeerPort %d ====",
tcpConInd->LocalIpaddr,tcpConInd->PeerIpaddr,tcpConInd->LocalPort,tcpConInd->PeerPort);
#endif
ProcTcpCon(tcpConInd->PeerIpaddr,tcpConInd->LocalIpaddr,tcpConInd->PeerPort,
tcpConInd->LocalPort,eventType);
break;
case TCP_RELEASE_IND:
tcpConInd = (TCP_CONNECT_MSG *)ldpIn;
#ifdef __BGS10_MPLS_DEBUG
printf("========MODULE %d RECEIVE TCP_RELEASE_IND =====",selfLdpPid.module);
printf("==== localAddr %x, peerAddr %x, LocalPort %d, PeerPort %d ====",
tcpConInd->LocalIpaddr,tcpConInd->PeerIpaddr,tcpConInd->LocalPort,tcpConInd->PeerPort);
#endif
ProcTcpRel(tcpConInd->PeerIpaddr,tcpConInd->LocalIpaddr,tcpConInd->PeerPort,
tcpConInd->LocalPort,eventType);
break;
case RCV_RELEASE_MSG:
tcpConInd = (TCP_CONNECT_MSG *)ldpIn;
#ifdef __BGS10_MPLS_DEBUG
printf("========MODULE %d RECEIVE RCV_RELEASE_MSG =====",selfLdpPid.module);
printf("==== localAddr %x, peerAddr %x, LocalPort %d, PeerPort %d ====",
tcpConInd->LocalIpaddr,tcpConInd->PeerIpaddr,tcpConInd->LocalPort,tcpConInd->PeerPort);
#endif
ProcTcpRel(tcpConInd->PeerIpaddr,tcpConInd->LocalIpaddr,tcpConInd->PeerPort,
tcpConInd->LocalPort,eventType);
break;
case Forwarding_Table_Change:
fecAck.index = ((ROUTEMESSAGE_UPDATE *)ldpIn)->MsgNo;
fecAck.index = (fecAck.index<<16)|(((ROUTEMESSAGE_UPDATE *)ldpIn)->changenumber);
ASEND(MPLS_LDP_FEC_ACK,&fecAck,sizeof(ldpFecAck_t),fecPid);
ProcessRoute(ldpIn);
break;
/* 4.1 路由表的初始建立或者动态的更新都内部地触发LDP协议的处理进程 */
case MPLS_FEC_SETUP:
fecMsg = (FecMsg *)ldpIn;
switch (fecMsg->OperateType)
{
case NEW_TYPE:
case UPDATE_TYPE:
case DELETE_PVC_TYPE:
case LBLABORT_TYPE:
fecAck.index = ((ROUTEMESSAGE_UPDATE *)ldpIn)->MsgNo;
ASEND(MPLS_LDP_FEC_ACK,&fecAck,sizeof(ldpFecAck_t),fecPid);
FecSetup(fecMsg);
break;
#if 0
case ELEM_CHANGE_TYPE:
FecElemChange(fecMsg);
break;
#endif
case INQUIRE_TYPE:
// ProcFecInquire(ldpIn);
break;
}
break;
/* C回响应处理 */
case AD_MPLS_BANDWIDTH_ACK:
mpls_xc_req_confirm(ldpIn,BANDWIDTH_ACK);
break;
case AD_MPLS_RLSBW_ACK:
mpls_xc_req_confirm(ldpIn,RLSBW_ACK);
break;
case AD_MPLS_CREATEPVC_ACK:
mpls_xc_req_confirm(ldpIn,CRPVC_ACK);
break;
case AD_MPLS_RLSPVC_ACK:
mpls_xc_req_confirm(ldpIn,RLSPVC_ACK);
break;
/* 4.2 处理队列响应消息 */
case MPLS_LBL_QUE_CONF:
mpls_feclabel_req_confirm(ldpIn);
break;
case MPLS_FEC_QUE_CONF:
mpls_fec_req_confirm(ldpIn);
break;
case MPLS_LBLMSG_QUE_CONF:
mpls_lblmsg_req_confirm(ldpIn);
break;
default: break;
} /* end of switch(event) of WORK_STATE */
break;
default: break;
} /* end of switch(state) */
}
#if 0
void testRouet()
{
int i;
MPLS_MEMSET(&g_rte,0,sizeof(ROUTEMESSAGE_UPDATE));
i = 0;
g_rte.IpForwardingTab[i].Type = ROUTE_ADD;
g_rte.IpForwardingTab[i].rt_type = MPLS_ROUTE_OWN;
g_rte.IpForwardingTab[i].Dest = 0x01010101;
g_rte.IpForwardingTab[i].NetMask = 0xffffffff;
g_rte.IpForwardingTab[i].NextHop = 0x00000000;
g_rte.IpForwardingTab[i].IfIndex = 0x01;
g_rte.changenumber++;
i++;
g_rte.IpForwardingTab[i].Type = ROUTE_ADD;
g_rte.IpForwardingTab[i].rt_type = MPLS_ROUTE_OWN;
g_rte.IpForwardingTab[i].Dest = 0x96000000;
g_rte.IpForwardingTab[i].NetMask = 0xff000000;
g_rte.IpForwardingTab[i].NextHop = 0x00000000;
g_rte.IpForwardingTab[i].IfIndex = 0x01;
g_rte.changenumber++;
i++;
g_rte.IpForwardingTab[i].Type = ROUTE_ADD;
g_rte.IpForwardingTab[i].rt_type = MPLS_ROUTE_OWN;
g_rte.IpForwardingTab[i].Dest = 0x97000000;
g_rte.IpForwardingTab[i].NetMask = 0xff000000;
g_rte.IpForwardingTab[i].NextHop = 0x00000000;
g_rte.IpForwardingTab[i].IfIndex = 0x01;
g_rte.changenumber++;
i++;
g_rte.IpForwardingTab[i].Type = ROUTE_ADD;
g_rte.IpForwardingTab[i].rt_type = MPLS_ROUTE_OWN;
g_rte.IpForwardingTab[i].Dest = 0x98000000;
g_rte.IpForwardingTab[i].NetMask = 0xff000000;
g_rte.IpForwardingTab[i].NextHop = 0x00000000;
g_rte.IpForwardingTab[i].IfIndex = 0x01;
g_rte.changenumber++;
i++;
g_rte.IpForwardingTab[i].Type = ROUTE_ADD;
g_rte.IpForwardingTab[i].rt_type = MPLS_ROUTE_DYN;
g_rte.IpForwardingTab[i].Dest = 0x99000000;
g_rte.IpForwardingTab[i].NetMask = 0xff000000;
g_rte.IpForwardingTab[i].NextHop = 0x00000000;
g_rte.IpForwardingTab[i].IfIndex = 0x600;
g_rte.changenumber++;
i++;
g_rte.IpForwardingTab[i].Type = ROUTE_ADD;
g_rte.IpForwardingTab[i].rt_type = MPLS_ROUTE_DYN;
g_rte.IpForwardingTab[i].Dest = 0x9A000000;
g_rte.IpForwardingTab[i].NetMask = 0xff000000;
g_rte.IpForwardingTab[i].NextHop = 0xD2010104;
g_rte.IpForwardingTab[i].IfIndex = 0x600;
g_rte.changenumber++;
i++;
g_rte.IpForwardingTab[i].Type = ROUTE_ADD;
g_rte.IpForwardingTab[i].rt_type = MPLS_ROUTE_DYN;
g_rte.IpForwardingTab[i].Dest = 0x9B000000;
g_rte.IpForwardingTab[i].NetMask = 0xff000000;
g_rte.IpForwardingTab[i].NextHop = 0xD2010104;
g_rte.IpForwardingTab[i].IfIndex = 0x600;
g_rte.changenumber++;
i++;
g_rte.IpForwardingTab[i].Type = ROUTE_ADD;
g_rte.IpForwardingTab[i].rt_type = MPLS_ROUTE_DYN;
g_rte.IpForwardingTab[i].Dest = 0x9C000000;
g_rte.IpForwardingTab[i].NetMask = 0xff000000;
g_rte.IpForwardingTab[i].NextHop = 0xC8010106;
g_rte.IpForwardingTab[i].IfIndex = 0x200;
g_rte.changenumber++;
i++;
g_rte.IpForwardingTab[i].Type = ROUTE_ADD;
g_rte.IpForwardingTab[i].rt_type = MPLS_ROUTE_DYN;
g_rte.IpForwardingTab[i].Dest = 0x9D000000;
g_rte.IpForwardingTab[i].NetMask = 0xff000000;
g_rte.IpForwardingTab[i].NextHop = 0xC8010106;
g_rte.IpForwardingTab[i].IfIndex = 0x200;
g_rte.changenumber++;
i++;
g_rte.IpForwardingTab[i].Type = ROUTE_ADD;
g_rte.IpForwardingTab[i].rt_type = MPLS_ROUTE_DYN;
g_rte.IpForwardingTab[i].Dest = 0x9E000000;
g_rte.IpForwardingTab[i].NetMask = 0xff000000;
g_rte.IpForwardingTab[i].NextHop = 0xC8010106;
g_rte.IpForwardingTab[i].IfIndex = 0x200;
g_rte.changenumber++;
i++;
ProcessRoute(&g_rte);
return;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -