init ems server code

This commit is contained in:
2024-09-27 15:39:34 +08:00
parent 9d4009aaca
commit 9930e4e58f
1551 changed files with 110216 additions and 102864 deletions

99
plat/mtp3_old/Makefile Normal file
View File

@@ -0,0 +1,99 @@
##----------------------------------------------------------##
## ##
## Universal Makefile for module template : V1.6.3 ##
## ##
## Created : Wei Liu 07/04/11 ##
## Revision: [Last]Wei Liu 07/07/07 ##
## ##
##----------------------------------------------------------##
##---------------------------------------------------------------------##
##--------------------------------------
##
## Project correlation(Customer define)
##
##--------------------------------------
## MODULE= [Module Name]
## TYPE = app/plat => Module Type
## DBUG_FLAGS_ADD = [Module Define Gcc Flags for Debug ]
## DBUG_FLAGS_ADD = [Module Define Gcc Flags for Release]
## BUILD = lib/exef => Output file format
## CFG = debug/release => Build Configuration
## SRC_PATH = [Source file path]
## INC_PATH = [Include file path]
## APP_PATH = [App Module path]
## PLT_PATH = [Plat Module path]
## PLT_LIB = [Needed plat lib for Link] => just for test or wxc2main
## APP_LIB = [Needed app lib for Link] => just for test or wxc2main
## LIB_ADD = [Needed Extend lib for Link] => just for test or wxc2main
## PLT_LIB e.g. = haepub fsm mng proto kernel aif mgc mgcp sip rtp \
## 8ecp bicc smpp xapp tcap mtp3 m2ua \
## snmp iptrans debug sccp public
##
## APP_LIB e.g. = msc vlr ssf hlr ae pps mnp smsc vms aas
## LIB_ADD e.g. = -liba3a8 -lm
## OBJ_ADD = [Extend third party object files needed]
## TEST_OBJ_PATH = [module object files Path for test ] => just for test
##---------------------------------------------------------------------##
MODULE = mtp3
TYPE = plat
DBUG_FLAGS_ADD = -DDEBUG -D_INCLUDE_M2UA -D_CDMA_SNMP
RELS_FLAGS_ADD = -D_INCLUDE_M2UA -D_CDMA_SNMP
##Default commonly as below
BUILD = lib
CFG = debug
PLT_LIB =
APP_LIB =
LIB_ADD =
SRC_PATH = ./src
INC_PATH = ./src/include
PLT_PATH = ../../plat
APP_PATH = ../../mss
OBJ_ADD =
TEST_OBJ_PATH =
PREPROC_CMD =
POSTPROC_CMD =
##---------------------------------------------------------------------##
##--------------------------------------
##
## Make configuration(Customer define)
##
##--------------------------------------
## CCFLAG_SWITCH = on/off => gcc flag show on/off
## COVER_NEED = yes/no => PTF cover report needed
## COVER_REPORT_PATH = [path ] => PTF cover report path
CCFLAG_SWITCH = off
COVER_NEED = no
COVER_REPORT_PATH = ./output
MAKE_INCLUDE = $(HOME)/ems.git/include
##---------------------------------------------------------------------##
##--------------------------------------
##
## include makefile.rules (Do not change)
##
##--------------------------------------
include $(MAKE_INCLUDE)/Makefile.rules

View File

@@ -0,0 +1,171 @@
#include "../../../iptrans/src/include/iptrans.h"
#ifdef _INCLUDE_M2UA
#include "../../../m2ua/src/include/m2ua.h"
#endif
#ifndef _MTP3_HEAD_FILE
#define _MTP3_HEAD_FILE
#define _up_message up_message
#define MAX_SS7_MSG_LEN 272
typedef struct up_message{
long dest_ip;
long dpc;
long opc;
BYTE cic[2];
BYTE link;
BYTE sio;
// BYTE len;/* len not include itself */
WORD len;//long message
BYTE msgList[MAX_SS7_MSG_LEN];
}up_message;
typedef struct up_message_2{
long dest_ip;
long dpc;
long opc;
BYTE cic[4];
BYTE link;
BYTE sio; // 13 for BICC
// BYTE len;/* len not include itself */
WORD len;//long message
BYTE msgList[MAX_SS7_MSG_LEN];
}up_message_2;
typedef struct up_buffer /* user part buffer. user part:telephone user part,
isdn user part, and sccp part */
{
BYTE RSub; /* subscript of array msgList for reader */
BYTE WSub; /* subscript of array msgList for writer */
up_message msgNum[256];/* this buffer can storge up to 256
messages */
}up_buffer;
typedef struct up_buffer_2 /* user part buffer. user part:telephone user part,
isdn user part, and sccp part */
{
BYTE RSub; /* subscript of array msgList for reader */
BYTE WSub; /* subscript of array msgList for writer */
up_message_2 msgNum[256];/* this buffer can storge up to 256
messages */
}up_buffer_2;
#define _tup_shm tup_shm
typedef struct tup_shm {
up_buffer TM_Buf;
up_buffer MT_Buf;
} tup_shm;
#define _isup_shm isup_shm
typedef struct isup_shm {
up_buffer IM_Buf;
up_buffer MI_Buf;
} isup_shm;
#define _bicc_shm bicc_shm
typedef struct bicc_shm {
up_buffer_2 IM_Buf;
up_buffer_2 MI_Buf;
} bicc_shm;
#define _sccp_shm sccp_shm
typedef struct sccp_shm {
up_buffer SM_Buf;
up_buffer MS_Buf;
} sccp_shm;
typedef struct iprt1
{
BYTE pad[20] __attribute__((packed));
message_list io_msg __attribute__((packed));
}iprt1;
typedef struct mtp_primitive
{
long pc;
BYTE nw_indicator;
BYTE availability;
}mtp_primitive;
typedef struct primitive_to_tup
{
mtp_primitive primitive[16];
BYTE WSub;
BYTE RSub;
}primitive_to_tup;
typedef struct primitive_to_isup
{
mtp_primitive primitive[16];
BYTE WSub;
BYTE RSub;
}primitive_to_isup;
typedef struct primitive_to_bicc
{
mtp_primitive primitive[16];
BYTE WSub;
BYTE RSub;
}primitive_to_bicc;
typedef struct primitive_to_sccp
{
mtp_primitive primitive[16];
BYTE WSub;
BYTE RSub;
}primitive_to_sccp;
typedef struct mtp3_routing_result
{
BYTE tupMsgOutLink[256];
BYTE isupMsgOutLink[256];
BYTE biccMsgOutLink[256];
BYTE sccpMsgOutLink[256];
}mtp3_routing_result;
#define MTP3DB_CMD 0
#define MTP3DB_SNMMSG 1
#define MTP3DB_SCCPMSG 2
#define MTP3DB_TUPMSG 3
#define MTP3DB_ISUPMSG 4
#define MTP3DB_ERROR 5
#define MTP3DB_EVENT 6
#define MTP3DB_ALLLKON 7
#define MTP3DB_PFHB 8// platform heartbeat
#define MTP3DB_APP_APP_MSG 9// msg from app to app
#define MTP3DB_PRIMITIVE_MSG 10// msg from MTP3 to MTP2
#define MTP3DB_BICCMSG 11
void mtp_shm_init(WORD moduleid_systemid);
//moduleid = 8/9/11 vss/mss/aas
//void iptrans_init();
void mtp3_proc();
int tup_to_mtp3(up_message *msgptr);
int isup_to_mtp3(up_message *msgptr);
int bicc_to_mtp3(up_message_2 *msgptr);
int sccp_to_mtp3(up_message *msgptr);
int sccp_redirect(up_message *msgptr);
int bicc_redirect(up_message_2 *msgptr);
int isup_redirect(up_message *msgptr);
int tup_GetMsg(up_message *msgptr);
int isup_GetMsg(up_message *msgptr);
int bicc_GetMsg(up_message_2 *msgptr);
int sccp_GetMsg(up_message *msgptr);
int sccp_get_SPstate(mtp_primitive *ptr);
int isup_get_SPstate(mtp_primitive *ptr);
int bicc_get_SPstate(mtp_primitive *ptr);
int tup_get_SPstate(mtp_primitive *ptr);
BYTE *spc_to_acn(BYTE netID,DWORD spc);
BYTE mtp3_ansiFlag(BYTE netID);
BYTE *check_MTP3LinkType();
BYTE *check_MTP3LinkL2State();
void MTP3_activate(DWORD ip);
void MTP3_deactivate(DWORD ip);
void MTP3_Enable_SubSystem(BYTE SubSystem);
void MTP3_Disable_SubSystem(BYTE SubSystem);
void mtp3_init_serial(char *Serial);
int mtp3_create_opc(BYTE nw, DWORD opc);
int mtp3_delete_opc(BYTE nw, DWORD opc);
int check_m3ua_rc_verify(DWORD rc);
#endif

View File

@@ -0,0 +1,28 @@
#ifndef _MTP3LITE_H
#define _MTP3LITE_H
#include "mtp3lite_pub.h"
typedef struct _mtp3lite_lk
{
int connfd;
int cliSockfd;
WORD remote_port;
WORD local_inactive;
WORD local_reconnect;
WORD remote_inactive;
BYTE remote_inactive_timeouts;
WORD init_guard_timer;
}mtp3lite_lk;
void mtp3lite_init(void);
void mtp3lite_timer(void);
int put_mtp3lite_msg(BYTE *msg_ptr);
#define MTP3LITE_TCP_FAILURE 16
#define MTP3LITE_INACTIVITY_TIMEOUT 17
#define MTP3LITE_MSG_BUF_SIZE_PER_LINK 1024
#endif

View File

@@ -0,0 +1,53 @@
#ifndef _MTP3LITE_PUB__H
#define _MTP3LITE_PUB__H
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <errno.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <memory.h>
#include <netdb.h>
#include <setjmp.h>
#include <unistd.h>
#include <signal.h>
#include <time.h>
#include <syslog.h>
#include <termio.h>
#include <fcntl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/io.h>
#include <sys/poll.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <sys/msg.h>
#include <sys/time.h>
#include <sys/timeb.h>
#include <sys/socket.h>
#include <sys/select.h>
#ifndef _T_BYTE
#define _T_BYTE
typedef unsigned char BYTE;
#endif
#ifndef _T_WORD
#define _T_WORD
typedef unsigned short WORD;
#endif
#ifndef _T_DWORD
#define _T_DWORD
typedef unsigned int DWORD;
#endif
#endif

View File

