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/isdn/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 = isdn
TYPE = plat
DBUG_FLAGS_ADD =
RELS_FLAGS_ADD =
##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

Binary file not shown.

35
plat/isdn/src/Makefile Normal file
View File

@@ -0,0 +1,35 @@
#Create by Chen Gengxin
#2008-03-03
#WXC2 R9.0 ISDN makefile
CC = gcc
CFLAG = -g -Wall -c #-fprofile-arcs -ftest-coverage
ISDN_LIB_OBJ = isdn_msg.o isdn_fsm.o isdn_uif.o isdn_rm.o isdn_ie.o isdn_debug.o
all: $(ISDN_LIB_OBJ)
# ar -r libfsm.a $(ISDN_LIB_OBJ)
#test_sdl: $(ISDN_LIB_OBJ)
# $(cc) -o $@ $< ../kernel/sched.o
isdn_msg.o: isdn_msg.c ./include/isdn_msg.h ./include/isdn_ext.h ./include/isdn_const.h
$(CC) $(CFLAG) $<
isdn_fsm.o: isdn_fsm.c
$(CC) $(CFLAG) $<
isdn_uif.o: isdn_uif.c ./include/isdn_if.h
$(CC) $(CFLAG) $<
isdn_rm.o: isdn_rm.c ./include/isdn_rm.h
$(CC) $(CFLAG) $<
isdn_ie.o: isdn_ie.c ./include/isdn_ie.h
$(CC) $(CFLAG) $<
isdn_debug.o: isdn_debug.c
$(CC) $(CFLAG) $<
clean:
rm -f main *.o *.a *.xml *.gcov *.gcda *.gcno test_sdl core

View File

@@ -0,0 +1,275 @@
/***********************************************************
Copyright (C), LGC Wireless.
File Name: isdn_const.h
Description: ISDN const define
Version: v9.0.0
Author: Gengxin Chen
Create Date: 2008-1-24
History:
<author> <date> <version> <desc>
************************************************************/
#ifndef _ISDN_CONST_H
#define _ISDN_CONST_H
//#define PROTO_ISDN 3
//user - network interface
#define NETWORK_SIDE 0
#define USER_SIDE 1
#define ISDN_IP_PORT 4958 //4951 4953
//NFAS
#define NFAS_DISABLE 0x00
#define NFAS_ENABLE 0x01
//priority
#define REATTEMPT 0x00
#define DISCARD 0x01
//run_mode
#define ISDN_SINGLE_MODE 0x00 /* Single Plat */
#define ISDN_DUAL_MODE 0x01 /* Dual Plat */
//call state
#define IDLE_FLAG 0x00
#define CALLIN_FLAG 0x01
#define CALLOUT_FLAG 0x02
//timer_flag
#define DC_M_FLAG 0x04
#define BC_M_FLAG 0x08
//ansi isdn maintenance state
//D-channel state
#define DS_MOOS 0x00 //In Service
#define DS_IS 0x01 //Maintenance Busy
#define DS_OOS 0x02 //Out Of Service
#define DS_STBY 0x04 //Standby
#define DS_WAIT 0x08 //Wait
#define DS_MB 0x10 //Manual Out Of Service
#define DS_INB 0x12 //Installation Busy
//B-channel state
#define IN_SERVICE 0x00
#define MAINTENANCE_SERVICE 0x01
#define OUT_OF_SERVICE 0x02
//iua link state
#define LK_OOS 0x00
#define LK_IS 0x01
/************************************************************
ISDN message type
************************************************************/
#define PROTOCOL_ISDN_LINK_MNG 0xFE
#define PROTOCOL_DISCR 0x08 //Q.931 Protocol discriminator
//Call establishment message
#define MSG_ALERT 0x01 //Alerting
#define MSG_CALL_PROC 0x02 //Call Proceeding
#define MSG_CONN 0x07 //Connect
#define MSG_CONNACK 0x0F //Connect Acknowledge
#define MSG_PROG 0x03 //Progress
#define MSG_SETUP 0x05 //Setup
#define MSG_SETUP_ACK 0x0D //Setup Acknowledge
//Call clearing message
#define MSG_DISC 0x45 //Disconnect
#define MSG_REL 0x4D //Release
#define MSG_REL_COMP 0x5A //Release Complete
#define MSG_RESTART 0x46 //Restart
#define MSG_REST_ACK 0x4E //Restart Acknowledge
//Miscellaneous message
#define MSG_INFORMATION 0x7B //Information
#define MSG_NOTI 0x6E //Notify
#define MSG_STATUS 0x7D //Status
#define MSG_STAT_ENQ 0x75 //Status Enquiry
#define MSG_FAC 0x62 //Facility (connectionless)
//Maintenance message
#define M_PROTOCOL_DISCR 0x43 //Maintenance messages Protocol discriminator
#define MSG_SERVICE 0x0F //Service
#define MSG_SERVICE_ACK 0x07 //Service Acknowledge
/************************************************************
ISDN information element identifier coding
************************************************************/
//Single octet information elements
#define IE_SHIFT 0x01 //Shift
#define IE_MORE_DATA 0xA0 //More data
#define IE_SD_COMP 0xA1 //Send Complete
#define IE_RPT_IND 0xD2 //Repeat indicator
//Variable length information element
#define IE_BR_CAP 0x04 //Bearer capability
#define IE_CAUSE 0x08 //Cause
#define IE_CALL_ID 0x10 //Call identifier
#define IE_CALL_STAT 0x14 //Call state
#define IE_CHNL_ID 0x18 //Channel identification
#define IE_PRG_IND 0x1E //Progress indicator
#define IE_NT_SP_FAC 0x20 //Network-specific facilities
#define IE_NOTIFY_IND 0x27 //Notification indicator
#define IE_DISP 0x28 //Display
#define IE_DT_TIME 0x29 //Date/time
#define IE_KPD_FAC 0x2C //Keypad facility
#define IE_SIGN 0x34 //Signal
#define IE_CG_PTY_NUM 0x6C //Calling party number
#define IE_CG_PTY_ADDR 0x6D //Calling party subaddress
#define IE_CD_PTY_NUM 0x70 //Called party number
#define IE_CD_PTY_ADDR 0x71 //Called party subaddress
#define IE_TRAN_NT_SEL 0x78 //Transit network selection
#define IE_RESTART_IND 0x79 //Restart indicator
#define IE_LL_COMP 0x7C //Low layer compatibility
#define IE_HL_COMP 0x7D //High layer compatibility
#define IE_USR_USR 0x7E //User-user
//ansi
#define IE_CHG_STAT 0x01 //Change status
#define IE_FAC 0x1C //Facility
//#define IE_INFO_REQ 0x32 //Information request
//#define IE_ORG_CG_NUM 0x73 //Original called number
#define IE_REDIR_NUM 0x74 //Redirection number
//QSIG
#define IE_CONN_NUM 0x4C //Connected number
//Codeset 6 information element identifiers TO-DO
/************************************************************
ISDN states exist in the user-network interface
************************************************************/
#define NULL_STATE 0x00
#define CALL_INIT_STATE 0x01
#define OVERLAP_SD_STATE 0x02
#define OUT_CALL_PROC_STATE 0x03
#define CALL_DV_STATE 0x04
#define CALL_PRE_STATE 0x06
#define CALL_RV_STATE 0x07
#define CONN_REQ_STATE 0x08
#define IN_CALL_PROC_STATE 0x09
#define ACTIVE_STATE 0x0A
#define DISC_REQ_STATE 0x0B
#define DISC_IND_STATE 0x0C
#define REL_REQ_STATE 0x13
#define OVERLAP_RV_STATE 0x19
#define GLOBAL_NULL_STATE 0x00
#define GLOBAL_RESTART_REQ_STATE 0x3D
#define GLOBAL_RESTART_STATE 0x3E
//ansi
#define SERVICE_IDLE 0x00
#define WAIT_SERVICE_ACK 0x01
#define RSP_SERVICE 0x02
/************************************************************
ISDN Event/Primitive Definition
************************************************************/
//Primitive
#define ISDN_SETUP_REQ 0x11
#define ISDN_SETUP_IND 0x21
#define ISDN_SETUP_RSP 0x31
#define ISDN_SETUP_CNF 0x41
#define ISDN_DISCONNECT_REQ 0x12
#define ISDN_DISCONNECT_IND 0x22
#define ISDN_RELEASE_REQ 0x32
#define ISDN_RELEASE_IND 0x42
#define ISDN_RELEASE_CNF 0x52
#define ISDN_REJECT_REQ 0x62
#define ISDN_ALERT_REQ 0x13
#define ISDN_ALERT_IND 0x23
#define ISDN_INFO_REQ 0x33
#define ISDN_INFO_IND 0x43
#define ISDN_PROG_REQ 0x53
#define ISDN_PROG_IND 0x63
#define ISDN_SUSPEND_REQ 0x73
#define ISDN_SUSPEND_IND 0x83
#define ISDN_RESUME_REQ 0x93
#define ISDN_RESUME_IND 0xa3
#define ISDN_PROC_REQ 0x14
#define ISDN_PROC_IND 0x24
#define ISDN_MORE_INFO_REQ 0x34
#define ISDN_MORE_INFO_IND 0x44
#define ISDN_NOTI_REQ 0x54
#define ISDN_NOTI_IND 0x64
#define ISDN_STAT_IND 0x74
#define ISDN_SETUP_COMP_REQ 0x84
#define ISDN_SETUP_COMP_IND 0x84
#define ISDN_TIMEOUT_IND 0x15
#define ISDN_RESTART_REQ 0x25
#define ISDN_M_RESTART_REQ 0x35
#define ISDN_RESTART_CNF 0x45
#define ISDN_REATTEMPT_IND 0x55
//ansi
#define ISDN_SERVICE_REQ 0x16
#define ISDN_SERVICE_IND 0x26
#define ISDN_SERVICE_CNF 0x36
#define ISDN_SERVICE_RSP 0x46
#define ISDN_SER_TIMEOUT_IND 0x56
/************************************************************
ISDN Cause Definition
************************************************************/
#define CAUSE_UNASSIGNED 0x01 //unassigned (unallocated) number
#define CAUSE_NOROUTE_NET 0x02 //no route to specified transit network
#define CAUSE_NOROUTE_DES 0x03 //no route to destination
#define CAUSE_NORMAL 0x10 //normal call clearing
#define CAUSE_INVALID_NUM 0x1C //invalid number format(imcomplete number)
#define CAUSE_STAT_ENQ 0x1E //response to status enquiry
#define CAUSE_TEMP_FAIL 0X29 //temporary failure
#define CAUSE_INVALID_CR 0x51 //invalid call reference value
#define CAUSE_CALLID_INUSE 0x54 //call identity in use
#define CAUSE_M_IE_MISS 0x60 //mandatory information element is missing
#define CAUSE_MSG_NONEXI 0x61 //message type non-existent or not implemented
#define CAUSE_MSG_NOTCOMP_NOTIMPL 0x62 //message not compatible with call state or message type non-existent or not implemented
#define CAUSE_IE_NONEXI 0x63 //information element non-existent or not implemented
#define CAUSE_IE_INVALID 0x64 //invalid information element contents
#define CAUSE_MSG_NOTCOMP 0x65 //message not compatible with call state
#define CAUSE_TIMER_EXPIRY 0x66 //recovery on timer expiry
/************************************************************
ISDN Timer Definition (Time Unit = 1s)
************************************************************/
#define ISDN_T301 180 /* 180S */
#define ISDN_T302 15 /* 15S */
#define ISDN_T303 4 /* 4S */
#define ISDN_T304 20 /* 20S */
#define ISDN_T305 30 /* 30S */
#define ISDN_T306 30 /* 30S */
#define ISDN_T307 180 /* 180S */
#define ISDN_T308 4 /* 4S */
#define ISDN_T309 6 /* 6S*/
#define ISDN_T310 10 /* 10S */
#define ISDN_T312 6 /*T303+2S*/
#define ISDN_T313 4 /* 4S */
#define ISDN_T316 120 /* 120S */
#define ISDN_T317 10 /* <T316 */
#define ISDN_T321 40 /* 30S */
#define ISDN_T322 4 /* 4S */
#define ISDN_T40S 40 /* 40S */
#define ISDN_T240S 240 /* 240S */
#define ISDN_T1 1 /* 1S */
#define ISDN_T3M1 120 /* 120S */
#define LINK_MAX_TIME 15000 // 150s
/************************************************************
ISDN Other Definition
************************************************************/
#define IE_MAX_LEN (256)
#define IE_COUNT (13)
//IUA Definition
/*#define IUA_QPTM_MSG 0x05
#define IUA_MGMT_CMD 0xA5
#define IUA_APP 0x1
*/
#endif

View File

@@ -0,0 +1,81 @@
/***********************************************************
Copyright (C), LGC Wireless.
File Name: isdn_debug.h
Description: ISDN Debug
Version: v9.1.0
Author: Gengxin Chen
Create Date: 2008-5-27
History:
<author> <date> <version> <desc>
************************************************************/
#ifndef _ISDN_DEBUG_H
#define _ISDN_DEBUG_H
#include "isdn_rm.h"
#include "../../../pal/pal.h"
//#include "../../../debug/src/include/debug.h"
/*Color Set */
#define COL_WHITE 37
#define COL_RED 31
#define COL_YELLOW 33
#define COL_GREEN 32
#define COL_BLUE 34
#define COL_BROWN 35
#define COL_MEGEN 36
#define COL_GRAY 38
#define COL_HI_WHI 58
#define COL_HI_RED 39
#define COL_HI_YEL 52
#define COL_HI_GRE 51
#define COL_HI_BLU 53
#define COL_HI_BRO 54
#define COL_HI_MEG 55
#define COL_BLACK 30
#define COL_ESC '\033'
typedef struct _isdn_msg_csta //call statistics
{
//receive and send
u32 rv_setup;
u32 sd_setup;
u32 rv_setupAck;
u32 sd_setupAck;
u32 rv_callProc;
u32 sd_callProc;
u32 rv_alert;
u32 sd_alert;
u32 rv_conn;
u32 sd_conn;
u32 rv_connAck;
u32 sd_connAck;
u32 rv_disc;
u32 sd_disc;
u32 rv_rel;
u32 sd_rel;
u32 rv_relComp;
u32 sd_relComp;
//redirect
u32 rd_setup;
u32 rd_setupAck;
u32 rd_callProc;
u32 rd_alert;
u32 rd_conn;
u32 rd_connAck;
u32 rd_disc;
u32 rd_rel;
u32 rd_relComp;
}ISDN_Msg_Csta;
int isdn_debug_init(void);
void isdn_debug_timer(void);
void isdn_log_err(u32 pid,const char *fmt, ...);
void isdn_trace_func(u32 pid,const char *fmt, ...);
void monitor_isdn_msg(u32 pid,u8 *head,IuaMsgStr *msg,u8 col);
void monitor_isdn_port(u32 call_ref,u32 port);
void isdn_msg_csta(u8 msgtype,u8 flag);
#endif

View File

@@ -0,0 +1,33 @@
/***********************************************************
File Name: isdn_ext.h
Description: Public variant definition of ISDN module
Version: v9.0.0
Author: Gengxin Chen
Create Date: 2008-2-28
************************************************************/
#ifndef _ISDN_EXT_H
#define _ISDN_EXT_H
#include "isdn_if.h"
/************************************************************
ISDN
************************************************************/
IsdnMsgStr isdn_sd_msg, isdn_rv_msg;
extern int isdn_init(u8 systemID, u32 interval_ms);
extern void isdn_timer();
/*extern int isdn_bind_sap(ISDN_Sap_Attrib_ *attrib_p);
extern int isdn_modify_sap(u8 sap_id, ISDN_Sap_Attrib_ *attrib_ptr);
extern int isdn_unbind_sap(u8 sap_id);
extern int isdn_add_cg(u8 sap_id, Cg_Attrib_struct *attrib_ptr);
extern int isdn_modify_cg(u16 cg_id, Cg_Attrib_struct *attrib_ptr);
extern int isdn_remove_cg(u16 cg_id);
extern int isdn_add_circuit(u16 cg_id, Circuit_Attrib_struct *attrib_ptr);
extern int isdn_modify_circuit(u16 cg_id, u16 circuit_id, Circuit_Attrib_struct *attrib_ptr);
extern int isdn_remove_circuit(u16 cg_id, u16 circuit_id);*/
extern int isdn_set_run_mode (u8 run_mode, u32 alter_ip);
#endif

View File

