Professional Documents
Culture Documents
2
SS7 Protocol Stack
IS41
Application
Part Part
Transport SCCP
3
Wireless Network
Mobile
Mobile Data Set Switching
Center (MSC)
Base Station
Controller
(BSC) PSTN
Mobile
Voice Unit
Packet
Network
Packet Inter-
Base Transceiver Working Function
System (BTS)
4
PSTN-to-Mobile Call
PLMN PLMN PSTN
(Visitor) (Home)
(SCP) HLR
Signaling SCP
over SS7 Where is the subscriber?
4 2
Provide Roaming 3
5
Routing Info
VMSC 6 MSSC 1
5
Call-flow
IS41 – IMPLEMENTATION
1. MAP :--
• Map acts as a Upper Layer and as a sort of Interface between CP and IS41 in Implementation .
• Map Maintains 2 Callback arrays Mainly Provider_cb and Application_cb . These further work parallel with
muser_table callback array. Here Application_cb means it is CP and Provider_cb is IS41.
• When IS41 is initialized by calling map_provider_register , Provider_cb gets initialized with same Cb’s.
Also the callbacks are copied to is41_mapifc_cbs, which is then used to call the Map Funcitons.
• “is41_direct_api.c” is used to provide a callback to Other Modules.
2. IS41:--
• Other than PSTN and RAN almost all Entities Connected to MSC will use IS41.
• Forms the Entry and Exit Point to All IS41 Messages .
• Converts the Incoming Message (raw data )to CSM Structures and vise versa .
• IS41 is used By many Modules in the MSSC, CCSW, AD and HLR are one of the Process which use this
protocol. Because of which There are many Initialization on basis of Process.
• ASN Format is used to define a message structure at the Protocol Level .
(ASN is dealt in Detail in coming Slides).
• OSSDecoder and OSSEncoder is used to decode and encode the ASN Structure.
Rpc_init_moule_
iif_mapping_init() Map_clone_util_init() Map_ifc_provInit() iif_prov_init() Map_procedures_matrix() map_providers_init() Is41_direct_api()
wms_map_ifc()
muser_table[ssn].opCodeTbl[OpCode + protocolOffset].cb.*
gOpCodeTbl[opCode + IS41_USER_TABLE_OFFSET].cb *
7
Timers :
1. IS41 Timers are defined in map_util.c, Further these timers get initialized in
Init_OpCode_Table().
2. While starting the timer the timer call back is also sent as an Argument . Which will be further
called when the timer expiers.
Example:
cvx_timer_addNode(gpIS41ApmTimer, NULL, timeout,
IS41Apm_smdfwdRRToFACREL_TimerExpiryEvent, pApmLeg);
Callbacks :
• Files to be Looked fim_map_register.c, fim_map_ifc.c.
Fim_map_register.c fim_map_ifc.c
case CALL_STATUS: mapCBFuncs.request_function = fim_map_receive_call_status;
{ mapCBFuncs.forward_to_csm_function =
map_cb->map_is_trace_reqd_cb = is41_apm_map_trace_func; csm_map_forward_to_another_csm;
map_cb->convert_req_oss_to_csm = IS41_callStatus_req_in;
map_cb->convert_req_csm_to_oss = IS41_callStatus_req_out; #ifdef _NEW_MAP_API_
if (CVX_STATUS_FAILURE ==
CVX_LOG_INFO(" Registering callback for CALL_STATUS\n"); map_is41api_map_register_cb(USE_MSC_SSN,
MapRegisterOpcode(lssn,CALL_STATUS,map_cb); CALL_STATUS,
break; &mapCBFuncs))
} #else
• if (CVX_STATUS_FAILURE == map_register_cb(USE_MSC_SSN,
CALL_STATUS,
&mapCBFuncs))
#endif _NEW_MAP_API_
• An Entry in wms-svc-create.sql .
CREATE TABLE wms_svc_lbs_config (
id integer UNIQUE NOT NULL DEFAULT 0 PRIMARY KEY,
svc_opt integer,
vas_mpc varchar(128),
lir_mode integer,
• messageHierarchy.in
IPCC_PROV_DATA {
/*at the end */
IPCC_PROV_DATA_wms_svc_lbs_config 5147
}
9
• Entry in subscribesInfo.in
CCSW{
IPCC_PROV_DATA_wms_svc_lbs_config
}
</SQL>
</CHANGE>
• Entry in x*prov*.c
/*inclusion of string.h is done by seshadri*/
#include<string.h>
10
NULL},
{ IPCC_PROV_DATA_wms_svc_lbs_config,
CVX_BOOL_FALSE,
NULL,
csm_mscm_lbs_prov_add_data_cb,
csm_mscm_lbs_prov_add_data_cb,
NULL}
CVX_BOOL
csm_mscm_lbs_prov_add_data_cb
(
uint32 txnId,
PCDataType dataType,
void* data
)
{
DbType_wms_svc_lbs_config_p p_dbData;
p_dbData = (DbType_wms_svc_lbs_config_p)data;
gLbs_id = p_dbData->id;
gLbs_svc_opt=p_dbData->svc_opt;
gLbs_lir_mode=p_dbData->lir_mode;
strcpy(gLbs_vas_mpc,p_dbData->vas_mpc);
CVX_LOG_INFO("\n Lbs id= %d \n,Lbs service option = %d\n",gLbs_id,gLbs_svc_opt);
CVX_LOG_INFO("Lbs lir mode = %d \n Lbs vas mpc = %s \n",gLbs_lir_mode,gLbs_vas_mpc);
cvx_return();
cvx_return( CVX_BOOL_TRUE );
}
11
• Functions Commonly Known as Conversion Functions.
• Convert The Parameters to ASN – CSM ( Incoming Messages ) & CSM – ASN
(outgoing Messages )
12
Outgoing Messages – Example
SMDPP_invoke_to_asn_out()
if (pSMDelivery_csm->event_u.event_u.smsMsg.esn.present)
{
esn_csm_to_asn(&pSMDelivery_asn->esn, &pSMDelivery_csm->event_u.event_u.smsMsg.esn);
pSMDelivery_asn->bit_mask |= SMSDeliveryPointToPointArg_esn_present;
}
13
Adding New Parameter/Message in ASN
Every Parameter has a unique id . This ID known as TAG or Parameter Id identifies the
Parameter.
Example Parameters :
14
There are some rules defined in ASN.1 to identify the Unique identifier for every
Parameter.
One octet
Following octets
0 <= tag <= 30 class P/C ttttt 1 1 1 1
leading octet
tag >= 31
class P/C ttttt U U U U
0 0 Universal 0 Primitive
0 1 Application
1 Constructed
1 0 Context-specific
1 1 Private
15
Example Message :
Variable
datatype
analyzedInformation OPERATION
ARGUMENT
analyzedInformationArg AnalyzedInformationArg
RESULT
analyzedInformationRes AnalyzedInformationRes
::= localValue: 64
16
New Message in ASN :-
The rules for the Parameters holds good But instead of Parameter ID
we will have Message ID
Define in Map.h
17
• These Form a sort of Interface between IS41 and CP.
• There are many API’s mainly in IS41_events.c,
IS41_answer.c ,IS41_setup_util.c.
• These api’s are registered as Callbacks . And they are called when ever it
is necessary .
• Some of the api’s also Form as Entry and Exit points for Messages . These
are registered as request Funtion.
For Example:
1. IS41Apm_sendEvent() -> Example Funciton Available in IS41_events.c
2. cb_Obj->apm_send_event = IS41Apm_sendEvent; -> registration in IS41Apm_common.c
3. if (! (*pApmLeg->apmCbs->apm_send_event)(pApmLeg, pEvent)) -> calling These Funciton .
18
•Message Sending and Receiving forms the Major part of this
module.
• map_recieve.c, map_errorhandler.c, Map.c, map_util.c,
IS41_nimhandler.c and other related Files constitutes This module .
• Transport Module connects the Application to Tcap, NIM, OSS .
• While receiving the IS41 Message OSS-Decode is called to get the
ASN struc of that Message . Similarly While sending OSS-Encode .
• Another Important Function of this module is to send the message
to Trace . This functionality is shared by other Modules in IS41.
MSC MPC
Example: SMDPP
smdpp
19
Example code flow SMDPP -> smdpp
IS41_recv_SCCPPayloadEx()
cvx_tcap_process_mesg_ Mapsend_from_tcap1()
Tcap_map_init_ii_api()
from_lower_layer
tcap_dco_deliver_com
tcap_dco_send_tc_ansi_q_ind
ponents_to_cco Mapsend_from_tcap2Ex() Mapsend_from_tcap2Ex()
Mapsend_from_tcapEx Mapsend_from_tcapEx
De
MapParseQWPIndic MapParseINVLIndic
co
d
pa es t This decodes the Creates the Dlg and Fills it 4m the incom data
An rt in he component portion
d T
ap Ma the rans
pe p f M
nd un ess actio
t c a n
ap he s tion ge
li_ a
lis me ill
w decodeBufferEx() Forward-to-anothercsm
C
OSS to CSM Trace
t in on
fu ver
decodeBufferCommon() nc si Req
tio on
n
OssDecode()
Free func
Application Req
Specific Flow
is41_recv_smdpp_request
MAP/IS41
msc_sms_deliver_req
mapifc_provider_received_request
sms_mt_deliver_req
csm_mscm_sms_recv_SMDPP
Sending smdpprr
with cause code
“map_msc_sms_deliver_fail”
mapifc_app_send_failure
MAP/
MapSendRRLreq
is41_msc_sms_deliver_fail
IS41
21
MAP
MapSendRRLreq
Sending
the
Message
MapSendRRLonDialogueMessage
to trace
MapSendTCRESP
tcap_mp_init_su_api cvx_tcap_process_mesg
IS41_sendSCCPPayload
cvx_NIM_sendData
22
TRACE [ Ethereal ]
• When The whole Message is only Not coming in trace then The code needs to be traced . Whether The
trace packet is being sent to trace . If it is not send then The code has to be written for that call flow .
23
if (pProtData)
{
if(pLeg)
{
if(0 == (CVX_CallInfo_getTraceID(M_Csm_Leg_Call_Info(pLeg))))
{
int traceId;
if(p_min->numOfOctets > 0)
{
MSG_TRACE_TRIGGERS_SET_min(pTriggers, p_min-
>val.value_mobile_id_u_u.min);
}
if(p_esn->present)
{
MSG_TRACE_TRIGGERS_SET_esn(pTriggers, p_esn->value);
}
MSG_TRACE_TRIGGERS_SET_cic(pTriggers, legId.cic);
traceId = MSG_TRACE_TRY_TRACE(pTriggers);
CVX_CallInfo_setTraceID(M_Csm_Leg_Call_Info(pLeg), traceId);
}
MSG_TRACE_SET_context(TRACE_PROTO_ID_IS41, ((void*)&pLeg->callId),
TRACE_CONTEXT_TYPE_UINT32,
CVX_CallInfo_getTraceID(M_Csm_Leg_Call_Info(pLeg)));
MSG_TRACE_SEND(TRACE_PROTO_ID_IS41);
}
else {
csm_mscm_set_trace_id_in_dialog(pDlg,0,0);
MSG_TRACE_SET_context(TRACE_PROTO_ID_IS41, ((void*)&pDialog->callid),
TRACE_CONTEXT_TYPE_UINT32,
pDialog->traceid);
MSG_TRACE_SEND(TRACE_PROTO_ID_IS41)
24
}
}
Intersystem handoff or Inter-MSC handoff
The new and the old BSs are connected to different MSCs.
MSC MSC
Old BS New BS
25
Implentation
26
First Choice
a a
q1 a q2
a
q0
b
q3
27
First Choice
a a
q1 a q2
a
q0
b
q3
28
First Choice
a a
q1 a q2
a
q0
b
q3
29
First Choice
a a
q1 a q2 “accept”
a
q0
b
q3
30
Second Choice
b b
q1 a q2
a
q0
b
q3
31
Second Choice
b b
q1 a q2
a
q0
b
q3
32
Second Choice
b b
q1 a q2
a
q0
b
q3 “reject”
33
FSM Entry
// The other lines should be interpreted as follows
// CURRENT_STATE EVENT Function NEXT_STATE
FACDIR
<IS41_HOSM>,(s:NULL,e:FACDIR2_FROM_SW)
<IS41_HOSM>,(s:WAIT_FACDIR2_RR_FROM_NW,e:FACDIR2_RR_FROM_NW)
facdir
<IS41_HOSM>,(s:WAIT_MSONCH_FROM_NW, e:MSONCH_FROM_NW)
MSONCH
34
• MGMT Shorter Form of Management Functionality Is managed By Every protocol
and Overall by Switch .
• This is Responsible for maintaining the Cic status.
• The Management Messages are RESET, BLOCK, UNBLOCK.
• For IS41 these Messages and Related Timer Functionality is available in
is41_mgmt_api.c, is41_mgmt_module.c, is41_mgmt_module.h, is41_mgmtutil.c,
is41_mgmtutil.h.
For Example :
Initiating BLOCKING to Another MSC means We are Locally Blocked and Target
MSC is Remotely Blocked .
MSC MSC
Blocking Invoke
LB
RB
Blocking RR
35
10.232.112.119/seshadri/winphoria
/home/seshadri/Features/is41/IS41-Presentation-Cork-final.ppt
36