@@ -0,0 +1,574 @@
#ifndef _T_ULL
#define _T_ULL
typedef unsigned long long ull;
#endif
#define SIGNAL_TFA 0x54
#define SIGNAL_TFP 0x14
#define SIGNAL_TRA 0x17
#define SIGNAL_RST 0x15
#define SIGNAL_COO 0x11
#define SIGNAL_COA 0x21
#define SIGNAL_CBD 0x51
#define SIGNAL_CBA 0x61
#define SIGNAL_ECO 0x12
#define SIGNAL_ECA 0x22
#define SIGNAL_LIN 0x16
#define SIGNAL_LUN 0x26
#define SIGNAL_LIA 0x36
#define SIGNAL_LUA 0x46
#define SIGNAL_LID 0x56
#define SIGNAL_LFU 0x66
#define SIGNAL_LLT 0x76
#define SIGNAL_LRT 0x86
#define SIGNAL_SLTM 0x11
#define SIGNAL_SLTA 0x21
#define MTP3_ISUP_IAM 0x01
#define MTP3_ISUP_ACM 0x06
#define MTP3_ISUP_CPG 0x2c
#define MTP3_ISUP_ANM 0x09
#define MTP3_ISUP_REL 0x0c
#define MTP3_ISUP_RLC 0x10
#define MTP3_ISUP_UBL 0x14
#define MTP3_ISUP_UBA 0x16
#define MTP3_ISUP_GRA 0x19
#define MTP3_TUP_IAM 0x11
#define MTP3_TUP_IAI 0x21
#define MTP3_TUP_SAM 0x31
#define MTP3_TUP_SAO 0x41
#define MTP3_TUP_GSM 0x12
#define MTP3_TUP_COT 0x32
/*#define MTP3_TUP_CCF '0x42',*/
#define MTP3_TUP_GRQ 0x13
#define MTP3_TUP_ACM 0x14
#define MTP3_TUP_SEC 0x15
#define MTP3_TUP_CGC 0x25
#define MTP3_TUP_CFL 0x55
#define MTP3_TUP_SSB 0x65
/*#define MTP3_TUP_SLB 0x1E,
#define MTP3_TUP_STB 0x2E,*/
#define MTP3_TUP_UNN 0x75
#define MTP3_TUP_LOS 0x85
#define MTP3_TUP_SST 0x95
#define MTP3_TUP_ACB 0xa5
#define MTP3_TUP_DPN 0xb5
#define MTP3_TUP_ANU 0x06
#define MTP3_TUP_ANC 0x16
#define MTP3_TUP_ANN 0x26
#define MTP3_TUP_CBK 0x36
#define MTP3_TUP_CLF 0x46
#define MTP3_TUP_CCL 0x76
#define MTP3_TUP_RLG 0x17
#define MTP3_TUP_BLO 0x27
#define MTP3_TUP_BLA 0x37
#define MTP3_TUP_UBL 0x47
#define MTP3_TUP_UBA 0x57
#define MTP3_TUP_ADI 0x45
#define MTP3_SCCP_CR 1
#define MTP3_SCCP_CC 2
#define MTP3_SCCP_CREF 3
#define MTP3_SCCP_RLSD 4
#define MTP3_SCCP_RLC 5
#define MTP3_SCCP_DT1 6
#define MTP3_SCCP_DT2 7
#define MTP3_SCCP_AK 8
#define MTP3_SCCP_UDT 9
#define MTP3_SCCP_UDTS 10
#define MTP3_SCCP_ED 11
#define MTP3_SCCP_EA 12
#define MTP3_SCCP_RSR 13
#define MTP3_SCCP_RSC 14
#define MTP3_SCCP_ERR 15
#define MTP3_SCCP_IT 16
#define MTP3_SCCP_XUDT 17
#define MTP3_SCCP_XUDTS 18
#define MTP3_SCCP_LUDT 19
#define MTP3_SCCP_LUDTS 20
#define BETWEEN_LS 0x00
#define WITHIN_LS 0x01
#define NORMAL_LS 0x00
#define ALTERNATIVE_LS 0x01
#define NO_ROUTE 0x02
/**************************************TCOC INPUT**************************************/
/* TCOC INPUT FROM L2 */
#define TCOC_L2_BSNT 1
#define TCOC_L2_BSNT_CANNOT_RECOVER 2
#define TCOC_L2_RETRIEVED_MSG 3
#define TCOC_L2_RETRIEVAL_CMP 4
#define TCOC_L2_RETRIEVAL_NOT_POSSIBLE 5
/* TCOC INPUT FROM TSRC */
#define TCOC_ALTERATIVE_ROUTE_DT 1
/* TCOC INPUT FROM STM */
#define TCOC_LINK_UNAVAILABLE 1
#define TCOC_LINK_AVAILABLE 2
#define TCOC_TLAC_COO_COMMAND 3
#define TCOC_TLAC_ECO_COMMAND 4
/* TCOC INPUT FROM HMDT */
#define TCOC_HMDT_COA_COMMAND 1
#define TCOC_HMDT_ECA_COMMAND 2
/* TCOC INPUT FROM L2 */
//#define TCOC_L2_RETRIEVED_MSG 1
#define TCOC_L2_RETRIEVE_CMP 254
#define TCOC_L2_RETRIEVE_NOT_POSSIBLE 255
/**************************************TCOC INPUT**************************************/
/**************************************TCBC INPUT**************************************/
#define TCBC_LINK_UNAVAILABLE 1
#define TCBC_LINK_AVAILABLE 2
#define TCBC_HMDT_CBD_COMMAND 3
#define TCBC_HMDT_CBA_COMMAND 4
/* TCBC INPUT FROM TSRC */
#define TCBC_ALTERATIVE_ROUTE_DT 1
/**************************************TCBC INPUT**************************************/
/**************************************TLAC INPUT**************************************/
/* TLAC INPUT FROM HMDT*/
#define TLAC_HMDT_INHIBIT_SIGLINK 1
#define TLAC_HMDT_UINHIBIT_SIGLINK 2
#define TLAC_HMDT_INHIBIT_ACK 3
#define TLAC_HMDT_UNINHIBIT_ACK 4
#define TLAC_HMDT_INHIBIT_DENIED 5
#define TLAC_HMDT_FORCE_UNINHIBIT_SIGLINK 6
#define TLAC_HMDT_CHANGEOVER_ORDER 7
#define TLAC_HMDT_ECHANGEOVER_ORDER 8
#define TLAC_HMDT_LOCAL_INHIBIT_TEST 9
#define TLAC_HMDT_REMOTE_INHIBIT_TEST 10
/* TLAC INPUT FROM MGMT */
#define TLAC_MGMT_INHIBIT_SIGLINK 1
#define TLAC_MGMT_UINHIBIT_SIGLINK 2
/* TLAC INPUT FROM SLM */
#define TLAC_LSAC_SIGLINK_FAILED 1
#define TLAC_LSAC_LINK_IN_SERVICE 2
#define TLAC_LSAC_REMOTE_PROCESSOR_OUTAGE 3
#define TLAC_LSAC_REMOTE_PROCESSOR_RECOVER 4
/* TLAC INPUT FROM STM */
#define TLAC_TCBC_CHANGEBACK_TERMINATED 1
#define TLAC_TCOC_CHANGEOVER_EXECUTED 2
#define TLAC_TCOC_CHANGEOVER_NOT_REQ 3
#define TLAC_LOCAL_INHIBIT_ALLOWED 4
#define TLAC_REMOTE_INHIBIT_ALLOWED 5
#define TLAC_LOCAL_INHIBIT_DENIED 6
#define TLAC_REMOTE_INHIBIT_DENIED 7
#define TLAC_UINHIBIT_SIGLINK_FROM_TSRC 8
#define TLAC_UNINHIBIT_NOT_POSSIBLE 9
#define TLAC_UNINHIBIT_POSSIBLE 10
#define TLAC_ADJACENT_SP_RESTARTING 11
#define TLAC_RESTART_BEGINS 12
#define TLAC_RESTART_ENDS 13
#define TLAC_ADJACENT_SP_RESTART_ENDS 14
/* TLAC INPUT FROM TIMER CONTROL */
#define TLAC_T12_EXPIRED 1
#define TLAC_T13_EXPIRED 2
#define TLAC_T14_EXPIRED 3
#define TLAC_T22_EXPIRED 4
#define TLAC_T23_EXPIRED 5
/**************************************TLAC INPUT**************************************/
/**************************************TSRC INPUT**************************************/
/* TSRC_INPUT_FROM_TCOC */
#define TSRC_TCOC_ALTERNATIVE_ROUTING_DATA_REQUEST 1
#define TSRC_TCOC_ACCESS_DATA_REQ 2
#define TSRC_TCOC_CHANGEOVER_EXECUTED 3
#define TSRC_TCOC_CHANGEOVER_NOT_REQ 4
/* TSRC_INPUT_FROM_TCBC */
#define TSRC_TCBC_ALTERNATIVE_ROUTING_DATA_REQUEST 1
#define TSRC_PROCEDURE_TERMINATED 2
/*TSRC_INPUT_FROM_STM*/
#define TSRC_TFRC_ALTERNATIVE_ROUTING_DATA_REQUEST 1
#define TSRC_TCRC_ALTERNATIVE_ROUTING_DATA_REQUEST 2
#define TSRC_RESTART_BEGINS 3
#define TSRC_RESTART_ENDS 4
#define TSRC_TRAFFIC_RESTART_ALLOWED 5
#define TSRC_SENDING_STATUS_PHASE 6
/*TSRC_INPUT_FROM_SRM*/
#define TSRC_RTAC_ROUTE_AVAILABLE 1
#define TSRC_RTPC_ROUTE_UNAVAILABLE 2
/* TSRC_INPUT_FROM_TLAC */
#define TSRC_TLAC_LINK_UNAVAILABLE 1
#define TSRC_TLAC_LINK_AVAILABLE 2
#define TSRC_TLAC_LOCAL_INHIBIT_REQ 3
#define TSRC_TLAC_REMOTE_INHIBIT_REQ 4
#define TSRC_TLAC_LINK_INHIBITED 5
#define TSRC_TLAC_CANCEL_LINK_INHIBITED 6
#define TSRC_TLAC_UNINHIBIT_REQ 7
/**************************************TSRC INPUT**************************************/
/**************************************TFRC INPUT**************************************/
#define TFRC_SIG_RT_UNAVAILABLE 0
#define TFRC_SIG_RT_AVAILABLE 1
#define TFRC_ALTERNATIVE_RT_DT 2
/**************************************TFRC INPUT**************************************/
/**************************************TCRC INPUT**************************************/
#define TCRC_SIG_RT_AVAILABLE 0
#define TCRC_ALTERNATIVE_RT_DT 1
/**************************************TCRC INPUT**************************************/
/**************************************TPRC INPUT**************************************/
#define TPRC_ADJACENT_SP_RESTARTING 1
#define TPRC_TRA_MSG 2
#define TPRC_RTPC_TFP_SENT 3
/**************************************TPRC INPUT ABOUT dst**************************************/
#define TPRC_LINK_AVAILABLE 1
#define TPRC_LINK_UNAVAILABLE 2
#define TPRC_SP_RESTART_INDICATION 3
#define TPRC_STATUS_SENT 4
/**************************************TPRC INPUT**************************************/
/**************************************RTPC INPUT**************************************/
#define RTPC_MSGREV_FOR_INACCESS_SP 1
#define RTPC_RSRT_SEND_TFP_MSG 2
#define RTPC_TSRC_SEND_TFP_MSG 3
#define RTPC_DEST_INACCESSIBLE 4
#define RTPC_TFP_MSG 5
#define RTPC_CTRL_RERT_TERMINATED 6
#define RTPC_CONTROLLED_RERT 7
#define RTPC_RESTART_BEGINS 8
#define RTPC_RESTART_ENDS 9
/**************************************RTPC INPUT**************************************/
/**************************************RTAC INPUT**************************************/
#define RTAC_TFA_MSG 1
#define RTAC_DEST_ACCESSIBLE 2
#define RTAC_STP_NOLONGER_FOR_DEST 3
#define RTAC_SEND_TFA_MSG 4
#define RTAC_FORCED_RERT 5
#define RTAC_FORCED_RERT_TERMINATED 6
#define RTAC_FORCED_RERT_NOT_REQ 7
#define RTAC_RESTART_BEGINS 8
#define RTAC_RESTART_ENDS 9
/**************************************RTAC INPUT**************************************/
#define RSRT_RTPC_ROUTE_SET_TEST 1
#define RSRT_TSRC_ROUTE_SET_TEST 2
#define RSRT_RTAC_ROUTE_AVAILABLE 3
#define RSRT_IDLE_STATE 0
#define RSRT_WAIT_STATE 1
/**************************************LSAC INPUT**************************************/
/* LSAC INPUT FROM L2*/
#define LSAC_L2_IN_SERVICE 1
#define LSAC_L2_OUT_OF_SERVICE 2
#define LSAC_L2_REMOTE_PROCESSOR_RECOV 3
#define LSAC_L2_REMOTE_PROCESSOR_OUTAGE 4
/* LSAC INPUT FROM SLTC */
#define LSAC_SLTC_SLT_SUCCESSFUL 1
#define LSAC_SLTC_SLT_FAILED 2
/* LSAC INPUT FROM TCOC */
#define LSAC_TCOC_STM_READY 1
#define LSAC_TCOC_STOP_L2 2
/* LSAC INPUT FROM STM */
#define LSAC_TLAC_CHANGEOVER_ORDER_RECEIVED 1
/* LSAC INPUT FROM SLM */
#define LSAC_ACTIVATE_LINK_FROM_LLSC 1
#define LSAC_DEACTIVATE_LINK_FROM_LLSC 2
#define LSAC_EMERGENCY 3
#define LSAC_EMERGENCY_CEASES 4
/* LSAC INPUT FROM MGMT */
#define LSAC_MGMT_ACTIVATE_LINK 1
#define LSAC_MGMT_DEACTIVATE_LINK 0
/**************************************LSAC INPUT**************************************/
#define LLSC_MGMT_ACTIVATE_LINKSET 1
#define LLSC_MGMT_DEACTIVATE_LINKSET 2
#define LLSC_TPRC_RESTART_BEGINS 3
/* MGMT INPUT */
#define MGMT_TLAC_LINK_INHIBITED 1
#define MGMT_TLAC_LINK_UNINHIBITED 2
#define MGMT_UNINHIBIT_NOT_POSSIBLE 3
#define MGMT_INHIBIT_DENIED 4
#define TCOC_IDLE_STATE 0
#define TCOC_WAIT01_STATE 1
#define TCOC_WAIT02_STATE 2
#define TCOC_WAIT05_STATE 3
#define TCOC_WAIT06_STATE 4
#define TCOC_WAIT07_STATE 5
#define TCOC_WAITACK_STATE 6
#define TCOC_RETRIEVING_STATE 7
#define TCOC_SEND_BUFMSG_STATE 8
#define TLAC_UNAVAILABLE_STATE 0
#define TLAC_AVAILABLE_STATE 1
#define TLAC_SP_RESTARTING_STATE 2
#define LSAC_INACTIVE_STATE 0
#define LSAC_RESTORING_STATE 1
#define LSAC_ACTIVE_STATE 2
#define LSAC_WAIT_STATE 3
#define LSAC_FAILED_STATE 4
#define TSRC_IDLE_STATE 0
#define TSRC_WAIT01_STATE 1
#define TSRC_WAIT02_STATE 2
#define TSRC_WAIT03_STATE 3
#define TSRC_WAIT04_STATE 4
#define TSRC_WAIT05_STATE 5
#define TCBC_IDLE_STATE 0
#define TCBC_WAIT_FOR_ROUTING_DATA_STATE 1
#define TCBC_TCTRL_DIVERSION_STATE 2
#define TCBC_FIRST_ATTEMPT_STATE 3
#define TCBC_SECOND_ATTEMPT_STATE 4
#define RTPC_IDLE_STATE 0
#define RTPC_WAIT_STATE 1
#define TPRC_IDLE_STATE 0
#define TPRC_WAIT01_STATE 1
#define TPRC_WAIT02_STATE 2
#define TPRC_WAIT03_STATE 3
#define TPRC_RESTART_ENDS_STATE 4
#define SLTC_IDLE_STATE 0
#define SLTC_FIRST_TRY_STATE 1
#define SLTC_SECOND_TRY_STATE 2
#define SLTC_THIRD_TRY_STATE 3
#define SLTC_RUNNING_STATE 4
#define SLTC_START 1
#define SLTA_MSG 2
#define SLTC_SECOND_TRY 3
#define SLTC_STOP 4
#ifndef IDLE
#define IDLE 0xee
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#define COMMAND_START 1
#define COMMAND_STOP 0
#define TIMER_START 1
#define TIMER_STOP 2
#define SP_ACCESSIBLE 1
#define SP_INACCESSIBLE 0
//#define LS_UNAVAILABLE 2
#define LOCAL_INHIBIT_REQ 0
#define REMOTE_INHIBIT_REQ 1
#define UNAVAILABLE 0
#define AVAILABLE 1
#define INHIBITED 2
#define LOCAL_INHIBIT_REQ 0
#define REMOTE_INHIBIT_REQ 1
#define MTP3_DEBUG_ID 1
//#define MTP3_OID {1,3,6,1,4,1,1373,1,3,2,2,2}
#define MTP3_OID {1,3,6,1,4,1,1373,2,3,2,2}
#define MTP3_OID_LEN 11
//#define MTP3_OMC_OID {1,3,6,1,4,1,1373,1,4}
#define MTP3_OMC_OID {1,3,6,1,4,1,1373,2,4}
#define MTP3_OMC_OID_LEN 9
//#define PLATFORM_HB_OID {1,3,6,1,4,1,1373,1,3,2,1}
#define PLATFORM_HB_OID {1,3,6,1,4,1,1373,2,3,2}
#define PLATFORM_HB_LEN 10
#define MTP2_HB_OID {1,3,6,1,4,1,1373,1,3,1,1,3,4}
#define MTP2_HBOID_LEN 13
#define MTP2_ACTIVE_LINK 1
#define MTP2_DEACTIVE_LINK 2
#define MTP2_STOP_L2 3
#define MTP2_EMERGEN_ALIGNMENT 4
#define MTP2_RETRIEVE 5
#define MTP3_M2UA_DISABLE 6
#define MTP3_M2UA_ENABLE 7
#define MTP3_M3UA_ENABLE 7
#define MTP3_M3UA_DISABLE 6
#define ROUTE_AVAILABLE 0
#define ROUTE_UNAVAILABLE 1
#define MTP_MAX_ASCIIOUT_LEN 2048
#define DISPLAY_SNM_MESSAGE 0
#define DISPLAY_TM_MESSAGE 1
#define DISPLAY_SCCP_MESSAGE 3
#define DISPLAY_TUP_MESSAGE 4
#define DISPLAY_ISUP_MESSAGE 5
#define DISPLAY_MTP3_ERROR_LOG 6
#define MTP3_MSGLOG_ON 1
#define MTP3_MSGLOG_OFF 0
#define SNM_SIO 0
#define TM_SIO 1/* T+M */
#define SCCP_SIO 3
#define TUP_SIO 4
#define ISUP_SIO 5
#define BICC_SIO 13
#define MTP2_STATE_IDLE 0
#define MTP2_STATE_STOP 1
#define MTP2_STATE_ASSIGN 2
#define MTP2_STATE_READY 3
#define MTP2_STATE_NOT_READY 4
#define MTP2_STATE_WORKING 5
#define MTP2_STATE_ERROR 6
#define MTP2_STATE_WAITING 7
#define MTP2_STATE_STATE_CONGEST 8
#define MTP3_TO_USERPART 0
#define USERPART_TO_MTP3 1
#define MTP_MSG_UP 0
#define MTP_MSG_DOWN 1
#define MTP_MSG_STP 2
#define MTP_MSG_OTHER_SERVER 3
#define MTP_SNM_MSG 4
#define MTP_TO_LITE 5
#define MTP_FROM_LITE 6
#define SS7_PORT 4950
#define M2UA_PORT 2904
#define MTP3_MULTICAST_PORT 4969
#define MTP3_IPTX_MSG 0
#define MTP3_UP_MSG 1
#define E1CARD_BASE_IP 0x010012AC
#define E1CARD_BASE_IP_MASK 0xff00ffff
#define PARA_CONFIGURED 1
#define PARA_NOT_CONFIGURED 0
#define LS_AVAILABLE 0
#define LS_UNAVAILABLE 1
#define NLS_AVAILABLE 0
#define ALS_AVAILABLE 0
#define NLS_UNAVAILABLE 2
#define ALS_UNAVAILABLE 2
#define UPDATE_NLS 0
#define UPDATE_ALS 1
#define LINK_TO_IP(link) (link >> 3) << 16 | 0x010012AC
#define MAX_LS_DPC 128
#define MAX_LS_DPC_ADD1 129
#define MAX_LS_NUM 128
#define MTP3_14BIT_PC 14
#define MTP3_24BIT_PC 24
#define MSG_FROM_MTP2 0
#define MSG_FROM_MTP3 1
#define MAX_ACN_NUM 36
#define MAX_MTP3_NUM 64
#define MTP3_LINK_COMPONENT 23
#define MTP3_LINKSET_COMPONENT 279
#define MTP3_SG_COMPONENT 264
#define MTP3_VERSION {9, 1, 5}
//9,0,2 change ss7 format to "link-0, len -1-2, sio-3 "
//9,0,3 support m3ua msg
#define MTP3_COMPONENT_ID 1
#define ALARM_LINK_UNAVAILABLE 0
#define ALARM_LINK_AVAILABLE 1
#define ALARM_LINK_INHIBIT 2
#define ALARM_LS_UNAVAILABLE 3
#define ALARM_LS_AVAILABLE 4
#define ALARM_LS_INHIBIT 5
#define NORMAL_HEARTBEAT 6
#define M2UAALARM_SCTP_Failure 1
#define M2UAALARM_SG_Maintenance 2
#define M2UAALARM_Remote_MTP2_down 3
#define M2UAALARM_Local_MTP3_Request_Link_Down 4
#define M2UAALARM_Local_SGLink_Maintenance 5
#define M2UAALARM_SCCPLite_TCP_Failure 16
#define M2UAALARM_SCCPLite_Inactivity_Timeout 17
#define MTP3ALARM_LINK_TEST_FAILED 1
#define MTP3ALARM_LINK_COO_RECEIVED 2
#define MTP3ALARM_LINK_CHANGE_OVER 3
#define MTP3ALARM_LINK_MGMT_REQUEST 4
#define MTP3ALARM_LINK_CB_TO_NMTP3 5
#define MTP3ALARM_LINK_LOCAL_INHIBITED 6
#define MTP3ALARM_LINK_REMOTE_INHIBITED 7
#define MTP3_HB_LEN 134
#define MTP3_SERNUM_LEN 4//4 bytes
typedef enum
{
LKTYPE_NONE_SIGTRAN = 0,
LKTYPE_SIGTRAN = 1,
LKTYPE_MTP3_LITE = 2,
LKTYPE_RESERVED1 = 3,
LKTYPE_M3UA = 4,
LKTYPE_RESERVED3 = 5,
LKTYPE_RESERVED4 = 6,
LKTYPE_RESERVED5 = 7,
}MTP3_LKTYPE_LIST;
typedef enum
{
MTP3_SUB_SNM = 0,
MTP3_SUB_STM = 1,
MTP3_SUB_STM2 = 2,
MTP3_SUB_SCCP = 3,
MTP3_SUB_TUP = 4,
MTP3_SUB_ISUP = 5,
MTP3_SUB_DUP1 = 6,
MTP3_SUB_DUP2 = 7,
MTP3_SUB_NONE2 = 8,
MTP3_SUB_BISUP = 9,
MTP3_SUB_SISUP = 10,
MTP3_SUB_NONE3 = 11,
MTP3_SUB_NONE4 = 12,
MTP3_SUB_BICC = 13
}MTP3_SUB_NAME;
#define MTP3_MAX_DYNAMIC_OPC_PER_NW 8