@@ -0,0 +1,491 @@
/***********************************************************
Copyright (C), LGC Wireless.
File Name: isdn_ie.h
Description: ISDN information elements structure
Version: v9.0.0
Author: Gengxin Chen
Create Date: 2008-1-17
Remark: M:mandatory, O:optional
History:
<author> <date> <version> <desc>
************************************************************/
#ifndef _ISDN_IE_H
#define _ISDN_IE_H
#include "isdn_public.h"
/************************************************************
ISDN information elements structure
************************************************************/
typedef struct _brCap_b4 //Bearer capability octets 4
{
u8 tran_mode; //Transfer mode M
u8 tran_rate; //Information transfer rate M
u8 rate_mul; //Rate multiplier O
}brCap_b4;
typedef struct _brCap_b5 //Bearer capability octets 5
{
u8 usr_layer1; //User information layer 1 protocol
u8 has_ext_a; //
u8 syn_asy; //Synch/asynch (0/1)
u8 neg; //Negot
u8 usr_rate; //User rate
u8 has_ext_b; //
u8 inter_rate; //Intermediate rate
u8 nic_tx; //NIC on Tx
u8 nic_rx; //NIC on Rx
u8 ctl_tx; //Flow control on Tx
u8 ctl_rx; //Flow control on Rx
// u8 ext_b; //
u8 hdr; //Hdr/no Hdr
u8 mul_fra; //Multiframe;
u8 mode; //Mode
u8 lli_neg; //LLI negot.
u8 assign; //Assignor/ee
u8 inband; //In-band neg.
u8 has_ext_c; //
u8 stop_bit; //Number of stop bits
u8 data_bit; //Number of data bits
u8 par; //Parity
u8 has_ext_d;
u8 du_mode; //Duplex Mode
u8 mod_type; //Modem type
}brCap_b5;
typedef struct _brCap_b7 //Bearer capability octets 7
{
u8 usr_layer3; //User information layer 3 protocol
u8 has_ext_a; //
u8 layer3_a; //Additional layer 3 protocol information (most significant bits)
u8 has_ext_b; //
u8 layer3_b; //Additional layer 3 protocol information (most significant bits)
}brCap_b7;
typedef struct _brCap //Bearer capability
{/*<2A><><EFBFBD>ܵð<DCB5>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>ѡ<EFBFBD>˱<EFBFBD><CBB1>طŵ<D8B7>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E1B9B9><EFBFBD>У<EFBFBD><D0A3><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˱<EFBFBD><CBB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵط<C4B5><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
u8 pres; //element header
u32 ext_flag; //extension domain flag M
u8 code_stan; //Coding standard (00) M
u8 tran_cap; //Information transfer capability M
brCap_b4 b4; //octets 4
brCap_b5 b5; //octets 5 group
u8 usr_layer2; //User information layer 2 protocol
u8 usr_layer3; //User information layer 3 protocol
// brCap_b7 b7; //octets 7
}BrCap;
typedef struct _callId //Call identity
{
u8 pres; //element header
u8 call_id_len;
u8 call_id[8]; //Call identity(IA5)
}CallId;
typedef struct _callStat //Call state
{
u8 pres; //element header
u8 code_stan; //Coding standard
u8 stat_val; //Call state value/global interface state value(state value is coded in binary)
}CallStat;
typedef struct _cdPtyNum //Called party number
{
u8 pres; //element header
u8 num_type; //Type of number
u8 num_plan_id; //Numbering plan identification
u8 num_digit_len;
u8 num_digit[32]; //Number digits(IA5)
}CdPtyNum;
typedef struct _cdPtyAddr //Called party subaddress
{
u8 pres; //element header
u8 addr_type; //Type of subaddress
u8 odd_even; //Odd/even indicator
u8 addr_info_len;
u8 addr_info[20]; //Subaddress information
}CdPtyAddr;
typedef struct _cgPtyNum_b3
{
u8 num_type; //Type of number
u8 num_plan_id; //Numbering plan identification
u8 has_ext_a; //
u8 pres_ind; //Presentation indicator
u8 screen_ind; //Screening indicator
}cgPtyNum_b3;
typedef struct _cgPtyNum //Calling party number
{
u8 pres; //element header
u32 ext_flag; //extension domain flag M
cgPtyNum_b3 b3;
u8 num_digit_len;
u8 num_digit[32]; //Number digits(IA5)
}CgPtyNum, ConnNum;
typedef struct _cgPtyAddr //Calling party subaddress
{
u8 pres; //element header
u8 addr_type; //Type of subaddress
u8 odd_even; //Odd/even indicator
u8 addr_info_len;
u8 addr_info[20]; //subaddress information
}CgPtyAddr;
typedef struct _cause_b3
{
u8 code_stan; //Coding standard
u8 loc; //Location
u8 has_ext_a; //
u8 rec; //Recommendation
}cause_b3;
typedef struct _cause_b5 //diagnostic
{
u8 attrib_num; //attribute number
// u8 has_ext_a;
u8 rej_attrib; //rejected attribute
u8 has_ext_b;
u8 avail_attrib; //available attribute
//Call rejected diagnostic for cause number 21 TODO
}cause_b5;
typedef struct _causeStr //Cause
{
u8 pres; //element header
u32 ext_flag; //
cause_b3 b3; //octet 3
u8 cause_val; //Cause value
u8 dia_num;
cause_b5 dia[8]; //diagnostic
}CauseStr;
typedef struct _chnlId_b3 //Channel identification octets 3
{
u8 int_id_pre; //Interface identifier present M
u8 int_type; //Interface type M
u8 pref_excl; //Preferable/Exclusive M
u8 chnl_ind; //D-channel indicator M
u8 info_chnl_sel; //Infomation channel selection M
u8 int_id; //Interface identifier;
u8 has_chnl; // 1:wiith 3.2 and 3.3, 0:without 3.2 nor 3.3
u8 code_stan; //Coding standard
u8 num_map; //Number/Map
u8 chnl_type; //Channel type/Map element type
u8 chnl_num; //Channel number/Slot map ect
}chnlId_b3;
typedef struct _chnlId //Channel identification
{
u8 pres; //element header
chnlId_b3 b3; //octets 3
}ChnlId;
typedef struct _conLev //Congestion level
{
u8 pres; //element header
u8 con_lev; //Congestion level
}ConLev;
typedef struct _dtTime //Date/time
{
u8 pres; //element header
u8 ext_flag;
u8 year;
u8 month;
u8 day; //M
u8 hour; //O
u8 minute; // O
u8 second; //O
}DtTime;
typedef struct _disp //Display
{
u8 pres; //element header
u8 disp_info_len;
u8 disp_info[18]; //Display information(IA5)
//ansi
u8 asso_info; //Associated information
u8 disp_type; //display type
}Disp;
typedef struct _hLComp_b4 //High layer compatibility octets 4
{
u8 hl_ch_id; //High layer characteristies identification
u8 ex_hl_ch_id; //Extended high layer characteristics identification
u8 ex_vid_ch_id; //EXtended videotelephony characteristics identification
}hLComp_b4;
typedef struct _hLComp //High layer compatibility
{
u8 pres; //element header
u8 code_stan; //Coding standard
u8 intpr; //Interpretation
u8 pre_meth; //Presentation method of protocol profile
hLComp_b4 b4; //octets 4
}HLComp;
typedef struct _kpdFac //Keypad facility
{
u8 pres; //element header
u8 keyfac_info_len;
u8 key_fac_info[32];//Keypad facility information(IA5)
}KpdFac;
typedef struct _lLComp_b3 //Low layer compatibility octets 3
{
u8 code_stan; //Coding standard M
u8 tran_cap; //Information transfer capability M
u8 has_ext_a;
u8 neg_ind; //Negot indicator O
}lLComp_b3;
typedef struct _lLComp_b4 //Low layer compatibility octets 4
{
u8 tran_mode; //Transfer mode
u8 tran_rate; //Information transfer rate
u8 rate_mul; //Rate multiplier
}lLComp_b4;
typedef struct _lLComp_b5 //Low layer compatibility octets 5
{
u8 layer1_id; //Layer 1 identifier
u8 usr_layer1; //User information layer 1 protocol
u8 has_ext_a; //
u8 syn_asy; //Synch./asynch.
u8 neg; //Negot.
u8 usr_rate; //User Rate
u8 has_ext_b; //
u8 inter_rate; //intermediate rate
u8 nic_tx; //NIC on Tx
u8 nic_rx; //NIC on Rx
u8 ctl_tx; //Flow control on Tx
u8 ctl_rx; //Flow control on Rx
// u8 ext_b; //
u8 hdr; //Hdr/no Hdr
u8 mul_fra; //Multiframe;
u8 mode; //Mode
u8 lli_neg; //LLI negot.
u8 assign; //Assignor/ee
u8 inband; //In-band negot.
u8 has_ext_c; //
u8 stop_bit; //Number of stop bits
u8 data_bit; //Number of data bits
u8 par; //Parity
u8 has_ext_d;
u8 du_mode; //Duplex Mode
u8 mod_type; //Modem type
}lLComp_b5;
typedef struct _lLComp_b6 //Low layer compatibility octets 6
{
u8 layer2_id; //layer 2 identifier
u8 usr_layer2; //User information layer 2 protocol
u8 mode; //Mode
u8 q933_use; //Q.933 use
u8 usr_layer2_info; //User specification layer 2 protocol information
u8 win_size; //Window size(k)
}lLComp_b6;
typedef struct _lLComp_b7 //Low layer compatibility octets 7
{
u8 layer3_id; //layer 3 identifier
u8 usr_layer3; //User information layer 3 protocol
u8 usr_layer3_info; //Optional layer 3 protocol information
u8 mode; //Mode
u8 def_pac_size; //Default packet size
u8 pac_win_size; //Packet window size
u8 layer3_a; //Additional layer 3 protocol information (most significant bits)
u8 layer3_b; //Additional layer 3 protocol information (most significant bits)
}lLComp_b7;
typedef struct _lLComp //Low layer compatibility
{
u8 pres; //element header
u32 ext_flag;
lLComp_b3 b3; //octets 3 M
lLComp_b4 b4; //octets 4 O
lLComp_b5 b5; //octets 5
lLComp_b6 b6; //octets 6
lLComp_b7 b7; //octets 7
//ansi TODO
}LLComp;
typedef struct _ntSpFac_b3 //Network-specific facilities octets 3
{
u8 len_net_id; //Length of network identification M //<2F><>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 net_id_type; //Type of network identification O
u8 net_id_plan; //Network identification plan
u8 net_id; //Network identification(IA5) ect
}ntSpFac_b3;
typedef struct _ntSpFac //Network-specific facilities
{
u8 pres; //element header
ntSpFac_b3 b3; //octets 3 M
u8 spec; //Network-specific facility specification M
//ansi
u8 fac_val; //Facility coding value
u8 ser_par; //Service parameters
}NtSpFac;
typedef struct _notifyInd //Notification indicator
{
u8 pres; //element header
u8 notify_descr; //Notification description
//ansi TODO
}NotifyInd;
typedef struct _prgInd //Progress indicator
{
u8 pres; //element header
u8 code_stan; //Coding standard
u8 loc; //Location
u8 prg_descr; //Progress description
}PrgInd;
typedef struct _rptInd //Repeat indicator
{
u8 pres; //element header
// u8 rpt_ind; //Repeat indication
}RptInd;
typedef struct _restartInd //Restart indicator
{
u8 pres; //element header
u8 clas; //class
}RestartInd;
typedef struct _segMsg //Segmented message
{
u8 pres; //element header
u8 seg_ind; //First segment indicator
u8 other_num; //Number of segments remaining
u8 seg_type; //Segmented message type
}SegMsg;
typedef struct _sdComp //Sending complete
{
u8 pres; //element header
// u8 sd_comp; //sending complete <09><><EFBFBD><EFBFBD>
}SdComp;
typedef struct _sign //Signal
{
u8 pres; //element header
u8 sign_val; //Signal value
}Sign;
typedef struct _tranNtSel //Transit network selection
{
u8 pres; //element header
u8 net_id_type; //Type of network identification
u8 net_id_plan; //Network identification plan
u8 net_id; //Network identification(IA5) ect
}TranNtSel;
typedef struct _usrUsr //User-user
{
u8 pres; //element header
u8 pro_discr; //Protocol discriminator
u8 usr_info_len;
u8 usr_info[258]; //User information
}UsrUsr;
//supplementary services ansi
typedef struct _fac //facility
{
}Fac;
/* the same to the CgPtyNum
typedef struct _connNum //connected number
{
}ConnNum;*/
typedef struct _redirNum_b3 //redirection number octet 3
{
u8 num_type; //Type of number
u8 num_plan_id; //Numbering plan identification
u8 org_num_stat; //Origin of number and presentation status
u8 redir_rs; //Reason for redirection
}redirNum_b3;
typedef struct _redirNum //redirection number
{
u8 pres; //element header
redirNum_b3 b3; //octet 3
u8 num_digit_len;
u8 num_digit[32]; //Number digits(IA5)
}RedirNum;
typedef struct _chgStat //change status
{
u8 pres; //element header
u8 pref; //Preference
u8 new_stat; //New status
}ChgStat;
/************************************************************
ISDN information elements functions interface
************************************************************/
u8 itu_encode_br_cap(u8 *dst, BrCap *src);
int itu_decode_br_cap(BrCap *dst, u8 *src, u8 len);
u8 isdn_encode_br_cap(u8 *dst, BrCap *src);
int isdn_decode_br_cap(BrCap *dst, u8 *src, u8 len);
u8 isdn_encode_cause(u8 *dst, CauseStr *src);
int isdn_decode_cause(CauseStr *dst, u8 *src, u8 len);
u8 isdn_encode_call_id(u8 *dst, CallId *src);
int isdn_decode_call_id(CallId *dst, u8 *src, u8 len);
u8 isdn_encode_call_stat(u8 *dst, CallStat *src);
int isdn_decode_call_stat(CallStat *dst, u8 *src, u8 len);
u8 qsig_encode_chnl_id(u8 *dst, ChnlId *src);
int qsig_decode_chnl_id(ChnlId *dst, u8 *src, u8 len);
u8 isdn_encode_chnl_id(u8 *dst, ChnlId *src);
int isdn_decode_chnl_id(ChnlId *dst, u8 *src, u8 len);
u8 isdn_encode_prg_ind(u8 *dst, PrgInd *src);
int isdn_decode_prg_ind(PrgInd *dst, u8 *src, u8 len);
u8 ansi_encode_ntsp_fac(u8 *dst, NtSpFac *src);
int ansi_decode_ntsp_fac(NtSpFac *dst, u8 *src, u8 len);
u8 isdn_encode_ntsp_fac(u8 *dst, NtSpFac *src);
int isdn_decode_ntsp_fac(NtSpFac *dst, u8 *src, u8 len);
u8 ansi_encode_notify_ind(u8 *dst, NotifyInd *src);
int ansi_decode_notify_ind(NotifyInd *dst, u8 *src, u8 len);
u8 isdn_encode_notify_ind(u8 *dst, NotifyInd *src);
int isdn_decode_notify_ind(NotifyInd *dst, u8 *src, u8 len);
u8 isdn_encode_disp(u8 *dst, Disp *src);
int isdn_decode_disp(Disp *dst, u8 *src, u8 len);
u8 isdn_encode_dt_time(u8 *dst, DtTime *src);
int isdn_decode_dt_time(DtTime *dst, u8 *src, u8 len);
u8 isdn_encode_kpd_fac(u8 *dst, KpdFac *src);
int isdn_decode_kpd_fac(KpdFac *dst, u8 *src, u8 len);
u8 isdn_encode_sign(u8 *dst, Sign *src);
int isdn_decode_sign(Sign *dst, u8 *src, u8 len);
u8 isdn_encode_cg_num(u8 *dst, CgPtyNum *src);
int isdn_decode_cg_num(CgPtyNum *dst, u8 *src, u8 len);
u8 isdn_encode_cg_addr(u8 *dst, CgPtyAddr *src);
int isdn_decode_cg_addr(CgPtyAddr *dst, u8 *src, u8 len);
u8 isdn_encode_cd_num(u8 *dst, CdPtyNum *src);
int isdn_decode_cd_num(CdPtyNum *dst, u8 *src, u8 len);
u8 isdn_encode_cd_addr(u8 *dst, CdPtyAddr *src);
int isdn_decode_cd_addr(CdPtyAddr *dst, u8 *src, u8 len);
u8 isdn_encode_tran_sel(u8 *dst, TranNtSel *src);
int isdn_decode_tran_sel(TranNtSel *dst, u8 *src, u8 len);
u8 isdn_encode_restart_ind(u8 *dst, RestartInd *src);
int isdn_decode_restart_ind(RestartInd *dst, u8 *src, u8 len);
u8 isdn_encode_ll_comp(u8 *dst, LLComp *src);
int isdn_decode_ll_comp(LLComp *dst, u8 *src, u8 len);
u8 isdn_encode_hl_comp(u8 *dst, HLComp *src);
int isdn_decode_hl_comp(HLComp *dst, u8 *src, u8 len);
u8 isdn_encode_usr_usr(u8 *dst, UsrUsr *src);
int isdn_decode_usr_usr(UsrUsr *dst, u8 *src, u8 len);
//ansi
u8 ansi_encode_chg_stat(u8 *dst, ChgStat *src);
int ansi_decode_chg_stat(ChgStat *dst, u8 *src, u8 len);
u8 ansi_encode_redir_num(u8 *dst, RedirNum *src);
int ansi_decode_redir_num(RedirNum *dst, u8 *src, u8 len);
//QSIG
u8 qsig_encode_conn_num(u8 *dst, ConnNum *src);
int qsig_decode_conn_num(ConnNum *dst, u8 *src, u8 len);
#endif

View File

@@ -0,0 +1,119 @@
/***********************************************************
Copyright (C), LGC Wireless.
File Name: isdn_if.h
Description: ISDN interface declaration for wxc2main
Version: v9.0.0
Author: Gengxin Chen
Create Date: 2008-1-17
History:
<author> <date> <version> <desc>
************************************************************/
#ifndef _ISDN_IF_H
#define _ISDN_IF_H
#include "isdn_msg.h"
#include "isdn_inc.h"
/************************************************************
ISDN Module parameter structure
************************************************************/
//Send to upper layer primitives, save data to structure
typedef int f_isdn_setup_ind(Pst *pst, IsdnSetup *ptr); //Setup indication
typedef int f_isdn_setup_cnf(Pst *pst, IsdnConn *ptr); //Setup confirm
typedef int f_isdn_proc_ind(Pst *pst, IsdnCallProc *ptr); //Proceeding indication
typedef int f_isdn_alert_ind(Pst *pst, IsdnAlert *ptr); //Alerting indication
typedef int f_isdn_disc_ind(Pst *pst, IsdnDisc *ptr); //Disconnect indication
typedef int f_isdn_rel_ind(Pst *pst, IsdnRel *ptr); //Release indication
typedef int f_isdn_rel_cnf(Pst *pst, IsdnRelComp *ptr); //Release confirm
typedef int f_isdn_rel_cnf_err(Pst *pst, IsdnRelComp *ptr); //Release confirm error
typedef int f_isdn_prog_ind(Pst *pst, IsdnProg *ptr); //Progress indication
typedef int f_isdn_info_ind(Pst *pst, IsdnInfo *ptr); //Info indication
typedef int f_isdn_minfo_ind(Pst *pst, IsdnSetupAck *ptr); //More info indication //IsdnSetupAck <20><> IsdnInfo
typedef int f_isdn_noti_ind(Pst *pst, IsdnNoti *ptr); //Notify indication
typedef int f_isdn_stat_ind(Pst *pst, IsdnStatus *ptr); //Status indication
typedef int f_isdn_stat_ind_err(Pst *pst, IsdnStatus *ptr); //Status indication(error)
typedef int f_isdn_resu_ind(Pst *pst, IsdnResuRejReq *ptr); //Resume indication
typedef int f_isdn_rej_ind(Pst *pst, IsdnResuRejReq *ptr); //Reject indication
typedef int f_Isdn_susp_ind(Pst *pst, IsdnSusp *ptr); //Suspend indication
typedef int f_isdn_restart_req(Pst *pst, IsdnRestart *ptr); //Restart request
typedef int f_isdn_rest_cnf(Pst *pst, IsdnRestAck *ptr); //Restart confirm
typedef int f_isdn_timeout_ind(Pst *pst); //TIMEOUT
typedef int f_isdn_reattempt_ind(Pst *pst); //REATTEMPT
//ansi
typedef int f_isdn_service_ind(Pst *pst, IsdnService *ptr); //Service
typedef int f_isdn_service_cnf(Pst *pst, IsdnServAck *ptr); //Service Ack
typedef int f_isdn_ser_timeout_ind(Pst *pst); //Service TIMEOUT
typedef struct _isdn_eventhandle_struct
{
f_isdn_setup_ind *h_isdn_setup_ind;
f_isdn_setup_cnf *h_isdn_setup_cnf;
f_isdn_proc_ind *h_isdn_proc_ind;
f_isdn_alert_ind *h_isdn_alert_ind;
f_isdn_disc_ind *h_isdn_disc_ind;
f_isdn_rel_ind *h_isdn_rel_ind;
f_isdn_rel_cnf *h_isdn_rel_cnf;
f_isdn_rel_cnf_err *h_isdn_rel_cnf_err;
f_isdn_prog_ind *h_isdn_prog_ind;
f_isdn_info_ind *h_isdn_info_ind;
f_isdn_minfo_ind *h_isdn_minfo_ind;
f_isdn_noti_ind *h_isdn_noti_ind;
f_isdn_stat_ind *h_isdn_stat_ind;
f_isdn_stat_ind_err *h_isdn_stat_ind_err;
f_isdn_resu_ind *h_isdn_resu_ind;
f_isdn_rej_ind *h_isdn_rej_ind;
// f_isdn_susp_ind *h_isdn_susp_ind;
f_isdn_restart_req *h_isdn_restart_req;
f_isdn_rest_cnf *h_isdn_rest_cnf;
f_isdn_timeout_ind *h_isdn_timeout_ind;
f_isdn_reattempt_ind *h_isdn_reattempt_ind;
//ansi
f_isdn_service_ind *h_isdn_service_ind;
f_isdn_service_cnf *h_isdn_service_cnf;
f_isdn_ser_timeout_ind *h_isdn_ser_timeout_ind;
}ISDN_EventHandle_struct;
typedef struct _isdn_sap_attrib_
{
ISDN_EventHandle_struct event_handle;
}ISDN_Sap_Attrib_;
/************************************************************
ISDN Module interface
************************************************************/
//Receive upper layer interface primitives
extern int isdn_setup_req(Pst *pst, IsdnSetup *ptr); //Setup request
extern int isdn_setup_resp(Pst *pst, IsdnConn *ptr); //Setup response
//extern int isdn_setup_comp_req(Pst *pst, IsdnConnAck *ptr); //Setup complete request
extern int isdn_call_proc_req(Pst *pst, IsdnCallProc *ptr); //Proceeding request
extern int isdn_alert_req(Pst *pst, IsdnAlert *ptr); //Alerting request
extern int isdn_disc_req(Pst *pst, IsdnDisc *ptr); //Disconnect request
extern int isdn_rel_req(Pst *pst, IsdnRel *ptr); //Release request
extern int isdn_rej_req(Pst *pst, IsdnRelComp *ptr); //Reject request
extern int isdn_prog_req(Pst *pst, IsdnProg *ptr); //Progress request
extern int isdn_info_req(Pst *pst, IsdnInfo *ptr); //Infomation request
extern int isdn_m_info_req(Pst *pst, IsdnSetupAck *ptr); //More Infomation request //IsdnSetupAck <20><> IsdnInfo
extern int isdn_noti_req(Pst *pst, IsdnNoti *ptr); //Notify request
extern int isdn_rej_req(Pst *pst, IsdnRelComp *ptr); //Reject request
extern int isdn_resu_resp(Pst *pst, IsdnResuResp *ptr); //Resume response
extern int isdn_resu_rej_req(Pst *pst, IsdnResuRejReq *ptr); //Resume reject request
extern int isdn_susp_resp(Pst *pst, IsdnSusp *ptr); //Suspend response
extern int isdn_susp_rej_req(Pst *pst, IsdnSuspRejReq *ptr); //Suspend reject request
extern int isdn_restart_req(Pst *pst, IsdnRestart *ptr); //Restart request
extern int isdn_m_restart_req(Pst *pst, IsdnRestart *ptr); //Management restart request
extern int isdn_restart_cnf(Pst *pst, IsdnRestAck *ptr); //Restart confirm
extern int isdn_timeout(Pst *pst); //Time out
//ansi
extern int isdn_service_bc_req(Pst *pst, IsdnService *ptr); //maintenance B-channel SERVICE request
extern int isdn_service_bc_rsp(Pst *pst, IsdnServAck *ptr); //maintenance B-channel SERVICE response
#endif

View File

@@ -0,0 +1,27 @@
/***********************************************************
File Name: isdn_inc.h
Description: Public variant definition of ISDN module
Version: v9.0.0
Author: Gengxin Chen
Create Date: 2008-2-28
************************************************************/
#ifndef _ISDN_INC_H
#define _ISDN_INC_H
#include <netinet/in.h>
#include "../../../public/src/include/license_id.h"
#include "../../../m2ua/src/include/m2ua.h"
//#include "../../../public/src/include/proto_pub.h"
#include "../../../iptrans/src/include/iptrans.h"
#include "../../../debug/src/include/debug.h"
#include "../../../pal/pal.h"
//#include "../../../../mss/msc/mng/param.h"
/************************************************************
ISDN
************************************************************/
extern int wxc2_get_license(int functionID);
extern int put_xua_msg(xua_up_msg_t *data_ptr);
#endif

View File

@@ -0,0 +1,333 @@
/***********************************************************
Copyright (C), LGC Wireless.
File Name: isdn_msg.h
Description: ISDN message structure or correlation
Version: v9.0.0
Author: Gengxin Chen
Create Date: 2008-1-17
Remark: M:mandatory, O:optional
History:
<author> <date> <version> <desc>
************************************************************/
#ifndef _ISDN_MSG_H
#define _ISDN_MSG_H
#include "isdn_const.h"
#include "isdn_ie.h"
/************************************************************
ISDN mandatory information elements structure
************************************************************/
typedef struct _msgMan //Message mandatory information elements
{
u8 proto_Discr; //Protocol discriminator
u8 cr_len; //Length of call reference value(in octets)
u8 call_ref[2]; //Call reference value
u8 msg_type; //Message type
}MsgMan;
/************************************************************
ISDN message structure
************************************************************/
typedef struct _isdnAlert //ALERTING
{
ChnlId chnl_id; //Channel identification O/M
PrgInd prg_ind; //Progress indicator O
BrCap br_cap; //Bearer capability O
Disp disp; //Display
Sign sign; //Signal
HLComp hl_comp; //High layer compatibility
//ansi
Fac facility; //facility
}IsdnAlert;
typedef struct _isdnCallProc //CALL PROCEEDING
{
ChnlId chnl_id; //Channel identification O/M
BrCap br_cap; //Bearer capability O
PrgInd prg_ind; //Progress indicator
Disp disp; //Display
HLComp hl_comp; //High layer compatibility
}IsdnCallProc;
typedef struct _isdnConn //CONNECT
{
ChnlId chnl_id; //Channel identification O/M
BrCap br_cap; //Bearer capability O
PrgInd prg_ind; //Progress indicator
Disp disp; //Display
DtTime dt_time; //Date/time
Sign sign; //Signal
LLComp ll_comp; //Low layer compatibility
HLComp hl_comp; //High layer compatibility
//QSIG
ConnNum conn_num; //Connected number
//Connected subaddress
}IsdnConn;
typedef struct _isdnConnAck //CONNECT ACKNOWLEDGE
{
Disp disp; //Display O
Sign sign; //Signal
}IsdnConnAck;
typedef struct _isdnDisc //DISCONNECT
{
CauseStr cause; //Cause M
PrgInd prg_ind; //Progress indicator O
Disp disp; //Display
Sign sign; //Signal
}IsdnDisc;
typedef struct _isdnInfo //INFORMATION
{
SdComp sd_comp; //Sending complete O
Disp disp; //Display
KpdFac kpd_fac; //Keypad facility
Sign sign; //Signal
CdPtyNum cd_pty_num; //Called party number
}IsdnInfo;
typedef struct _isdnNoti //NOTIFY
{
NotifyInd notify_ind; //Notification indicator M
Disp disp; //Display O
BrCap br_cap; //Bearer capability O
}IsdnNoti;
typedef struct _isdnProg //PROGRESS
{
PrgInd prg_ind; //Progress indicator M
BrCap br_cap; //Bearer capability O
CauseStr cause; //Cause O
Disp disp; //Display
HLComp hl_comp; //High layer compatibility
//ansi
Fac facility; //facility
}IsdnProg;
typedef struct _isdnRel //RELEASE
{
CauseStr cause; //Cause O
Disp disp; //Display
Sign sign; //Signal
}IsdnRel, IsdnRelComp;
/*typedef struct _isdnRelComp //RELEASE COMPLETE
{
CauseStr cause; //Cause O
Disp disp; //Display
Sign sign; //Signal
}IsdnRelComp;
*/
typedef struct _isdnRestart //Restart
{
ChnlId chnl_id; //Channel identification O
RestartInd restart_ind; //Restart indicator M
Disp disp; //Display
}IsdnRestart, IsdnRestAck;
typedef struct _isdnSetup //SETUP
{
BrCap br_cap; //Bearer capability M
ChnlId chnl_id; //Channel identification O/M
PrgInd prg_ind; //Progress indicator
NtSpFac nt_sp_fac; //Network specific facilities
Disp disp; //Display
CgPtyNum cg_pty_num; //Calling party number
CdPtyNum cd_pty_num; //Called party number
TranNtSel tran_nt_sel; //Transit network selection
SdComp sd_comp; //Sending complete O
RptInd rpt_ind; //Repeat indicator O
DtTime dt_time; //Date/time
KpdFac kpd_fac; //Keypad facility
Sign sign; //Signal
CgPtyAddr cg_pty_addr; //Calling party subaddress
CdPtyAddr cd_pty_addr; //Called party subaddress
LLComp ll_comp; //Low layer compatibility
HLComp hl_comp; //High layer compatibility
//ansi
Fac facility; //facility
RedirNum redir_num; //Redirection number
// OrgCdNum org_cd_num; //original called number
}IsdnSetup;
typedef struct _isdnSetupAck //SETUP ACKNOWLEDGE
{
ChnlId chnl_id; //Channel identification O
PrgInd prg_ind; //Progress indicator
Disp disp; //Display
Sign sign; //Signal
}IsdnSetupAck;
typedef struct _isdnStatus //STATUS
{
CauseStr cause; //Cause M
CallStat call_stat; //Call state M
Disp disp; //Display O
}IsdnStatus;
typedef struct _isdnStatEnq //STATUS ENQUIRY
{
Disp disp; //Display O
}IsdnStatEnq;
typedef struct _isdnResuResp
{
}IsdnResuResp;
typedef struct _isdnResuRejReq
{
}IsdnResuRejReq;
typedef struct _isdnSusp
{
}IsdnSusp;
typedef struct _isdnSuspRejReq
{
}IsdnSuspRejReq;
typedef struct _isdnTimeout
{
}IsdnTimeout;
//ansi
typedef struct _isdnService //Service
{
ChgStat chg_stat; //change status M
ChnlId chnl_id; //channel identification M
}IsdnService, IsdnServAck;
typedef struct _isdnFac //Facility
{
}IsdnFac;
typedef struct _isdnMsgStr
{
MsgMan msg_m;
union
{
/*******Call establishment messages*******/
IsdnAlert alert; //alerting
IsdnCallProc callProc; //Call proceeding
IsdnConn conn; //Connect
IsdnConnAck connAck; //Connect acknowledge
IsdnProg prog; //progress
IsdnSetup setup; //setup
IsdnSetupAck setupAck; //Setup acknowledge
/*******Call information phase messages:*******/
IsdnResuRejReq resuRejReq; //resume reject require
/*******Call clearing messages:*******/
IsdnDisc disc; //disconnect
IsdnRel rel; //release
IsdnRelComp relComp; //release complete
IsdnRestart restart; //restart
IsdnRestAck restAck; //restart Acknowledge
/*******Miscellaneous messages:*******/
IsdnInfo info; //
IsdnNoti noti; //
IsdnStatus status; //
IsdnStatEnq statEnq; //
/*******Maintenance messages*******/
IsdnService service; //service
IsdnServAck servAck; //service acknowledge
}msg_list;
}IsdnMsgStr;
typedef struct _IuaMsgStr
{
u8 pad[25];
u8 msg_class; /*xua msg type=0x05*/
u8 e1_no; /* E1 number */
u16 msg_length __attribute__((packed)); /* ISDN Message length */
union
{
struct
{
u8 mtp3_ip; /* reserved */
u8 opercode; /* 1=Out Of Service 5=In Service 6=Processor Outage*/
u8 alarmcode;
}lkmsg;
struct
{
MsgMan msg_m;
u8 ie_content[IE_MAX_LEN]; /* information elements Content */
}isdn_msg; /*isdn message content*/
}msgcontent;
}IuaMsgStr;
/************************************************************
ISDN timer structure
************************************************************/
typedef struct _isdnTimerStr //<2F><><EFBFBD><EFBFBD>, <20>м<EFBFBD><D0BC><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD>
{
u16 t301;
u16 t302;
u16 t303;
u16 t304;
u16 t305;
u16 t306;
u16 t307;
u16 t308;
u16 t309;
u16 t310;
u16 t312;
u16 t313;
u16 t316;
u16 t317;
u16 t321;
u16 t322;
u16 t1s;
u16 t40s;
u16 t240s;
//ansi
u16 t3M1;
}IsdnTimerStr;
IsdnTimerStr isdn_timer_var;
IuaMsgStr iua_sd_msg, iua_rv_msg;
#endif

View File

@@ -0,0 +1,56 @@
/***********************************************************
Copyright (C), LGC Wireless.
File Name: isdn_public.h
Description: Redefine type byname
Version: v9.0.0
Author: Gengxin Chen
Create Date: 2008-1-18
History:
<author> <date> <version> <desc>
************************************************************/
#ifndef _ISDN_PUBLIC_H_
#define _ISDN_PUBLIC_H_
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <assert.h>
#ifndef _T_U8
#define _T_U8
typedef unsigned char u8;
#endif
#ifndef _T_U16
#define _T_U16
typedef unsigned short u16;
#endif
#ifndef _T_U32
#define _T_U32
typedef unsigned int u32;
#endif
#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
#define ISDN_CM_OK 1 //Command request success
#define ISDN_CM_FAILED 0 //Command request failed
#endif

View File

@@ -0,0 +1,151 @@
/***********************************************************
File Name: isdn_rm.h
Description: ISDN Resource Management declaration
Version: v9.0.0
Author: Gengxin Chen
Create Date: 2008-1-23
************************************************************/
#ifndef _ISDN_RM_H
#define _ISDN_RM_H
#include "isdn_if.h"
#include "isdn_inc.h"
/************************************************************
ISDN Resource structure
************************************************************/
#define ISDN_MAX_SAP 16
#define ISDN_MAX_CG 256
#define ISDN_MAX_CIRCUIT 256
#define ISDN_MAX_PORT 8192
#define ISDN_CIRCUIT_CIC 32
/*
typedef struct _isdn_cg_attrib_
{
// u8 variant_type;
u8 priority; //0:reattempt; 1:discard
u8 network_id; //Network identifier
u32 tg_id;
}ISDN_Cg_Attrib_;
typedef struct _isdn_circuit_attrib_
{
u8 plat_id;
u8 cic_range;
u32 head_cic;
u32 circuit_id;
}ISDN_Circuit_Attrib_;
typedef struct _isdn_sap_struct
{
u8 enable;
ISDN_Sap_Attrib_ attrib;
}ISDN_Sap_struct;
typedef struct _isdn_cg_struct
{
u8 enable;
u8 sap_id;
u8 circuit_num;
u8 circuit_used[ISDN_MAX_CIRCUIT];
Cg_Attrib_struct attrib;
}ISDN_Cg_struct;
typedef struct _isdn_circuit_struct
{
u8 enable;
u16 cg_id;
u8 user_network_if;
u8 interface_id;
u8 restart_clas; //restart indicator class
u8 lk3_status;
u8 lk2_status;
u8 dc_status; //ansi maintenance D-channel status
u8 heartbeat_time;
Circuit_Attrib_struct attrib;
}ISDN_Circuit_struct;
*/
typedef struct _isdn_cic_state_
{
u8 call_state;
u8 maintenance_state; //ansi maintenance B-channel state blo_state
}ISDN_CIC_state_;
typedef struct _isdn_fsm_state_
{
int cpc_state;
int m_state; //bls_state and blr_state
}ISDN_Fsm_state_;
typedef struct _isdn_link_struct
{
u8 enable;
// u8 circuit_id;
u8 restart_clas; //restart indicator class
u8 lk3_status;
u8 lk2_status;
u8 dc_status; //ansi maintenance D-channel status
u16 plat_heartbeat_time; //to another plat
u16 link_heartbeat_time; //from iua
}ISDN_Link_struct;
typedef struct _isdn_port_struct
{
u8 enable;
u16 call_ref;
u8 callout_fg; //<2F><><EFBFBD><EFBFBD>λ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>DZ<EFBFBD><C7B1>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD>
u16 timer_flag;
u32 w_time;
u32 su_proc_id; //for normal call
u8 pre_send_msg;
u8 msg_cmd;
u8 primitive_cmd;
u8 g_pri_cmd;
u8 timeout_fg; //0:never timeout, 1:once timeout
u32 cic_val;
ISDN_CIC_state_ cic_state;
ISDN_Fsm_state_ fsm_state;
int trace_flag;
}ISDN_Port_struct;
typedef struct _isdn_attrib_struct
{
u8 systemID;
u8 isdn_run_mode;
u32 isdn_remote_ip;
}ISDN_Attrib_struct;
typedef struct _isdn_resource_pond
{
// ISDN_Sap_struct sap_pond[ISDN_MAX_SAP];
// ISDN_Cg_struct cg_pond[ISDN_MAX_CG];
// ISDN_Circuit_struct circuit_pond[ISDN_MAX_CIRCUIT];
ISDN_Link_struct link_pond[ISDN_MAX_CIRCUIT];
// u8 e1_start;
ISDN_Port_struct port_pond[ISDN_MAX_PORT];
ISDN_Attrib_struct attrib;
}ISDN_Resource_Pond;
ISDN_Resource_Pond isdn_rs;
/************************************************************
ISDN Resource functions interface
************************************************************/
u32 find_port_by_callref(u16 cref, u16 circuit_id);
extern int find_port_by_sap(Pst *pst);
extern u32 isdn_assign_port(u16 circuit_id);
extern u32 find_port_by_cic(u32 cic, u16 circuit_id);
extern int find_circuit_by_interfaceId(int cg_id, u8 interface_id);
#endif

1373
plat/isdn/src/isdn_debug.c Normal file

File diff suppressed because it is too large Load Diff

3124
plat/isdn/src/isdn_fsm.c Normal file

File diff suppressed because it is too large Load Diff

1665
plat/isdn/src/isdn_ie.c Normal file

File diff suppressed because it is too large Load Diff

3439
plat/isdn/src/isdn_msg.c Normal file

File diff suppressed because it is too large Load Diff

515
plat/isdn/src/isdn_rm.c Normal file
View File

@@ -0,0 +1,515 @@
/***********************************************************
Copyright (C), LGC Wireless.
File Name: isdn_rm.c
Description: ISDN Resource Management
Version: v9.0.0
Author: Gengxin Chen
Create Date: 2008-2-19
History:
<author> <date> <version> <desc>
************************************************************/
#include "./include/isdn_const.h"
#include "../../m2ua/src/include/m2ua_const.h"
#include "./include/isdn_rm.h"
#include "./include/isdn_debug.h"
#include "./include/isdn_ext.h"
#include "./include/isdn_inc.h"
extern int isdn_receive_msg();
extern int isdn_redirect_receive();
extern void isdn_send_heartbeat(int link_id);
extern void isdn_cpc_timer(u32 pid);
extern void maintenance_timer(u32 pid);
extern void isdn_restart_timer(u32 pid);
extern void service_dc_proc(u32 pid);
extern void isdn_restart_ctrl(u32 pid);
extern int trans_callref_sd_rest_req(u32 pid, u8 g_pri_cmd);
/*************************************************************
Function: timer_init
Description: initialize the timers of isdn
Input: interval_ms:time cycle
Return: NULL
*************************************************************/
static void timer_init(u32 interval_ms)
{
isdn_timer_var.t301 = ISDN_T301 * 1000 / interval_ms;
isdn_timer_var.t302 = ISDN_T302 * 1000 / interval_ms;
isdn_timer_var.t303 = ISDN_T303 * 1000 / interval_ms;
isdn_timer_var.t304 = ISDN_T304 * 1000 / interval_ms;
isdn_timer_var.t305 = ISDN_T305 * 1000 / interval_ms;
isdn_timer_var.t306 = ISDN_T306 * 1000 / interval_ms;
isdn_timer_var.t307 = ISDN_T307 * 1000 / interval_ms;
isdn_timer_var.t308 = ISDN_T308 * 1000 / interval_ms;
isdn_timer_var.t309 = ISDN_T309 * 1000 / interval_ms;
isdn_timer_var.t310 = ISDN_T310 * 1000 / interval_ms;
isdn_timer_var.t312 = ISDN_T312 * 1000 / interval_ms;
isdn_timer_var.t313 = ISDN_T313 * 1000 / interval_ms;
isdn_timer_var.t316 = ISDN_T316 * 1000 / interval_ms;
isdn_timer_var.t317 = ISDN_T317 * 1000 / interval_ms;
isdn_timer_var.t321 = ISDN_T321 * 1000 / interval_ms;
isdn_timer_var.t322 = ISDN_T322 * 1000 / interval_ms;
isdn_timer_var.t1s = ISDN_T1 * 1000 / interval_ms + 20;
isdn_timer_var.t3M1 = ISDN_T3M1 * 1000 / interval_ms;
}
/*************************************************************
Function: isdn_init
Description: initialize the parameters of isdn
Input: systemID:plat id, interval_ms:time cycle
Return: ISDN_CM_OK:success
*************************************************************/
int isdn_init(u8 systemID, u32 interval_ms)
{
u32 stack_size;
if(interval_ms == 0)
interval_ms = 10;
printf("Start ISDN module init...\n");
memset(&isdn_rs, 0, sizeof(ISDN_Resource_Pond));
memset(&isdn_timer_var, 1, sizeof(IsdnTimerStr));
memset(&isdn_rv_msg, 0, sizeof(IsdnMsgStr));
memset(&isdn_sd_msg, 0, sizeof(IsdnMsgStr));
memset(&iua_rv_msg, 0, sizeof(IuaMsgStr));
memset(&iua_sd_msg, 0, sizeof(IuaMsgStr));
timer_init(interval_ms);
isdn_rs.attrib.systemID = systemID;
isdn_rs.attrib.isdn_remote_ip = 0;
isdn_rs.attrib.isdn_run_mode = 0;
stack_size = sizeof(ISDN_Resource_Pond) + sizeof(IsdnTimerStr);
isdn_debug_init();
printf("ISDN module init completed, stack size: %ld bytes\n", stack_size);
return ISDN_CM_OK;
}
/*************************************************************
Function: isdn_sd_link
Description: isdn send link command to iua
Input: iua_id:link number, opercode:link command parameter
Return: ISDN_CM_OK:success
*************************************************************/
int isdn_sd_link(u8 link_id, u8 opercode)
{
IuaMsgStr isdn_lk;
isdn_lk.msg_class = IUA_MGMT_CMD;
isdn_lk.e1_no = link_id;
isdn_lk.msg_length = htons(0x0003);
isdn_lk.msgcontent.lkmsg.opercode = opercode;
put_xua_msg((xua_up_msg_t*)&isdn_lk.msg_class);
return ISDN_CM_OK;
}
/*************************************************************
Function: isdn_link_ctrl
Description: isdn link control
Input: NULL
Return: NULL
*************************************************************/
void isdn_link_ctrl()
{
int i, link_id;
const pal_circuit_struct *circuit_ptr = NULL;
const pal_cg_struct *cg_ptr = NULL;
for(i = 0; i < ISDN_MAX_CIRCUIT; i++) //for timer //setup link
{
circuit_ptr = pal_circuit_ptr(i);
if(circuit_ptr == NULL)
continue;
if(circuit_ptr->enable == 0)
continue;
if((isdn_rs.attrib.isdn_run_mode == ISDN_DUAL_MODE) &&
(circuit_ptr->attrib.plat_id != isdn_rs.attrib.systemID))
continue;
cg_ptr = pal_cg_ptr(circuit_ptr->cg_id);
if(cg_ptr == NULL)
continue;
if(cg_ptr->attrib.protocol != PROTO_ISDN)
continue;
if(!(cg_ptr->attrib.variant == VARIANT_ITU || cg_ptr->attrib.variant == VARIANT_ANSI || cg_ptr->attrib.variant == VARIANT_QSIG) ||
(cg_ptr->attrib.variant == VARIANT_QSIG && (cg_ptr->attrib.nfas.flag || circuit_ptr->attrib.user_network_if == NETWORK_SIDE)))
continue;
link_id = circuit_ptr->attrib.link_id;
if(cg_ptr->enable)
{
if(isdn_rs.link_pond[link_id].lk3_status == LK_OOS)
{
if(cg_ptr->attrib.nfas.flag) //nfas
{
if((cg_ptr->attrib.nfas.prim_link != link_id) &&
(cg_ptr->attrib.nfas.backup_link != link_id))
continue;
}
isdn_sd_link(link_id, xUA_ENABLE_xUA_LINK); //enable
isdn_sd_link(link_id, M2UA_MTP3_CMD_ACTIVE_LK); //active
}
}
else //modify by 080821
{
if(isdn_rs.link_pond[link_id].lk3_status == LK_IS)
{
if(cg_ptr->attrib.nfas.flag)
{
if((cg_ptr->attrib.nfas.prim_link != link_id) &&
(cg_ptr->attrib.nfas.backup_link != link_id))
continue;
}
isdn_sd_link(link_id, M2UA_MTP3_CMD_DEACTIVE_LK);
isdn_sd_link(link_id, xUA_STOP_xUA_LINK);
}
}
}
for(i = 0; i < ISDN_MAX_CIRCUIT; i++) //release link
{
circuit_ptr = pal_circuit_ptr(i);
if(circuit_ptr == NULL)
continue;
/* if(circuit_ptr->enable == 0)
{
continue;
}*/
if(((isdn_rs.attrib.isdn_run_mode == ISDN_SINGLE_MODE) ||
(isdn_rs.attrib.isdn_run_mode == ISDN_DUAL_MODE &&
circuit_ptr->attrib.plat_id == isdn_rs.attrib.systemID)) &&
(circuit_ptr->enable == 1)) //modify by 080821
continue;
cg_ptr = pal_cg_ptr(circuit_ptr->cg_id);
if(cg_ptr == NULL)
continue;
if(cg_ptr->attrib.protocol != PROTO_ISDN)
continue;
if(!(cg_ptr->attrib.variant == VARIANT_ITU || cg_ptr->attrib.variant == VARIANT_ANSI || cg_ptr->attrib.variant == VARIANT_QSIG) ||
(cg_ptr->attrib.variant == VARIANT_QSIG && (cg_ptr->attrib.nfas.flag || circuit_ptr->attrib.user_network_if == NETWORK_SIDE)))
continue;
link_id = circuit_ptr->attrib.link_id;
if(isdn_rs.link_pond[link_id].lk3_status == LK_IS)
{
if(cg_ptr->attrib.nfas.flag)
{
if((cg_ptr->attrib.nfas.prim_link != link_id) &&
(cg_ptr->attrib.nfas.backup_link != link_id))
continue;
}
isdn_sd_link(link_id, M2UA_MTP3_CMD_DEACTIVE_LK);
isdn_sd_link(link_id, xUA_STOP_xUA_LINK);
}
}
}
void isdn_heartbeat_timer(int link_id)
{
if(isdn_rs.link_pond[link_id].plat_heartbeat_time > 0)
{
isdn_rs.link_pond[link_id].plat_heartbeat_time--;
if(isdn_rs.link_pond[link_id].plat_heartbeat_time == 0)
{
isdn_rs.link_pond[link_id].dc_status = DS_OOS;
isdn_log_err(0, "link %d heartbeat timeout: another plat doesnot send link state!\r\n",link_id);
}
}
}
/*************************************************************
Function: isdn_timer
Description: isdn task schedule, include isdn link control, isdn receive msg from iua and control the timer
Input: NULL
Return: NULL
*************************************************************/
void isdn_timer()
{
u16 i, j, chnl_j, cg_id;
u32 offset, pid;
int circuit_cic, link_id, ds_0, ds_1;
static int link_10s = 0;
const pal_circuit_struct *circuit_ptr = NULL;
const pal_cg_struct *cg_ptr = NULL;
link_10s++;
if(link_10s % 600 == 0) // 6s
{
isdn_link_ctrl(); //setup link
link_10s = 0;
}
for(i = 0; i < 64; i++)
{
if(isdn_receive_msg() == 0)
break; //no message in lower layer
if(isdn_redirect_receive() == 0)
break; //no message from another plat
}
for(i = 0; i < ISDN_MAX_CIRCUIT; i++) //for timer
{
circuit_ptr = pal_circuit_ptr(i);
if(circuit_ptr == NULL)
continue;
if(circuit_ptr->enable == 0)
continue;
if((isdn_rs.attrib.isdn_run_mode == ISDN_DUAL_MODE) &&
(circuit_ptr->attrib.plat_id != isdn_rs.attrib.systemID))
continue;
cg_id = circuit_ptr->cg_id;
cg_ptr = pal_cg_ptr(cg_id);
if(cg_ptr == NULL)
continue;
if(cg_ptr->attrib.protocol != PROTO_ISDN)
continue;
if(!(cg_ptr->attrib.variant == VARIANT_ITU || cg_ptr->attrib.variant == VARIANT_ANSI || cg_ptr->attrib.variant == VARIANT_QSIG) ||
(cg_ptr->attrib.variant == VARIANT_QSIG && (cg_ptr->attrib.nfas.flag || circuit_ptr->attrib.user_network_if == NETWORK_SIDE)))
continue;
link_id = circuit_ptr->attrib.link_id;
isdn_rs.link_pond[link_id].link_heartbeat_time++;
if(isdn_rs.link_pond[link_id].link_heartbeat_time % LINK_MAX_TIME == 0)
{
isdn_rs.link_pond[link_id].lk3_status = isdn_rs.link_pond[link_id].lk2_status;
isdn_rs.link_pond[link_id].lk2_status = LK_OOS;
isdn_rs.link_pond[link_id].link_heartbeat_time = 0;
}
circuit_cic = circuit_ptr->attrib.cic_range;
offset = ISDN_CIRCUIT_CIC * i; //ISDN_CIRCUIT_CIC
if(circuit_cic == 24) //T1
{
if((trans_callref_sd_rest_req(offset+24, ISDN_RESTART_CNF)) == circuit_cic)
{
isdn_rs.port_pond[offset+24].g_pri_cmd = ISDN_RESTART_CNF;
isdn_restart_ctrl(offset+24); //restart control
}
// offset++;
}
else
{
if((trans_callref_sd_rest_req(offset, ISDN_RESTART_CNF)) == circuit_cic)
{
isdn_rs.port_pond[offset].g_pri_cmd = ISDN_RESTART_CNF;
isdn_restart_ctrl(offset); //restart control
}
}
for(j = 0; j < circuit_cic; j++)
{
chnl_j = j;
if(circuit_cic == 24) //T1
chnl_j = j + 1;
pid = offset + chnl_j;
if(cg_ptr->attrib.nfas.flag) //NFAS
{
ds_0 = cg_ptr->attrib.nfas.prim_link;
ds_1 = cg_ptr->attrib.nfas.backup_link;
if(circuit_ptr->attrib.d_chnl == chnl_j) //d-channel
{
if(ds_0 == link_id)
{
if(isdn_rs.link_pond[link_id].lk3_status == LK_IS)
{
if((isdn_rs.link_pond[ds_0].dc_status == DS_MOOS) &&
(isdn_rs.link_pond[ds_1].dc_status != DS_IS))
isdn_rs.port_pond[pid].g_pri_cmd = ISDN_SERVICE_REQ;
}
else
isdn_rs.link_pond[link_id].dc_status = DS_OOS;
service_dc_proc(pid);
if((link_10s % 100 == 0) && (isdn_rs.attrib.isdn_run_mode == ISDN_DUAL_MODE)) //send heartbeat per 1 second
isdn_send_heartbeat(link_id);
if(isdn_rs.link_pond[link_id].plat_heartbeat_time > 0)
isdn_rs.link_pond[link_id].plat_heartbeat_time = 0;
}
else if(ds_1 == link_id)
{
if(isdn_rs.link_pond[link_id].lk3_status == LK_IS)
{
if((isdn_rs.link_pond[ds_1].dc_status == DS_MOOS) &&
((isdn_rs.link_pond[ds_0].dc_status == DS_OOS) ||
(isdn_rs.link_pond[ds_0].dc_status == DS_STBY)))
isdn_rs.port_pond[pid].g_pri_cmd = ISDN_SERVICE_REQ;
}
else
isdn_rs.link_pond[link_id].dc_status = DS_OOS;
service_dc_proc(pid);
if((link_10s % 100 == 0) && (isdn_rs.attrib.isdn_run_mode == ISDN_DUAL_MODE)) //send heartbeat per 1 second
isdn_send_heartbeat(link_id);
if(isdn_rs.link_pond[link_id].plat_heartbeat_time > 0)
isdn_rs.link_pond[link_id].plat_heartbeat_time = 0;
}
}
}
else //associated signaling
{
if(isdn_rs.link_pond[link_id].lk3_status == LK_IS)
{
if(circuit_ptr->attrib.d_chnl == chnl_j) //d-channel
isdn_rs.link_pond[link_id].dc_status = DS_IS;
}
else
{
if(circuit_ptr->attrib.d_chnl == chnl_j) //d-channel
isdn_rs.link_pond[link_id].dc_status = DS_OOS;
}
}
if(isdn_rs.port_pond[pid].enable)
isdn_cpc_timer(pid);
isdn_restart_timer(pid);
maintenance_timer(pid);
}
if(isdn_rs.attrib.isdn_run_mode == ISDN_DUAL_MODE)
isdn_heartbeat_timer(i);
}
isdn_debug_timer();
}
/*************************************************************
Function: isdn_assign_port
Description: isdn assign the port id
Input: e1no:link number
Return: port id:success
0:failed
*************************************************************/
u32 isdn_assign_port(u16 circuit_id)
{
u8 i, chnl;
u32 e1nox32 = 0;
u32 portnum = 0;
chnl = 32;
e1nox32 = circuit_id;
e1nox32 = (e1nox32 << 5);
for(i = 0; i < 31; i++)
{
chnl = (chnl - i) & 0x1F;
if (((chnl & 0x1F) != 0) && (chnl != 16))
{
portnum = e1nox32 + chnl;
if (isdn_rs.port_pond[portnum].enable == 0)
{
if(isdn_rs.port_pond[portnum].cic_state.maintenance_state != IN_SERVICE)
{
isdn_log_err(0, "this cic is not in service in assign port!\r\n");
break;
}
isdn_rs.port_pond[portnum].enable = 1;
return portnum;
}
}
}
return 0;
}
/*************************************************************
Function: find_port_by_callref
Description: find port id by the call referrence and link id
Input: cref:call referrence, circuit_id:circuit id
Return: port id:success
0:failed
*************************************************************/
u32 find_port_by_callref(u16 cref, u16 circuit_id)
{
int i, circuit_cic, d_chnl=16;
u32 portnum = 0;
const pal_circuit_struct *circuit_ptr = pal_circuit_ptr(circuit_id);
if(circuit_ptr == NULL)
return ISDN_CM_FAILED;
circuit_cic = circuit_ptr->attrib.cic_range;
if(circuit_cic == 24) //T1
{
d_chnl = 24;
}
portnum = (circuit_id * ISDN_CIRCUIT_CIC) + 1;
for (i = 1; i < circuit_cic; i++, portnum++)
{
if (i != d_chnl)
{
if(isdn_rs.port_pond[portnum].call_ref == cref)
return portnum;
}
}
// isdn_log_err(0, "find port by callref err!call_ref=%d, circuit_id=%d\r\n",cref, circuit_id);
return 0;
}
/*************************************************************
Function: find_port_by_cic
Description: find port id by the cic of one link
Input: cic:cic, circuit_id:circuit id
Return: port id:success
*************************************************************/
u32 find_port_by_cic(u32 cic, u16 circuit_id)
{
u32 head_cic;
const pal_circuit_struct *circuit_ptr = pal_circuit_ptr(circuit_id);
if(circuit_ptr == NULL)
return ISDN_CM_FAILED;
head_cic = circuit_ptr->attrib.head_cic;
if(circuit_ptr->attrib.cic_range == 24)
head_cic--;
return ISDN_CIRCUIT_CIC * circuit_id + (cic - head_cic);
}
int find_circuit_by_interfaceId(int cg_id, u8 interface_id)
{
int i;
const pal_circuit_struct *circuit_ptr = NULL;
for(i = 0; i < ISDN_MAX_CIRCUIT; i++)
{
circuit_ptr = pal_circuit_ptr(i);
if(circuit_ptr == NULL)
continue;
if(circuit_ptr->enable == 0)
continue;
if((isdn_rs.attrib.isdn_run_mode == ISDN_DUAL_MODE) &&
(circuit_ptr->attrib.plat_id != isdn_rs.attrib.systemID))
continue;
if(circuit_ptr->cg_id != cg_id)
continue;
if((circuit_ptr->attrib.cic_range != 0) && (circuit_ptr->attrib.head_cic / circuit_ptr->attrib.cic_range) == interface_id)
return i;
}
isdn_log_err(0, "find circuit by interface id err!cg_id=%d, interface_id=%d\r\n",cg_id, interface_id);
return -1;
}
//d-channel status
int check_dc_status(u8 link_id)
{
if(isdn_rs.link_pond[link_id].dc_status == DS_IS)
return ISDN_CM_OK;
else
return ISDN_CM_FAILED;
}
int isdn_set_run_mode (u8 run_mode, u32 alter_ip)
{
isdn_trace_func(0,"APP => function trace: %s\r\n", __FUNCTION__);
isdn_rs.attrib.isdn_run_mode = run_mode % 2;
isdn_rs.attrib.isdn_remote_ip = alter_ip;
return ISDN_CM_OK;
}

428
plat/isdn/src/isdn_uif.c Normal file
View File

@@ -0,0 +1,428 @@
/***********************************************************
Copyright (C), LGC Wireless.
File Name: isdn_uif.c
Description: ISDN USER INTERFACE
Version: v9.0.0
Author: Gengxin Chen
Create Date: 2008-2-19
History:
<author> <date> <version> <desc>
************************************************************/
#include "./include/isdn_const.h"
#include "./include/isdn_rm.h"
#include "./include/isdn_debug.h"
#include "./include/isdn_ext.h"
#include "./include/isdn_inc.h"
extern void isdn_cpc_proc(u32 pid);
extern void isdn_restart_ctrl(u32 pid);
extern void service_bc_proc(u32 pid);
/*************************************************************
Function: isdn_setup_req
Description: msc invokes the function to request setup
Output: pst:post structure pointer, ptr:isdn setup structure pointer
Return: ISDN_CM_OK:success
ISDN_CM_FAILED:failed
*************************************************************/
int isdn_setup_req(Pst *pst, IsdnSetup *ptr)
{
const pal_circuit_struct *circuit_ptr = NULL;
circuit_ptr = pal_locate_circuit(pst->cg_id, pst->cic);
if(circuit_ptr == NULL)
{
isdn_trace_func(0, "APP => function trace: %s\r\n", __FUNCTION__);
return ISDN_CM_FAILED;
}
pst->sp_proc_id = find_port_by_cic(pst->cic, circuit_ptr->id);
isdn_rs.port_pond[pst->sp_proc_id].su_proc_id = pst->su_proc_id;
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = ISDN_SETUP_REQ;
isdn_rs.port_pond[pst->sp_proc_id].trace_flag = pst->trace_flag;
isdn_rs.port_pond[pst->sp_proc_id].enable = 1;
isdn_trace_func(pst->sp_proc_id, "APP => function trace: %s\r\n", __FUNCTION__);
if(isdn_rs.port_pond[pst->sp_proc_id].cic_state.call_state != IDLE_FLAG)
{
isdn_log_err(pst->sp_proc_id, "call state is not idle, but is %d\n", isdn_rs.port_pond[pst->sp_proc_id].cic_state.call_state);
return ISDN_CM_FAILED;
}
memcpy(&(isdn_sd_msg.msg_list.setup), ptr, sizeof(IsdnSetup));
if(circuit_ptr->attrib.user_network_if)
isdn_rs.port_pond[pst->sp_proc_id].cic_state.call_state = CALLOUT_FLAG;
else
isdn_rs.port_pond[pst->sp_proc_id].cic_state.call_state = CALLIN_FLAG;
isdn_cpc_proc(pst->sp_proc_id);
if(isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd != 0)
{
isdn_trace_func(pst->sp_proc_id, "[waring]primitive cmd discard.(cmd=%d)\r\n", isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd);
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = 0;
}
return ISDN_CM_OK;
}
/*************************************************************
Function: isdn_m_info_req
Description: msc invokes the function to request more information
Output: pst:post structure pointer, ptr:isdn setup ack structure pointer
Return: ISDN_CM_OK:success
ISDN_CM_FAILED:failed
*************************************************************/
int isdn_m_info_req(Pst *pst, IsdnSetupAck *ptr)
{
isdn_trace_func(pst->sp_proc_id, "APP => function trace: %s\r\n", __FUNCTION__);
if(pst->sp_proc_id >= ISDN_MAX_PORT)
{
isdn_log_err(0, "pid=%d, is paranormal)\n", pst->sp_proc_id);
return ISDN_CM_FAILED;
}
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = ISDN_MORE_INFO_REQ;
memcpy(&(isdn_sd_msg.msg_list.setupAck), ptr, sizeof(IsdnSetupAck));
isdn_cpc_proc(pst->sp_proc_id);
if(isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd != 0)
{
isdn_trace_func(pst->sp_proc_id, "[waring]primitive cmd discard.(cmd=%d)\r\n", isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd);
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = 0;
}
return ISDN_CM_OK;
}
/*************************************************************
Function: isdn_call_proc_req
Description: msc invokes the function to request call proceeding
Output: pst:post structure pointer, ptr:isdn call proceeding structure pointer
Return: ISDN_CM_OK:success
ISDN_CM_FAILED:failed
*************************************************************/
int isdn_call_proc_req(Pst *pst, IsdnCallProc *ptr)
{
isdn_trace_func(pst->sp_proc_id, "APP => function trace: %s\r\n", __FUNCTION__);
if(pst->sp_proc_id >= ISDN_MAX_PORT)
{
isdn_log_err(0, "pid=%d, is paranormal)\n", pst->sp_proc_id);
return ISDN_CM_FAILED;
}
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = ISDN_PROC_REQ;
memcpy(&(isdn_sd_msg.msg_list.callProc), ptr, sizeof(IsdnCallProc));
isdn_cpc_proc(pst->sp_proc_id);
if(isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd != 0)
{
isdn_trace_func(pst->sp_proc_id, "[waring]primitive cmd discard.(cmd=%d)\r\n", isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd);
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = 0;
}
return ISDN_CM_OK;
}
/*************************************************************
Function: isdn_alert_req
Description: msc invokes the function to request alerting
Output: pst:post structure pointer, ptr:isdn alerting structure pointer
Return: ISDN_CM_OK:success
ISDN_CM_FAILED:failed
*************************************************************/
int isdn_alert_req(Pst *pst, IsdnAlert *ptr)
{
isdn_trace_func(pst->sp_proc_id, "APP => function trace: %s\r\n", __FUNCTION__);
if(pst->sp_proc_id >= ISDN_MAX_PORT)
{
isdn_log_err(0, "pid=%d, is paranormal)\n", pst->sp_proc_id);
return ISDN_CM_FAILED;
}
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = ISDN_ALERT_REQ;
memcpy(&(isdn_sd_msg.msg_list.alert), ptr, sizeof(IsdnAlert));
isdn_cpc_proc(pst->sp_proc_id);
if(isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd != 0)
{
isdn_trace_func(pst->sp_proc_id, "[waring]primitive cmd discard.(cmd=%d)\r\n", isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd);
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = 0;
}
return ISDN_CM_OK;
}
/*************************************************************
Function: isdn_setup_resp
Description: msc invokes the function to request setup response
Output: pst:post structure pointer, ptr:isdn connect structure pointer
Return: ISDN_CM_OK:success
ISDN_CM_FAILED:failed
*************************************************************/
int isdn_setup_resp(Pst *pst, IsdnConn *ptr)
{
isdn_trace_func(pst->sp_proc_id, "APP => function trace: %s\r\n", __FUNCTION__);
if(pst->sp_proc_id >= ISDN_MAX_PORT)
{
isdn_log_err(0, "pid=%d, is paranormal)\n", pst->sp_proc_id);
return ISDN_CM_FAILED;
}
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = ISDN_SETUP_RSP;
memcpy(&(isdn_sd_msg.msg_list.conn), ptr, sizeof(IsdnConn));
isdn_cpc_proc(pst->sp_proc_id);
if(isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd != 0)
{
isdn_trace_func(pst->sp_proc_id, "[waring]primitive cmd discard.(cmd=%d)\r\n", isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd);
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = 0;
}
return ISDN_CM_OK;
}
/*************************************************************
Function: isdn_disc_req
Description: msc invokes the function to request disconnect
Output: pst:post structure pointer, ptr:isdn disconnect structure pointer
Return: ISDN_CM_OK:success
ISDN_CM_FAILED:failed
*************************************************************/
int isdn_disc_req(Pst *pst, IsdnDisc *ptr)
{
isdn_trace_func(pst->sp_proc_id, "APP => function trace: %s\r\n", __FUNCTION__);
if(pst->sp_proc_id >= ISDN_MAX_PORT)
{
isdn_log_err(0, "pid=%d, is paranormal)\n", pst->sp_proc_id);
return ISDN_CM_FAILED;
}
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = ISDN_DISCONNECT_REQ;
memcpy(&(isdn_sd_msg.msg_list.disc), ptr, sizeof(IsdnDisc));
isdn_cpc_proc(pst->sp_proc_id);
if(isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd != 0)
{
isdn_trace_func(pst->sp_proc_id, "[waring]primitive cmd discard.(cmd=%d)\r\n", isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd);
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = 0;
}
return ISDN_CM_OK;
}
/*************************************************************
Function: isdn_rel_req
Description: msc invokes the function to request release
Output: pst:post structure pointer, ptr:isdn release structure pointer
Return: ISDN_CM_OK:success
ISDN_CM_FAILED:failed
*************************************************************/
int isdn_rel_req(Pst *pst, IsdnRel *ptr)
{
isdn_trace_func(pst->sp_proc_id, "APP => function trace: %s\r\n", __FUNCTION__);
if(pst->sp_proc_id >= ISDN_MAX_PORT)
{
isdn_log_err(0, "pid=%d, is paranormal)\n", pst->sp_proc_id);
return ISDN_CM_FAILED;
}
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = ISDN_RELEASE_REQ;
memcpy(&(isdn_sd_msg.msg_list.rel), ptr, sizeof(IsdnRel));
isdn_cpc_proc(pst->sp_proc_id);
if(isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd != 0)
{
isdn_trace_func(pst->sp_proc_id, "[waring]primitive cmd discard.(cmd=%d)\r\n", isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd);
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = 0;
}
return ISDN_CM_OK;
}
int isdn_rej_req(Pst *pst, IsdnRelComp *ptr)
{
isdn_trace_func(pst->sp_proc_id, "APP => function trace: %s\r\n", __FUNCTION__);
if(pst->sp_proc_id >= ISDN_MAX_PORT)
{
isdn_log_err(0, "pid=%d, is paranormal)\n", pst->sp_proc_id);
return ISDN_CM_FAILED;
}
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = ISDN_REJECT_REQ;
memcpy(&(isdn_sd_msg.msg_list.relComp), ptr, sizeof(IsdnRelComp));
isdn_cpc_proc(pst->sp_proc_id);
if(isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd != 0)
{
isdn_trace_func(pst->sp_proc_id, "[waring]primitive cmd discard.(cmd=%d)\r\n", isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd);
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = 0;
}
return ISDN_CM_OK;
}
/*************************************************************
Function: isdn_info_req
Description: msc invokes the function to request information
Output: pst:post structure pointer, ptr:isdn information structure pointer
Return: ISDN_CM_OK:success
ISDN_CM_FAILED:failed
*************************************************************/
int isdn_info_req(Pst *pst, IsdnInfo *ptr)
{
isdn_trace_func(pst->sp_proc_id, "APP => function trace: %s\r\n", __FUNCTION__);
if(pst->sp_proc_id >= ISDN_MAX_PORT)
{
isdn_log_err(0, "pid=%d, is paranormal\r\n", pst->sp_proc_id);
return ISDN_CM_FAILED;
}
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = ISDN_INFO_REQ;
memcpy(&(isdn_sd_msg.msg_list.info), ptr, sizeof(IsdnInfo));
isdn_cpc_proc(pst->sp_proc_id);
if(isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd != 0)
{
isdn_trace_func(pst->sp_proc_id, "[waring]primitive cmd discard.(cmd=%d)\r\n", isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd);
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = 0;
}
return ISDN_CM_OK;
}
/*************************************************************
Function: isdn_prog_req
Description: msc invokes the function to request progress
Output: pst:post structure pointer, ptr:isdn progress structure pointer
Return: ISDN_CM_OK:success
ISDN_CM_FAILED:failed
*************************************************************/
int isdn_prog_req(Pst *pst, IsdnProg *ptr)
{
isdn_trace_func(pst->sp_proc_id, "APP => function trace: %s\r\n", __FUNCTION__);
if(pst->sp_proc_id >= ISDN_MAX_PORT)
{
isdn_log_err(0, "pid=%d, is paranormal\r\n", pst->sp_proc_id);
return ISDN_CM_FAILED;
}
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = ISDN_PROG_REQ;
memcpy(&(isdn_sd_msg.msg_list.prog), ptr, sizeof(IsdnProg));
isdn_cpc_proc(pst->sp_proc_id);
if(isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd != 0)
{
isdn_trace_func(pst->sp_proc_id, "[waring]primitive cmd discard.(cmd=%d)\r\n", isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd);
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = 0;
}
return ISDN_CM_OK;
}
/*************************************************************
Function: isdn_noti_req
Description: msc invokes the function to request notify
Output: pst:post structure pointer, ptr:isdn notify structure pointer
Return: ISDN_CM_OK:success
ISDN_CM_FAILED:failed
*************************************************************/
int isdn_noti_req(Pst * pst, IsdnNoti * ptr)
{
isdn_trace_func(pst->sp_proc_id, "APP => function trace: %s\r\n", __FUNCTION__);
if(pst->sp_proc_id >= ISDN_MAX_PORT)
{
isdn_log_err(0, "pid=%d, is paranormal\r\n", pst->sp_proc_id);
return ISDN_CM_FAILED;
}
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = ISDN_NOTI_REQ;
memcpy(&(isdn_sd_msg.msg_list.noti), ptr, sizeof(IsdnNoti));
isdn_cpc_proc(pst->sp_proc_id);
if(isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd != 0)
{
isdn_trace_func(pst->sp_proc_id, "[waring]primitive cmd discard.(cmd=%d)\r\n", isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd);
isdn_rs.port_pond[pst->sp_proc_id].primitive_cmd = 0;
}
return ISDN_CM_OK;
}
/*************************************************************
Function: isdn_m_restart_req
Description: msc invokes the function to request management restart
Output: pst:post structure pointer, ptr:isdn restart structure pointer
Return: ISDN_CM_OK:success
ISDN_CM_FAILED:failed
*************************************************************/
int isdn_m_restart_req(Pst *pst, IsdnRestart *ptr) //restart indicated channel
{
u32 pid, link_id;
int circuit_id;
const pal_cg_struct *cg_ptr = NULL;
const pal_circuit_struct *circuit_ptr = NULL;
isdn_trace_func(0, "APP => function trace: %s\r\n", __FUNCTION__);
cg_ptr = pal_cg_ptr(pst->cg_id);
if(cg_ptr == NULL)
return ISDN_CM_FAILED;
if(cg_ptr->attrib.protocol != PROTO_ISDN)
return ISDN_CM_FAILED;
circuit_ptr = pal_locate_circuit(pst->cg_id, pst->cic);
if(circuit_ptr == NULL)
{
isdn_log_err(0, "isdn_m_restart_req err!circuit_ptr cann't be found by vcg_id=%d,cic=%ld \r\n", pst->cg_id, pst->cic);
return ISDN_CM_FAILED;
}
circuit_id = circuit_ptr->id;
pst->sp_proc_id = find_port_by_cic(pst->cic, circuit_id);
if(pst->sp_proc_id >= ISDN_MAX_PORT)
{
isdn_log_err(0, "pid=%d, is paranormal\r\n", pst->sp_proc_id);
return ISDN_CM_FAILED;
}
memcpy(&(isdn_sd_msg.msg_list.restart), ptr, sizeof(IsdnRestart));
pid = (circuit_id) * ISDN_CIRCUIT_CIC;
link_id = circuit_ptr->attrib.link_id;
if(ptr->restart_ind.clas == 0)
isdn_rs.port_pond[pid].cic_val = pst->cic;
else
isdn_rs.port_pond[pid].cic_val = 0;
isdn_rs.link_pond[link_id].restart_clas = ptr->restart_ind.clas;
isdn_rs.port_pond[pid].g_pri_cmd = ISDN_M_RESTART_REQ;
isdn_restart_ctrl(pid);
if(isdn_rs.port_pond[pid].g_pri_cmd != 0)
{
isdn_trace_func(pid, "[waring]global primitive cmd discard.(cmd=%d)\r\n", isdn_rs.port_pond[pst->sp_proc_id].g_pri_cmd);
isdn_rs.port_pond[pid].g_pri_cmd = 0;
}
return ISDN_CM_OK;
}
//ansi
int isdn_service_bc_req(Pst *pst, IsdnService *ptr)
{
const pal_circuit_struct *circuit_ptr = NULL;
circuit_ptr = pal_locate_circuit(pst->cg_id, pst->cic);
if(circuit_ptr == NULL)
{
isdn_trace_func(0, "APP => function trace: %s\r\n", __FUNCTION__);
return ISDN_CM_FAILED;
}
pst->sp_proc_id = find_port_by_cic(pst->cic, circuit_ptr->id);
isdn_rs.port_pond[pst->sp_proc_id].su_proc_id = pst->su_proc_id;
isdn_rs.port_pond[pst->sp_proc_id].g_pri_cmd = ISDN_SERVICE_REQ;
isdn_rs.port_pond[pst->sp_proc_id].trace_flag = pst->trace_flag;
// isdn_rs.port_pond[pst->sp_proc_id].enable = 1;
isdn_trace_func(pst->sp_proc_id, "APP => function trace: %s\r\n", __FUNCTION__);
memcpy(&(isdn_sd_msg.msg_list.service), ptr, sizeof(IsdnService));
service_bc_proc(pst->sp_proc_id);
if(isdn_rs.port_pond[pst->sp_proc_id].g_pri_cmd != 0)
{
isdn_trace_func(pst->sp_proc_id, "[waring]global primitive cmd discard.(cmd=%d)\r\n", isdn_rs.port_pond[pst->sp_proc_id].g_pri_cmd);
isdn_rs.port_pond[pst->sp_proc_id].g_pri_cmd = 0;
}
return ISDN_CM_OK;
}
int isdn_service_bc_rsp(Pst *pst, IsdnServAck *ptr)
{
isdn_trace_func(pst->sp_proc_id, "APP => function trace: %s\r\n", __FUNCTION__);
if(pst->sp_proc_id >= ISDN_MAX_PORT)
{
isdn_log_err(0, "pid=%d, is paranormal\r\n", pst->sp_proc_id);
return ISDN_CM_FAILED;
}
isdn_rs.port_pond[pst->sp_proc_id].g_pri_cmd = ISDN_SERVICE_RSP;
memcpy(&(isdn_sd_msg.msg_list.servAck), ptr, sizeof(IsdnServAck));
service_bc_proc(pst->sp_proc_id);
if(isdn_rs.port_pond[pst->sp_proc_id].g_pri_cmd != 0)
{
isdn_trace_func(pst->sp_proc_id, "[waring]global primitive cmd discard.(cmd=%d)\r\n", isdn_rs.port_pond[pst->sp_proc_id].g_pri_cmd);
isdn_rs.port_pond[pst->sp_proc_id].g_pri_cmd = 0;
}
return ISDN_CM_OK;
}

45
plat/isdn/ut/Makefile Normal file
View File

@@ -0,0 +1,45 @@
#Create by Chen Gengxin
#2008-03-03
#WXC2 R9.0 ISDN makefile
CC = gcc
CFLAG = -g -Wall -c #-fprofile-arcs -ftest-coverage
ISDN_LIB_OBJ = ../src/isdn_msg.o ../src/isdn_fsm.o ../src/isdn_uif.o ../src/isdn_rm.o ../src/isdn_ie.o ../src/isdn_debug.o
ISDN_TST_OBJ = isdn_main.o isdn_test.o
ISDN_LIB = -L../../isdn/lib -lisdn
PLAT_LIB = -L../../8ecp/lib -l8ecp -L../../aif/lib -laif -L../../bicc/lib -lbicc -L../../debug/lib -ldebug -L../../haepub/lib -lhaepub -L../../iptrans/lib -liptrans -L../../isup/lib -lisup -L../../m2ua/lib -lm2ua -L../../mgc/lib -lmgc -L../../mgcp/lib -lmgcp -L../../mtp3/lib -lmtp3 -L../../public/lib -lpublic -L../../rtp/lib -lrtp -L../../sccp/lib -lsccp -L../../scf/lib -lscf -L../../snmp/lib -lsnmp -L../../smpp/lib -lsmpp -L../../tcap/lib -ltcap -L../../xapp/lib -lxapp
MSS_LIB = -L../../../mss/aas/lib -laas -L../../../mss/ae/lib -lae -L../../../mss/hlr/lib -lhlr -L../../../mss/mnp/lib -lmnp -L../../../mss/msc/lib -lmsc -L../../../mss/ssf/lib -lssf -L../../../mss/vlr/lib -lvlr
TEST_LIB = -L/usr/local/lib/CUnit -lcunit -lgcov
isdn_main: $(ISDN_TST_OBJ)
$(CC) $(ISDN_LIB_OBJ) $(ISDN_TST_OBJ) -o test_main $(ISDN_LIB) $(PLAT_LIB) -lm
isdn_main.o: isdn_main.c
$(CC) $(CFLAG) $<
isdn_test.o: isdn_test.c
$(CC) $(CFLAG) $<
isdn_msg.o: isdn_msg.c
$(CC) $(CFLAG) $<
isdn_fsm.o: isdn_fsm.c
$(CC) $(CFLAG) $<
isdn_uif.o: isdn_uif.c
$(CC) $(CFLAG) $<
isdn_rm.o: isdn_rm.c
$(CC) $(CFLAG) $<
isdn_ie.o: isdn_ie.c
$(CC) $(CFLAG) $<
isdn_debug.o: isdn_debug.c
$(CC) $(CFLAG) $<
clean:
rm -f main *.o *.a *.xml *.gcov *.gcda *.gcno core test_main

View File

@@ -0,0 +1,69 @@
Test 1
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
10 SCTP.SEND <Data-setup>
01 00 05 02 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 25
08 02 00 01 05 a1 04 03
80 90 a3 18 03 a1 83 81
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00 00;
10000 SCTP.RECV <Data-call proc>
01 00 05 01 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0E
08 02 80 01 02 18 03 A9
83 81 00 00;
10000 SCTP.RECV <Data-alert>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 01 18 03 A1
83 81 1E 02 83 88 ?? ??;
10000 SCTP.RECV <Data-conn>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 07 ?? ?? ??;
10 SCTP.SEND <Data-conn ack>
01 00 05 02 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 00 01 0F 00 00 00;
30 SCTP.SEND <Data-disconn>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 00 01 45 08 02 83
90 00 00 00;
10000 SCTP.RECV <Data-rel>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 4D ?? ?? ??;
10 SCTP.SEND <Data-rel comp>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 00 01 5A 08 02 83
90 00 00 00;

View File

@@ -0,0 +1,33 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10000 SCTP.RECV <Data-Service>
01 00 05 01 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 12
03 02 00 00 0F 01 01 C0
18 04 E9 80 83 90 00 00;
10 SCTP.SEND <Data-Service Ack>
01 00 05 02 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 12
03 02 80 00 07 01 01 C0
18 04 E9 80 83 90 00 00;

View File

@@ -0,0 +1,33 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
00 SCTP.SEND <Data-Service>
01 00 05 02 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 12
03 02 00 00 0F 01 01 C0
18 04 E9 80 83 90 00 00;
10000 SCTP.RECV <Data-Service Ack>
01 00 05 01 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 12
03 02 80 00 07 01 01 C0
18 04 E9 80 83 90 00 00;

View File

@@ -0,0 +1,3 @@
#define RE_IP 172.18.99.1
#define RE_PORT 0
#define LO_PORT 2904

View File

@@ -0,0 +1,19 @@
#include "headfile.txt"
test 1 sctp<iua data>
SCTP.Set remote_ip=RE_IP;
SCTP.Set remote_port=RE_PORT;
SCTP.Set local_port=LO_PORT;
SCTP.Set STREAM_ID=1
50 SCTP.Set server
0 SCTP.Send <data>
01 00 05 01 00 00 00 20 //common message header(version,spare,message class,message type,message length(<28><><EFBFBD>еij<D0B5><C4B3><EFBFBD>))
00 01 00 08 00 00 00 00 //iua message header(tag,length,interface id)
00 05 00 08 00 00 00 00 //iua message header(tag,length,DLCI)
00 0E 00 08 //iua message(tag,length(<28><><EFBFBD><EFBFBD>iua message<67>ij<EFBFBD><C4B3><EFBFBD>))
FF 01 F0 02; //iua message(protocol data)
1000 SCTP.Recv <asp up ack>
?? //common message header

View File

@@ -0,0 +1,47 @@
#include "headfile.txt"
test 1 sctp<iua set up>
SCTP.Set remote_ip=RE_IP;
SCTP.Set remote_port=RE_PORT;
SCTP.Set local_port=LO_PORT;
SCTP.Set STREAM_ID=1
500 SCTP.Set server
1000 SCTP.Recv <asp up>
01 00 03 01 00 00 00 10 //common message header(version,spare,message class,message type,message length)
00 11 00 08 ?? ?? ?? ??; //iua message(tag,length,content)
0 SCTP.Send <asp up ack>
01 00 03 04 00 00 00 08; //common message header
1 SCTP.Send <notify>
01 00 00 01 00 00 00 10 //common message header
00 0D 00 08 00 01 00 02; //iua message
1000 SCTP.FLTR <asp up>
01 00 03 01 00 00 00 10 //common message header
00 11 00 08 ?? ?? ?? ??; //iua message
1000 SCTP.Recv <asp active>
01 00 04 01 00 00 00 18
00 0B 00 08 00 00 00 01
00 01 00 08 00 00 00 00; //??
0 SCTP.Send <asp active ack>
01 00 04 03 00 00 00 10
00 0B 00 08 00 00 00 01;
0 SCTP.Send <notify>
01 00 00 01 00 00 00 10
00 0D 00 08 00 01 00 03;
1000 SCTP.Recv <establish req>
01 00 05 05 00 00 00 18 //common message header(version,spare,message class,message type,message length)
00 01 00 08 00 00 00 00 //iua message header(tag,length,interface id)
00 05 00 08 00 00 00 00; //iua message header(tag,length,DLCI)
0 SCTP.Send <establish cnf>
01 00 05 06 00 00 00 18
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00;

View File

@@ -0,0 +1,82 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
20 SCTP.SEND <Data-setup>
01 00 05 02 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 25
08 02 00 01 05 a1 04 03
80 90 a3 18 03 a1 83 81
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00 00;
10000 SCTP.RECV <Data-call proc>
01 00 05 01 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0E
08 02 80 01 02 18 03 A9
83 81 00 00;
10000 SCTP.RECV <Data-alert>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 01 18 03 A1
83 81 1E 02 83 88 ?? ??;
10000 SCTP.RECV <Data-conn>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 07 ?? ?? ??;
20 SCTP.SEND <Data-conn ack>
01 00 05 02 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 00 01 0F 00 00 00;
100 SCTP.RECV <Data-disconn>
01 00 05 01 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 45 08 02 83
90 00 00 00;
10 SCTP.SEND <Data-rel>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 00 01 4D 08 02 83
90 00 00 00;
100 SCTP.RECV <Data-rel comp>
01 00 05 01 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 5A 08 02 83
90 00 00 00;

View File

@@ -0,0 +1,41 @@
#include "headfile.txt"
test 1 sctp<iua set up>
SCTP.Set remote_ip=RE_IP;
SCTP.Set local_port=LO_PORT;
SCTP.Set STREAM_ID=2
10000 SCTP.RECEIVE <asp up>
01 00 03 01 00 00 00 10 //common message header(version,spare,message class,message type,message length)
00 11 00 08 ?? ?? ?? ??; //iua message(tag,length,content)
0 SCTP.Send <asp up ack>
01 00 03 04 00 00 00 08; //common message header
1 SCTP.Send <notify>
01 00 00 01 00 00 00 10 //common message header
00 0D 00 08 00 01 00 02; //iua message
1000 SCTP.Recv <asp active>
01 00 04 01 00 00 00 18
00 0B 00 08 00 00 00 01
00 01 00 08 00 00 00 00; //??
0 SCTP.Send <asp active ack>
01 00 04 03 00 00 00 10
00 0B 00 08 00 00 00 01;
0 SCTP.Send <notify>
01 00 00 01 00 00 00 10
00 0D 00 08 00 01 00 03;
1000 SCTP.Recv <establish req>
01 00 05 05 00 00 00 18 //common message header(version,spare,message class,message type,message length)
00 01 00 08 00 00 00 00 //iua message header(tag,length,interface id)
00 05 00 08 00 00 00 00; //iua message header(tag,length,DLCI)
0 SCTP.Send <establish cnf>
01 00 05 06 00 00 00 18
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00;

View File

@@ -0,0 +1,151 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up>
01 00 03 01 00 00 00 10
00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack>
01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify>
01 00 00 01 00 00 00 10
00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active>
01 00 04 01 00 00 00 20
00 0B 00 08 00 00 00 01
00 01 00 08 00 00 00 00 //interface id
00 01 00 08 00 00 00 01; //interface id
10 SCTP.SEND <asp active ack>
01 00 04 03 00 00 00 10
00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify>
01 00 00 01 00 00 00 10
00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish-0>
01 00 05 05 00 00 00 18
00 01 00 08 00 00 00 00 //interface id
00 05 00 08 00 00 00 00;
1000 SCTP.RECV <Establish-1>
01 00 05 05 00 00 00 18
00 01 00 08 00 00 00 01 //interface id
00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf-0>
01 00 05 06 00 00 00 18
00 01 00 08 00 00 00 00 //interface id
00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf-1>
01 00 05 06 00 00 00 18
00 01 00 08 00 00 00 01 //interface id
00 05 00 08 00 00 00 00;
test 1
10000 SCTP.RECV <Data-Service>
01 00 05 01 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 12
03 02 00 00 0F 01 01 C0
18 04 E9 80 83 90 00 00;
10 SCTP.SEND <Data-Service Ack>
01 00 05 02 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 12
03 02 80 00 07 01 01 C0
18 04 E9 80 83 90 00 00;
test 2
20 SCTP.SEND <Data-setup>
01 00 05 02 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 26
08 02 00 01 05 a1 04 03
80 90 a3 18 04 E1 82 83 01
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00;
10000 SCTP.RECV <Data-call proc>
01 00 05 01 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0F
08 02 80 01 02 18 04 E9 82
83 81 00;
10000 SCTP.RECV <Data-alert>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 01 18 04 E9 82
83 81 1E 02 83 88 ??;
10000 SCTP.RECV <Data-conn>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 07 ?? ?? ??;
20 SCTP.SEND <Data-conn ack>
01 00 05 02 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 00 01 0F 00 00 00;
test 3 <disable link 0>
10 SCTP.SEND <Release ind link 0>
01 00 05 0a 00 00 00 20
00 01 00 08 00 00 00 00 //interface id
00 05 00 08 00 00 00 00
00 0F 00 08 00 00 00 00;
1000 SCTP.RECV <Establish-0>
01 00 05 05 00 00 00 18
00 01 00 08 00 00 00 00 //interface id
00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf-0>
01 00 05 06 00 00 00 18
00 01 00 08 00 00 00 00 //interface id
00 05 00 08 00 00 00 00;
test 4 <continue rel call>
30 SCTP.SEND <Data-disconn>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 01 //interface id
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 00 01 45 08 02 83
90 00 00 00;
10000 SCTP.RECV <Data-rel>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 01 //interface id
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 4D 08 02 83
90 ?? ?? ??;
10 SCTP.SEND <Data-rel comp>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 01 //interface id
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 00 01 5A 08 02 83
90 00 00 00;
10000 SCTP.RECV <Data-??>
??;

View File

@@ -0,0 +1,82 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10000 SCTP.RECV <Data-setup>
01 00 05 01 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 25
08 02 00 01 05 a1 04 03
80 90 a3 18 03 a1 83 XX
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00 00;
20 SCTP.SEND <Data-call proc>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0E
08 02 80 01 02 18 03 A9
83 XX 00 00;
10 SCTP.SEND <Data-alert>
01 00 05 02 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 12
08 02 80 01 01 18 03 A1
83 XX 1E 02 83 88 00 00;
20 SCTP.SEND <Data-conn>
01 00 05 02 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 80 01 07 00 00 00;
10000 SCTP.RECV <Data-conn ack>
01 00 05 01 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 00 01 0F 00 00 00;
30 SCTP.SEND <Data-disconn>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 45 08 02 83
90 00 00 00;
10000 SCTP.RECV <Data-rel>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 00 01 4D 08 02 83
90 ?? ?? ??;
10 SCTP.SEND <Data-rel comp>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 5A 08 02 83
90 00 00 00;

View File

@@ -0,0 +1,82 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10000 SCTP.RECV <Data-setup>
01 00 05 01 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 25
08 02 00 01 05 a1 04 03
80 90 a3 18 03 a1 83 XX
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00 00;
20 SCTP.SEND <Data-call proc>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0E
08 02 80 01 02 18 03 A9
83 XX 00 00;
10 SCTP.SEND <Data-alert>
01 00 05 02 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 12
08 02 80 01 01 18 03 A1
83 XX 1E 02 83 88 00 00;
20 SCTP.SEND <Data-conn>
01 00 05 02 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 80 01 07 00 00 00;
10000 SCTP.RECV <Data-conn ack>
01 00 05 01 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 00 01 0F 00 00 00;
1000 SCTP.RECV <Data-disconn>
01 00 05 01 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 00 01 45 08 02 83
90 00 00 00;
10 SCTP.SEND <Data-rel>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 4D 08 02 83
90 00 00 00;
1000 SCTP.RECV <Data-rel comp>
01 00 05 01 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 00 01 5A 08 02 83
90 00 00 00;

View File

@@ -0,0 +1,83 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
20 SCTP.SEND <Data-setup>
01 00 05 02 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 28
08 02 00 01 05 a1 04 03
80 90 A3 18 06 a1 96 00 01 00 01
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31;
10000 SCTP.RECV <Data-call proc>
01 00 05 01 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 11
08 02 80 01 02 18 03 A9
83 01 01 00 81 00 00 00;
10000 SCTP.RECV <Data-alert>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 01 18 03 A1
83 00 00 00 81 1E 02 83
88 ?? ?? ??;
10000 SCTP.RECV <Data-conn>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 07 ?? ?? ??;
20 SCTP.SEND <Data-conn ack>
01 00 05 02 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 00 01 0F 00 00 00;
30 SCTP.SEND <Data-disconn>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 00 01 45 08 02 83
90 00 00 00;
10000 SCTP.RECV <Data-rel>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 4D 08 02 83
90 ?? ?? ??;
10 SCTP.SEND <Data-rel comp>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 00 01 5A 08 02 83
90 00 00 00;

View File

@@ -0,0 +1,85 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
20 SCTP.SEND <Data-setup>
01 00 05 02 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 25
08 02 00 01 05 a1 04 03
80 90 a3 18 03 a1 83 01
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00 00;
10000 SCTP.RECV <Data-call proc>
01 00 05 01 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0E
08 02 80 01 02 18 03 A9
83 81 00 00;
10000 SCTP.RECV <Data-alert>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 01 18 03 A9
83 81 1E 02 83 88 ?? ??;
10000 SCTP.RECV <Data-conn>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 07 ?? ?? ??;
20 SCTP.SEND <Data-conn ack>
01 00 05 02 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 00 01 0F 00 00 00;
30 SCTP.SEND <Data-disconn>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 00 01 45 08 02 83
90 00 00 00;
10000 SCTP.RECV <Data-rel>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 4D 08 02 83
90 ?? ?? ??;
10 SCTP.SEND <Data-rel comp>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 00 01 5A 08 02 83
90 00 00 00;
10000 SCTP.RECV <Data-??>
??;

View File

@@ -0,0 +1,82 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
20 SCTP.SEND <Data-setup>
01 00 05 02 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 25
08 02 00 01 05 a1 04 03
80 90 a3 18 03 a1 83 81
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00 00;
10000 SCTP.RECV <Data-call proc>
01 00 05 01 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0E
08 02 80 01 02 18 03 A9
83 81 00 00;
10000 SCTP.RECV <Data-alert>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 01 18 03 A1
83 81 1E 02 83 88 ?? ??;
10000 SCTP.RECV <Data-conn>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 80 01 07 ?? ?? ??;
20 SCTP.SEND <Data-conn ack>
01 00 05 02 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 00 01 0F 00 00 00;
100 SCTP.RECV <Data-disconn>
01 00 05 01 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 45 08 02 83
90 00 00 00;
10 SCTP.SEND <Data-rel>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 00 01 4D 08 02 83
90 00 00 00;
100 SCTP.RECV <Data-rel comp>
01 00 05 01 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 5A 08 02 83
90 00 00 00;

View File

@@ -0,0 +1,44 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10000 SCTP.RECV <Data-setup>
01 00 05 01 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 25
08 02 00 01 05 a1 04 03
80 90 a3 18 03 a1 83 XX
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00 00;
1000 SCTP.RECV <Data-restart>
01 00 05 01 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 11
08 02 00 00 46 18 03 A1
83 XX 79 01 80 ?? ?? ??;
20 SCTP.SEND <Data-restart ack>
01 00 05 02 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 11
08 02 80 00 4E 18 03 A1
83 XX 79 01 80 00 00 00;

View File

@@ -0,0 +1,44 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10000 SCTP.RECV <Data-setup>
01 00 05 01 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 25
08 02 00 01 05 a1 04 03
80 90 a3 18 03 a1 83 XX
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00 00;
20 SCTP.SEND <Data-restart>
01 00 05 02 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 11
08 02 00 00 46 18 03 A1
83 XX 79 01 80 00 00 00;
1000 SCTP.RECV <Data-restart ack>
01 00 05 01 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 11
08 02 80 00 4E 18 03 A1
83 XX 79 01 80 ?? ?? ??;

View File

@@ -0,0 +1,103 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
Test 1
10000 SCTP.RECV <Data-setup>
01 00 05 01 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 25
08 02 00 01 05 a1 04 03
80 90 a3 18 03 a1 83 XX
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00 00;
20 SCTP.SEND <Data-call proc>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0E
08 02 80 01 02 18 03 A9
83 XX 00 00;
10 SCTP.SEND <Data-alert>
01 00 05 02 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 12
08 02 80 01 01 18 03 A1
83 XX 1E 02 83 88 00 00;
20 SCTP.SEND <Data-conn>
01 00 05 02 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 80 01 07 00 00 00;
10000 SCTP.RECV <Data-conn ack>
01 00 05 01 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 00 01 0F 00 00 00;
30 SCTP.SEND <Data-disconn>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 45 08 02 83
90 00 00 00;
10000 SCTP.RECV <Data-rel>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 00 01 4D 08 02 83
90 ?? ?? ??;
10 SCTP.SEND <Data-rel comp>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 5A 08 02 83
90 00 00 00;
Test 2
10000 SCTP.RECV <Data-setup>
01 00 05 01 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 25
08 02 00 YY 05 a1 04 03
80 90 a3 18 03 a1 83 XX
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00 00;
20 SCTP.SEND <Data-status>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 10
08 02 80 YY 7D 08 02 83
E5 14 01 00;

View File

@@ -0,0 +1,47 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10000 SCTP.RECV <Data-setup>
01 00 05 01 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 25
08 02 00 01 05 a1 04 03
80 90 a3 18 03 a1 83 XX
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00 00;
10 SCTP.SEND <Data-rel>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 4D 08 02 83
90 00 00 00;
1000 SCTP.RECV <Data-rel comp>
01 00 05 01 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 00 01 5A 08 02 83
90 00 00 00;
10000 SCTP.RECV <Data-??>
??;

View File

@@ -0,0 +1,96 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10000 SCTP.RECV <Data-setup>
01 00 05 01 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 25
08 02 00 01 05 a1 04 03
80 90 a3 18 03 a1 83 XX
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00 00;
20 SCTP.SEND <Data-conn ack>
01 00 05 02 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 80 01 0F 00 00 00;
10000 SCTP.RECV <Data-status>
01 00 05 01 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 10
08 02 00 01 7D 08 02 83
E5 14 01 ??;
20 SCTP.SEND <Data-call proc>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0E
08 02 80 01 02 18 03 A9
83 XX 00 00;
10 SCTP.SEND <Data-alert>
01 00 05 02 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 12
08 02 80 01 01 18 03 A1
83 XX 1E 02 83 88 00 00;
20 SCTP.SEND <Data-conn>
01 00 05 02 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 80 01 07 00 00 00;
10000 SCTP.RECV <Data-conn ack>
01 00 05 01 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 00 01 0F 00 00 00;
30 SCTP.SEND <Data-disconn>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 45 08 02 83
90 00 00 00;
10000 SCTP.RECV <Data-rel>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 00 01 4D 08 02 83
90 ?? ?? ??;
10 SCTP.SEND <Data-rel comp>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 5A 08 02 83
90 00 00 00;

View File

@@ -0,0 +1,36 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10000 SCTP.RECV <Data-setup>
01 00 05 01 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 25
08 02 00 01 05 a1 04 03
80 90 a3 18 03 a1 83 XX
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00 00;
20 SCTP.SEND <Data-status>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 10
08 02 80 01 7D 08 02 83
E5 14 01 00;

View File

@@ -0,0 +1,89 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10000 SCTP.RECV <Data-setup>
01 00 05 01 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 25
08 02 00 01 05 a1 04 03
80 90 a3 18 03 a1 83 XX
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00 00;
20 SCTP.SEND <Data-alert <20><>>
01 00 05 02 00 00 00 20
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 07
08 00 01 00;
20 SCTP.SEND <Data-call proc>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0E
08 02 80 01 02 18 03 A9
83 XX 00 00;
10 SCTP.SEND <Data-alert>
01 00 05 02 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 12
08 02 80 01 01 18 03 A1
83 XX 1E 02 83 88 00 00;
20 SCTP.SEND <Data-conn>
01 00 05 02 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 80 01 07 00 00 00;
10000 SCTP.RECV <Data-conn ack>
01 00 05 01 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 00 01 0F 00 00 00;
30 SCTP.SEND <Data-disconn>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 45 08 02 83
90 00 00 00;
10000 SCTP.RECV <Data-rel>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 00 01 4D 08 02 83
90 ?? ?? ??;
10 SCTP.SEND <Data-rel comp>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 5A 08 02 83
90 00 00 00;

View File

@@ -0,0 +1,97 @@
Test 0
3 SCTP.SET <> "remote_ip=172.18.99.1";
3 SCTP.SET <> "remote_port=0";
3 SCTP.SET <> "local_port=9900";
3 SCTP.SET <> "STREAM_ID=0";
3 SCTP.SET <> "server";
1000 SCTP.SET <> "wait_connect";
200 SCTP.RECV <asp up> 01 00 03 01 00 00 00 10 00 11 00 08 ?? ?? ?? ??;
10 SCTP.SEND <asp up ack> 01 00 03 04 00 00 00 08;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 02;
3 SCTP.SET <> "STREAM_ID=1";
1000 SCTP.RECV <asp active> 01 00 04 01 00 00 00 18 00 0B 00 08 00 00 00 01 00 01 00 08 00 00 00 00;
10 SCTP.SEND <asp active ack> 01 00 04 03 00 00 00 10 00 0B 00 08 00 00 00 01;
10 SCTP.SEND <Notify> 01 00 00 01 00 00 00 10 00 0D 00 08 00 01 00 03;
1000 SCTP.RECV <Establish> 01 00 05 05 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10 SCTP.SEND <Establish cnf> 01 00 05 06 00 00 00 18 00 01 00 08 00 00 00 00 00 05 00 08 00 00 00 00;
10000 SCTP.RECV <Data-setup>
01 00 05 01 00 00 00 40
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 25
08 02 00 01 05 a1 04 03
80 90 a3 18 03 a1 83 XX
6c 07 00 80 35 31 30 30
31 70 06 81 35 32 30 30
31 00 00 00;
20 SCTP.SEND <Data-call proc>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0E
08 02 80 01 02 18 03 A9
83 XX 00 00;
20 SCTP.SEND <Data-alert ȫ<><C8AB>>
01 00 05 02 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 12
08 02 00 00 01 18 03 A1
83 XX 1E 02 83 88 00 00;
10000 SCTP.RECV <Data-status>
01 00 05 01 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 10
08 02 00 00 7D 08 02 83
D1 14 01 ??;
10 SCTP.SEND <Data-alert>
01 00 05 02 00 00 00 2C
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 12
08 02 80 01 01 18 03 A1
83 XX 1E 02 83 88 00 00;
20 SCTP.SEND <Data-conn>
01 00 05 02 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 80 01 07 00 00 00;
10000 SCTP.RECV <Data-conn ack>
01 00 05 01 00 00 00 24
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 09
08 02 00 01 0F 00 00 00;
30 SCTP.SEND <Data-disconn>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 45 08 02 83
90 00 00 00;
10000 SCTP.RECV <Data-rel>
01 00 05 01 00 00 00 ??
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 ??
08 02 00 01 4D 08 02 83
90 ?? ?? ??;
10 SCTP.SEND <Data-rel comp>
01 00 05 02 00 00 00 28
00 01 00 08 00 00 00 00
00 05 00 08 00 00 00 00
00 0E 00 0D
08 02 80 01 5A 08 02 83
90 00 00 00;

323
plat/isdn/ut/isdn_main.c Normal file
View File

@@ -0,0 +1,323 @@
/***********************************************************
Copyright (C), LGC Wireless.
File Name: isdn_main.c
Description: For isdn module test
Version: v9.0.0
Author: Gengxin Chen
Create Date: 2008-2-19
History:
<author> <date> <version> <desc>
************************************************************/
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
#include <signal.h>
#include <assert.h>
#include <string.h>
#include "../src/include/isdn_rm.h"
#include "../src/include/isdn_ext.h"
#include "../src/include/isdn_inc.h"
#include "../../snmp/src/include/snmp.h"
#include "../../mtp3/src/include/mtp3.h"
#include "../../public/src/include/license_id.h"
#include "../../tcap/src/include/tcap_public.h"
#define SYS_IT_INTERVAL_SEC 0
#define SYS_IT_INTERVAL_USEC (20*1000)
static char serialNumber[18]="";
xua_up_msg_t iua_msg_src;
static int systemID=0,systemInited=0;
static int sys_timer10ms=0;
u8 ptemp[] = {0};
extern int test_len;
extern void test_isdn_msg_encode(u8 type);
extern void test_isdn_msg_decode(u8 type);
extern void m2ua_init(BYTE system_id);
extern void msc_isdn_init(int *sap_id);
extern void cc_timer();
static void isdn_param_init(void)
{
// ISDN_Sap_Attrib_ sap;
Cg_Attrib_struct cg;
Circuit_Attrib_struct trunk;
int sap_id,cg_id,trunk_id_0, trunk_id_1, trunk_id_2;
// memset(&sap,0,sizeof(ISDN_Sap_Attrib_));
memset(&cg,0,sizeof(Cg_Attrib_struct));
memset(&trunk,0,sizeof(Circuit_Attrib_struct));
/* if((sap_id = isdn_bind_sap(&sap)) == -1)
{
printf("add sap error!\r\n");
return;
}*/
msc_isdn_init(&sap_id);
cg.network_id = 0;
cg.priority = 0; // 0:Reattempt ind / 1:Discard
cg.tg_id = 0;
if((cg_id = isdn_add_cg(sap_id, &cg)) == -1)
{
printf("Failed to create isup trunk group socket\r\n");
return;
}
trunk.cic_range = 32;
trunk.head_cic = 0;
trunk.plat_id = CTRL_PLAT_0;
if((trunk_id_0 = isdn_add_circuit(cg_id, &trunk)) == -1)
{
printf("Failed to create isup trunk socket\r\n");
return;
}
if((trunk_id_1 = isdn_add_circuit(cg_id, &trunk)) == -1)
{
printf("Failed to create isup trunk socket\r\n");
return;
}
if((trunk_id_2 = isdn_add_circuit(cg_id, &trunk)) == -1)
{
printf("Failed to create isup trunk socket\r\n");
return;
}
isdn_rs.cg_pond[cg_id].attrib.nfas_flag = 1;
isdn_rs.cg_pond[cg_id].attrib.variant_type = VARIANT_ANSI;
isdn_rs.cg_pond[cg_id].attrib.ds_ch[0] = trunk_id_0;
isdn_rs.cg_pond[cg_id].attrib.ds_ch[1] = trunk_id_1;
isdn_rs.circuit_pond[trunk_id_0].attrib.d_chnl = 16;
isdn_rs.circuit_pond[trunk_id_0].attrib.head_cic = 0;
isdn_rs.circuit_pond[trunk_id_0].attrib.cic_range =32;
isdn_rs.circuit_pond[trunk_id_0].attrib.plat_id = 0;
isdn_rs.circuit_pond[trunk_id_0].attrib.iua_id = 0;
isdn_rs.circuit_pond[trunk_id_0].user_network_if = USER_SIDE; //nt or lt
isdn_rs.circuit_pond[trunk_id_1].attrib.d_chnl = 16;
isdn_rs.circuit_pond[trunk_id_1].attrib.head_cic = 32;
isdn_rs.circuit_pond[trunk_id_1].attrib.cic_range =32;
isdn_rs.circuit_pond[trunk_id_1].attrib.plat_id = 0;
isdn_rs.circuit_pond[trunk_id_1].attrib.iua_id = 1;
isdn_rs.circuit_pond[trunk_id_1].user_network_if = USER_SIDE; //nt or lt
isdn_rs.circuit_pond[trunk_id_2].attrib.d_chnl = 16;
isdn_rs.circuit_pond[trunk_id_2].attrib.head_cic = 64;
isdn_rs.circuit_pond[trunk_id_2].attrib.cic_range =32;
isdn_rs.circuit_pond[trunk_id_2].attrib.plat_id = 0;
isdn_rs.circuit_pond[trunk_id_2].attrib.iua_id = 2;
isdn_rs.circuit_pond[trunk_id_2].user_network_if = USER_SIDE; //nt or lt
printf("isdn init ok.\r\n");
}
int wxc2_get_license(int functionID)
{
return 1;
}
static void sysTimer_IRQ()
{
sys_timer10ms = 1; //test
}
static void SigactionSystem()
{
struct sigaction action;//,actsegv;
action.sa_handler = sysTimer_IRQ;
sigemptyset(&action.sa_mask);
action.sa_flags = SA_RESTART;
if(sigaction(SIGALRM, &action, NULL)<0)
{
printf("sigactin sigalarm failed\n");
}
}
static void sysDaemonInit()
{
int i;
pid_t pid;
if ( (pid = fork()) < 0) /* parent terminates */
printf("%s: %s: fork (%d)",
__FILE__, __FUNCTION__, __LINE__);
else if (pid != 0)
exit(0); /* parent goes bye-bye */
setsid(); // become session leader
for (i = 0; i<3; i++)
close(i);
}
static void moduleInit()
{
printf("\n\n<EFBFBD><EFBFBD>R9 Platform Init<69><74>\n\n");
debug_init();
heartbeat_init(0x0400);
iptrMainInit();
snmp_init(4957);
m2ua_init(0);
mtp_shm_init(0x0400);
mtp3_init_serial(serialNumber);
isdn_init(systemID,10);
printf("\n\n<EFBFBD><EFBFBD>R9 Platform Init completed<65><64>\n\n");
}
static void SetFSMTimer()
{
struct itimerval *ptv, tv;
ptv = (struct itimerval *) &tv;
ptv->it_interval.tv_sec = SYS_IT_INTERVAL_SEC;
ptv->it_interval.tv_usec = SYS_IT_INTERVAL_USEC;
ptv->it_value. tv_sec = SYS_IT_INTERVAL_SEC;
ptv->it_value.tv_usec = SYS_IT_INTERVAL_USEC;
setitimer(ITIMER_REAL, ptv, NULL);
}
static void moduleProc()
{
static int wait_sccp_normal_count = 0;
iptrans_timer();
snmp_timer();
if(systemInited)
{
wait_sccp_normal_count=6001;
heartbeat_timer();
m2ua_timer();
mtp3_proc();
isdn_timer();
cc_timer();
/* test_isdn_msg_decode(MSG_SETUP);
test_isdn_msg_encode(MSG_SETUP);
test_isdn_msg_decode(MSG_SETUP_ACK);
test_isdn_msg_encode(MSG_SETUP_ACK);
test_isdn_msg_decode(MSG_CALL_PROC);
test_isdn_msg_encode(MSG_CALL_PROC);
test_isdn_msg_decode(MSG_ALERT);
test_isdn_msg_encode(MSG_ALERT);
test_isdn_msg_decode(MSG_CONN);
test_isdn_msg_encode(MSG_CONN);
test_isdn_msg_decode(MSG_CONNACK);
test_isdn_msg_encode(MSG_CONNACK);
test_isdn_msg_decode(MSG_DISC);
test_isdn_msg_encode(MSG_DISC);
test_isdn_msg_decode(MSG_REL);
test_isdn_msg_encode(MSG_REL);
test_isdn_msg_decode(MSG_REL_COMP);
test_isdn_msg_encode(MSG_REL_COMP);*/
}
debug_rt();
}
int CStrToHex(u8 dst[], u8 *src)
{
int i, len, offset=0;
len = strlen(src);
while((len--) != 0)
{
if(*src >= '0' && *src <= '9')
ptemp[offset++] = *src - 0x30;
else if(*src >= 'A' && *src <= 'F')
ptemp[offset++] = *src - 'A' + 10; //*src - 0x37;
else if(*src >= 'a' && *src <= 'f')
ptemp[offset++] = *src - 'a' + 10; //*src - 0x57;
else
{
src++;
continue;
}
// printf("src=%x,ptemp=%x\n",*src,*(ptemp+offset-1));
src++;
}
test_len = offset/2;
for(i = 0; i < test_len; i++)
{
dst[i] = ((ptemp[2*i]) << 4) | (ptemp[2*i+1]);
// printf("set[%d]=0x%2x\n",i,dst[i]);
}
// printf("sizeof=%d,strlen=%d\n",sizeof(dst),strlen(dst));
return 1;
}
static void isdn_set_val()
{
iua_msg_src.msg_class = IUA_QPTM_MSG;
iua_msg_src.msg.iua.link = 0x10;
iua_msg_src.msg.iua.len = test_len;
}
int main(int argc, char **argv)
{
int retval, err_flag=0, daemon_flag=0, no_sync=0;
while ((retval = getopt(argc, argv, "dt")) != -1)
{
switch (retval) {
case 'd':
daemon_flag = 1;
break;
case 't':
no_sync = 1;
break;
case '?':
err_flag = 1;
break;
}
}
if (err_flag) {
printf("Usage: %s [-d] \n", argv[0]);
printf(" -d with daemon mode\n");
exit(1);
}
if(daemon_flag)
sysDaemonInit();
moduleInit();
SigactionSystem();
SetFSMTimer();
isdn_param_init();
// isdn_set_val();
sys_timer10ms = 1;
while(1)
{
if(sys_timer10ms)
{
sys_timer10ms = 0;
moduleProc();
systemInited = 1;
}
if (sys_timer10ms == 0)
usleep(1);
}
return 1;
}

325
plat/isdn/ut/isdn_test.c Normal file
View File

@@ -0,0 +1,325 @@
/***********************************************************
Copyright (C), LGC Wireless.
File Name: isdn_test.c
Description: For isdn module test
Version: v9.0.0
Author: Gengxin Chen
Create Date: 2008-2-19
History:
<author> <date> <version> <desc>
************************************************************/
#include "../src/include/isdn_rm.h"
#include "../src/include/isdn_ext.h"
#include "../src/include/isdn_inc.h"
#define CODE_SETUP "a1 04 03 80 90 a3 18 03 a1 83 81 6c 07 00 80 35 31 30 30 31 70 06 81 35 32 30 30 31"
#define CODE_CALL_PROC "18 03 A9 83 81"
#define CODE_ALERT "1E 02 83 88"
#define CODE_DISCONN "08 02 83 90"
int test_len;
static int cc_state[8192] = {0};
extern int CStrToHex(u8 dst[], u8 *src);
extern int q931_msg_encode(u8 *dst, IsdnMsgStr *src);
extern int isdn_msg_decode(IsdnMsgStr *dst, u8 *src, u8 msgtype, u8 len);
extern void isdn_set_cause(CauseStr *cause_ptr, u8 val);
void test_isdn_msg_encode(u8 type)
{
int ret;
int i;
memset(&iua_sd_msg, 0, sizeof(IuaMsgStr));
IuaMsgStr *dst = &iua_sd_msg;
u8 *flw_ptr = dst->msgcontent.isdn_msg.ie_content; //message flow pointer
memcpy(&isdn_sd_msg, &isdn_rv_msg, sizeof(IsdnMsgStr));
isdn_sd_msg.msg_m.msg_type = type;
ret = q931_msg_encode(flw_ptr, &isdn_sd_msg);
printf("ret=%d\n",ret);
for(i=0; i<ret; i++)
{
printf("%2x ",flw_ptr[i]);
}
printf("\n");
}
void test_isdn_msg_decode(u8 type)
{
u8 *ptr = "";
memset(&isdn_rv_msg, 0, sizeof(IsdnMsgStr));
memset(&iua_rv_msg, 0, sizeof(IuaMsgStr));
switch(type)
{
case MSG_SETUP:
ptr = CODE_SETUP;
break;
case MSG_SETUP_ACK:
case MSG_CALL_PROC:
ptr = CODE_CALL_PROC;
break;
case MSG_ALERT:
ptr = CODE_ALERT;
break;
case MSG_DISC:
case MSG_REL:
case MSG_REL_COMP:
ptr = CODE_DISCONN;
break;
default:
break;
}
CStrToHex(iua_rv_msg.msgcontent.isdn_msg.ie_content, ptr);
isdn_msg_decode(&isdn_rv_msg, iua_rv_msg.msgcontent.isdn_msg.ie_content, type, test_len);
}
int isdn_setup_ind(Pst *pst, IsdnSetup *ptr)
{
cc_state[pst->sp_proc_id] = 1;
return 1;
}
int isdn_alert_ind(Pst *pst, IsdnAlert *ptr)
{
return 1;
}
int isdn_setup_cnf(Pst *pst, IsdnConn *ptr)
{
return 1;
}
int isdn_disc_ind(Pst *pst, IsdnDisc *ptr)
{
IsdnRel src;
memset(&src, 0, sizeof(IsdnRel));
isdn_rel_req(pst, &src);
return 1;
}
int isdn_rel_ind(Pst *pst, IsdnRel *ptr)
{
return 1;
}
int isdn_rel_cnf(Pst *pst, IsdnRelComp *ptr)
{
return 1;
}
int isdn_stat_ind(Pst *pst, IsdnStatus *ptr)
{
return 1;
}
void msc_isdn_init(int *sap_id)
{
ISDN_Sap_Attrib_ sap;
memset(&sap,0,sizeof(ISDN_Sap_Attrib_));
sap.event_handle.h_isdn_setup_ind = (f_isdn_setup_ind *)isdn_setup_ind;
sap.event_handle.h_isdn_alert_ind = (f_isdn_alert_ind *)isdn_alert_ind;
sap.event_handle.h_isdn_setup_cnf = (f_isdn_setup_cnf *)isdn_setup_cnf;
sap.event_handle.h_isdn_disc_ind = (f_isdn_disc_ind *)isdn_disc_ind;
sap.event_handle.h_isdn_rel_ind = (f_isdn_rel_ind *)isdn_rel_ind;
sap.event_handle.h_isdn_rel_cnf = (f_isdn_rel_cnf *)isdn_rel_cnf;
sap.event_handle.h_isdn_stat_ind = (f_isdn_stat_ind *)isdn_stat_ind;
if((*sap_id = isdn_bind_sap(&sap)) == -1)
{
printf("add sap error!\r\n");
return;
}
}
void isdn_cc_fsm(u32 pid)
{
int offset, circuit_id;
static int i = 0;
Pst pst;
IsdnMsgStr isdn_msg;
memset(&isdn_msg, 0, sizeof(IsdnMsgStr));
pst.sp_proc_id = pid;
pst.su_proc_id = isdn_rs.port_pond[pid].su_proc_id;
circuit_id = pid / ISDN_CIRCUIT_CIC;
offset = pid % ISDN_CIRCUIT_CIC;
pst.cic = isdn_rs.circuit_pond[circuit_id].attrib.head_cic + offset;
pst.cg_id = isdn_rs.circuit_pond[circuit_id].cg_id;
pst.circuit_id = circuit_id;
if((isdn_rs.port_pond[pid].cic_state.call_state == CALLOUT_FLAG && isdn_rs.circuit_pond[circuit_id].user_network_if == NETWORK_SIDE) ||
(isdn_rs.port_pond[pid].cic_state.call_state == CALLIN_FLAG && isdn_rs.circuit_pond[circuit_id].user_network_if == USER_SIDE))
{
switch(cc_state[pid])
{
case 1:
cc_state[pid] = 2;
break;
case 2:
memcpy(&isdn_msg.msg_list.callProc.chnl_id, &isdn_rv_msg.msg_list.setup.chnl_id, sizeof(ChnlId));
/* isdn_msg.msg_list.alert.prg_ind.pres = 1;
isdn_msg.msg_list.alert.prg_ind.code_stan = 0;
isdn_msg.msg_list.alert.prg_ind.loc = 3;
isdn_msg.msg_list.alert.prg_ind.prg_descr = 8;
isdn_alert_req(&pst, &isdn_msg.msg_list.alert);*/
isdn_msg.msg_list.callProc.chnl_id.b3.pref_excl = 1;
isdn_call_proc_req(&pst, &isdn_msg.msg_list.callProc);
cc_state[pid] = 3;
break;
case 3:
cc_state[pid] = 4;
break;
case 4:
isdn_setup_resp(&pst, &isdn_msg.msg_list.conn);
cc_state[pid] = 5;
break;
case 5:
i++;
if(i % 150 == 0)
{
i = 0;
cc_state[pid] = 6;
}
break;
case 6:
// isdn_set_cause(&isdn_msg.msg_list.disc.cause, CAUSE_NORMAL);
// isdn_disc_req(&pst, &isdn_msg.msg_list.disc);
cc_state[pid] = 0;
break;
default:
break;
}
}
else if((isdn_rs.port_pond[pid].cic_state.call_state == CALLIN_FLAG && isdn_rs.circuit_pond[circuit_id].user_network_if == NETWORK_SIDE) ||
(isdn_rs.port_pond[pid].cic_state.call_state == CALLOUT_FLAG && isdn_rs.circuit_pond[circuit_id].user_network_if == USER_SIDE))
{
switch(cc_state[pid])
{
case 1:
i++;
if(i % 400 == 0)
{
i = 0;
// cc_state[pid] = 2;
}
break;
case 2:
// isdn_set_cause(&isdn_msg.msg_list.disc.cause, CAUSE_NORMAL);
// isdn_disc_req(&pst, &isdn_msg.msg_list.disc);
memcpy(&isdn_msg.msg_list.restart.chnl_id, &isdn_sd_msg.msg_list.setup.chnl_id, sizeof(ChnlId));
isdn_msg.msg_list.restart.restart_ind.pres = 1;
isdn_msg.msg_list.restart.restart_ind.clas = 0;
isdn_m_restart_req(&pst, &isdn_msg.msg_list.restart);
cc_state[pid] = 0;
break;
default:
break;
}
}
}
static int flag[256] = {0};
void isdn_cc_setup_fsm(u16 circuit_id)
{
static int i = 0;
Pst pst;
IsdnSetup setup;
u8 cg_digit[] = {5,1,0,0,1};
u8 cd_digit[] = {5,2,0,0,1};
memset(&setup, 0, sizeof(IsdnSetup));
if(!flag[circuit_id])
{
flag[circuit_id] = 1;
pst.circuit_id = circuit_id;
pst.cg_id = isdn_rs.circuit_pond[circuit_id].cg_id;
pst.su_proc_id = 0;
setup.sd_comp.pres = 1;
setup.br_cap.pres = 1;
setup.br_cap.ext_flag = 1;
setup.br_cap.code_stan = 0;
setup.br_cap.tran_cap = 0;
setup.br_cap.b4.tran_mode = 0;
setup.br_cap.b4.tran_rate = 0x10;
setup.br_cap.b5.usr_layer1 = 3;
setup.br_cap.b5.has_ext_a = 1;
setup.chnl_id.pres = 1;
setup.chnl_id.b3.int_id_pre = 0;
setup.chnl_id.b3.int_type = 1;
setup.chnl_id.b3.pref_excl = 0;
setup.chnl_id.b3.chnl_ind = 0;
setup.chnl_id.b3.info_chnl_sel = 1;
setup.chnl_id.b3.code_stan = 0;
setup.chnl_id.b3.num_map = 0;
setup.chnl_id.b3.chnl_type = 3;
setup.chnl_id.b3.chnl_num = 2; //CIC
setup.cg_pty_num.pres = 1;
setup.cg_pty_num.b3.num_type = 0;
setup.cg_pty_num.b3.num_plan_id = 0;
setup.cg_pty_num.b3.has_ext_a = 0;
setup.cg_pty_num.b3.pres_ind = 0;
setup.cg_pty_num.b3.screen_ind = 0;
setup.cg_pty_num.ext_flag = 1;
setup.cg_pty_num.num_digit_len = sizeof(cg_digit);
memcpy(&setup.cg_pty_num.num_digit, cg_digit, setup.cg_pty_num.num_digit_len);
setup.cd_pty_num.pres = 1;
setup.cd_pty_num.num_type = 0;
setup.cd_pty_num.num_plan_id = 1;
setup.cd_pty_num.num_digit_len = sizeof(cd_digit);
memcpy(&setup.cd_pty_num.num_digit, cd_digit, setup.cd_pty_num.num_digit_len);
setup.rpt_ind.pres = 1;
setup.prg_ind.pres = 1;
setup.prg_ind.loc = 3;
setup.prg_ind.prg_descr = 8;
setup.nt_sp_fac.pres = 1;
setup.nt_sp_fac.b3.len_net_id = 2;
setup.nt_sp_fac.b3.net_id_type = 2;
setup.nt_sp_fac.b3.net_id_plan = 1;
setup.nt_sp_fac.b3.net_id = 2; //?? {2,0,5}
setup.nt_sp_fac.spec = 2;
// setup.disp.pres = 1;
// setup.disp.disp_info_len =
pst.cic = isdn_rs.circuit_pond[circuit_id].attrib.head_cic + setup.chnl_id.b3.chnl_num;
// isdn_setup_req(&pst, &setup);
// cc_state[pst.sp_proc_id] = 1;
}
if(++i == 700) //more calls
{
i = 0;
flag[circuit_id] = 0;
}
}
void cc_timer()
{
u16 i, j;
u32 offset, pid;
for(i = 0; i < ISDN_MAX_CIRCUIT; i++) //for timer
{
if(isdn_rs.circuit_pond[i].enable == 0)
continue;
if((isdn_rs.attrib.isdn_run_mode == 1) &&
(isdn_rs.circuit_pond[i].attrib.plat_id != isdn_rs.attrib.systemID))
continue;
offset = ISDN_CIRCUIT_CIC * i;
for(j = 0; j < ISDN_CIRCUIT_CIC; j++)
{
pid = offset + j;
if(isdn_rs.port_pond[pid].enable == 1)
isdn_cc_fsm(pid);
}
if(isdn_rs.circuit_pond[i].lk3_status == LK_IS)
isdn_cc_setup_fsm(i);
}
}

BIN
plat/isdn/ut/test_main Normal file

Binary file not shown.

BIN
plat/isdn/ut/test_main_0526 Normal file

Binary file not shown.