init ems server code
This commit is contained in:
1 parent
9d4009aaca
commit
9930e4e58f
1551 files changed
+110216
-102864
No files matched your search
@@ -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.
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -0,0 +1,3 @@
|
||||
#define RE_IP 172.18.99.1
|
||||
#define RE_PORT 0
|
||||
#define LO_PORT 2904
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
|
||||
@@ -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-??>
|
||||
??;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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-??>
|
||||
??;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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 ?? ?? ??;
|
||||
@@ -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;
|
||||
@@ -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-??>
|
||||
??;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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.
Reference in new issue
Block a user