View File

@@ -0,0 +1,155 @@
BYTE ls_slc[2048];
BYTE ls_sls[2048];
BYTE sls_to_link[2048];
/** link mark **/
BYTE link_available[256];
BYTE link_unavailable[256];
BYTE changeover_possible[256];
BYTE retrieval_required[256];
BYTE remote_bsnt_retrieved[256];
BYTE changeback_in_progress[256];
BYTE changeover_in_progress[256];
BYTE changeback_required[256];
BYTE changeover_required[256];
BYTE emergency_changeover_order[256];
BYTE changeover_order[256];
BYTE changeover_completed[256];
BYTE failed[256];
BYTE blocked_by[256];
BYTE local_blocked[256];
BYTE remote_blocked[256];
BYTE first_failure[256];
BYTE changeover_select[256];
BYTE changeback_select[256];
BYTE co_msg_can_exchange[256];
BYTE cb_msg_can_exchange[256];
BYTE local_bsnt_retrievable[256];
BYTE retrieved_bsnt[256];
BYTE fsnt[256];
BYTE fsnl[256];
BYTE fsnc[256];
BYTE bsnt[256];
BYTE tcbc_route_change[256];
BYTE command3[256];
BYTE cbd_cbc_r[256];
BYTE cba_cbc_r[256];
BYTE cbc_s[256];
BYTE controlled_rerouting_in_progress[256];
BYTE transfer_prohibited[256];
BYTE own_sp_restarting;
BYTE link_remotely_inhibited[256];
BYTE link_locally_inhibited[256];
BYTE link_inhibited[256];
BYTE local_inhibit_in_progress[256];
BYTE uninhibit_in_progress[256];
BYTE management_req[256];
BYTE t12_expired_2nd_time[256];
BYTE t13_expired_2nd_time[256];
BYTE sending_phase_finished[128];
WORD mtp3_timer[24];
BYTE sd_buf_h[256];
BYTE sd_buf_t[256];
MTP3Parameter *mtp3_para;
MTP3Parameter mtp3_para_init;
mtp mtp3;
mtp3_csta mtp3_measure;
measure_of_mtp3 *current_measure;
BYTE current_mtime;/* current measure time */
heartbeat_compoent_of_mtp3 mtp3_heartbeat;
/** debug **/
BYTE mtp_asciout_buf[2048];
BYTE mtp_asciin_buf[80];
BYTE t1_delay_mtp3[256];
BYTE t2_delay_mtp3[256];
BYTE t3_delay_mtp3[256];
BYTE t4_delay_mtp3[256];
BYTE t5_delay_mtp3[256];
BYTE t6_delay_mtp3[256];
BYTE t7_delay_mtp3[256];
BYTE t8_delay_mtp3[256];
BYTE t9_delay_mtp3[256];
BYTE t10_delay_mtp3[256];
BYTE t11_delay_mtp3[256];
BYTE t12_delay_mtp3[256];
BYTE t13_delay_mtp3[256];
BYTE t14_delay_mtp3[256];
BYTE t15_delay_mtp3[256];
BYTE t16_delay_mtp3[256];
BYTE t17_delay_mtp3[256];
BYTE t18_delay_mtp3;
BYTE t19_delay_mtp3;
BYTE t20_delay_mtp3;
BYTE t21_delay_mtp3[128];
BYTE t22_delay_mtp3[256];
BYTE t23_delay_mtp3[256];
BYTE t24_delay_mtp3[256];
BYTE sltc_t1_delay[256];
BYTE sltc_t2_delay[256];
BYTE mtp3_t21_flag[128];
BYTE mtp3_t22_flag[256];
BYTE mtp3_t23_flag[256];
BYTE mtp3_t12_flag[256];
BYTE mtp3_t13_flag[256];
BYTE mtp3_t14_flag[256];
BYTE srm_nw;
BYTE active_ls_num;
BYTE current_active_ls_num;
BYTE rv_TRA_num;
BYTE tprc_nw;
BYTE taprc_loop[128];
BYTE mtp_t1[256];
BYTE mtp_t2[256];
BYTE mtp_t3[256];
BYTE mtp_t4[256];
BYTE mtp_t5[256];
BYTE mtp_t7[256];
BYTE mtp_t12[256];
BYTE mtp_t13[256];
BYTE mtp_t14[256];
BYTE mtp_t17[256];
BYTE mtp_t22[256];
BYTE mtp_t23[256];
BYTE mtp_t24[256];
BYTE mtp2_flag_new[32];
BYTE mtp2_flag_old[32];
DWORD mtp3_localip;
DWORD mtp3_alterip;
WORD wx5[256];
BYTE debug_link[256];
long mtp3_timestamp;
long mtp3_csta_p;
DWORD mtp3_get_msg;
BYTE local_change_over[256];
BYTE mtp2_buf_full[256];
BYTE nld_cause_lkd[256];
BYTE init_lsac_state[256];
BYTE init_tlac_state[256];
DWORD TFAmsg_OPC;
BYTE TFAmsg_SrcLk;
DWORD TFPmsg_OPC;
BYTE TFPmsg_SrcLk;
BYTE sdTFP_Ls;
BYTE sdTFA_Ls;
BYTE mtp2_module;
BYTE mtp2_systemid;
// mtp3 dynamic opc
mtp3_dynamic_opc mtp3_opc;

View File

@@ -0,0 +1,140 @@
extern BYTE ls_slc[2048];
extern BYTE ls_sls[2048];
extern BYTE sls_to_link[2048];
/** link mark **/
extern BYTE link_available[256];
extern BYTE changeover_possible[256];
extern BYTE retrieval_required[256];
extern BYTE remote_bsnt_retrieved[256];
extern BYTE changeback_in_progress[256];
extern BYTE changeover_in_progress[256];
extern BYTE changeback_required[256];
extern BYTE changeover_required[256];
extern BYTE emergency_changeover_order[256];
extern BYTE changeover_order[256];
extern BYTE changeover_completed[256];
extern BYTE failed[256];
extern BYTE blocked_by[256];
extern BYTE local_blocked[256];
extern BYTE remote_blocked[256];
extern BYTE first_failure[256];
extern BYTE changeback_select[256];
extern BYTE changeover_select[256];
extern BYTE co_msg_can_exchange[256];
extern BYTE cb_msg_can_exchange[256];
extern BYTE local_bsnt_retrievable[256];
extern BYTE retrieved_bsnt[256];
extern BYTE fsnt[256];
extern BYTE fsnl[256];
extern BYTE fsnc[256];
extern BYTE bsnt[256];
extern BYTE tcbc_route_change[256];
extern BYTE command3[256];
extern BYTE cbd_cbc_r[256];
extern BYTE cba_cbc_r[256];
extern BYTE cbc_s[256];
extern BYTE controlled_rerouting_in_progress[256];
extern BYTE transfer_prohibited[256];
extern BYTE own_sp_restarting;
extern BYTE link_remotely_inhibited[256];
extern BYTE link_locally_inhibited[256];
extern BYTE link_inhibited[256];
extern BYTE local_inhibit_in_progress[256];
extern BYTE uninhibit_in_progress[256];
extern BYTE management_req[256];
extern BYTE t12_expired_2nd_time[256];
extern BYTE t13_expired_2nd_time[256];
extern BYTE sending_phase_finished[128];
extern WORD mtp3_timer[24];
extern BYTE sd_buf_h[256];
extern BYTE sd_buf_t[256];
extern MTP3Parameter *mtp3_para;
extern mtp mtp3;
extern mtp3_csta mtp3_measure;
extern measure_of_mtp3 *current_measure;
extern BYTE current_mtime;/* current measure time */
/** debug **/
extern BYTE mtp_asciout_buf[2048];
extern BYTE mtp_asciin_buf[80];
extern BYTE t1_delay_mtp3[256];
extern BYTE t2_delay_mtp3[256];
extern BYTE t3_delay_mtp3[256];
extern BYTE t4_delay_mtp3[256];
extern BYTE t5_delay_mtp3[256];
extern BYTE t6_delay_mtp3[256];
extern BYTE t7_delay_mtp3[256];
extern BYTE t8_delay_mtp3[256];
extern BYTE t9_delay_mtp3[256];
extern BYTE t10_delay_mtp3[256];
extern BYTE t11_delay_mtp3[256];
extern BYTE t12_delay_mtp3[256];
extern BYTE t13_delay_mtp3[256];
extern BYTE t14_delay_mtp3[256];
extern BYTE t15_delay_mtp3[256];
extern BYTE t16_delay_mtp3[256];
extern BYTE t17_delay_mtp3[256];
extern BYTE t18_delay_mtp3;
extern BYTE t19_delay_mtp3;
extern BYTE t20_delay_mtp3;
extern BYTE t21_delay_mtp3[128];
extern BYTE t22_delay_mtp3[256];
extern BYTE t23_delay_mtp3[256];
extern BYTE t24_delay_mtp3[256];
extern BYTE sltc_t1_delay[256];
extern BYTE sltc_t2_delay[256];
extern BYTE mtp3_t21_flag[128];
extern BYTE mtp3_t22_flag[256];
extern BYTE mtp3_t23_flag[256];
extern BYTE mtp3_t12_flag[256];
extern BYTE mtp3_t13_flag[256];
extern BYTE mtp3_t14_flag[256];
extern BYTE srm_nw;
extern BYTE active_ls_num;
extern BYTE current_active_ls_num;
extern BYTE rv_TRA_num;
extern BYTE tprc_nw;
extern BYTE taprc_loop[128];
extern BYTE mtp2_flag_new[32];
extern BYTE mtp2_flag_old[32];
extern heartbeat_compoent_of_mtp3 mtp3_heartbeat;
extern DWORD mtp3_localip;
extern DWORD mtp3_alterip;
extern WORD wx5[256];
extern BYTE debug_link[256];
extern long mtp3_timestamp;
extern long mtp3_csta_p;
extern DWORD mtp3_get_msg;
extern BYTE local_change_over[256];
extern BYTE mtp2_buf_full[256];
extern BYTE nld_cause_lkd[256];
extern BYTE init_lsac_state[256];
extern BYTE init_tlac_state[256];
extern DWORD TFAmsg_OPC;
extern BYTE TFAmsg_SrcLk;
extern DWORD TFPmsg_OPC;
extern BYTE TFPmsg_SrcLk;
extern BYTE sdTFP_Ls;
extern BYTE sdTFA_Ls;
extern BYTE mtp2_module;
extern BYTE mtp2_systemid;
// mtp3 opc
extern mtp3_dynamic_opc mtp3_opc;

