init ems server code

This commit is contained in:
simonzhangsz committed 2024-09-27 15:39:34 +08:00
1 parent 9d4009aaca
commit 9930e4e58f
1551 files changed
+110216 -102864

No files matched your search

+99
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
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
+275
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
+81
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
+33
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
+491
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
{/*可能得把每个可选八比特放到一个结构体中,而一个八比特组需要在另外的地方处理成一个数组*/
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 //不为0则含有下面两个比特组
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 常量
}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
+119
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 »ò 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 »ò 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
+27
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
+333
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 //¼ÆÊý, Óм¸¸öÊ®ºÁÃë
{
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
+56
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
+151
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; //最高位, 辨别是主叫发起的还是别叫发起的
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
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+515
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
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
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
+69
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;
+33
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;
+33
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;
+3
View File
@@ -0,0 +1,3 @@
#define RE_IP 172.18.99.1
#define RE_PORT 0
#define LO_PORT 2904
+19
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(ËùÓеij¤¶È))
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(ÕûÌõiua messageµÄ³¤¶È))
FF 01 F0 02; //iua message(protocol data)
1000 SCTP.Recv <asp up ack>
?? //common message header
+47
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;
+82
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;
+41
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;
+151
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-??>
??;
+82
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;
+82
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;
+83
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;
+85
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-??>
??;
+82
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;
+44
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;
+44
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 ?? ?? ??;
+103
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;
+47
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-??>
??;
+96
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;
+36
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;
+89
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 Ðé>
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;
+97
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 È«¾Ö>
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
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¡¾R9 Platform Init¡¿\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¡¾R9 Platform Init completed¡¿\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
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);
}
}
Binary file not shown.
Binary file not shown.