📄 ldpmib.c
字号:
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 + -