View File

@@ -0,0 +1,102 @@
int find_outbound_cclink(BYTE chl);/* find outbound changeover link */
int search_outbound_link(BYTE ls);
int pc_length(BYTE nw);
void send_mtp_msg(int outlink, BYTE *msgptr);
void send_snm_msg(BYTE ls,BYTE *msgptr);
void hmrt_srm_msg(BYTE linkset, BYTE MsgType, long dst);
int check_outbound_route(BYTE sio, long dpc, BYTE sls);
int send_to_tup(BYTE *msgptr);/* send tup msg to tele user part */
int send_to_isup(BYTE *msgptr);/* send isup msg to tele user part */
int send_to_bicc(BYTE *msgptr);/* send bicc msg to tele user part */
int send_to_sccp(BYTE *msgptr);/* send sccp msg to tele user part */
int send_to_sccp_lite(up_message *msgptr);/* send sccp-lite msg to sccp */
int get_tup(up_message *GetTup);
int get_isup(up_message *GetIsup);
int get_bicc(up_message_2 *GetBicc);
int get_sccp(up_message *GetSccp);
int find_dst_place(long dst,BYTE ls);
int find_direct_ls_to_dst(long dst, BYTE nw);
void mtp2_mtp3_internal_msg(BYTE *msgptr);
void hmdt_test_msg(BYTE *msgptr);
void hmrt_tra_msg(BYTE linkset);
void sd_STM_msg(BYTE chl, BYTE MsgType);
void hmrt_xxxx_adjacent_sp_restart(ls_info *ls);
void hmrt_hmdc_message_for_routing(ls_info *ls);
void hmrt_xxxx_signalling_link_management_message(ls_info *ls);
void hmrt_xxxx_signalling_route_management_message(ls_info *ls);
void hmrt_xxxx_mtp_testing_user_part_message(ls_info *ls);
void hmrt_tprc_restart_begins(ls_info *ls);
void hmrt_tprc_restart_ends(ls_info *ls);
void hmrt_tfrc_update_routing_tables(BYTE dst, BYTE nw);
void hmrt_sltc_signalling_link_test_ack(BYTE chl);
void hmrt_sltc_signalling_link_test_msg(BYTE chl);
void hmrt_tcbc_changeback_ack(BYTE chl);
void hmrt_tcbc_changeback_declaration(BYTE chl);
void hmrt_tcoc_changeover_ack(BYTE chl);
void hmrt_tcoc_changeover_order(BYTE chl);
void hmrt_tcoc_emergency_changeover_ack(BYTE chl);
void hmrt_tcoc_emergency_changeover_order(BYTE chl);
void hmrt_tcbc_update_routing_tables(BYTE chl);
void hmrt_tcoc_update_routing_tables(BYTE chl);
void hmrt_tlac_emergency_changeover_ack(BYTE chl);
void hmrt_tlac_force_uninhibit_signalling_link(BYTE chl);
void hmrt_tlac_inhibit_ack(BYTE chl);
void hmrt_tlac_inhibit_denied(BYTE chl);
void hmrt_tlac_local_inhibit_test(BYTE chl);
void hmrt_tlac_remote_inhibit_test(BYTE chl);
void hmrt_tlac_uninhibit_ack(BYTE chl);
void send_command_to_mtp2(BYTE chl, BYTE command);
void update_nid_table(BYTE ls, long dst, BYTE place);
void update_aid_table(BYTE ls, long dst, BYTE place);
void get_para_from_disk();
int mtp_setmib(BYTE oidlen, DWORD *oid, BYTE *pdata,WORD datalen);
int mtp_getmib(BYTE oidlen, DWORD *oid, BYTE *pdata,BYTE *vartype);
void mtp_snmp_init();
void tup_shm_init();
void isup_shm_init();
void sccp_shm_init();
int GetMtp2Msg(DWORD ip_port);
void m3ua_timer();
int GetM3uaMsg(DWORD port);
int tup_GetMsg(up_message *msgptr);
int isup_GetMsg(up_message *msgptr);
int sccp_GetMsg(up_message *msgptr);
int tup_to_mtp3(up_message *msgptr);
int isup_to_mtp3(up_message *msgptr);
int sccp_to_mtp3(up_message *msgptr);
void sltc_proc(BYTE chl);
void lsac_proc(BYTE chl);
void rtpc_proc(BYTE nw,BYTE dst);
void rtac_proc(BYTE nw,BYTE dst);
void tsrc_proc(BYTE chl);
void tlac_proc(BYTE chl);
void tcoc_proc(BYTE chl);
void tcbc_proc(BYTE chl);
void tprc_mgmt_signalling_point_restart_indication();
void tprc_proc();
void taprc_proc(BYTE linkset);/* adjacent sp restart control */
void mtp_send_error(char *object,int chl, char *err_str);
void mtp_send_error2(BYTE *msg,BYTE sio,DWORD dpc,char *err_str,BYTE from);
int mtp_debug_set();
void mtp_m_rt();
void mtp_put_error(BYTE type,BYTE chl);
void mtp3_readpara_from_disk();
BOOL iptrans_msg_flow(BYTE *msg,BYTE pclen,int direction,DWORD dest_ip);
BOOL iptrans_msg_flow_2(up_message *up_msg_ptr);
void mtp_prompt(char *object, BYTE value);
void set_heartbeat(BYTE reason,BYTE object);
void mtp3_send_alarm(WORD component_id,BYTE alarm_code);
void update_sls_to_link_table(int ls);
int update_ls_slc_table(int link);
void mtp3_debug(int n,const char *fmt,...);
void reset_mtp3();
void mtp3Timer_proc(BYTE i);
int pc_length(BYTE nw);
void mtp3_showbuf(int n,BYTE *msg,int len);
int mtp3lite_updateStatus(BYTE chl, BYTE new_l2_state,BYTE alarmCode);
void mtp3lite_upd_route_status(BYTE chl, BYTE flag);
int Mtp3BinSearchValue(BYTE low, BYTE high,BYTE nw,DWORD key);
void mtp3_send_mtp2_alarm(WORD component,BYTE alarm);
BYTE MTP3_LINK_TYPE(BYTE Link);
int Mtp3AddSortRec(BYTE nw,DWORD dpc, DWORD real_index);
void mtp3_send_mtp2_alarm(WORD component,BYTE alarm);

View File

@@ -0,0 +1,259 @@
#include "mtpconst.h"
typedef struct ls_info{
BYTE links_available;
BYTE links_available_t;
BYTE adjacentsp_acessible;
BYTE adjacentsp_restarting;
WORD adjacent_sp_place;
BYTE linksNum_configured;
BYTE influ_dstnum_asNLS;
BYTE influ_dstnum_asALS;
BYTE influ_dstplace_intable_asNLS[MAX_LS_DPC];
BYTE influ_dstplace_intable_asALS[MAX_LS_DPC];
}ls_info;
typedef struct mtp3_flow{
DWORD UtoM[5];
DWORD MtoI[5];
DWORD ItoM[5];
DWORD MtoU[5];
DWORD stp[5];
DWORD UtoM_throwed[5];
DWORD MtoI_throwed[5];
DWORD ItoM_throwed[5];
DWORD MtoU_throwed[5];
DWORD stp_throwed[5];
DWORD stp_loop[5];
DWORD isup_detail[32];
}mtp3_flow;
typedef struct network{
BYTE routine[256]; /* bit0-1: normal route available
bit2-3: alternative route available
bit4-5: acessible
bit6-7: current route */
BYTE rtpc_state[256];
BYTE rtpc_input[256];
BYTE rtac_state[256];
BYTE rtac_input[256];
BYTE rsrt_state[256];
BYTE rsrt_input[256];
BYTE rsrt_t10[256];
BYTE m3ua_rc_status[256];
mtp3_flow flow;
}network;
typedef struct nw_para{
DWORD dpc[256];
BYTE normal_ls[256];
BYTE alternative_ls[256];
DWORD opc24;
DWORD opc14;
BYTE mtp3_t8[256];
BYTE mtp3_t15[256];
BYTE mtp3_t16[256];
BYTE acn[256][MAX_ACN_NUM];
BYTE ansi_local14b;
BYTE ansi_local24b;
BYTE ansi_remote[256];
DWORD rc[256];
}nw_para;
typedef struct lk_pro
{
BYTE e1_to_linkset __attribute__((packed));
BYTE e1_to_slc __attribute__((packed));
DWORD e1_to_mtp3 __attribute__((packed));
BYTE e1_lk_type __attribute__((packed));//Bit0:0=ss7,1=m2ua
//Bit1:1=enable,0=disable
//Bit2:0=MTP3,1=MTP3LITE
//BIT3:0=server,1=client
BYTE e1_to_sg __attribute__((packed));
BYTE e1_to_iid __attribute__((packed));
DWORD remote_ip __attribute__((packed));
BYTE inactive __attribute__((packed));// Inactivity timer
BYTE inactive_tm __attribute__((packed));// Allowed inactivity timeouts
DWORD e1_to_alterMTP3 __attribute__((packed));//alternative MTP3
}lk_pro;
typedef struct lk_timer
{
BYTE t1;/* 500ms-1200ms */
BYTE t2;/* 700ms-2000ms */
BYTE t3;/* 500ms-1200ms */
BYTE t4;/* 500ms-1200ms */
BYTE t5;/* 500ms-1200ms */
BYTE t7;/* 1s-2s */
BYTE t8;/* 800ms-1200ms */
BYTE t12;/* 800ms-1500ms */
BYTE t13;/* 800ms-1500ms */
BYTE t14;/* 2s-3s */
BYTE t22;
BYTE t23;
}lk_timer;
typedef struct sg_para
{
BYTE enable __attribute__((packed));
BYTE server __attribute__((packed));
BYTE data_ack __attribute__((packed));
DWORD ip __attribute__((packed));
}sg_para;
typedef struct MTP3Parameter
{
lk_pro lk[256];
lk_timer lt[256];
sg_para sg[256];
BYTE nw_pro;
DWORD ls_op_pc[128];/* for 128 linkset */
BYTE ls_pro[128];
char ls_reserved[128][16];//each linkset reserved 16 bytes for omc
BYTE mtp3_t10;
BYTE mtp3_t18;
BYTE mtp3_t19;
BYTE mtp3_t20;
WORD mtp3_t21;
WORD mtp3lite_port;
nw_para nw[4];
BYTE localAcn[MAX_ACN_NUM];
ull MTP3SerialNum;
}MTP3Parameter;
typedef struct mtp{
ls_info ls[128];
network nw[4];
}mtp;
typedef struct measure_of_mtp3{
long time_stamp;
DWORD lk_measure1[256][9];/* link measure oid=*.1 */
DWORD ls_measure[128][8];/* linkset measure oid=*.3 */
/*** traffic */
// DWORD tf_measure1[6][20];/* traffic octets */
DWORD tf_measure2[6][20];/* traffic MSUs */
DWORD tf_measure5[3];
}measure_of_mtp3;
typedef struct mtp3_csta{
measure_of_mtp3 measure[96];
}mtp3_csta;
typedef struct heartbeat_compoent_of_mtp3
{
BYTE version[3];
BYTE state;
BYTE link_state[64];
BYTE linkset_state[32];
BYTE masterMTP3[32];
BYTE SubState[2];
}heartbeat_compoent_of_mtp3;
typedef struct mtp2_heartbeat
{
BYTE systemid;
BYTE moduleid;
BYTE timestamp[4];
BYTE led_ctl_code[8];
BYTE alarm_component;
BYTE alarm_code;
BYTE reserved;
BYTE l1_state;
BYTE l2_state[8];
BYTE e1_dstip[8];
BYTE retrieved_bsnt[8];
}mtp2_heartbeat;
typedef struct mtp3DPCIndex
{
DWORD sortedNum;
DWORD dpc[256];
DWORD index[256];
}mtp3DPCIndex;
typedef struct mtp3_dpc_index
{
mtp3DPCIndex nw[4];
}mtp3_dpc_index;
/* by simon at 23/9/26 */
//extern mtp3_dpc_index mtp3SortRoutine;
typedef struct _mtp3_state
{
BYTE link_l1_state[256];
BYTE link_l2_state[256];
BYTE link_l3_state[256];
BYTE lk_configured[256];
BYTE lk_command[256];
BYTE link_type[256];
DWORD lk_mtp3[256];
BYTE lk_NMTP3_ok[256];//normal mtp3 ok
BYTE lk_AMTP3_ok[256];//alternative mtp3 ok
BYTE lk_SpecANSI_flag[256];
//special ANSI, use the Signalling network testing and maintenance special message
BYTE lsac_state[256];
BYTE tlac_state[256];
BYTE tcoc_state[256];
BYTE tcbc_state[256];
BYTE tsrc_state[256];
BYTE sltc_state[256];
BYTE tprc_state;
BYTE MTP3WatchDog[256];
}_mtp3_state;
/* by simon at 23/9/26 */
//extern _mtp3_state mtp3ObjState;
typedef struct _mtp3_input
{
BYTE lsac_input_from_l2[256];
BYTE lsac_input_from_sltc[256];
BYTE lsac_input_from_stm[256];
BYTE lsac_input_from_tcoc[256];
BYTE lsac_input_from_mgmt[256];
BYTE tlac_input_from_slm[256];
BYTE tlac_input_from_mgmt[256];
BYTE tlac_input_from_stm[256];
BYTE tlac_input_from_hmdt[256];
BYTE tlac_input_from_Tctl[256];/* input from timer control center*/
BYTE tsrc_input_from_tcoc[256];
BYTE tsrc_input_from_tcbc[256];
BYTE tsrc_input_from_stm[256];
BYTE tsrc_input_from_tlac[256];
BYTE tcoc_input_from_tsrc[256];
BYTE tcoc_input_from_stm[256];
BYTE tcoc_input_from_hmdt[256];
BYTE tcbc_input[256];
BYTE tcbc_input_from_tsrc[256];
BYTE sltc_input[256];
BYTE tprc_input;
BYTE taprc_input[128];
}_mtp3_input;
/* by simon at 23/9/26 */
//extern _mtp3_input mtp3ObjInput;
typedef struct _mtp3_IPMng
{
BYTE mtp3_flag_new[MAX_MTP3_NUM];
BYTE mtp3_flag_old[MAX_MTP3_NUM];
DWORD mtp3_flag_ip[MAX_MTP3_NUM];
BYTE LinkIPNum;
DWORD LinkIP[MAX_MTP3_NUM];
BYTE LinkIPSubSta[MAX_MTP3_NUM][2];
}_mtp3_IPMng;
typedef struct _mtp3_dynamic_opc
{
BYTE opc_num[4];
DWORD opc[4][MTP3_MAX_DYNAMIC_OPC_PER_NW];
}mtp3_dynamic_opc;
/* by simon at 23/9/26 */
//extern _mtp3_IPMng MTP3IPMng;

