init ems server code
This commit is contained in:
241
plat/sccp/src/sccp_mib.c
Normal file
241
plat/sccp/src/sccp_mib.c
Normal file
@@ -0,0 +1,241 @@
|
||||
|
||||
/*********************************************************/
|
||||
/*Title: sccpmib.c */
|
||||
/*Descr: SCCP Management information Base Interface */
|
||||
/*Author: Liang Hanxi */
|
||||
/*Create: 2002-4-16 */
|
||||
/*Modify: */
|
||||
|
||||
/*********************************************************/
|
||||
|
||||
#include "./include/sccp.h"
|
||||
|
||||
/*===========import================*/
|
||||
extern int BuildRouteIndex ( ); //gtt.c
|
||||
extern int sccp_loadparam ( ); //sccpparam.c
|
||||
extern void sccp_saveparam ( );
|
||||
extern int sccp_setparam ( DWORD * oid, BYTE * pdata, WORD datalen );
|
||||
extern int sccp_getparam ( DWORD * oid, BYTE * pdata, BYTE * vartype );
|
||||
extern void sccp_reset ( ); //sccp.c
|
||||
extern void DWORD2BYTE ( BYTE * pdword, BYTE * pbyte, int len ); //sccpfun.c
|
||||
extern void spLogDebug ( DWORD mask, const char *fmt, ... );
|
||||
/* by simon at 23/9/26 */
|
||||
extern SCCP_CSTA SccpCsta[96];
|
||||
extern DWORD SccpCstaInd;
|
||||
/* by simon at 23/9/26*/
|
||||
extern int RelatedSSNNum;
|
||||
extern RL_SSN RelatedSSN[SCCP_RLSSN_NUM];
|
||||
extern SCOC_BUF ScocBuf;
|
||||
extern SCCP_ROUTE RouteList[SCCP_ROUTE_NUM];
|
||||
extern LOCAL_SSN LocalSSN[256];
|
||||
extern SCCP_ROUTE RouteList[SCCP_ROUTE_NUM];
|
||||
extern SCCP_OPT SCCP_Param;
|
||||
|
||||
/*===========export================*/
|
||||
void sccpmib_init ( );
|
||||
void sccp_sethb ( );
|
||||
|
||||
/*===========private===============*/
|
||||
int sccp_setmib ( BYTE oidlen, DWORD * oid, BYTE * pdata, WORD datalen );
|
||||
int sccp_getmib ( BYTE oidlen, DWORD * oid, BYTE * pdata, BYTE * vartype );
|
||||
void sccp_trapcallback ( BYTE oidlen, DWORD * oid, BYTE * pdata, WORD len, snmp_addr * addr );
|
||||
|
||||
void sccpmib_init ( )
|
||||
{
|
||||
DWORD oid[20] = SCCP_OID;
|
||||
|
||||
inquire_setmsg ( SCCP_OIDLEN, oid, sccp_setmib );
|
||||
inquire_getmsg ( SCCP_OIDLEN, oid, sccp_getmib );
|
||||
inquire_trapmsg ( sccp_trapcallback );
|
||||
}
|
||||
|
||||
void sccp_sethb ( )
|
||||
{
|
||||
set_status ( 2, 4 + SCCP_Param.RegNum, SCCP_Param.version );
|
||||
set_led ( 4, 9 );
|
||||
}
|
||||
|
||||
/************************************************/
|
||||
//MIB Interface=================================>
|
||||
|
||||
/************************************************/
|
||||
int sccp_setmib ( BYTE oidlen, DWORD * oid, BYTE * pdata, WORD datalen )
|
||||
{
|
||||
switch ( oid[SCCP_OIDLEN] )
|
||||
{
|
||||
case 1: //CSTA, read only
|
||||
return -1;
|
||||
case 2: //Paramter
|
||||
return sccp_setparam ( &oid[SCCP_OIDLEN + 1], pdata, datalen );
|
||||
case 3: //Status
|
||||
switch ( oid[SCCP_OIDLEN + 1] )
|
||||
{
|
||||
case 1: //version, read only
|
||||
return -1;
|
||||
case 2: //command
|
||||
switch ( pdata[0] )
|
||||
{
|
||||
case 0: //reset
|
||||
spLogDebug ( SCCPDB_SNMP, "Reset SCCP..." );
|
||||
sccp_reset ( );
|
||||
break;
|
||||
case 1: //load
|
||||
return -1;
|
||||
case 2: //save
|
||||
spLogDebug ( SCCPDB_SNMP, "Save Parameter..." );
|
||||
sccp_saveparam ( );
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
case 3: //status, read only
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int sccp_getmib ( BYTE oidlen, DWORD * oid, BYTE * pdata, BYTE * vartype )
|
||||
{
|
||||
DWORD instance;
|
||||
SCCP_CSTA *pcsta;
|
||||
|
||||
spLogDebug ( SCCPDB_SNMP, "get sccp mib..." );
|
||||
switch ( oid[SCCP_OIDLEN] )
|
||||
{
|
||||
case 1: //CSTA
|
||||
instance = oid[SCCP_OIDLEN + 1];
|
||||
if( instance == SccpCstaInd || instance > 95 )
|
||||
{
|
||||
*vartype = NosuchInstance;
|
||||
spLogDebug ( SCCPDB_SNMP, "csta message not ready. instance=%d", instance );
|
||||
return 0;
|
||||
}
|
||||
pcsta = &SccpCsta[instance];
|
||||
if( pcsta->timestamp == 0 )
|
||||
{
|
||||
spLogDebug ( SCCPDB_SNMP, "csta message is expired" );
|
||||
*vartype = 5;
|
||||
return 0;
|
||||
}
|
||||
*vartype = 4;
|
||||
spLogDebug ( SCCPDB_SNMP, "Respond csta message" );
|
||||
DWORD2BYTE ( ( BYTE * ) & pcsta->timestamp, pdata, sizeof ( SCCP_CSTA ) );
|
||||
return sizeof ( SCCP_CSTA );
|
||||
case 2: //Config
|
||||
return sccp_getparam ( &oid[SCCP_OIDLEN + 1], pdata, vartype );
|
||||
case 3: //Status
|
||||
switch ( oid[SCCP_OIDLEN + 1] )
|
||||
{
|
||||
case 1: //version
|
||||
spLogDebug ( SCCPDB_SNMP, "Get SCCP Version" );
|
||||
memcpy ( pdata, SCCP_Param.version, 3 );
|
||||
*vartype = 4;
|
||||
return 3;
|
||||
case 2: //command, write only
|
||||
return -1;
|
||||
case 3: //status
|
||||
pdata[0] = SCCP_Param.status;
|
||||
*vartype = 2;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
//#define OMC_HB_OID {1,3,6,1,4,1,1373,1,4,1,1}
|
||||
#define OMC_HB_OID {1,3,6,1,4,1,1373,2,4,1}
|
||||
#define OMC_HB_OIDLEN 10
|
||||
int AddToIpList ( DWORD ip, BYTE ssn );
|
||||
|
||||
void sccp_OMCIP_detect ( DWORD ip )
|
||||
{
|
||||
int i;
|
||||
BYTE index = 0;
|
||||
|
||||
for ( i = 0; i <= 1; i++ )
|
||||
{
|
||||
if( SCCP_Param.OMCIP[i] == ip )
|
||||
return;
|
||||
else if( SCCP_Param.OMCIP[i] == 0 )
|
||||
index = i;
|
||||
}
|
||||
SCCP_Param.OMCIP[index] = ip;
|
||||
AddToIpList ( ip, 4 );
|
||||
}
|
||||
|
||||
extern ull SCCPSerialNumber;
|
||||
|
||||
void sccp_trapcallback ( BYTE oidlen, DWORD * oid, BYTE * pdata, WORD len, snmp_addr * addr )
|
||||
{
|
||||
DWORD ObjID[20] = FLATFORM_HB_OID;
|
||||
BYTE ssn;
|
||||
short infolen, i, pos = 2; //component_id=0:iptrans
|
||||
heartbeat_msg *phbmsg = ( heartbeat_msg * ) pdata;
|
||||
BYTE *pstatus = phbmsg->info;
|
||||
DWORD OMCHLObjID[20] = OMC_HB_OID;
|
||||
BYTE newHeartbeat = 0;
|
||||
|
||||
if( memcmp ( &oid[7], &OMCHLObjID[7], ( OMC_HB_OIDLEN - 7 ) * 4 ) == 0 ) //omc heartbeat
|
||||
{ //automatic add omc ip into ip list,
|
||||
//if receive omc heartbeat and the omc serial number is equial to the local serial number,
|
||||
//then the platform will send heartbeat if received omc heartbeat
|
||||
if( ( SCCPSerialNumber == 0 ) || //support old version, do not have serial number
|
||||
( Bcd2Ull ( &pdata[39], SCCP_SERNUM_LEN ) == SCCPSerialNumber ) )
|
||||
sccp_OMCIP_detect ( addr->remote_ip );
|
||||
}
|
||||
|
||||
if( memcmp ( &oid[9], &ObjID[9], ( FLATFORM_HB_OIDLEN - 9 ) * 4 ) != 0 || addr->remote_ip == SCCP_Param.ip )
|
||||
return;
|
||||
|
||||
if( sizeof ( struct heartbeat_msg ) > ( INFO_LEN + 18 ) )
|
||||
newHeartbeat = 1;
|
||||
|
||||
if( !newHeartbeat )
|
||||
{ //old version heartbeat, length and component_id are one octet
|
||||
pos = 1;
|
||||
pos += pstatus[pos] + 1; //length of iptrans status
|
||||
pos++; //component_id=1:mtp3
|
||||
pos += pstatus[pos] + 1; //length of mtp3
|
||||
pos++; //component_id=2:sccp
|
||||
}
|
||||
else
|
||||
{ //new version heartbeat, length and component_id are 2 octets
|
||||
pos++; //length is 2 octets
|
||||
pos += pstatus[pos] + 1; //length of iptrans status
|
||||
pos++; //component_id=1:mtp3
|
||||
pos++; //component_id is 2 octets
|
||||
|
||||
pos++; //length is 2 octets
|
||||
pos += pstatus[pos] + 1; //length of mtp3
|
||||
|
||||
pos++; //component_id=2:sccp
|
||||
pos++; //component_id is 2 octets
|
||||
|
||||
pos++; //sccp length 1
|
||||
}
|
||||
infolen = pstatus[pos++];
|
||||
|
||||
if( infolen <= 4 || infolen > 32 )
|
||||
return;
|
||||
|
||||
for ( i = pos + 4; i < pos + infolen; i++ )
|
||||
{
|
||||
ssn = pstatus[i];
|
||||
// printf("beat recieve,ssn=%d\n",ssn);
|
||||
if( ssn <= 1 )
|
||||
continue;
|
||||
if( addr->remote_ip == LocalSSN[ssn].ip[0] )
|
||||
{
|
||||
LocalSSN[ssn].status[0] = ST_Enable;
|
||||
LocalSSN[ssn].timeout[0] = T_hbrecv;
|
||||
}
|
||||
else if( addr->remote_ip == LocalSSN[ssn].ip[1] )
|
||||
{
|
||||
LocalSSN[ssn].status[1] = ST_Enable;
|
||||
LocalSSN[ssn].timeout[1] = T_hbrecv;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user