init ems server code

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

No files matched your search

+96
View File
@@ -0,0 +1,96 @@
##----------------------------------------------------------##
## ##
## Universal Makefile for module Version : V1.4 ##
## ##
## Created : Wei Liu 07/04/11 ##
## Revision: [Last]Wei Liu 07/06/18 ##
## ##
##----------------------------------------------------------##
##---------------------------------------------------------------------##
##--------------------------------------
##
## 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 = aif
TYPE = plat
DBUG_FLAGS_ADD = -D_AIFG_DEBUG_
RELS_FLAGS_ADD =
##Default commonly as below
BUILD = lib
CFG = debug
PLT_LIB = cunit public debug iptrans snmp mtp3 sccp
APP_LIB =
LIB_ADD =
SRC_PATH = ./src
INC_PATH = ./src/include
PLT_PATH = ../../plat
APP_PATH = ../../app
OBJ_ADD =
TEST_OBJ_PATH = ../../obj
##---------------------------------------------------------------------##
##--------------------------------------
##
## 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 = yes
COVER_REPORT_PATH = ./ut/ut_doc/output
MAKE_INCLUDE = $(HOME)/ems.git/include
##---------------------------------------------------------------------##
##--------------------------------------
##
## include makefile.rules (Do not change)
##
##--------------------------------------
include $(MAKE_INCLUDE)/Makefile.rules
+21
View File
@@ -0,0 +1,21 @@
ACRD Software Module Release Notes
Module Name: AIFG
#----------------------------------------------
[Version]
R9V0_05P2
[Release Date]
2008-1-8
[Author]
Roy Jiang
[Changes]
Bug fixed:
1.NA
Improvements:
1.NA
New features:
1.NA
[Remark]
1.Initial Clearcase release
#----------------------------------------------
+265
View File
@@ -0,0 +1,265 @@
/********************************************************************
Copyright ?2007 LGC Wireless, Inc. All rights reserved
File Name: aifg_if.c
Description: Interface of AIFG
Version: v9.0.0
Author: Roy Jiang
Create Date: 2007-3-12
History:
2007-3-6 v9.0.1 Create
*********************************************************************/
#include "./include/aifg_var_ext.h"
#include "../../public/src/include/license_id.h"
/*
Name: aifg_bind
Purpose: Request to create a SAP in AIFG module.
Input: aifg_sap_type type: type of upper layer entity
int (*callback)(): pointer to call back function
Output: SAP id
*/
int aifg_bind(aifg_sap_type type, int (*callback)(aifg_indication, aifg_msg_pre_decoded *))
{
//checking parameters
assert(type == AIFG_SAP_MSC || type == AIFG_SAP_BSC);
assert(callback != NULL);
assert(sap[type].enable == 0);
if (wxc2_get_license(LIC_AIF) != 1)
return -1;
sap[type].enable = 1;
sap[type].callback_func = callback;
return (int)type;
}
/*
Name: aifg_modify
Purpose: Request to modify the SAP parameter in AIFG module.
Input: aifg_sap_type type: type of upper layer entity
aifg_callback_func *callback: new callback functions, null if no need to modify
Output: None
*/
void aifg_modify(int sapid, int (*callback)(aifg_indication, aifg_msg_pre_decoded*))
{
//checking parameters
assert(sapid == AIFG_SAP_MSC || sapid == AIFG_SAP_BSC);
assert(sap[sapid].enable == 1);
sap[sapid].enable = 1;
if(callback != NULL)
sap[sapid].callback_func = callback;
return;
}
/*
Name: aifg_set_running_mode
Purpose: Set the running mode of AIFG module.
Input: enum aifg_run_mode mode: running mode, 0 - single, 1 - dual
int alter_ip:IP address of the alternative server, hex format
Output: None
*/
void aifg_set_running_mode(aifg_run_mode mode)
{
assert(mode == AIFG_RUN_MODE_SINGLE || mode == AIFG_RUN_MODE_DUAL);
dual_server.mode = mode;
return;
}
/*
Name: aifg_createCircuitGroup
Purpose: Request to create a circuit group in AIFG module.
Input: int sapid: SAP ID of upper layer entity
int dpc: DPC of the circuit group.
aifg_ni ni: NI of the circuit group.
Output: Circuit Group ID - Upper layer entity should record this ID and pass it to AIFG module
whenever it request to send a message through this circuit group
AIFG_ERR_NO_RESOURCE: Create failed
*/
int aifg_createCircuitGroup(int sapid, int dpc, aifg_ni ni, int tgid)
{
int i;
assert(sapid == AIFG_SAP_MSC || sapid == AIFG_SAP_BSC);
assert(ni >= 0 && ni <= 3);
assert(dpc >= 0);
if (sap[sapid].enable == 0)
goto ERR_PROC;
//check if there is a existing CG with the same dpc and ni
for(i=0; i < AIFG_MAX_CG; i++){
if(cg[i].enable == 1 && cg[i].dpc == dpc && cg[i].ni == ni)
return i;
}
//create a new circuit group
i = 0;
while(cg[i].enable == 1)
i++;
if(i >= AIFG_MAX_CG){
aifg_event = AIFG_ERR_OUT_OF_RESOURCE;
goto ERR_PROC;
}
cg[i].enable = 1;
cg[i].dpc = dpc;
cg[i].ni = ni;
cg[i].sapid = sapid;
cg[i].tgid = tgid;
return i;
ERR_PROC:
return -1;
}
/*
Name: aifg_delCircuitGroup
Purpose: Request to delete a circuit group in AIFG module.
Input: int sapid: SAP ID of upper layer entity
int cgid: Circuit Group ID
Output: None
*/
void aifg_delCircuitGroup(int sapid, int cgid)
{
assert(sapid == AIFG_SAP_MSC || sapid == AIFG_SAP_BSC);
assert(cgid >= 0 && cgid < AIFG_MAX_CG);
cg[cgid].enable = 0;
cg[cgid].dpc = 0;
cg[cgid].ni = 0;
cg[cgid].sapid = 0;
cg[cgid].tgid = 0;
return;
}
/*
Name: aifg_modCircuitGroup
Purpose: Request to modify the parameter of a circuit group in AIFG module.
Input: int sapid: SAP ID of upper layer entity
int cgid: Circuit Group ID
int dpc: new DPC of the circuit group, -1 if no need to change.
enum aifg_ni: new NI of the circuit group, -1 if no need to change.
Output: Circuit Group ID - Upper layer entity should record this ID and pass it to AIFG module
whenever it request to send a message through this circuit group
*/
int aifg_modCircuitGroup(int sapid, int cgid, int dpc, int ni)
{
assert(sapid == AIFG_SAP_MSC || sapid == AIFG_SAP_BSC);
assert(cg[cgid].sapid == sapid);
assert(ni >= 0 && ni <= 3);
assert(dpc >= 0);
assert(cgid >= 0 && cgid < AIFG_MAX_CG);
cg[cgid].enable = 1;
cg[cgid].dpc = dpc;
cg[cgid].ni = ni;
return cgid;
}
/*
Name: aifg_send
Purpose: Request to send a message through A-interface.
Input: int sapid: SAP ID of upper layer entity.
int cgid: Circuit Group ID
int u_port: process port of upper layer entity
aifg_msg *msg: content of assign request message
Output: 0 - succeed
-1 - failed, no free port available
-2 - failed, circuit group not ready
*/
int aifg_send(int sapid, int cgid, int u_port, aifg_msg_t *msg)
{
int protocol;
assert(sapid == AIFG_SAP_MSC || sapid == AIFG_SAP_BSC);
assert(cgid >= 0 && cgid < AIFG_MAX_CG);
assert(msg != NULL);
if (sap[sapid].enable == 0){
aifg_event = AIFG_ERR_SAP_NOT_CREATED;
goto ERR_PROC;
}
//check message protocol and pd
msg->app_port = u_port;
if(msg->id <= AIFG_MSG_ID_RP_SMMA){
if(msg->id <= AIFG_MSG_ID_MM_INFO)
msg->pd = AIFG_PD_DTAP_MM;
else if(msg->id <= AIFG_MSG_ID_FACILITY)
msg->pd = AIFG_PD_DTAP_CC;
else if(msg->id <= AIFG_MSG_ID_RELEASE_CMP_SS)
msg->pd = AIFG_PD_DTAP_SS;
else if(msg->id <= AIFG_MSG_ID_RP_SMMA)
msg->pd = AIFG_PD_DTAP_SMS;
else
assert(0);
protocol = AIFG_MSG_DTAP;
}
else{
if(msg->id <= AIFG_MSG_ID_HO_CAN_RESP)
msg->pd = AIFG_PD_BSSMAP_GLOBAL;
else if(msg->id <= AIFG_MSG_ID_LSA_INFO)
msg->pd = AIFG_PD_BSSMAP_DEDICATED;
else
assert(0);
protocol = AIFG_MSG_BSSMAP;
}
if(msg->aif_port == -1 || msg->pd == AIFG_PD_BSSMAP_GLOBAL){
if(msg->pd != AIFG_PD_BSSMAP_GLOBAL || msg->id == AIFG_MSG_ID_PAGING){
if((msg->aif_port = aifg_port_assign(sapid, cgid, -1)) < 0){
aifg_event = AIFG_ERR_ASSIGN_PORT_FAIL;
goto ERR_PROC;
}
aifg_pcb[msg->aif_port].upper_port = u_port;
aifg_pcb[msg->aif_port].trace_flag = msg->trace_flag;
}
else{
msg->aif_port = -1; //no port need
aifg_send_udt(cgid, msg, NULL); //global BSSMAP message needs no aifg port, except paging
}
}
else if (aifg_pcb[msg->aif_port].stat == AIFG_PORT_TRANSACTION && aifg_pcb[msg->aif_port].ti_type != AIFG_TRANS_UNKNOW){
if((msg->id == AIFG_MSG_ID_SETUP
&& (aifg_pcb[msg->aif_port].ti_stat > 0 || aifg_pcb[msg->aif_port].ti_type != AIFG_TRANS_CC))
|| (msg->id == AIFG_MSG_ID_RP_DATA
&& aifg_pcb[msg->aif_port].ti_type != AIFG_TRANS_SMS))
{
//new transaction
int new_port = aifg_port_assign(sapid, cgid, -1);
if (new_port < 0){
aifg_event = AIFG_ERR_ASSIGN_PORT_FAIL;
goto ERR_PROC;
}
aifg_pcb[new_port].upper_port = u_port;
aifg_pcb[new_port].link_id = aifg_pcb[msg->aif_port].link_id;
aifg_pcb[new_port].trace_flag = msg->trace_flag;
msg->aif_port = new_port;
}
}
if(msg->aif_port != -1){
if (aifg_pcb[msg->aif_port].stat == AIFG_PORT_IDLE){
aifg_event = AIFG_ERR_MSG_SD_TO_IDLE_PORT;
goto ERR_PROC;
}
aifg_pcb[msg->aif_port].cgid = cgid;
aifg_port_proc(&aifg_pcb[msg->aif_port], msg, NULL);
}
aifg_debug_print(msg->aif_port, AIFG_EVENT_RV_REQ, msg, 0);
return AIFG_SUCCEED;
ERR_PROC:
aifg_debug_print(msg->aif_port, aifg_event, msg, u_port);
return AIFG_ERROR;
}
+310
View File
@@ -0,0 +1,310 @@
/********************************************************************
Copyright ?2007 LGC Wireless, Inc. All rights reserved
File Name: aifg_csta.c
Description: CSTA of AIFG
Version: v9.0.0
Author: XH Chen
Create Date: 2008-3-12
History:
2007-3-6 v9.0.1 Create
*********************************************************************/
#include "../../../plat/public/src/include/includes.h"
#include "../../../plat/snmp/src/include/snmp.h"
#include "./include/aifg_type_def.h"
#define NO_EXIST 0
#define EXIST 1
#define OID_OFFSET 14
#define AIF_10SEC 1000
struct obj_view {
int entry_oidlen;
int column_oidlen;
int full_oidlen;
DWORD *entry;
DWORD *column;
DWORD *iid; /* Instance ID */
BYTE csta_pos;
BYTE csta_len;
};
typedef void *(*lookup_level_1)(u32 *oid_1);
typedef void *(*lookup_level_2)(u32 oid_1, u32 *oid_2);
typedef int (*get_csta)(struct obj_view *view, u8 *pdata, u8 *vartype);
struct tab_view{
BYTE exist_flag;
BYTE entry_id;
BYTE level; /* Three level: 1, 2*/
lookup_level_1 lookup_1;
lookup_level_2 lookup_2;
get_csta get_aif_csta;
u8 next_column[16];
struct obj_view view;
};
#define AIF_OID {1,3,6,1,4,1,1373,2,3,2,6}
#define AIF_OIDLEN 11
typedef struct{
unsigned long timestamp;
int msg_stat[AIFG_MAX_MESSAGE*2];
}aifg_csta;
BYTE aifCSTAInd;
aifg_csta aifCSTA[96];
//DTAP:RR MM CC SS SMS; BSSMAP:Global Dedicated
const BYTE cstaLen[8] = {0, 2, 21, 31, 3, 4, 18, 36};
const BYTE postion[8] = {0, 0, 4, 46, 108, 114, 122, 158};
extern int msg_statistics[AIFG_MAX_MESSAGE][2];
u32 *findnext_quater(u32 *id);
int get_aif_csta(struct obj_view *view, BYTE *pdata, BYTE *vartype);
int aifg_get_resp(BYTE oidlen, DWORD *oid, BYTE *pdata, BYTE *vartype);
int aif_getnext_resp(u8 prev_oidlen, u32 *prev_oid, u8 *oidlen, u32 *oid, u8 *pdata, u8 *vartype);
static struct tab_view aif_csta_table[8]={
{NO_EXIST},
{
EXIST, OID_OFFSET, 1,
(void *)findnext_quater, NULL,
get_aif_csta,
{1, 2, 0}
},
{
EXIST, OID_OFFSET, 1,
(void *)findnext_quater, NULL,
get_aif_csta,
{1, 2, 0}
},
{
EXIST, OID_OFFSET, 1,
(void *)findnext_quater, NULL,
get_aif_csta,
{1, 2, 0}
},
{
EXIST, OID_OFFSET, 1,
(void *)findnext_quater, NULL,
get_aif_csta,
{1, 2, 0}
},
{
EXIST, OID_OFFSET, 1,
(void *)findnext_quater, NULL,
get_aif_csta,
{1, 2, 0}
},
{
EXIST, OID_OFFSET, 1,
(void *)findnext_quater, NULL,
get_aif_csta,
{1, 2, 0}
},
{
EXIST, OID_OFFSET, 1,
(void *)findnext_quater, NULL,
get_aif_csta,
{1, 2, 0}
},
};
void aifg_csta_init(void)
{
DWORD aif_oid_prefix[20] = AIF_OID;
inquire_getmsg(AIF_OIDLEN, aif_oid_prefix, aifg_get_resp);
inquire_getnextmsg(AIF_OIDLEN, aif_oid_prefix, aif_getnext_resp);
memset(aifCSTA, 0, sizeof(aifCSTA));
}
void aifg_csta_proc(void)
{
static int counter = 0;
static BYTE flag = 0;
struct tm *t;
unsigned long l_time;
if(counter ++ >= AIF_10SEC)
{
l_time = time(NULL);
t = localtime(&l_time);
counter = 0;
if(t->tm_min % 15 < 2) //per 15 min
{
if(flag == 0)
{
/* get csta index */
aifCSTAInd = t->tm_hour * 4 + t->tm_min / 15;
/* copy the msg statistic to the csta buffer */
memcpy(aifCSTA[aifCSTAInd].msg_stat, msg_statistics, sizeof(msg_statistics));
aifCSTA[aifCSTAInd].timestamp = l_time;
/* clear msg statistic */
memset(msg_statistics, 0, sizeof(msg_statistics));
flag = 1;
}
}
else
flag = 0;
}
}
u32 *findnext_quater(u32 *id)
{
int csta_inst = aifCSTAInd;
//CHECKME: to make sure it can run across 24 hours
if(csta_inst > 0)
csta_inst -= 1;
if(*id != csta_inst)
{
*id = csta_inst;
return id;
}
*id = 0;
return NULL;
}
struct obj_view *gen_obj_view(struct tab_view *table, u32 *oid)
{
struct obj_view *view = &table->view;
view->entry = oid + table->entry_id;
view->entry_oidlen = table->entry_id + 1;
view->column =view->entry + 1;
view->column_oidlen = view->entry_oidlen + 1;
view->iid = view->column + 1;
view->full_oidlen = view->column_oidlen + table->level;
view->csta_pos = postion[oid[table->entry_id-1]];
view->csta_len = cstaLen[oid[table->entry_id-1]];
return view;
}
struct tab_view *lookup_csta_table(BYTE oidlen, DWORD *oid)
{
int index;
if(oidlen < AIF_OIDLEN +2)
return NULL;
index = oid[AIF_OIDLEN];
if(index >= 8)
return NULL;
else if(aif_csta_table[index].exist_flag == 0)
return NULL;
else
return &aif_csta_table[index];
}
void aifg_encode_csta(BYTE *pData, BYTE pos, BYTE Len, aifg_csta *pCsta)
{
unsigned long *pDW = (unsigned long *)pData;
int *pSrc = (int *)&pCsta->msg_stat[2];
int *pDst = (int *)(pData + 4);
int i;
pDW[0] = htonl(pCsta->timestamp);
for(i = 0; i < Len*2; i++)
pDst[i] = htonl(pSrc[pos + i]);
}
int get_aif_csta(struct obj_view *view, BYTE *pdata, BYTE *vartype)
{
int dataLen = 0;
int csta_inst;
if((csta_inst = view->iid[0]) >= 96)
return -1;
switch(*(view->column))
{
case 1:
*((int *)pdata) = htonl(csta_inst);
*vartype = 0x02;
dataLen = 4;
break;
case 2:
if(aifCSTA[csta_inst].timestamp == 0)
return 0;
*vartype = 0x04;
aifg_encode_csta(pdata,view->csta_pos, view->csta_len, &aifCSTA[csta_inst]);
dataLen = (view->csta_len*sizeof(int)*2+4);
break;
}
return dataLen;
}
int aifg_get_resp(BYTE oidlen, DWORD *oid, BYTE *pdata, BYTE *vartype)
{
struct tab_view *table;
struct obj_view *view;
if((table = lookup_csta_table(oidlen, oid)) == NULL)
return -1;
view = gen_obj_view(table, oid);
if(oidlen != view->full_oidlen)
return -1;
if(*(view->entry) != 1)
return -1;
if(table->get_aif_csta == NULL)
return -1;
else
return table->get_aif_csta(view, pdata, vartype);
}
static int get_nextOid(u8 *oidlen, u32 *oid)
{
struct tab_view *table;
struct obj_view *view;
if((table = lookup_csta_table(*oidlen, oid)) == NULL)
return 0;
view = gen_obj_view(table, oid);
if(*oidlen < view->full_oidlen)
{
memset(&oid[*oidlen], 0, view->full_oidlen-*oidlen);
if(*oidlen < view->entry_oidlen)
*view->entry = 1;
if(*oidlen < view->column_oidlen)
*view->column = table->next_column[0];
if(*oidlen == view->full_oidlen-1)
{
*oidlen = view->full_oidlen;
}
*oidlen = view->full_oidlen;
}
for(; *(view->column) != 0; *(view->column) = table->next_column[*(view->column)])
{
switch(table->level)
{
case 1:
if(table->lookup_1(view->iid) != NULL)
return 1;
break;
case 2:
break;
case 3:
break;
}
}
return 0;
}
int aif_getnext_resp(u8 prev_oidlen, u32 *prev_oid, u8 *oidlen, u32 *oid, u8 *pdata, u8 *vartype)
{
memcpy(oid, prev_oid, prev_oidlen*sizeof(u32));
*oidlen = prev_oidlen;
if(get_nextOid(oidlen, oid))
{
return aifg_get_resp(*oidlen, oid, pdata, vartype);
}
else
return -1;
}
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
+118
View File
@@ -0,0 +1,118 @@
/********************************************************************
Copyright ?2007 LGC Wireless, Inc. All rights reserved
File Name: aifg.h
Description: API Definition of AIFG module
Version: v9.0.0
Author: Roy Jiang
Create Date: 2007-3-6
History:
2007-3-6 v9.0.0 Create
2007-7-7 v9.0.1 Remove Block/Unblock/Reset/Reset CC/Overload/HO Can. Enq. API,
replace with aifg_send
*********************************************************************/
#ifndef _WXC2_AIFG_H
#define _WXC2_AIFG_H
#include "aifg_msg.h"
/*******************************SAP Management**********************************/
/*
Name: aifg_bind
Purpose: Request to create a SAP in AIFG module.
Input: aifg_sap_type type: type of upper layer entity
int opc:OPC of upper layer entity.
aifg_ni ni: NI of upper layer entity.
Output: SAP id
*/
int aifg_bind(aifg_sap_type type, int (*callback)(aifg_indication, aifg_msg_pre_decoded *));
/*
Name: aifg_modify
Purpose: Request to modify the SAP parameter in AIFG module.
Input: aifg_sap_type type: type of upper layer entity
int opc: new OPC, -1 if no need to modify
aifg_ni ni:new NI, -1 if no need to modify
aifg_callback_func *callback: new callback functions, null if no need to modify
Output: none
*/
void aifg_modify(aifg_sap_type type, int (*callback)(aifg_indication, aifg_msg_pre_decoded *));
/*
Name: aifg_set_running_mode
Purpose: Set the running mode of AIFG module.
Input: enum aifg_run_mode mode: running mode, 0 - single, 1 - dual
int alter_ip:IP address of the alternative server, hex format
Output: None
*/
void aifg_set_running_mode(aifg_run_mode mode);
/*
Name: aifg_createCircuitGroup
Purpose: Request to create a circuit group in AIFG module.
Input: int sapid: SAP ID of upper layer entity
int dpc: DPC of the circuit group.
aifg_ni ni: NI of the circuit group.
Output: Circuit Group ID - Upper layer entity should record this ID and pass it to AIFG module
whenever it request to send a message through this circuit group
-1: Create failed
*/
int aifg_createCircuitGroup(int sapid, int dpc, aifg_ni ni, int tgid);
/*
Name: aifg_modCircuitGroup
Purpose: Request to modify the parameter of a circuit group in AIFG module.
Input: int sapid: SAP ID of upper layer entity
int cgid: Circuit Group ID
int dpc: new DPC of the circuit group, -1 if no need to change.
enum aifg_ni: new NI of the circuit group, -1 if no need to change.
Output: Circuit Group ID - Upper layer entity should record this ID and pass it to AIFG module
whenever it request to send a message through this circuit group
*/
int aifg_modCircuitGroup(int sapid, int cgid, int dpc, int ni);
/*
Name: aifg_delCircuitGroup
Purpose: Request to delete a circuit group in AIFG module.
Input: int sapid: SAP ID of upper layer entity
int cgid: Circuit Group ID
Output: None
*/
void aifg_delCircuitGroup(int sapid, int cgid);
/*
Name: aifg_send
Purpose: Request to send a message through A-interface.
Input: int sapid: SAP ID of upper layer entity.
int cgid: Circuit Group ID
int u_port: process port of upper layer entity
aifg_msg *msg: content of assign request message
Output: 0 - succeed
-1 - failed
-2 - failed, circuit group not ready
*/
int aifg_send(int sapid, int cgid, int u_port, aifg_msg_t *msg);
/*
Name: aifg_paging
Purpose: Request to paging.
Input: int sapid: SAP ID of upper layer entity
int cgid: Circuit Group ID
int u_port: process port of upper layer entity
aifg_msg_bm_paging *msg: paging message
Output: 0 - succeed
-1 - failed
-2 - failed, circuit group not ready
*/
int aifg_paging(int sapid, int cgid, int u_port, aifg_msg_t *msg);
/*
Name: aifg_ie_decode
Purpose: Information element decode function
Input: aifg_msg_protocol protocol: BSSMAP or DTAP
aifg_pre_decoded_ie *pre_decoded: pre-decoded IE structure
aifg_ie *dst: pointer to a aifg_ie structure object in which the decoded message will be stored.
Output: Total length of decoded IE
*/
int aifg_ie_decode(aifg_ie_ptr *pre_decoded, aifg_ie *dst);
#endif
File diff suppressed because it is too large. Load diff
+31
View File
@@ -0,0 +1,31 @@
/********************************************************************
Copyright ?2007 LGC Wireless, Inc. All rights reserved
File Name: aifg_if.h
Description: Interface declearation for wxc2main
Version: v9.0.0
Author: Roy Jiang
Create Date: 2007-3-14
History:
2007-3-14 v9.0.0 Create
*********************************************************************/
#ifndef _WXC2_AIFG_IF_H
#define _WXC2_AIFG_IF_H
/*
Name: aifg_init
Purpose: Init AIFG module.
Input: None
Output: None
*/
void aifg_init();
/*
Name: aifg_init
Purpose: 10ms routing of AIFG module.
Input: None
Output: None
*/
void aifg_proc();
#endif
File diff suppressed because it is too large. Load diff
+43
View File
@@ -0,0 +1,43 @@
/********************************************************************
Copyright ?2007 LGC Wireless, Inc. All rights reserved
File Name: aifg_public.h
Description: Public definition of AIFG module
Version: v9.0.0
Author: Roy Jiang
Create Date: 2007-3-6
History:
2007-3-6 v9.0.0 Create
*********************************************************************/
#ifndef _WXC2_AIFG_PUBLIC_H
#define _WXC2_AIFG_PUBLIC_H
//Common include
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "../../../public/src/include/public.h"
typedef enum _aifg_sap_type{
AIFG_SAP_MSC,
AIFG_SAP_BSC
}aifg_sap_type;
typedef enum _aifg_ni{
AIFG_NI_INTERNATIONAL,
AIFG_NI_INTERNATIONAL_SPARE,
AIFG_NI_NATIONAL,
AIFG_NI_NATIONAL_SPARE,
}aifg_ni;
typedef enum _aifg_run_mode{
AIFG_RUN_MODE_SINGLE = 0,
AIFG_RUN_MODE_DUAL,
}aifg_run_mode;
typedef enum _aifg_indication{
AIFG_IND_RV_MSG,
}aifg_indication;
#endif
+445
View File
@@ -0,0 +1,445 @@
/********************************************************************
Copyright ?2007 LGC Wireless, Inc. All rights reserved
File Name: aifg_type_def.h
Description: Data structure definition of AIFG module
Version: v9.0.0
Author: Roy Jiang
Create Date: 2007-3-12
History:
2007-3-6 v9.0.12 Create
*********************************************************************/
#ifndef _WXC2_AIFG_TYPE_DEF_H
#define _WXC2_AIFG_TYPE_DEF_H
#include "aifg_public.h"
#include "aifg_msg.h"
#include "../../../sccp/src/include/scoc_if.h"
#ifndef NULL
#define NULL 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#define SCCP_SAP_AIFG 3
#define AIFG_PROC_FINISH 1
#define AIFG_PROC_CONTINUE 0
#define AIFG_MAX_CG 256
#define AIFG_MAX_SAP 2
#define MSG_PROC_EACH_TIME 64
#define AIFG_MAX_PORT 8192
#define AIFG_MAX_MSG_LENGTH 256
#define AIFG_MAX_TI_PER_LINK 16
#define AIFG_MAX_MESSAGE 128
#define SCCP_MAX_LINK 8192
typedef struct{
int port;
BYTE *data_ptr;
}aifg_raw_msg;
enum {AIFG_CG_AVAILABLE, AIFG_CG_UNAVAILABLE};
typedef struct{
BYTE enable;
int (*callback_func)(aifg_indication, aifg_msg_pre_decoded *);
}aifg_sap;
typedef struct{
BYTE mode;
}aifg_dual_server;
typedef enum{
AIFG_CG_STATE_DOWN,
AIFG_CG_STATE_UP,
}aifg_cg_state;
//port status definition
typedef enum {
AIFG_PORT_IDLE,
AIFG_PORT_INIT,
AIFG_PORT_PAGING,
AIFG_PORT_RESET,
AIFG_PORT_TRANSACTION,
AIFG_PORT_TRANSPARENT,
AIFG_PORT_RELEASE,
AIFG_PORT_FINISH,
}AIFG_PORT_STATE;
typedef enum{
AIFG_TRANS_UNKNOW = -1,
AIFG_TRANS_LU = 1,
AIFG_TRANS_CC = AIFG_PD_DTAP_CC, //3
AIFG_TRANS_SMS = AIFG_PD_DTAP_SMS, //9
AIFG_TRANS_SS = AIFG_PD_DTAP_SS, //11
}AIFG_TRANS_TYPE;
typedef struct aifg_port_t{
aifg_sap_type sapid; //SAP id
BYTE cgid; //circuit group id
int link_id; //link id
int new_link; //for handover, new link id to which the call will be handover to
int upper_port; //process port of upper layer
AIFG_PORT_STATE stat; //port status
int timer; //process timer
struct aifg_port_t *pNextOpenPort; //pointer to the next port in the opened port list
struct aifg_port_t *pPrevOpenPort; //pointer to the previous port in the opened port list
struct aifg_port_t *pNextPort; //pointer to the next port of the same BSSMAP transaction, such as paging/block
struct aifg_port_t *pPrevPort; //pointer to the previous port of the same BSSMAP transaction, such as paging/block
char ti; //TI value, including the TI flag
AIFG_TRANS_TYPE ti_type; //Transaction type of this port (CC/SS/SMS)
BYTE ti_stat; //Transaction status
BYTE rel_cause; //release cause
BYTE diagnostic[32]; //diagnostic for release
BYTE diag_len; //diagnostic length
BYTE imsi[16]; //associated mobile IMSI
BYTE imsi_len; //associated mobile IMSI length
BYTE ho_stat; //handover status
int app_ho_port; //application handover process port
SP_UiPriPara sd_buffer; //send message buffer, used in case when message re-send is needed
BYTE app_rel_flag; //flag to indicate whether app is released
BYTE trace_flag; //for debug trace
#ifdef _AIFG_DEBUG_
unsigned int dead_timer; //for resource leak checking
#endif
}aifg_port;
//timer definition, second
#define T1S_MULTIPLIER 100
enum{
AIFG_TIMER_T2 = 3 * T1S_MULTIPLIER, //Reset guard period at the MSC
AIFG_TIMER_T13 = 3 * T1S_MULTIPLIER, //Reset guard period at the BSS
AIFG_TIMER_T14 = 60 * T1S_MULTIPLIER, //Time to receive RESET ACKNOWLEDGE at the BSS
AIFG_TIMER_T16 = 60 * T1S_MULTIPLIER, //Time to receive RESET ACKNOWLEDGE at the MSC
AIFG_TIMER_T3113 = 15 * T1S_MULTIPLIER, //Time to receive PAGING RESPONSE at MSC
AIFG_TIMER_REPAGE = 8 * T1S_MULTIPLIER, //Time to resend PAGING REQUEST at MSC
AIFG_TIMER_TRANS_TIMEOUT = 120 * T1S_MULTIPLIER, //120s
AIFG_TIMER_CLEAR_TIMEOUT = 10 * T1S_MULTIPLIER, //10s
AIFG_TIMER_RELEASE_TIMEOUT = 10 * T1S_MULTIPLIER, //10s
AIFG_TIMER_WAIT_RELEASE_CMP = 50 //500ms
};
typedef struct{
BYTE enable;
int dpc;
aifg_ni ni;
BYTE sapid; //SAP which owns this CG
int tgid; //MSC trunk group id
}aifg_circuit_group;
typedef struct{
BYTE en_flag;
BYTE cleared; //if the link was cleared, all the ports belongs to it will be released
aifg_sap_type sapid; //SAP which owns this link
int cur_port; //in MSC:current activated local port
//in BSC:current activated upper port, for no AIFG local port need at BSC side
BYTE ti_number; //number of current activated ti, used at MSC side
BYTE next_ti; //TI value for next network initiate transaction
struct{
BYTE en_flag;
BYTE tio;
int port; //corresponding port number
}ti[3][AIFG_MAX_TI_PER_LINK]; //0-7 is assigned by network, 8-15 is assigned by mobile, used at MSC side
//totally 3 types of TI according to different SAP: CC, SMS or SS
}aifg_link_info;
enum TI_TYPE{
TI_FOR_CC,
TI_FOR_SMS,
TI_FOR_SS,
};
typedef enum{
AIFG_SUCCEED = 0,
AIFG_ERROR = -1,
//Error definition 1 ~ 1023
AIFG_ERR_OUT_OF_RESOURCE = 1,
AIFG_ERR_UNKNOW_MSG,
AIFG_ERR_UNKNOW_IE,
AIFG_ERR_ERROR_MSG,
AIFG_ERR_ERROR_IE,
AIFG_ERR_UP_NOT_EXIST,
AIFG_ERR_NO_UD_IN_CR,
AIFG_ERR_UNEXPECTED_DT1,
AIFG_ERR_UNEXPECTED_UDT,
AIFG_ERR_UNEXPECTED_CC,
AIFG_ERR_OVERLOAD,
AIFG_ERR_CG_NOT_READY,
AIFG_ERR_UNEXPECTED_PAGING_RESP,
AIFG_ERR_INVALID_TI,
AIFG_ERR_MISS_MANDATORY,
AIFG_ERR_MSG_RV_TO_IDLE_PORT,
AIFG_ERR_MSG_SD_TO_IDLE_PORT,
AIFG_ERR_ASSIGN_PORT_FAIL,
AIFG_ERR_SAP_NOT_CREATED,
AIFG_ERR_PORT_TIMER_OUT,
AIFG_ERR_CAN_NOT_FIND_TI,
AIFG_ERR_PAGING_NOT_RESP,
AIFG_ERR_PORT_RELEASED,
//event definition 1024 ~ 2048
AIFG_EVENT_SD_MSG = 1024, //Message sent to sccp
AIFG_EVENT_RV_MSG, //Message received from sccp
AIFG_EVENT_SD_IND, //Indication sent to upper app
AIFG_EVENT_RV_REQ, //Request received from upper app
AIFG_EVENT_REDIR_MSG, //Message redirected
AIFG_EVENT_CG_UP, //Circuit come up
AIFG_EVENT_LINK_RELEASE, //Link release
AIFG_EVENT_PORT_RELEASE,
}aifg_event_code;
typedef enum{
//DTAP
//RR
AIFG_MSG_T_PAGING_RESP = 0x27, //Paging response
AIFG_MSG_T_RR_HO_CMD = 0x2B, //RR Handover command
//MM
AIFG_MSG_T_IMSI_DETACH_IND = 0x01, //IMSI detach indication
AIFG_MSG_T_LU_ACCEPT = 0x02, //Location updating accept
AIFG_MSG_T_LU_REJECT = 0x04, //Location updating reject
AIFG_MSG_T_LU_REQUEST = 0x08, //Location updating request
AIFG_MSG_T_AUTH_REJECT = 0x11, //Authentication reject
AIFG_MSG_T_AUTH_REQUEST = 0x12, //Authentication request
AIFG_MSG_T_AUTH_RESPONSE = 0x14, //Authentication response
AIFG_MSG_T_ID_REQUEST = 0x18, //Identity request
AIFG_MSG_T_ID_RESPONSE = 0x19, //Identity response
AIFG_MSG_T_TMSI_REALLOC_CMD = 0x1A, //TMSI reallocation command
AIFG_MSG_T_TMSI_REALLOC_CMP = 0x1B, //TMSI reallocation complete
AIFG_MSG_T_CM_ACCEPT = 0x21, //CM service accept
AIFG_MSG_T_CM_REJECT = 0x22, //CM service reject
AIFG_MSG_T_CM_ABORT = 0x23, //CM service abort
AIFG_MSG_T_CM_REQUEST = 0x24, //CM service request
AIFG_MSG_T_CM_PROMPT = 0x25, //CM service prompt
AIFG_MSG_T_CM_REEST_REQUEST = 0x28, //CM re-establishment request
AIFG_MSG_T_ABORT = 0x29, //Abort
AIFG_MSG_T_MM_NULL = 0x30, //MM NULL
AIFG_MSG_T_MM_STATUS = 0x31, //MM status
AIFG_MSG_T_MM_INFO = 0x32, //MM information
//CC
AIFG_MSG_T_ALERTING = 0x01, //Alerting
AIFG_MSG_T_CALL_CONFIRMED = 0x08, //Call confirmed
AIFG_MSG_T_CALL_PROCEEDING = 0x02, //Call proceeding
AIFG_MSG_T_CONNECT = 0x07, //Connect
AIFG_MSG_T_CONNECT_ACK = 0x0F, //Connect ack
AIFG_MSG_T_EMERGENCY_SETUP = 0x0E, //Emergency setup
AIFG_MSG_T_PROGRESS = 0x03, //Progress
AIFG_MSG_T_SETUP = 0x05, //Setup
AIFG_MSG_T_MODIFY = 0x17, //Modify
AIFG_MSG_T_MODIFY_CMP = 0x1F, //Modify complete
AIFG_MSG_T_MODIFY_REJECT = 0x13, //Modify reject
AIFG_MSG_T_USER_INFO = 0x10, //User information
AIFG_MSG_T_HOLD = 0x18, //Hold
AIFG_MSG_T_HOLD_ACK = 0x19, //Hold ack
AIFG_MSG_T_HOLD_REJECT = 0x1A, //Hold reject
AIFG_MSG_T_RETRIEVE = 0x1C, //Retrieve
AIFG_MSG_T_RETRIEVE_ACK = 0x1D, //Retrieve ack
AIFG_MSG_T_RETRIEVE_REJECT = 0x1E, //Retrieve reject
AIFG_MSG_T_DISCONNECT = 0x25, //Disconnect
AIFG_MSG_T_RELEASE = 0x2D, //Release
AIFG_MSG_T_RELEASE_CMP = 0x2A, //Release complete
AIFG_MSG_T_CONGESTION_CTRL = 0x39, //Congestion control
AIFG_MSG_T_NOTIFY = 0x3E, //Notify
AIFG_MSG_T_STATUS = 0x3D, //Status
AIFG_MSG_T_STATUS_ENQ = 0x34, //Status enquiry
AIFG_MSG_T_START_DTMF = 0x35, //Start DTMF
AIFG_MSG_T_STOP_DTMF = 0x31, //Stop DTMF
AIFG_MSG_T_STOP_DTMF_ACK = 0x32, //Stop DTMF ack
AIFG_MSG_T_START_DTMF_ACK = 0x36, //Start DTMF ack
AIFG_MSG_T_START_DTMF_REJECT = 0x37, //Start DTMF reject
AIFG_MSG_T_FACILITY = 0x3A, //Facility
//SMS
AIFG_MSG_T_CP_DATA = 0x01, //CP-DATA
AIFG_MSG_T_CP_ACK = 0x04, //CP-ACK
AIFG_MSG_T_CP_ERROR = 0x10, //CP-ERRPR
AIFG_MSG_T_RP_DATA_MS = 0x00, //RP-DATA MS side
AIFG_MSG_T_RP_ACK_MS = 0x02, //RP-ACK MS side
AIFG_MSG_T_RP_ERROR_MS = 0x04, //RP-ERRPR MS side
AIFG_MSG_T_RP_SMMA = 0x06, //RP-SMMA MS side
AIFG_MSG_T_RP_DATA_NW = 0x01, //RP-DATA network side
AIFG_MSG_T_RP_ACK_NW = 0x03, //RP-ACK network side
AIFG_MSG_T_RP_ERROR_NW = 0x05, //RP-ERRPR network side
//SS
AIFG_MSG_T_FACILITY_SS = 0x3A, //Facility SS
AIFG_MSG_T_REGISTER = 0x3B, //Register
AIFG_MSG_T_RELEASE_CMP_SS = 0x2A, //Release complete SS
//BSSMAP
AIFG_MSG_T_ASSIGN_REQ = 0x01, //Assign request
AIFG_MSG_T_ASSIGN_CMP = 0x02, //Assign complete
AIFG_MSG_T_ASSIGN_FAIL = 0x03, //Assign failure
AIFG_MSG_T_HO_REQUEST = 0x10, //Handover request
AIFG_MSG_T_HO_REQUIRED = 0x11, //Handover required
AIFG_MSG_T_HO_REQ_ACK = 0x12, //Handover request ack
AIFG_MSG_T_HO_CMD = 0x13, //Handover command
AIFG_MSG_T_HO_CMP = 0x14, //Handover complete
AIFG_MSG_T_HO_SUC = 0x15, //Handover succeeded
AIFG_MSG_T_HO_FAIL = 0x16, //Handover failure
AIFG_MSG_T_HO_PERFORMED = 0x17, //Handover performed
AIFG_MSG_T_HO_CAN_ENQ = 0x18, //Handover candidate enquire
AIFG_MSG_T_HO_CAN_RESP = 0x19, //Handover candidate response
AIFG_MSG_T_HO_REQ_REJ = 0x1A, //Handover required reject
AIFG_MSG_T_HO_DETECT = 0x1B, //Handover detect
AIFG_MSG_T_CLR_CMD = 0x20, //Clear command
AIFG_MSG_T_CLR_CMP = 0x21, //Clear complete
AIFG_MSG_T_CLR_REQ = 0x22, //Clear request
AIFG_MSG_T_SAPI_REJ = 0x25, //SAPI 'n' reject
AIFG_MSG_T_CONFUSION = 0x26, //Confusion
AIFG_MSG_T_SUSPEND = 0x28, //Suspend
AIFG_MSG_T_RESUME = 0x29, //Resume
AIFG_MSG_T_LOC_INFO_CMD = 0x2A, //Location information command
AIFG_MSG_T_LOC_INFO_RPT = 0x2B, //Location information report
AIFG_MSG_T_RESET = 0x30, //Reset
AIFG_MSG_T_RESET_ACK = 0x31, //Reset ack
AIFG_MSG_T_OVERLOAD = 0x32, //Overload
AIFG_MSG_T_RESET_CC = 0x34, //Reset circuit
AIFG_MSG_T_RESET_CC_ACK = 0x35, //Reset circuit ack
AIFG_MSG_T_MSC_INVK_TRACE = 0x36, //MSC invoke trace
AIFG_MSG_T_BSC_INVK_TRACE = 0x37, //BSC invoke trace
AIFG_MSG_T_BLOCK = 0x40, //Block
AIFG_MSG_T_BLOCK_ACK = 0x41, //Blocking ack
AIFG_MSG_T_UNBLOCK = 0x42, //Unblock
AIFG_MSG_T_UNBLOCK_ACK = 0x43, //Unblocking ack
AIFG_MSG_T_CC_GROUP_BLK = 0x44, //Circuit group block
AIFG_MSG_T_CC_GROUP_BLK_ACK = 0x45, //Circuit group block ack
AIFG_MSG_T_CC_GROUP_UNBLK = 0x46, //Circuit group unblock
AIFG_MSG_T_CC_GROUP_UNBLK_ACK = 0x47, //Circuit group unblock ack
AIFG_MSG_T_UNEQUIP_CC = 0x48, //Unequipped circuit
AIFG_MSG_T_CHANGE_CC = 0x4E, //Change circuit
AIFG_MSG_T_CHANGE_CC_ACK = 0x4F, //Change circuit ack
AIFG_MSG_T_RESRC_REQ = 0x50, //Resource request
AIFG_MSG_T_RESRC_IND = 0x51, //Resource indication
AIFG_MSG_T_PAGING = 0x52, //Paging
AIFG_MSG_T_CIPHER_MODE_CMD = 0x53, //Cipher mode command
AIFG_MSG_T_CM_UPDATE = 0x54, //Classmark update
AIFG_MSG_T_CIPHER_MODE_CMP = 0x55, //Cipher mode complete
AIFG_MSG_T_QUEUE_IND = 0x56, //Queuing indication
AIFG_MSG_T_L3_INFO = 0x57, //Complete layer 3 information
AIFG_MSG_T_CLASSMARK_REQ = 0x58, //Classmark request
AIFG_MSG_T_CIPHER_MODE_REJ = 0x59, //Cipher mode reject
AIFG_MSG_T_LOAD_IND = 0x5A, //Load indication
}aifg_msg_type;
typedef enum _aifg_iei_coding{
//For BSSMAP
AIFG_IEI_BM_CIC = 0x01, //CIC
AIFG_IEI_BM_RESOURCEAVAIL = 0x03, //Resource available
AIFG_IEI_BM_CAUSE = 0x04, //Cause
AIFG_IEI_BM_CELLID = 0x05, //Cell identifier
AIFG_IEI_BM_PRIORITY = 0x06, //Priority
AIFG_IEI_BM_L3HEADERINFO = 0x07, //Layer 3 header information
AIFG_IEI_BM_IMSI = 0x08, //IMSI
AIFG_IEI_BM_TMSI = 0x09, //TMSI
AIFG_IEI_BM_ENCRYPTINFO = 0x0A, //Encrypt information
AIFG_IEI_BM_CHANNELTYPE = 0x0B, //Channel type
AIFG_IEI_BM_PERIODICITY = 0x0C, //Periodicity
AIFG_IEI_BM_EXTRESOURCEIND = 0x0D, //Extended resource indicator
AIFG_IEI_BM_MSNUM = 0x0E, //Number of MSs
AIFG_IEI_BM_CLASSMARKINFO2 = 0x12, //Classmark information type 2
AIFG_IEI_BM_CLASSMARKINFO3 = 0x13, //Classmark information type 3
AIFG_IEI_BM_BANDUSED = 0x14, //Band to be used
AIFG_IEI_BM_RRCAUSE = 0x15, //RR cause
AIFG_IEI_BM_L3INFO = 0x17, //Layer 3 information
AIFG_IEI_BM_DLCI = 0x18, //DLCI
AIFG_IEI_BM_DTXFLAG = 0x19, //DTC flag
AIFG_IEI_BM_CELLIDLIST = 0x1A, //Cell identity list
AIFG_IEI_BM_RESPREQ = 0x1B, //Response request
AIFG_IEI_BM_RESOURCEINDMEHTOD = 0x1C, //Resource indication method
AIFG_IEI_BM_CLASSMARKINFO1 = 0x1D, //Classmark information type 1
AIFG_IEI_BM_CICLIST = 0x1E, //CIC list
AIFG_IEI_BM_DIGNOSTIC = 0x1F, //Dignostic
AIFG_IEI_BM_L3MSGCONTENT = 0x20, //Layer 3 message content
AIFG_IEI_BM_CHOSENCHANNEL = 0x21, //Chosen channel
AIFG_IEI_BM_TOTALRESOURCE = 0x22, //Total resource accessible
AIFG_IEI_BM_CIPHERRESPMODE = 0x23, //Cipher response mode
AIFG_IEI_BM_CHANNELNEEDED = 0x24, //Channel needed
AIFG_IEI_BM_TRACETYPE = 0x25, //Trace type
AIFG_IEI_BM_TRIGGERID = 0x26, //Trigger ID
AIFG_IEI_BM_TRACEREF = 0x27, //Trace reference
AIFG_IEI_BM_TRANSACTIONID = 0x28, //Transaction ID
AIFG_IEI_BM_MOBILEID = 0x29, //Mobile identity
AIFG_IEI_BM_OMCID = 0x2A, //OMC ID
AIFG_IEI_BM_FORWARDIND = 0x2B, //Forward indication
AIFG_IEI_BM_CHOSENENCRYPT = 0x2C, //Chosen encrypt algorithm
AIFG_IEI_BM_CIRCUITPOOL = 0x2D, //Circuit pool
AIFG_IEI_BM_CIRCUITPOOLLIST = 0x2E, //Circuit pool list
AIFG_IEI_BM_TIMEIND = 0x2F, //Time indicator
AIFG_IEI_BM_RESOURCESITUATION = 0x30, //Resource situation
AIFG_IEI_BM_CURCHANNELTYPE1 = 0x31, //Current channel type 1
AIFG_IEI_BM_QUEUEIND = 0x32, //Queuing indicator
AIFG_IEI_BM_ASSIGNREQUIREMENT = 0x33, //Assignment requirement
AIFG_IEI_BM_TALKERFLAG = 0x34, //Talker flag
AIFG_IEI_BM_CONNRELREQ = 0x35, //Connection release request
AIFG_IEI_BM_GROUPCALLREF = 0x36, //Group call reference
AIFG_IEI_BM_EMLPP = 0x37, //eMLPP
AIFG_IEI_BM_CFGEVOIND = 0x38, //Configuration evolution indication
AIFG_IEI_BM_BSSOLDTONEW = 0x39, //Old BSS to new BSS
AIFG_IEI_BM_LSAID = 0x3A, //LSA identity
AIFG_IEI_BM_LSAIDLIST = 0x3B, //LSA identity list
AIFG_IEI_BM_LSAINFO = 0x3C, //LSA information
AIFG_IEI_BM_LOCATIONINFO = 0x3D, //Location information
AIFG_IEI_BM_SPEECHVER = 0x40, //Speech version
//For DTAP
//common
AIFG_IEI_DT_LAI = 0x13, //location area identification
AIFG_IEI_DT_MOBILEID = 0x17, //mobile identity
AIFG_IEI_DT_MSCM3 = 0x20, //mobile station classmark 3
//MM
AIFG_IEI_DT_FLONPROCEED = 0xa1, //Follow on proceed
AIFG_IEI_DT_CTS = 0xa2, //CTS permission
AIFG_IEI_DT_FULL_NWNAME = 0x43, //Full name for network
AIFG_IEI_DT_SHORT_NWNAME = 0x45, //Short name for network
AIFG_IEI_DT_TIMEZONE = 0x46, //Network time zone
AIFG_IEI_DT_TZTIME = 0x47, //Universal time and time zone
AIFG_IEI_DT_LSAID = 0x48, //LSA Identity
//CC
AIFG_IEI_DT_PRIORITYLEVEL = 0x80, //Priority Level
AIFG_IEI_DT_SHIFT = 0x90, //Locking and non-locking shift procedure
AIFG_IEI_DT_REPEATIND = 0xD0, //Repease indicator
AIFG_IEI_DT_MOREDATA = 0xA0, //More data
AIFG_IEI_DT_CLIRSUP = 0xA1, //CLIR Suppression
AIFG_IEI_DT_CLIRIVO = 0xA2, //CLIR Invocation
AIFG_IEI_DT_REVCALLDIR = 0xA3, //Reverse call setup direction
AIFG_IEI_DT_BEARERCAP = 0x04, //Bearer capability
AIFG_IEI_DT_CAUSE = 0x08, //Cause
AIFG_IEI_DT_CCCAP = 0x15, //Call Control Capabilities
AIFG_IEI_DT_FACILITY = 0x1C, //Facility
AIFG_IEI_DT_PROGIND = 0x1E, //Progress indicator
AIFG_IEI_DT_AUXSTAT = 0x24, //Auxiliary states
AIFG_IEI_DT_CALLEDBCD = 0x5E, //Called party BCD
AIFG_IEI_DT_CALLEDSUBADDR = 0x6D, //Called party subaddress
AIFG_IEI_DT_CALLERBCD = 0x5C, //Calling party BCD
AIFG_IEI_DT_CALLERSUBADDR = 0x5D, //Calling party subaddress
AIFG_IEI_DT_CONNNUM = 0x4C, //Connected number
AIFG_IEI_DT_CONNSUBADDR = 0x4D, //Connected subaddress
AIFG_IEI_DT_HIGHCOM = 0x7D, //Higher layer compatibility
AIFG_IEI_DT_KEYPAD = 0x2C, //Keypad facility
AIFG_IEI_DT_LOWCOM = 0x7C, //Lower layer compatibility
AIFG_IEI_DT_REDIRBCD = 0x74, //Redirecting party BCD
AIFG_IEI_DT_REDIRSUBADDR = 0x75, //Redirecting party subaddress
AIFG_IEI_DT_SIGNAL = 0x34, //Signal
AIFG_IEI_DT_SSVER = 0x7F, //SS version indicator
AIFG_IEI_DT_USERUSER = 0x7E, //User-user
AIFG_IEI_DT_ALERTPATTERN = 0x19, //Alert pattern
//SMS
AIFG_IEI_DT_RP_UD = 0x41, //RP User data
AIFG_IEI_DT_RP_CAUSE = 0x42, //RP Cause
}aifg_iei;
#endif
+68
View File
@@ -0,0 +1,68 @@
/********************************************************************
Copyright ?2007 LGC Wireless, Inc. All rights reserved
File Name: aifg_var_ext.h
Description: Public variant definition of AIFG module
Version: v9.0.0
Author: Roy Jiang
Create Date: 2007-3-12
History:
2007-3-6 v9.0.12 Create
*********************************************************************/
#ifndef _WXC2_AIFG_VAR_EXT_H
#define _WXC2_AIFG_VAR_EXT_H
#include <assert.h>
#include "aifg_type_def.h"
//Variant declaration
extern aifg_circuit_group cg[AIFG_MAX_CG];
extern aifg_sap sap[AIFG_MAX_SAP];
extern aifg_dual_server dual_server;
extern aifg_port aifg_pcb[AIFG_MAX_PORT];
extern aifg_event_code aifg_event;
extern aifg_msg_t sd_msg;
aifg_msg_pre_decoded rv_msg;
extern int cur_port; //current processing port
extern aifg_link_info link_info[SCCP_MAX_LINK];
extern int msg_statistics[AIFG_MAX_MESSAGE][2];
int aifg_ie_encode(aifg_msg_protocol protocol, int ie_id, ie_u *src, BYTE *dst, int m_o_flag);
int aifg_ie_decode(aifg_ie_ptr *src, aifg_ie *dst);
int aifg_msgtype_to_localid(aifg_pd pd, int msg_type);
int aifg_send_cr(int sapid, int cgid, aifg_msg_t *msg);
void aifg_send_dt1(int linkid, aifg_msg_t *msg, int ti);
void aifg_send_udt(int cgid, aifg_msg_t *msg, SP_UiPriPara *buf_ptr);
void aifg_mpp_init();
int aifg_mpp_proc();
void aifg_port_proc(aifg_port *pPort, aifg_msg_t *upper_msg, aifg_msg_pre_decoded *peer_msg);
inline int aifg_port_assign(int sapid, int cgid, int linkid);
inline void aifg_port_release(aifg_port *pPort);
inline int aifg_get_local_port(int u_port);
inline int aifg_get_paging_port(int cgid, BYTE *imsi_ptr, int imsi_len);
inline int aifg_ti2lport(int ti, int link_id, int pd);
inline int aifg_get_link(int u_port);
inline int aifg_add_link(int linkid, int sapid);
inline int aifg_del_link(int sccp_link_id);
inline void aifg_link_release(int link_id);
inline aifg_link_info *aifg_get_link_info(int link_id);
inline int aifg_get_cg(int dpc, int ni);
inline void aifg_add_ti(int link_id, int ti, int ti_type, int port);
inline int aifg_get_ti(int link_id, int port, int ti_type);
inline int aifg_del_ti(int link_id, int ti, int ti_type);
void aifg_send_rlsd(int linkid);
void aifg_debug_init();
void aifg_debug_timer();
void aifg_debug_print(int port, aifg_event_code event, void *msg, int o_info);
void aifg_log(char *info);
#endif
+23
View File
@@ -0,0 +1,23 @@
/*
*Test program of AIFG module --by Roy Jiang
*/
#include "../src/include/aifg.h"
#include "../src/include/aifg_if.h"
void aifg_test();
int main()
{
printf("Test of AIFG\n");
aifg_test();
#ifdef _WINDOWS_
system("PAUSE");
#endif
return 0;
}
File diff suppressed because it is too large. Load diff
+40
View File
@@ -0,0 +1,40 @@
#WXC2 R9.0 AIFG makefile
#Create by Roy Jiang
#2007-3-12
CC = gcc
CFLAG = -g -Wall -c #-fprofile-arcs -ftest-coverage
AIFG_LIB_OBJ = aifg_m.o aifg.o aifg_mpp.o aifg_debug.o aifg_ie.o
AIFG_TST_OBJ = aifg_main.o aifg_test.o
AIFG_LIB = -L../lib -laif
TEST_LIB = -L/usr/local/lib/CUnit -lcunit -lgcov
aifg_main: $(AIFG_TST_OBJ)
$(CC) $(AIFG_TST_OBJ) -o test_main $(AIFG_LIB) $(TEST_LIB)
aifg_main.o: aifg_main.c
$(CC) $(CFLAG) $<
aifg_test.o: aifg_test.c
$(CC) $(CFLAG) $<
aifg.o: aifg.c
$(CC) $(CFLAG) $<
aifg_m.o: aifg_m.c
$(CC) $(CFLAG) $<
aifg_mpp.o: aifg_mpp.c
$(CC) $(CFLAG) $<
aifg_debug.o: aifg_debug.c
$(CC) $(CFLAG) $<
aifg_ie.o: aifg_ie.c
$(CC) $(CFLAG) $<
clean:
rm -f main *.o *.a *.xml *.gcov *.gcda *.gcno core test_main