View File

@@ -0,0 +1,742 @@
/****************************************************/
/* MTP3LITE Implementation Program */
/* Version 10.0.1 */
/* Designed By Ying Min */
/* Last Update: 2005-04-7 */
/* Modify : Victor Luo, 2005-07-14 add TCP client for mtp3lite*/
/****************************************************/
#include "./include/mtp3.h"
#include "./include/mtpstm.h"
#include "./include/mtp3lite.h"
#include "./include/mtpext.h"
#include "./include/mtpfunc.h"
BYTE mtp3lite_ka_msg[3];
mtp3lite_lk mtp3lite_link[256];
int mtp3lite_listen_fd;
BYTE mtp3lite_msg_buf[256][MTP3LITE_MSG_BUF_SIZE_PER_LINK];
BYTE mtp3lite_rem_len[256];
BYTE mtp3lite_id_fg[256];
/*@ignore@*/
void mtp3lite_print_msg(BYTE *ptr, WORD len)
{
int i;
for (i = 0; i < len; i++)
{
printf("%X ", ptr[i]);
}
printf("\n");
}
void mtp3lite_init_lk(BYTE lk)
{
mtp3lite_link[lk].connfd = -1;
mtp3lite_link[lk].cliSockfd = -1;
mtp3lite_link[lk].remote_port = 0;
mtp3lite_link[lk].local_inactive = 2000; // 20 seconds
mtp3lite_link[lk].local_reconnect = 10; // 10 * 2.56 seconds
mtp3lite_link[lk].remote_inactive = mtp3_para->lk[lk].inactive * 100;
mtp3lite_link[lk].remote_inactive_timeouts = mtp3_para->lk[lk].inactive_tm;
mtp3lite_link[lk].init_guard_timer = 2000; // 20 seconds
mtp3lite_msg_buf[lk][0] = 0;
mtp3lite_rem_len[lk] = 0;
mtp3lite_id_fg[lk] = 0;
}
void mtp3lite_init_ka_msg(void)
{
mtp3lite_ka_msg[0] = 2;
mtp3lite_ka_msg[1] = 0x4B;
mtp3lite_ka_msg[2] = 0x41;
}
int mtp3lite_Init_TCPSocket(struct sockaddr_in saddr,int needBind)
{ //flag,0=client, 1=server
int sock;
long sockbuf = 40*1024;
int on = 1, timeout = 20;
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0)
{
fprintf(stderr,"Socket() failed\n");
return -3;
}
if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
&sockbuf, sizeof(sockbuf)) != 0)
{
fprintf(stderr,"set socket buffer failed\n");
return -4;
}
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
&on,sizeof(on)) != 0)
{
fprintf(stderr,"set addr reusable failed\n");
return -5;
}
if (setsockopt(sock,SOL_SOCKET, SO_KEEPALIVE,
&timeout, sizeof(timeout)) != 0)
{
fprintf(stderr,"set keepalive failed\n");
return -6;
}
if (fcntl(sock, F_SETFL, O_NONBLOCK) < 0)
{
fprintf(stderr,"set nonblock failed\n");
return -7;
}
if(needBind)
{
if (bind(sock, (struct sockaddr*)&saddr, sizeof(struct sockaddr)) < 0)
{
fprintf(stderr,"MTP3LITE bind failed,port:%d\n",htons(saddr.sin_port));
close(sock);
return -2;
}
}
return sock;
}
int mtp3lite_InitServerSocket()
{
struct sockaddr_in sin_addr;
memset(&sin_addr, 0, sizeof(struct sockaddr));
sin_addr.sin_family = AF_INET;
//sin_addr.sin_port = htons(mtp3lite_port);
sin_addr.sin_port = mtp3_para->mtp3lite_port;
sin_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(sin_addr.sin_zero),8);
if ((mtp3lite_listen_fd = mtp3lite_Init_TCPSocket(sin_addr,1)) < 0)
{
printf("MTP3LITE TCP Socket(%X) Init Failed!\n", mtp3_para->mtp3lite_port);
exit(1);
}
else
listen(mtp3lite_listen_fd, 1);
printf("mtp3lite_listen_fd: %d\n", mtp3lite_listen_fd);
return 1;
}
int isMtp3LiteClientLink(BYTE lk)
{
//4bits:none sigtran, link enable, mtp3lite enable,client
if ((mtp3_para->lk[lk].e1_lk_type & 0x1f)==0x15 && mtp3_para->lk[lk].remote_ip>0)
{
return 1;
}
return 0;
}
int checkIfOveridesocket(BYTE lk)
{
int i;
for(i=0;i<lk;i++)
{
if(isMtp3LiteClientLink(i) && mtp3_para->lk[lk].remote_ip==mtp3_para->lk[i].remote_ip)
{
printf("mtp3lite client, lk %d is overide with %d \n",lk,i);
return 1;
}
}
return 0;
}
int mtp3lite_InitClientSocket(BYTE lk)
{
struct sockaddr_in sin_addr;
int socketfd;
bzero(&sin_addr,sizeof(struct sockaddr));
sin_addr.sin_family = AF_INET;
//sin_addr.sin_port = htons(mtp3lite_port);
mtp3lite_link[lk].cliSockfd = -1;
if (isMtp3LiteClientLink(lk) && !checkIfOveridesocket(lk))
{
//sin_addr.sin_port = mtp3_para->mtp3lite_port; //server port,tmp
//sin_addr.sin_addr.s_addr = mtp3_para->lk[lk].remote_ip;
//bzero(&(sin_addr.sin_zero),8);
if ((socketfd = mtp3lite_Init_TCPSocket(sin_addr,0)) < 0)
{
printf("MTP3LITE TCP Client Socket(%d) Init Failed!\n",mtp3_para->mtp3lite_port);
//exit(1);
return 0;
}
mtp3lite_link[lk].cliSockfd = socketfd;
printf("mtp3lite: init client socket link=%d\n",lk);
}
return 1;
}
int mtp3lite_CloseTcpConn(BYTE link)
{
if(mtp3lite_link[link].connfd>=0)
close(mtp3lite_link[link].connfd);
if(mtp3lite_link[link].cliSockfd>=0)
close(mtp3lite_link[link].cliSockfd);
mtp3lite_init_lk(link);
return 1;
}
int mtp3lite_get_lk_by_ip(struct sockaddr_in *client_addr)
{
int lk;
for (lk = 0; lk < 256; lk++)
{
if ((mtp3_para->lk[lk].remote_ip == client_addr->sin_addr.s_addr) &&
(mtp3_para->lk[lk].e1_to_mtp3 == mtp3_localip) &&
((mtp3_para->lk[lk].e1_lk_type & 0x1f) == 0x05) && // Server & MTP3LITE & Enabled
(mtp3ObjState.lk_command[lk]!=0)) //Command enabled
{
if (mtp3lite_link[lk].connfd > 0)
{
mtp3lite_CloseTcpConn(lk);
mtp3lite_updateStatus(lk, MTP2_STATE_STOP, MTP3LITE_INACTIVITY_TIMEOUT);
}
else if (mtp3lite_link[lk].init_guard_timer == 0)
return lk;
return -1;
}
}
return -1;
}
int mtp3lite_DirectSendMsg(BYTE link, int len, BYTE *msg_ptr)
{
struct sockaddr_in sin;
if ((MTP3_LINK_TYPE(link) != LKTYPE_MTP3_LITE) || // Not MTP3LITE
!(mtp3_para->lk[link].e1_lk_type & 0x01) || // Not Enabled
(mtp3ObjState.lk_command[link] == 0) || // Command Disabled
(mtp3lite_link[link].connfd <= 0)) // Link Not Established
return -1;
bzero(&sin.sin_zero, sizeof(sin.sin_zero));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = mtp3_para->lk[link].remote_ip;
sin.sin_port = mtp3lite_link[link].remote_port;
return send(mtp3lite_link[link].connfd, msg_ptr, len, MSG_NOSIGNAL);
}
int mtp3liteTcpConnect(int sock,struct sockaddr_in *sin_addr)
{
if (connect(sock, (struct sockaddr *)sin_addr, sizeof(struct sockaddr)) < 0)
{
return 0;
}
else
{
printf("tcpConnect success, ip=%s\n",inet_ntoa(sin_addr->sin_addr));
return 1;
}
}
int mtp3lite_TcpConnectCheck()
{
int timeout = 20;
int connfdtmp = 0;
socklen_t clilen;
struct sockaddr_in cliaddr;
int link;
static BYTE cliLk=0;
bzero(&cliaddr,(clilen = sizeof(struct sockaddr)));
connfdtmp = accept(mtp3lite_listen_fd,(struct sockaddr *)&cliaddr,&clilen);
if (connfdtmp <= 0)//no connect request , check client socke
{
link = cliLk++;
if (!isMtp3LiteClientLink(link))
return 0;
if (mtp3lite_link[link].connfd > 0)
return 0;
else if (mtp3lite_link[link].local_reconnect > 0)
{
mtp3lite_link[link].local_reconnect--;
return 0;
}
if (mtp3lite_link[link].cliSockfd <= 0)
{
if (!mtp3lite_InitClientSocket(link))
mtp3lite_init_lk(link);
}
cliaddr.sin_family = AF_INET;
cliaddr.sin_port = mtp3_para->mtp3lite_port;
cliaddr.sin_addr.s_addr = mtp3_para->lk[link].remote_ip;
bzero(&(cliaddr.sin_zero),8);
connfdtmp = mtp3lite_link[link].cliSockfd;
if (!mtp3liteTcpConnect(connfdtmp, &cliaddr))
{
if ((errno != EINPROGRESS) && (errno != EALREADY))
mtp3lite_CloseTcpConn(link);
return 0;
}
}
else if ((link = mtp3lite_get_lk_by_ip(&cliaddr)) < 0)
{
close(connfdtmp);
return 0;
}
mtp3lite_init_lk(link);
mtp3lite_link[link].init_guard_timer = 0;
mtp3lite_link[link].connfd = connfdtmp;
mtp3lite_link[link].cliSockfd = connfdtmp;
mtp3lite_link[link].remote_port = cliaddr.sin_port;
printf("link[%d] connfd: %d, rem_port: %d\n", link, connfdtmp, ntohs(mtp3lite_link[link].remote_port));
fcntl(mtp3lite_link[link].connfd,F_SETFL,O_NONBLOCK);
if (setsockopt(mtp3lite_link[link].connfd,SOL_SOCKET,SO_KEEPALIVE,
&timeout,sizeof(timeout)) != 0)
fprintf(stderr,"set keepalive failed\n");
if (setsockopt(mtp3lite_link[link].connfd,SOL_SOCKET,SO_KEEPALIVE,
&timeout,sizeof(timeout)) !=0)
fprintf(stderr,"set keepalive failed\n");
mtp3lite_updateStatus(link, MTP2_STATE_WORKING, 0);
// mtp3lite_DirectSendMsg(link, 3, mtp3lite_ka_msg);
return 1;
}
int mtp3lite_DirectRecvMsg(BYTE link)
{
struct sockaddr_in sin;
int len, nbytes;
BYTE len1;
len = sizeof(struct sockaddr);
if ((len1 = mtp3lite_rem_len[link])>0)
printf("len1: %d\n", len1);
nbytes = recvfrom(mtp3lite_link[link].connfd, mtp3lite_msg_buf[link] + len1,
MTP3LITE_MSG_BUF_SIZE_PER_LINK - len1, 0, (struct sockaddr *) &sin, &len);
if (nbytes == 0)
{
printf("tcp link[%d] error : %d\n", link, errno);
mtp3lite_CloseTcpConn(link);
mtp3lite_updateStatus(link, MTP2_STATE_STOP, MTP3LITE_TCP_FAILURE);
mtp3lite_rem_len[link] = 0;
}
if ((len1 > 0) && (nbytes > 0))
nbytes += len1;
return nbytes;
}
/*
int mtp3lite_decode_tcp_msg(WORD total_len, BYTE link)
{
BYTE lk_set, *buf_ptr;
WORD sub_len, rem_len, total_hdl_len = 0;
up_message up_msg;
up_message *up_msg_ptr = &up_msg;
BYTE nw;
if (total_len > MTP3LITE_MSG_BUF_SIZE_PER_LINK)
return -1;
while (total_hdl_len < total_len)
{
buf_ptr = mtp3lite_msg_buf[link] + total_hdl_len;
rem_len = total_len - total_hdl_len;
sub_len = buf_ptr[0];
if (rem_len < (sub_len + 1))
{
if (total_hdl_len > 0)
memcpy(mtp3lite_msg_buf[link], mtp3lite_msg_buf[link] + total_hdl_len, rem_len);
mtp3lite_rem_len[link] = rem_len;
//printf("Remain: total_len: %d, total_hld_len: %d, sub_len: %d, rem_len: %d\n", total_len, total_hdl_len, sub_len, rem_len);
return 1;
}
if (sub_len < 2)
return -1;
else if (sub_len == 2)
{
if ((buf_ptr[1] == 0x4B) && (buf_ptr[2] == 0x41))
{ // Receive Keep Alive Message
mtp3lite_link[link].remote_inactive = mtp3_para->lk[link].inactive * 100;
mtp3lite_link[link].remote_inactive_timeouts = 0;
//mtp3lite_print_msg(buf_ptr, 3);
total_hdl_len += (sub_len + 1);
//printf("KeepAlive: total_len: %d, total_hld_len: %d, sub_len: %d, rem_len: %d\n", total_len, total_hdl_len, sub_len, rem_len);
continue;
}
else
return -1;
}
if ((buf_ptr[1] > 9) || (buf_ptr[1] == 0))
return -1;
mtp3lite_link[link].remote_inactive = mtp3_para->lk[link].inactive * 100;
mtp3lite_link[link].remote_inactive_timeouts = 0;
//mtp3lite_print_msg(buf_ptr, sub_len + 1);
up_msg_ptr->len = sub_len;
up_msg_ptr->link = link;
lk_set = mtp3_para->lk[link].e1_to_linkset;
if (lk_set >= 128)
return -1;
nw = mtp3_para->ls_pro[lk_set] & 3;
up_msg_ptr->sio = 0x03 | (nw << 6) | 0x10;//sccp lite always ansi message
up_msg_ptr->opc = mtp3_para->ls_op_pc[lk_set];
if (pc_length(up_msg_ptr->sio >> 6) == MTP3_24BIT_PC)
up_msg_ptr->dpc = mtp3_para->nw[nw].opc24;
else
up_msg_ptr->dpc = mtp3_para->nw[nw].opc14;
memcpy(up_msg_ptr->msgList, buf_ptr + 1, sub_len);
iptrans_msg_flow_2(up_msg_ptr);
send_to_sccp_lite(up_msg_ptr);
total_hdl_len += (sub_len + 1);
//printf("Data: total_len: %d, total_hld_len: %d, sub_len: %d, rem_len: %d\n", total_len, total_hdl_len, sub_len, rem_len);
}
mtp3lite_rem_len[link] = 0;
return 1;
}
*/
/******change to struct: 00, len, 0xfd*****/
int mtp3lite_decode_tcp_msg(WORD total_len, BYTE link)
{
BYTE lk_set, *buf_ptr;
WORD sub_len, rem_len, total_hdl_len = 0;
up_message up_msg;
up_message *up_msg_ptr = &up_msg;
BYTE nw;
if (total_len > MTP3LITE_MSG_BUF_SIZE_PER_LINK)
return -1;
while (total_hdl_len < total_len)
{
buf_ptr = mtp3lite_msg_buf[link] + total_hdl_len;
rem_len = total_len - total_hdl_len;
sub_len = (buf_ptr[0]<<8) + buf_ptr[1];
if (rem_len < (sub_len + 1))
{
if (total_hdl_len > 0)
memcpy(mtp3lite_msg_buf[link], mtp3lite_msg_buf[link] + total_hdl_len, rem_len);
mtp3lite_rem_len[link] = rem_len;
//printf("Remain: total_len: %d, total_hld_len: %d, sub_len: %d, rem_len: %d\n", total_len, total_hdl_len, sub_len, rem_len);
return 1;
}
if (sub_len < 1)
return -1;
else if (sub_len == 1)
{
if(buf_ptr[1+2] == 0x6)
{ // Receive Keep Alive Message
mtp3lite_link[link].remote_inactive = mtp3_para->lk[link].inactive * 100;
mtp3lite_link[link].remote_inactive_timeouts = 0;
//mtp3lite_print_msg(buf_ptr, 3);
total_hdl_len += (sub_len + 3);
mtp3_debug(MTP3DB_EVENT,"mtp3-lite link %d RECV Inditify ACK",link);
//printf("KeepAlive: total_len: %d, total_hld_len: %d, sub_len: %d, rem_len: %d\n", total_len, total_hdl_len, sub_len, rem_len);
continue;
}
else
return -1;
}
// if ((buf_ptr[1+2] > 9) || (buf_ptr[1+2] == 0))
// return -1;
mtp3lite_link[link].remote_inactive = mtp3_para->lk[link].inactive * 100;
mtp3lite_link[link].remote_inactive_timeouts = 0;
//mtp3lite_print_msg(buf_ptr, sub_len + 1);
up_msg_ptr->len = sub_len;
up_msg_ptr->link = link;
lk_set = mtp3_para->lk[link].e1_to_linkset;
if (lk_set >= 128)
return -1;
nw = mtp3_para->ls_pro[lk_set] & 3;
up_msg_ptr->sio = 0x03 | (nw << 6);//sccp lite always itu message
up_msg_ptr->opc = mtp3_para->ls_op_pc[lk_set];
if (pc_length(up_msg_ptr->sio >> 6) == MTP3_24BIT_PC)
up_msg_ptr->dpc = mtp3_para->nw[nw].opc24;
else
up_msg_ptr->dpc = mtp3_para->nw[nw].opc14;
memcpy(up_msg_ptr->msgList, buf_ptr + 1 + 2, sub_len);
iptrans_msg_flow_2(up_msg_ptr);
send_to_sccp_lite(up_msg_ptr);
total_hdl_len += (sub_len + 1 + 2);
//printf("Data: total_len: %d, total_hld_len: %d, sub_len: %d, rem_len: %d\n", total_len, total_hdl_len, sub_len, rem_len);
}
mtp3lite_rem_len[link] = 0;
return 1;
}
int send_mtp3lite_id_ack(BYTE link)
{
BYTE id_ack_msg[4]={0,0x1,0xfe, 0x6};
mtp3lite_DirectSendMsg(link, 4, id_ack_msg);
mtp3_debug(MTP3DB_EVENT,"mtp3-lite link %d send Inditify ACK",link);
return 1;
}
int get_mtp3lite_msg(BYTE link)
{
int nbytes;
if ((MTP3_LINK_TYPE(link) != LKTYPE_MTP3_LITE) || // Not MTP3LITE
!(mtp3_para->lk[link].e1_lk_type & 0x01) || // Not Enabled
(mtp3ObjState.lk_command[link]==0) || // command disabled
(mtp3lite_link[link].connfd <= 0)) // Link Not Established
{
return -1;
}
if ((nbytes = mtp3lite_DirectRecvMsg(link)) <= 0)
return -1;
//mtp3lite_print_msg(mtp3lite_msg_buf[link], nbytes);
if (mtp3lite_decode_tcp_msg(nbytes, link) < 0)
{
printf("tcp link[%d] decode error!\n", link);
mtp3lite_CloseTcpConn(link);
mtp3lite_updateStatus(link, MTP2_STATE_STOP, MTP3LITE_TCP_FAILURE);
mtp3lite_rem_len[link] = 0;
return -1;
}
return 1;
}
int put_mtp3lite_msg(BYTE *msg_ptr)
{
BYTE link, ls, nw, pclen, offset;
WORD len;
link = msg_ptr[0];
len = (msg_ptr[1]<<8) + msg_ptr[2];
if ((MTP3_LINK_TYPE(link) != LKTYPE_MTP3_LITE) || // Not MTP3LITE
!(mtp3_para->lk[link].e1_lk_type & 0x01) || // Not Enabled
(mtp3ObjState.lk_command[link]==0) || // Command disabled
(mtp3lite_link[link].connfd <= 0)) // Link Not Established
return -1;
if ((ls = mtp3_para->lk[link].e1_to_linkset) >= 128)
return -1;
nw = mtp3_para->ls_pro[ls] & 0x03;
pclen = (mtp3_para->nw_pro >> nw) & 0x01;
if (pclen)
{
if (len <= 8)
return -1;
offset = 9+1;//msg_ptr[offset+1] = sccp data
msg_ptr[offset-1] = (len - 8)%0xff;
msg_ptr[offset-2] = (len - 8)/0xff;
len = len - 7+2;
}
else
{
if (len <= 5)
return -1;
offset = 6+1;
msg_ptr[offset-1] = (len - 5)%0xff;
msg_ptr[offset-2] = (len - 5)/0xff;
len = len - 4+2;
}
/******change to struct: 00, len, 0xfd*****/
msg_ptr[offset] = 0xfd;
/******change to struct: 00, len, 0xfd*****/
mtp3lite_DirectSendMsg(link, len, msg_ptr + offset - 2);
//mtp3lite_link[link].local_inactive = 2000;
return 0;
}
/*
int put_mtp3lite_msg(BYTE *msg_ptr)
{
BYTE link, len, ls, nw, pclen, offset;
link = msg_ptr[0];
len = msg_ptr[1];
if ((MTP3_LINK_TYPE(link) != LKTYPE_MTP3_LITE) || // Not MTP3LITE
!(mtp3_para->lk[link].e1_lk_type & 0x01) || // Not Enabled
(mtp3ObjState.lk_command[link]==0) || // Command disabled
(mtp3lite_link[link].connfd <= 0)) // Link Not Established
return -1;
if ((ls = mtp3_para->lk[link].e1_to_linkset) >= 128)
return -1;
nw = mtp3_para->ls_pro[ls] & 0x03;
pclen = (mtp3_para->nw_pro >> nw) & 0x01;
if (pclen)
{
if (len <= 8)
return -1;
offset = 9;
msg_ptr[offset] = len - 8;
len = len - 7;
}
else
{
if (len <= 5)
return -1;
offset = 6;
msg_ptr[offset] = len - 5;
len = len - 4;
}
mtp3lite_DirectSendMsg(link, len, msg_ptr + offset);
//mtp3lite_link[link].local_inactive = 2000;
return 0;
}
*/
int mtp3lite_chk_lk(BYTE link)
{
// char str[19]={7,0,0x11,0x83,0x71,0xab,0xdc,0x1a,0x06,0xf6, 0,0,0,1,5,1,3,2,9,4};
if ((MTP3_LINK_TYPE(link) != LKTYPE_MTP3_LITE) || // Not MTP3LITE
!(mtp3_para->lk[link].e1_lk_type & 0x01) || // Not Enabled
(mtp3ObjState.lk_command[link] == 0)) // Command disabled
return 0;
if (mtp3lite_link[link].init_guard_timer > 0)
mtp3lite_link[link].init_guard_timer--;
if (mtp3lite_link[link].connfd <= 0) // Link Not Established
return 0;
if (mtp3lite_link[link].remote_inactive > 0)
{
if (--mtp3lite_link[link].remote_inactive == 0)
{
// if (++mtp3lite_link[link].remote_inactive_timeouts >= mtp3_para->lk[link].inactive_tm)
if(0)
{
printf("link[%d] remote inactivity %d seconds timeout %d times!\n", link, mtp3_para->lk[link].inactive, mtp3_para->lk[link].inactive_tm);
mtp3lite_CloseTcpConn(link);
mtp3lite_updateStatus(link, MTP2_STATE_STOP, MTP3LITE_INACTIVITY_TIMEOUT);
}
else
{
mtp3lite_link[link].remote_inactive = mtp3_para->lk[link].inactive * 100;
}
}
}
if (mtp3lite_link[link].local_inactive > 0)
{
if(mtp3lite_id_fg[link]==0)
{
mtp3lite_id_fg[link] = 1;
send_mtp3lite_id_ack(link);
}
if (--mtp3lite_link[link].local_inactive == 0)
{
// mtp3lite_DirectSendMsg(link, 3, mtp3lite_ka_msg);
// put_mtp3lite_msg(&str);
mtp3lite_link[link].local_inactive = 2000;
}
}
return 1;
}
void deactive_mtp3lite_lk(link)
{
if ((MTP3_LINK_TYPE(link) == LKTYPE_MTP3_LITE) && // MTP3LITE
(mtp3_para->lk[link].e1_lk_type & 0x01) && // Enabled
(mtp3lite_link[link].connfd > 0))
{//sccp lite link
mtp3_debug(MTP3DB_EVENT,"mtp3-lite link %d Deactive by MNG",link);
mtp3lite_CloseTcpConn(link);
mtp3lite_updateStatus(link, MTP2_STATE_STOP, MTP3LITE_INACTIVITY_TIMEOUT);
}
}
void mtp3lite_init(void)
{
int i;
printf("MTP3LITE Init Start!\n");
for (i = 0; i < 256; i++)
{
mtp3lite_init_lk(i);
mtp3lite_InitClientSocket(i);
}
mtp3lite_listen_fd = -1;
// mtp3lite_InitServerSocket();
mtp3lite_init_ka_msg();//keep alive message
printf("MTP3LITE Init Complete!\n");
}
void mtp3lite_reset(void)
{
int link;
for (link=0;link<256;link++)
{
if (mtp3lite_link[link].connfd >=0)
{
mtp3lite_CloseTcpConn(link);
mtp3lite_rem_len[link] = 0;
}
}
}
void mtp3lite_timer(void)
{
int link;
mtp3lite_TcpConnectCheck();
for (link = 0; link < 256; link++)
{
get_mtp3lite_msg(link);
mtp3lite_chk_lk(link);
}
}
/*@end@*/

2018
plat/mtp3_old/src/mtpinit.c Normal file

File diff suppressed because it is too large Load Diff

2483
plat/mtp3_old/src/mtpm.c Normal file

File diff suppressed because it is too large Load Diff

2544
plat/mtp3_old/src/mtpmib.c Normal file

File diff suppressed because it is too large Load Diff

405
plat/mtp3_old/src/mtpslm.c Normal file
View File

@@ -0,0 +1,405 @@
#include "./include/mtp3.h"
#include "./include/mtpstm.h"
#include "./include/mtpext.h"
#include "./include/mtpfunc.h"
/*@ignore@*/
void sltc_proc(BYTE chl)
{
ls_info *ls;
ls = &mtp3.ls[mtp3_para->lk[chl].e1_to_linkset];
if (mtp3ObjInput.sltc_input[chl] == SLTC_STOP)
{
mtp3ObjInput.sltc_input[chl] = IDLE;
mtp3ObjState.sltc_state[chl] = SLTC_IDLE_STATE;
}
switch (mtp3ObjState.sltc_state[chl])
{
case SLTC_IDLE_STATE:
if (mtp3ObjInput.sltc_input[chl] == SLTC_START)
{
mtp3ObjInput.sltc_input[chl] = IDLE;
hmrt_sltc_signalling_link_test_msg(chl);
sltc_t1_delay[chl] = 4;
mtp3ObjState.sltc_state[chl] = SLTC_FIRST_TRY_STATE;
}
break;
case SLTC_FIRST_TRY_STATE:
sltc_t1_delay[chl] --;
if ( mtp3ObjInput.sltc_input[chl] == SLTA_MSG )
{
mtp3ObjInput.sltc_input[chl] = IDLE;
mtp3ObjInput.lsac_input_from_sltc[chl] = LSAC_SLTC_SLT_SUCCESSFUL;
mtp3ObjState.sltc_state[chl] = SLTC_RUNNING_STATE;
sltc_t2_delay[chl] = 30;
}
else if ( sltc_t1_delay[chl] == 0 )
{
mtp3ObjInput.sltc_input[chl] = IDLE;
sltc_t1_delay[chl] = 4;
hmrt_sltc_signalling_link_test_msg(chl);
mtp3ObjState.sltc_state[chl] = SLTC_SECOND_TRY_STATE;
}
break;
case SLTC_SECOND_TRY_STATE:
sltc_t1_delay[chl]--;
if ( mtp3ObjInput.sltc_input[chl] == SLTA_MSG )
{
mtp3ObjInput.sltc_input[chl] = IDLE;
mtp3ObjInput.lsac_input_from_sltc[chl] = LSAC_SLTC_SLT_SUCCESSFUL;
mtp3ObjState.sltc_state[chl] = SLTC_RUNNING_STATE;
sltc_t2_delay[chl] = 30;
}
else if ( sltc_t1_delay[chl] == 0 )
{
mtp3ObjInput.sltc_input[chl] = IDLE;
sltc_t1_delay[chl] = 4;
hmrt_sltc_signalling_link_test_msg(chl);
mtp3ObjState.sltc_state[chl] = SLTC_THIRD_TRY_STATE;
}
break;
case SLTC_THIRD_TRY_STATE:
sltc_t1_delay[chl]--;
if ( mtp3ObjInput.sltc_input[chl] == SLTA_MSG )
{
mtp3ObjInput.sltc_input[chl] = IDLE;
mtp3ObjInput.lsac_input_from_sltc[chl] = LSAC_SLTC_SLT_SUCCESSFUL;
mtp3ObjState.sltc_state[chl] = SLTC_RUNNING_STATE;
sltc_t2_delay[chl] = 30;
}
else if ( sltc_t1_delay[chl] == 0 )
{
mtp3ObjInput.sltc_input[chl] = IDLE;
mtp3ObjInput.lsac_input_from_sltc[chl] = LSAC_SLTC_SLT_FAILED;
mtp3ObjState.sltc_state[chl] = SLTC_IDLE_STATE;
}
break;
case SLTC_RUNNING_STATE:
sltc_t2_delay[chl] --;
if ( sltc_t2_delay[chl] == 0 )
{
mtp3ObjInput.sltc_input[chl] = IDLE;
hmrt_sltc_signalling_link_test_msg(chl);
mtp3ObjState.sltc_state[chl] = SLTC_FIRST_TRY_STATE;
sltc_t1_delay[chl] = 4;
}
break;
default:
break;
}
}
int link_auc(BYTE chl)
{
BYTE linkset;
linkset = mtp3_para->lk[chl].e1_to_linkset;
if ( (mtp3ObjState.lk_configured[chl] != PARA_CONFIGURED) ||
(mtp3ObjState.lk_mtp3[chl] != mtp3_localip) )
return 3;
if (mtp3ObjState.link_l1_state[chl] != 1)
return 2;
if (mtp3.ls[linkset].links_available == 0)
return 1;
else
return 0;
/* return value:
* 0=linkset not only one link available
* 1=linkset only one link available
* 2=send command to enable this link
* 3=no need to send command to this link */
}
void lsac_proc(BYTE chl)
{
int aucResult;
static BYTE timer[256];
if (init_lsac_state[chl] == TRUE)
{
init_lsac_state[chl] = IDLE;
mtp3ObjState.lsac_state[chl] = LSAC_INACTIVE_STATE;
return;
}
switch (mtp3ObjState.lsac_state[chl])
{
case LSAC_INACTIVE_STATE:
switch (mtp3ObjInput.lsac_input_from_mgmt[chl])
{
case LSAC_MGMT_ACTIVATE_LINK:
if (timer[chl]++>50)
{
timer[chl] = 0;
aucResult = link_auc(chl);
switch (aucResult)
{
case 0:
if (MTP3_LINK_TYPE(chl) == LKTYPE_SIGTRAN)//m2ua link
send_command_to_mtp2(chl,MTP3_M2UA_ENABLE);
send_command_to_mtp2(chl,MTP2_ACTIVE_LINK);
mtp3_debug(MTP3DB_EVENT,"[lsac]link %d normal alignment",chl);
// printf("chl %d normal alignment\n",chl);
mtp3ObjState.lsac_state[chl] = LSAC_RESTORING_STATE;
timer[chl] = 0;
break;
case 1:
if (MTP3_LINK_TYPE(chl) == LKTYPE_SIGTRAN)//m2ua link
send_command_to_mtp2(chl,MTP3_M2UA_ENABLE);
send_command_to_mtp2(chl,MTP2_EMERGEN_ALIGNMENT);
mtp3_debug(MTP3DB_EVENT,"[lsac]link %d emergent alignment",chl);
// printf("chl %d emergent alignment\n",chl);
mtp3ObjState.lsac_state[chl] = LSAC_RESTORING_STATE;
timer[chl] = 0;
break;
case 2:
if (MTP3_LINK_TYPE(chl) != LKTYPE_MTP3_LITE)//m2ua link
send_command_to_mtp2(chl,MTP3_M2UA_ENABLE);
break;
default:
break;
}
}
break;
case LSAC_MGMT_DEACTIVATE_LINK:
break;
default:
break;
}
switch (mtp3ObjInput.lsac_input_from_l2[chl])
{
case LSAC_L2_IN_SERVICE:
break;
case LSAC_L2_OUT_OF_SERVICE:
mtp3ObjInput.lsac_input_from_l2[chl] = IDLE;
break;
case LSAC_L2_REMOTE_PROCESSOR_RECOV:
break;
default:
break;
}
break;
case LSAC_RESTORING_STATE:
switch (mtp3ObjInput.lsac_input_from_mgmt[chl])
{
case LSAC_MGMT_ACTIVATE_LINK:
if ( (mtp3ObjState.sltc_state[chl] == SLTC_IDLE_STATE) &&
(timer[chl]++>60)) // change timer 8s to 9.6s
{
timer[chl] = 0;
aucResult = link_auc(chl);
switch (aucResult)
{
case 0:
if (MTP3_LINK_TYPE(chl) == LKTYPE_SIGTRAN)//m2ua link
send_command_to_mtp2(chl,MTP3_M2UA_ENABLE);
send_command_to_mtp2(chl,MTP2_ACTIVE_LINK);
break;
case 1:
if (MTP3_LINK_TYPE(chl) == LKTYPE_SIGTRAN)//m2ua link
send_command_to_mtp2(chl,MTP3_M2UA_ENABLE);
send_command_to_mtp2(chl,MTP2_EMERGEN_ALIGNMENT);
break;
default:
mtp3ObjState.lsac_state[chl] = LSAC_INACTIVE_STATE;
break;
}
}
break;
case LSAC_MGMT_DEACTIVATE_LINK:
send_command_to_mtp2(chl,MTP2_DEACTIVE_LINK);
mtp3ObjState.lsac_state[chl] = LSAC_INACTIVE_STATE;
break;
default:
break;
}
switch (mtp3ObjInput.lsac_input_from_l2[chl])
{
case LSAC_L2_IN_SERVICE:
mtp3ObjInput.lsac_input_from_l2[chl] = IDLE;
mtp3_debug(MTP3DB_EVENT,"[lsac]link %d L2 in service,start testing procedure",chl);
mtp3ObjInput.sltc_input[chl] = SLTC_START;
sltc_proc(chl);/* start to send sltm */
break;
case LSAC_L2_OUT_OF_SERVICE:
mtp3ObjInput.lsac_input_from_l2[chl] = IDLE;
break;
case LSAC_L2_REMOTE_PROCESSOR_RECOV:
break;
default:
break;
}
switch (mtp3ObjInput.lsac_input_from_sltc[chl])
{
case LSAC_SLTC_SLT_SUCCESSFUL:
mtp3ObjInput.lsac_input_from_sltc[chl] = IDLE;
mtp3ObjInput.tlac_input_from_slm[chl] = TLAC_LSAC_LINK_IN_SERVICE;
mtp3ObjState.lsac_state[chl] = LSAC_ACTIVE_STATE;
mtp3_debug(MTP3DB_EVENT,"[lsac]link %d complete test procedure,test pass",chl);
break;
case LSAC_SLTC_SLT_FAILED:
mtp3ObjInput.lsac_input_from_sltc[chl] = IDLE;
mtp3ObjState.link_l2_state[chl] = UNAVAILABLE;
send_command_to_mtp2(chl,MTP2_STOP_L2);
mtp3ObjState.lsac_state[chl] = LSAC_INACTIVE_STATE;
mtp3_debug(MTP3DB_EVENT,"[lsac]link %d complete test procedure,test failed",chl);
break;
default:
break;
}
break;
case LSAC_ACTIVE_STATE:
switch (mtp3ObjInput.lsac_input_from_mgmt[chl])
{
case LSAC_MGMT_ACTIVATE_LINK:
break;
case LSAC_MGMT_DEACTIVATE_LINK:
mtp3ObjInput.tlac_input_from_slm[chl] = TLAC_LSAC_SIGLINK_FAILED;
mtp3ObjState.lsac_state[chl] = LSAC_WAIT_STATE;
// mtp3ObjState.lsac_state[chl] = LSAC_INACTIVE_STATE;
break;
default:
break;
}
switch (mtp3ObjInput.lsac_input_from_l2[chl])
{
case LSAC_L2_IN_SERVICE:
mtp3ObjInput.lsac_input_from_l2[chl] = IDLE;
break;
case LSAC_L2_OUT_OF_SERVICE:
mtp3_debug(MTP3DB_EVENT,"[lsac]link %d failed",chl);
// printf("lsac link %d failed\n",chl);
mtp3ObjInput.lsac_input_from_l2[chl] = IDLE;
if (link_inhibited[chl] != TRUE)
{
mtp3ObjInput.tlac_input_from_slm[chl] = TLAC_LSAC_SIGLINK_FAILED;
mtp3ObjState.lsac_state[chl] = LSAC_FAILED_STATE;
}
break;
case LSAC_L2_REMOTE_PROCESSOR_RECOV:
break;
default:
break;
}
switch (mtp3ObjInput.lsac_input_from_sltc[chl])
{
case LSAC_SLTC_SLT_SUCCESSFUL:
mtp3ObjInput.lsac_input_from_sltc[chl] = IDLE;
break;
case LSAC_SLTC_SLT_FAILED:
mtp3ObjInput.lsac_input_from_sltc[chl] = IDLE;
mtp3ObjState.lsac_state[chl] = LSAC_INACTIVE_STATE;
send_command_to_mtp2(chl,MTP2_STOP_L2);
mtp3_debug(MTP3DB_EVENT,"[lsac]link %d test failed during active state",chl);
mtp3ObjState.link_l2_state[chl] = UNAVAILABLE;
mtp3_send_alarm(MTP3_LINK_COMPONENT+chl,MTP3ALARM_LINK_TEST_FAILED);
if (link_inhibited[chl] != TRUE)
{
mtp3ObjInput.tlac_input_from_slm[chl] = TLAC_LSAC_SIGLINK_FAILED;
mtp3ObjState.lsac_state[chl] = LSAC_FAILED_STATE;
}
break;
default:
break;
}
switch (mtp3ObjInput.lsac_input_from_tcoc[chl])
{
case LSAC_TCOC_STM_READY:
mtp3ObjInput.lsac_input_from_tcoc[chl] = IDLE;
break;
case LSAC_TCOC_STOP_L2:
mtp3ObjInput.lsac_input_from_tcoc[chl] = IDLE;
send_command_to_mtp2(chl,MTP2_STOP_L2);
mtp3_send_alarm(MTP3_LINK_COMPONENT+chl,MTP3ALARM_LINK_CHANGE_OVER);
if (link_inhibited[chl] != TRUE)
{
mtp3ObjState.lsac_state[chl] = LSAC_FAILED_STATE;
}
break;
default:
break;
}
switch (mtp3ObjInput.lsac_input_from_stm[chl])
{
case LSAC_TLAC_CHANGEOVER_ORDER_RECEIVED:
mtp3ObjInput.lsac_input_from_stm[chl] = IDLE;
send_command_to_mtp2(chl,MTP2_STOP_L2);
mtp3_send_alarm(MTP3_LINK_COMPONENT+chl,MTP3ALARM_LINK_CHANGE_OVER);
mtp3_debug(MTP3DB_EVENT,"[lsac]receive coo");
// printf("lsac receive coo\n");
mtp3ObjState.lsac_state[chl] = LSAC_FAILED_STATE;
break;
default:
break;
}
break;
case LSAC_WAIT_STATE:
if ( mtp3ObjInput.lsac_input_from_tcoc[chl] == LSAC_TCOC_STM_READY)
{
mtp3ObjInput.lsac_input_from_tcoc[chl] = IDLE;
send_command_to_mtp2(chl,MTP2_STOP_L2);
mtp3_send_alarm(MTP3_LINK_COMPONENT+chl,MTP3ALARM_LINK_MGMT_REQUEST);
mtp3ObjState.lsac_state[chl] = LSAC_INACTIVE_STATE;
}
break;
case LSAC_FAILED_STATE:
if (mtp3ObjInput.lsac_input_from_stm[chl] != IDLE)
{
mtp3ObjInput.lsac_input_from_stm[chl] = IDLE;
}
if ( mtp3ObjInput.lsac_input_from_tcoc[chl] == LSAC_TCOC_STM_READY )
{
mtp3ObjInput.lsac_input_from_tcoc[chl] = IDLE;
changeover_in_progress[chl] = FALSE;
if (mtp3ObjState.lk_mtp3[chl] == mtp3_localip)
send_command_to_mtp2(chl,MTP2_ACTIVE_LINK);
mtp3ObjState.lsac_state[chl] = LSAC_RESTORING_STATE;
}
break;
default:
break;
}
}
/*@end@*/

4260
plat/mtp3_old/src/mtpsmh.c Normal file

File diff suppressed because it is too large Load Diff

336
plat/mtp3_old/src/mtpsrm.c Normal file
View File

@@ -0,0 +1,336 @@
#include "./include/mtp3.h"
#include "./include/mtpstm.h"
#include "./include/mtpext.h"
#include "./include/mtpfunc.h"
/*@ignore@*/
void hmrt_srm_msg(BYTE linkset, BYTE MsgType, long dst);
void hmrt_tfrc_update_routing_tables(BYTE dst, BYTE nw);
void tsrc_fun6(BYTE link,BYTE nw,BYTE sp_place);
void tsrc_fun8(BYTE ls,BYTE nw,BYTE sp_place);
int find_dst_place(long dst,BYTE ls);
void mark_alternative_linkset_available(BYTE *routine)
{
(*routine) = ( (*routine) & 0xc3 ) + 0x10;/* mark alternative route use and acessible*/
}
void mark_alternative_linkset_unavailable(BYTE *routine)
{
(*routine) = ((*routine) & 0xf3 ) + 0x08;/* mark alternative route can't use */
}
void mark_normal_linkset_available(BYTE *routine)
{
(*routine) = ((*routine) & 0xcc) + 0x10;/* mark normal route can use,and acessible */
}
void mark_normal_linkset_unavailable(BYTE *routine)
{
(*routine) = ((*routine) & 0xfc) + 0x02;/* mark normal route unavailable */
}
void mark_dstSP_inaccessible(BYTE *routine)
{
(*routine) = ((*routine) & 0xcf);/* mark destination sp inaccessible */
}
int find_directLS_to_dst(long dst)
{
BYTE i;
for ( i=0; i<128; i++ )
{
if ( mtp3_para->ls_op_pc[i] == dst )
return i;
}
return 128;
}
void tsrc_rtpc_signalling_route_unavailable(BYTE dst, BYTE nw)
{
BYTE ls;
network *sp;
BYTE msgopc;
BYTE nls;
BYTE als;
nls = mtp3_para->nw[nw].normal_ls[dst];
als = mtp3_para->nw[nw].alternative_ls[dst];
sp = &mtp3.nw[nw];
msgopc = TFPmsg_OPC;
ls = mtp3_para->lk[TFPmsg_SrcLk].e1_to_linkset;
if ( ls > 127 )
return;
if ( mtp3.ls[ls].adjacentsp_restarting == 1 )/* adjacent sp restarting */
{
if (nls == ls)
mark_normal_linkset_unavailable(&sp->routine[dst]);
else if (als == ls)
mark_alternative_linkset_unavailable(&sp->routine[dst]);
}
else
{
if ( nls == ls )
{
if ( (sp->routine[dst] >> 6) == 2 )
return;
tsrc_fun6(TFPmsg_SrcLk,nw,dst);
hmrt_tfrc_update_routing_tables(dst,nw);
}
else if ( als == ls )
{
tsrc_fun6(TFPmsg_SrcLk,nw,dst);
hmrt_tfrc_update_routing_tables(dst,nw);
}
}
}
void tsrc_rtac_signalling_route_available(BYTE dst, BYTE nw)
{
int ls;
network *sp;
DWORD msgopc;
BYTE nls_t;
BYTE als_t;
BYTE current_route;
WORD msgopc_place;
int lsnoRSP_is_msgOPC;
sp = &mtp3.nw[nw];
current_route = sp->routine[dst] >> 6;
msgopc = TFAmsg_OPC;
ls = mtp3_para->lk[TFAmsg_SrcLk].e1_to_linkset;
if ( ls > 127 )
return;
lsnoRSP_is_msgOPC = find_directLS_to_dst(msgopc);
if ( lsnoRSP_is_msgOPC == 128 )
return;/* msg opc is not any linkset's remote sp */
msgopc_place = mtp3.ls[lsnoRSP_is_msgOPC].adjacent_sp_place;
if (msgopc_place > 255)
return;
if ( !own_sp_restarting )
{
if ( ((sp->routine[msgopc_place] >> 4) & 3) == SP_ACCESSIBLE )/* msg opc accessible */
tsrc_fun8(ls,nw,dst);
else/* msg opc inacessible */
{
// mtp3_debug(MTP3_DEBUG_LOG,"msgopc inacessible\n\r");
sp->rtac_input[msgopc_place] = RTAC_DEST_ACCESSIBLE;/* send tfa to all adjacent sp */
nls_t = mtp3_para->nw[nw].normal_ls[msgopc_place];
als_t = mtp3_para->nw[nw].alternative_ls[msgopc_place];
mtp3ObjInput.taprc_input[lsnoRSP_is_msgOPC] = TPRC_ADJACENT_SP_RESTARTING;
if ( nls_t == ls )
mark_normal_linkset_available(&sp->routine[msgopc_place]);
else if ( als_t == ls )
mark_alternative_linkset_available(&sp->routine[msgopc_place]);
current_measure->ls_measure[ls][4]++;/* Broadcast TFA for recovery of measured linkset */
}
}
hmrt_tfrc_update_routing_tables(msgopc_place,nw);
hmrt_tfrc_update_routing_tables(dst,nw);
}
void rtpc_proc(BYTE netw,BYTE dst)
{
network *nw;
BYTE ls;
nw = &mtp3.nw[netw];
switch ( nw->rtpc_state[dst] )
{
case RTPC_IDLE_STATE:
switch ( nw->rtpc_input[dst] )
{
case RTPC_RSRT_SEND_TFP_MSG:/* not supported */
nw->rtpc_input[dst] = IDLE;
hmrt_srm_msg(sdTFP_Ls,SIGNAL_TFP,mtp3_para->nw[netw].dpc[dst]);
nw->rtpc_state[dst] = RTPC_WAIT_STATE;
break;
case RTPC_TSRC_SEND_TFP_MSG:/* send tfp message to linkset opposit sp */
// printf("send tfp message to linkset %d,TFDPC=%lx\n",sdTFP_Ls,mtp3_para->nw[netw].dpc[dst]);
nw->rtpc_input[dst] = IDLE;
hmrt_srm_msg(sdTFP_Ls,SIGNAL_TFP,mtp3_para->nw[netw].dpc[dst]);
nw->rtpc_state[dst] = RTPC_WAIT_STATE;
break;
case RTPC_DEST_INACCESSIBLE:/*one dst inaccessible, send tfp to all adjacent sp about this dst */
nw->rtpc_input[dst] = IDLE;
for ( ls=0; ls<128; ls++ )
{
if ((mtp3_para->ls_pro[ls] & 3) == netw)
{
// printf("send tfp message to linkset %d,TFDPC=%lx\n",ls,mtp3_para->nw[netw].dpc[dst]);
hmrt_srm_msg(ls,SIGNAL_TFP,mtp3_para->nw[netw].dpc[dst]);/* send tfp to adjacent sp */
}
}
if (own_sp_restarting == 1)
{
// hmrt_tra_msg(ls);//printf("send tra\n");
mtp3ObjInput.tprc_input = TPRC_RTPC_TFP_SENT;
}
break;
case RTPC_TFP_MSG:/* receive TFP from other sp */
// printf("rtpc dst %d tfp\n",dst);
nw->rtpc_input[dst] = IDLE;
if ( controlled_rerouting_in_progress[dst] == TRUE )
transfer_prohibited[dst] = TRUE;
else
{
tsrc_rtpc_signalling_route_unavailable(dst,netw);
if (!own_sp_restarting)
{
nw->rsrt_input[dst] = RSRT_RTPC_ROUTE_SET_TEST;
}
//if sp isn't restarting
//start route set test
}
break;
case RTPC_CTRL_RERT_TERMINATED:/* not supported */
nw->rtpc_input[dst] = IDLE;
controlled_rerouting_in_progress[dst] = FALSE;
if ( transfer_prohibited[dst] == TRUE )
{
transfer_prohibited[dst] = FALSE;
//tsrc_rtpc_signalling_route_unavailable
//if sp isn't restarting
//start route set test
}
break;
case RTPC_CONTROLLED_RERT:/* not supported */
nw->rtpc_input[dst] = IDLE;
controlled_rerouting_in_progress[dst] = TRUE;
break;
case RTPC_RESTART_BEGINS:
nw->rtpc_input[dst] = IDLE;
controlled_rerouting_in_progress[dst] = FALSE;
transfer_prohibited[dst] = FALSE;
/* mark sp restarting */
break;
case RTPC_RESTART_ENDS:
nw->rtpc_input[dst] = IDLE;
/* cancel sp restarting */
break;
}
break;
case RTPC_WAIT_STATE:
nw->rtpc_state[dst] = RTPC_IDLE_STATE;
break;
}
}
void rtac_proc(BYTE netw,BYTE dst)
{
network *nw;
BYTE ls;
nw = &mtp3.nw[netw];
switch ( nw->rtac_input[dst] )
{
case RTAC_TFA_MSG:
nw->rtac_input[dst] = IDLE;
tsrc_rtac_signalling_route_available(dst,netw);
nw->rsrt_input[dst] = RSRT_RTAC_ROUTE_AVAILABLE;
break;
case RTAC_DEST_ACCESSIBLE:// one dst become accessible, send tfa to all adjacent sp about this dst
nw->rtac_input[dst] = IDLE;
for ( ls=0; ls<128; ls++ )
{
if ( (mtp3_para->ls_pro[ls] & 3) == netw)
{
hmrt_srm_msg(ls,SIGNAL_TFA,mtp3_para->nw[netw].dpc[dst]);/* send tfa to adjacent sp */
}
}
break;
case RTAC_STP_NOLONGER_FOR_DEST:
nw->rtac_input[dst] = IDLE;
hmrt_srm_msg(sdTFA_Ls,SIGNAL_TFA,mtp3_para->nw[netw].dpc[dst]);
break;
case RTAC_SEND_TFA_MSG:
nw->rtac_input[dst] = IDLE;
hmrt_srm_msg(sdTFA_Ls,SIGNAL_TFA,mtp3_para->nw[netw].dpc[dst]);
break;
case RTAC_FORCED_RERT:
break;
case RTAC_FORCED_RERT_TERMINATED:
break;
case RTAC_FORCED_RERT_NOT_REQ:
break;
case RTAC_RESTART_BEGINS:
break;
case RTAC_RESTART_ENDS:
break;
}
}
void rsrt_proc(BYTE netw,BYTE dst)
{
network *nw;
nw = &mtp3.nw[netw];
switch (nw->rsrt_state[dst])
{
case RSRT_IDLE_STATE:
switch (nw->rsrt_input[dst])
{
case RSRT_RTPC_ROUTE_SET_TEST:
nw->rsrt_t10[dst] = 0;
nw->rsrt_state[dst] = RSRT_WAIT_STATE;
break;
case RSRT_TSRC_ROUTE_SET_TEST:
hmrt_srm_msg(mtp3_para->nw[netw].normal_ls[dst],SIGNAL_RST,mtp3_para->nw[netw].dpc[dst]);
break;
default:
break;
}
break;
case RSRT_WAIT_STATE:
nw->rsrt_t10[dst] ++;
switch (nw->rsrt_input[dst])
{
case RSRT_RTPC_ROUTE_SET_TEST:
break;
case RSRT_TSRC_ROUTE_SET_TEST:
break;
case RSRT_RTAC_ROUTE_AVAILABLE:
nw->rsrt_t10[dst] = 0;
nw->rsrt_state[dst] = RSRT_IDLE_STATE;
break;
default:
break;
}
if (nw->rsrt_t10[dst] >= mtp3_para->mtp3_t10)
{
hmrt_srm_msg(mtp3_para->nw[netw].normal_ls[dst],SIGNAL_RST,mtp3_para->nw[netw].dpc[dst]);
//send route test message out
nw->rsrt_t10[dst] = 0;
}
break;
default:
break;
}
nw->rsrt_input[dst] = IDLE;
}
/*@end@*/

2203
plat/mtp3_old/src/mtpstm.c Normal file

File diff suppressed because it is too large Load Diff