1137 lines
24 KiB
Plaintext
1137 lines
24 KiB
Plaintext
module L3_Templates {
|
|
|
|
/* L3 Templates, building on top of MobileL3*_Types from Ericsson.
|
|
*
|
|
* (C) 2017 by Harald Welte <laforge@gnumonks.org>
|
|
* All rights reserved.
|
|
*
|
|
* Released under the terms of GNU General Public License, Version 2 or
|
|
* (at your option) any later version.
|
|
*/
|
|
|
|
import from General_Types all;
|
|
import from MobileL3_Types all;
|
|
import from MobileL3_CommonIE_Types all;
|
|
import from MobileL3_MM_Types all;
|
|
import from MobileL3_RRM_Types all;
|
|
import from MobileL3_CC_Types all;
|
|
//import from MobileL3_GMM_SM_Types all;
|
|
//import from MobileL3_SMS_Types all;
|
|
|
|
|
|
type enumerated CmServiceType {
|
|
CM_TYPE_MO_CALL ('0001'B),
|
|
CM_TYPE_EMERG_CALL ('0010'B),
|
|
CM_TYPE_MO_SMS ('0100'B),
|
|
CM_TYPE_SS_ACT ('1000'B),
|
|
CM_TYPE_VGCS ('1001'B),
|
|
CM_TYPE_VBS ('1010'B),
|
|
CM_TYPE_LCS ('1011'B)
|
|
}
|
|
|
|
template ML3_Cause_TLV ts_ML3_Cause(BIT7 cause, BIT4 loc := '0001'B, BIT2 std := '11'B) := {
|
|
elementIdentifier := '08'O,
|
|
lengthIndicator := 0, /* overwritten */
|
|
oct3 := {
|
|
location := loc,
|
|
spare1_1 := '0'B,
|
|
codingStandard := std,
|
|
ext1 := '0'B,
|
|
recommendation := omit,
|
|
ext2 := omit
|
|
},
|
|
oct4 := {
|
|
causeValue := cause,
|
|
ext3 := '1'B
|
|
},
|
|
diagnostics := omit
|
|
}
|
|
|
|
|
|
/* send template fro Mobile Identity (TMSI) */
|
|
template MobileIdentityLV ts_MI_TMSI_LV(OCT4 tmsi) := {
|
|
lengthIndicator := 0, /* overwritten */
|
|
mobileIdentityV := {
|
|
typeOfIdentity := '000'B, /* overwritten */
|
|
oddEvenInd_identity := {
|
|
tmsi_ptmsi := {
|
|
oddevenIndicator := '0'B,
|
|
fillerDigit := '1111'B,
|
|
octets := tmsi
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private function f_enc_IMSI_L3(hexstring digits) return IMSI_L3 {
|
|
var IMSI_L3 l3;
|
|
var integer len := lengthof(digits);
|
|
if (len rem 2 == 1) { /* modulo remainder */
|
|
l3.oddevenIndicator := '1'B;
|
|
l3.fillerDigit := omit;
|
|
} else {
|
|
l3.oddevenIndicator := '0'B;
|
|
l3.fillerDigit := '1111'B;
|
|
}
|
|
l3.digits := digits;
|
|
return l3;
|
|
}
|
|
|
|
private function f_enc_IMEI_L3(hexstring digits) return IMEI_L3 {
|
|
var IMEI_L3 l3;
|
|
var integer len := lengthof(digits);
|
|
if (len rem 2 == 1) { /* modulo remainder */
|
|
l3.oddevenIndicator := '1'B;
|
|
} else {
|
|
l3.oddevenIndicator := '0'B;
|
|
}
|
|
l3.digits := digits;
|
|
return l3;
|
|
}
|
|
|
|
/* send template fro Mobile Identity (IMSI) */
|
|
template (value) MobileIdentityLV ts_MI_IMSI_LV(hexstring imsi_digits) := {
|
|
lengthIndicator := 0, /* overwritten */
|
|
mobileIdentityV := {
|
|
typeOfIdentity := '000'B, /* overwritten */
|
|
oddEvenInd_identity := {
|
|
imsi := f_enc_IMSI_L3(imsi_digits)
|
|
}
|
|
}
|
|
}
|
|
|
|
/* send template fro Mobile Identity (IMEI) */
|
|
template (value) MobileIdentityLV ts_MI_IMEI_LV(hexstring imei_digits) := {
|
|
lengthIndicator := 0, /* overwritten */
|
|
mobileIdentityV := {
|
|
typeOfIdentity := '000'B, /* overwritten */
|
|
oddEvenInd_identity := {
|
|
imei := f_enc_IMEI_L3(imei_digits)
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/* Send template for Classmark 2 */
|
|
template (value) MobileStationClassmark2_LV ts_CM2 := {
|
|
lengthIndicator := 0,
|
|
rf_PowerCapability := '000'B,
|
|
a5_1 := '0'B,
|
|
esind := '1'B,
|
|
revisionLevel := '10'B,
|
|
spare1_1 := '0'B,
|
|
mobileStationClassmark2_oct4 := {
|
|
fc := '1'B,
|
|
vgcs := '0'B,
|
|
vbs := '0'B,
|
|
sm_Capability := '1'B,
|
|
ss_ScreenIndicator := '01'B,
|
|
ps_Capability := '1'B,
|
|
spare2_1 := '0'B
|
|
},
|
|
mobileStationClassmark2_oct5 := {
|
|
a5_2 := '0'B,
|
|
a5_3 := '1'B,
|
|
cmsp := '0'B,
|
|
solsa := '0'B,
|
|
ucs2 := '0'B,
|
|
lcsva_cap := '0'B,
|
|
spare5_7 :='0'B,
|
|
cm3 := '0'B
|
|
}
|
|
};
|
|
|
|
/* Send template for CM SERVICE REQUEST */
|
|
template (value) PDU_ML3_MS_NW ts_CM_SERV_REQ(CmServiceType serv_type, MobileIdentityLV mi_lv) := {
|
|
discriminator := '0000'B, /* overwritten */
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
mm := {
|
|
cMServiceRequest := {
|
|
messageType := '000000'B, /* overwritten */
|
|
nsd := '00'B,
|
|
cm_ServiceType := int2bit(enum2int(serv_type), 4),
|
|
cipheringKeySequenceNumber := { '000'B, '0'B },
|
|
mobileStationClassmark2 := ts_CM2,
|
|
mobileIdentity := mi_lv,
|
|
priorityLevel := omit,
|
|
additionalUpdateParameterTV := omit,
|
|
deviceProperties := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) CipheringKeySequenceNumberV ts_CKSN(integer key_seq) := {
|
|
keySequence := int2bit(key_seq, 3),
|
|
spare := '0'B
|
|
}
|
|
|
|
/* Send template for CM RE-ESTABLISH REQUEST */
|
|
template (value) PDU_ML3_MS_NW ts_CM_REEST_REQ(integer cksn, MobileIdentityLV mi_lv) := {
|
|
discriminator := '0000'B, /* overwritten */
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
mm := {
|
|
cMReEstablReq := {
|
|
messageType := '101000'B, /* overwritten */
|
|
nsd := '00'B,
|
|
cipheringKeySequenceNumber := ts_CKSN(cksn),
|
|
spare := '0000'B,
|
|
mobileStationClassmark2 := ts_CM2,
|
|
mobileIdentityLV := mi_lv,
|
|
locationAreaIdentification := omit,
|
|
deviceProperties := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
template PDU_ML3_NW_MS tr_MT_simple(template BIT4 discr := ?) := {
|
|
discriminator := discr,
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := ?
|
|
}
|
|
|
|
|
|
template PDU_ML3_NW_MS tr_CM_SERV_ACC := {
|
|
discriminator := '0101'B,
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
mm := {
|
|
cMServiceAccept := {
|
|
messageType := '100001'B,
|
|
nsd := ?
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
template PDU_ML3_NW_MS tr_CM_SERV_REJ(template OCT1 rej_cause := ?) := {
|
|
discriminator := '0101'B,
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
mm := {
|
|
cMServiceReject := {
|
|
messageType := '100010'B,
|
|
nsd := ?,
|
|
rejectCause := rej_cause,
|
|
t3246_Value := *
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Send template for PAGING RESPONSE */
|
|
template (value) PDU_ML3_MS_NW ts_PAG_RESP(MobileIdentityLV mi_lv) := {
|
|
discriminator := '0000'B, /* overwritten */
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
rrm := {
|
|
pagingResponse := {
|
|
messageType := '00000000'B, /* overwritten */
|
|
cipheringKeySequenceNumber := { '000'B, '0'B },
|
|
spare1_4 := '0000'B,
|
|
mobileStationClassmark := ts_CM2,
|
|
mobileIdentity := mi_lv,
|
|
additionalUpdateParameters := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PDU_ML3_MS_NW ts_RRM_ModeModifyAck(ChannelDescription2_V desc, ChannelMode_V mode) := {
|
|
discriminator := '0000'B, /* overwritten */
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
rrm := {
|
|
channelModeModifyAck := {
|
|
messageType := '00010111'B,
|
|
channelDescription := desc,
|
|
channelMode := mode,
|
|
extendedTSCSet := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PDU_ML3_MS_NW ts_RRM_CiphModeCompl := {
|
|
discriminator := '0000'B, /* overwritten */
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
rrm := {
|
|
cipheringModeComplete := {
|
|
messageType := '00110010'B,
|
|
mobileEquipmentIdentity := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PDU_ML3_MS_NW ts_RRM_AssignmentComplete(OCT1 cause) := {
|
|
discriminator := '0000'B, /* overwritten */
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
rrm := {
|
|
assignmentComplete := {
|
|
messageType := '00101001'B,
|
|
rR_Cause := {
|
|
valuePart := cause
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PDU_ML3_MS_NW ts_RRM_AssignmentFailure(OCT1 cause) := {
|
|
discriminator := '0000'B, /* overwritten */
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
rrm := {
|
|
assignmentFailure := {
|
|
messageType := '00101111'B,
|
|
rR_Cause := {
|
|
valuePart := cause
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PDU_ML3_MS_NW ts_RRM_HandoverFailure(OCT1 cause) := {
|
|
discriminator := '0000'B, /* overwritten */
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
rrm := {
|
|
handoverFailure := {
|
|
messageType := '00101000'B,
|
|
rRCause := {
|
|
valuePart := cause
|
|
},
|
|
pSCause := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PDU_ML3_MS_NW ts_RRM_HandoverComplete(OCT1 cause) := {
|
|
discriminator := '0000'B, /* overwritten */
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
rrm := {
|
|
handoverComplete := {
|
|
messageType := '00101100'B,
|
|
rRCause := {
|
|
valuePart := cause
|
|
},
|
|
mobileObsservedTimeDiff := omit,
|
|
mobileTimeDifferenceHyperframe := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function ts_CM3_TLV(template (omit) OCTN cm3) return template MobileStationClassmark3_TLV {
|
|
if (not isvalue(cm3)) {
|
|
return omit;
|
|
}
|
|
var template MobileStationClassmark3_TLV ret := {
|
|
elementIdentifier := '20'O,
|
|
lengthIndicator := 0, /* overwritten */
|
|
valuePart := cm3
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
template (value) PDU_ML3_MS_NW ts_RRM_CM_CHG(MobileStationClassmark2_LV cm2,
|
|
template (omit) MobileStationClassmark3_TLV cm3 := omit) := {
|
|
discriminator := '0110'B,
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
rrm := {
|
|
classmarkChange := {
|
|
messageType := '00010110'B,
|
|
mobileStationClassmark2 := cm2,
|
|
mobileStationClassmark3 := cm3
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PDU_ML3_MS_NW ts_RRM_UL_REL(OCT1 cause) := {
|
|
discriminator := '0110'B,
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
rrm := {
|
|
uplinkRelease := {
|
|
messageType := '00001110'B,
|
|
rR_Cause := {
|
|
valuePart := cause
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_MS_NW tr_RRM_RR_STATUS(template OCT1 cause := ?) := {
|
|
discriminator := '0110'B,
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
rrm := {
|
|
rR_Status := {
|
|
messageType := '00010010'B,
|
|
rR_Cause := {
|
|
valuePart := cause
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template PDU_ML3_MS_NW ts_ML3_MO := {
|
|
discriminator := '0000'B,
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := ?
|
|
}
|
|
|
|
template LocationUpdatingType ts_ML3_IE_LuType := {
|
|
lut := ?,
|
|
spare1_1 := '0'B,
|
|
fop := '0'B
|
|
}
|
|
|
|
template LocationUpdatingType ts_ML3_IE_LuType_Normal modifies ts_ML3_IE_LuType := {
|
|
lut := '00'B
|
|
}
|
|
|
|
template LocationUpdatingType ts_ML3_IE_LuType_Periodic modifies ts_ML3_IE_LuType := {
|
|
lut := '01'B
|
|
}
|
|
|
|
template LocationUpdatingType ts_ML3_IE_LuType_Attach modifies ts_ML3_IE_LuType := {
|
|
lut := '10'B
|
|
}
|
|
|
|
template CipheringKeySequenceNumberV ts_ML3_IE_CKSN(integer cksn) := {
|
|
keySequence := int2bit(cksn, 3),
|
|
spare := '0'B
|
|
}
|
|
|
|
template PDU_ML3_MS_NW ts_ML3_MO_LU_Req(LocationUpdatingType lu_type, LocationAreaIdentification_V lai,
|
|
MobileIdentityLV mi, MobileStationClassmark1_V cm1)
|
|
modifies ts_ML3_MO := {
|
|
msgs := {
|
|
mm := {
|
|
locationUpdateRequest := {
|
|
messageType := '001000'B,
|
|
nsd := '00'B, /* ? */
|
|
locationUpdatingType := lu_type,
|
|
cipheringKeySequenceNumber := ts_ML3_IE_CKSN(0),
|
|
locationAreaIdentification := lai,
|
|
mobileStationClassmark1 := cm1,
|
|
mobileIdentityLV := mi,
|
|
classmarkInformationType2_forUMTS := omit,
|
|
additionalUpdateParameterTV := omit,
|
|
deviceProperties := omit,
|
|
mS_NetworkFeatureSupport := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_MS_NW ts_ML3_MO_TmsiRealloc_Cmpl modifies ts_ML3_MO := {
|
|
msgs := {
|
|
mm := {
|
|
tmsiReallocComplete := {
|
|
messageType := '011011'B,
|
|
nsd := '00'B
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_NW_MS tr_ML3_MT_LU_Acc := {
|
|
discriminator := '0101'B,
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
mm := {
|
|
locationUpdateAccept := {
|
|
messageType := '000010'B,
|
|
nsd := '00'B,
|
|
locationAreaIdentification := ?,
|
|
mobileIdentityTLV := *,
|
|
followOnProceed := *,
|
|
cTS_Permission := *,
|
|
equivalentPLMNs := *,
|
|
emergencyNumberList := *,
|
|
perMS_T3212 := *
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_NW_MS tr_ML3_MT_LU_Rej(template OCT1 cause := ?) := {
|
|
discriminator := '0101'B,
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
mm := {
|
|
locationUpdateReject := {
|
|
messageType := '000100'B,
|
|
nsd := '00'B,
|
|
rejectCause := cause,
|
|
t3246_Value := *
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_NW_MS tr_ML3_MT_MM_ID_Req(template BIT3 id_type := ?) := {
|
|
discriminator := '0101'B,
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
mm := {
|
|
identityRequest := {
|
|
messageType := '011000'B,
|
|
nsd := '00'B,
|
|
identityType := id_type,
|
|
spare1_5 := ?
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_MS_NW ts_ML3_MO_MM_ID_Rsp(MobileIdentityLV mi) modifies ts_ML3_MO := {
|
|
msgs := {
|
|
mm := {
|
|
identityResponse := {
|
|
messageType := '011001'B,
|
|
nsd := '00'B,
|
|
mobileIdentityLV := mi,
|
|
p_TMSI_TypeTV := omit,
|
|
routingAreaIdentification2TLV := omit,
|
|
p_TMSISignature2TLV := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
template PDU_ML3_MS_NW ts_ML3_MO_MM_ID_Rsp_IMSI(hexstring imsi) :=
|
|
ts_ML3_MO_MM_ID_Rsp(valueof(ts_MI_IMSI_LV(imsi)));
|
|
template PDU_ML3_MS_NW ts_ML3_MO_MM_ID_Rsp_IMEI(hexstring imei) :=
|
|
ts_ML3_MO_MM_ID_Rsp(valueof(ts_MI_IMEI_LV(imei)));
|
|
|
|
|
|
template (value) MobileStationClassmark1_V ts_CM1(BIT1 a5_1_unavail := '0'B, BIT2 rev := '10'B) := {
|
|
rf_PowerCapability := '010'B,
|
|
a5_1 := a5_1_unavail,
|
|
esind := '1'B,
|
|
revisionLevel := rev,
|
|
spare1_1 := '0'B
|
|
}
|
|
|
|
template PDU_ML3_MS_NW ts_ML3_MO_MM_IMSI_DET_Ind(MobileIdentityLV mi,
|
|
template MobileStationClassmark1_V cm1 := ts_CM1)
|
|
modifies ts_ML3_MO := {
|
|
msgs := {
|
|
mm := {
|
|
imsiDetachIndication := {
|
|
messageType := '000001'B,
|
|
nsd := '00'B,
|
|
mobileStationClassmark1 := cm1,
|
|
mobileIdentityLV := mi
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_MS_NW ts_ML3_MO_CC(integer tid) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := '0'B,
|
|
tIExtension := omit
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) CalledPartyBCD_Number ts_Called(hexstring digits) := {
|
|
elementIdentifier := '5E'O,
|
|
lengthIndicator := 0, /* overwritten */
|
|
numberingPlanIdentification := '0000'B,
|
|
typeOfNumber := '000'B, /* unknown */
|
|
ext1 := '0'B,
|
|
digits := digits
|
|
}
|
|
|
|
template CalledPartyBCD_Number tr_Called(template hexstring digits) := {
|
|
elementIdentifier := '5E'O,
|
|
lengthIndicator := ?,
|
|
numberingPlanIdentification := ?,
|
|
typeOfNumber := ?,
|
|
ext1 := ?,
|
|
digits := digits
|
|
}
|
|
|
|
template CallingPartyBCD_Number tr_Calling(template hexstring digits) := {
|
|
elementIdentifier := '5C'O,
|
|
lengthIndicator := ?,
|
|
oct3 := ?,
|
|
digits := digits
|
|
}
|
|
|
|
type integer SpeechVer;
|
|
|
|
template (value) Speech_AuxiliarySpeech ts_SpeechAux(SpeechVer ver, BIT1 suffix) := {
|
|
speechVersionIndication := int2bit(ver-1,3) & suffix,
|
|
spare1_1 := '0'B,
|
|
cTM_or_Spare := '0'B,
|
|
coding := '0'B,
|
|
extension_octet_3a_3b := '0'B
|
|
}
|
|
|
|
template (value) Speech_AuxiliarySpeech ts_SpeechAuxFR(SpeechVer ver) := ts_SpeechAux(ver, '0'B);
|
|
template (value) Speech_AuxiliarySpeech ts_SpeechAuxHR(SpeechVer ver) := ts_SpeechAux(ver, '1'B);
|
|
|
|
template (value) BearerCapability_TLV ts_Bcap_voice := {
|
|
elementIdentifier := '04'O,
|
|
lengthIndicator := 0, /* overwritten */
|
|
octet3 := {
|
|
informationTransferCapability := '000'B,
|
|
transferMode := '0'B,
|
|
codingStandard := '0'B,
|
|
radioChannelRequirement := '11'B, /* FR preferred */
|
|
extension_octet_3 := '0'B, /* overwritten */
|
|
speech_aux_3a_3b := {
|
|
valueof(ts_SpeechAuxHR(3)),
|
|
valueof(ts_SpeechAuxFR(3)),
|
|
valueof(ts_SpeechAuxFR(2)),
|
|
valueof(ts_SpeechAuxFR(1)),
|
|
valueof(ts_SpeechAuxHR(1))
|
|
}
|
|
},
|
|
octet4 := omit,
|
|
octet5 := omit,
|
|
octet6 := omit,
|
|
octet7 := omit
|
|
}
|
|
|
|
template PDU_ML3_MS_NW ts_ML3_MO_CC_SETUP(integer tid, hexstring called, template BearerCapability_TLV bcap := ts_Bcap_voice) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := '0'B,
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
setup_MS_NW := {
|
|
messageType := '000101'B,
|
|
nsd := '00'B,
|
|
bcRepeatIndicator := omit,
|
|
bearerCapability1 := bcap,
|
|
bearerCapability2 := omit,
|
|
facility := omit,
|
|
callingPartySubAddress := omit,
|
|
calledPartyBCD_Number := ts_Called(called),
|
|
calledPartySubAddress := omit,
|
|
llc_RepeatIndicator := omit,
|
|
lowLayerCompatibility1 := omit,
|
|
lowLayerCompatibility2 := omit,
|
|
hlc_RepeatIndicator := omit,
|
|
highLayerCompatibility1 := omit,
|
|
highLayerCompatibility2 := omit,
|
|
user_user := omit,
|
|
ss_VersionIndicator := omit,
|
|
clir_Suppression := omit,
|
|
clir_Invocation := omit,
|
|
cC_Capabilities := omit,
|
|
facility_ccbs1 := omit,
|
|
facility_ccbs2 := omit,
|
|
streamIdentifier := omit,
|
|
supportedCodecs := omit,
|
|
redial := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_MS_NW ts_ML3_MO_CC_EMERG_SETUP(integer tid, template BearerCapability_TLV bcap := ts_Bcap_voice) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := '0'B,
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
emergencySetup := {
|
|
messageType := '001110'B,
|
|
nsd := '00'B,
|
|
bearerCapability := bcap,
|
|
streamIdentifier := omit,
|
|
supportedCodecs := omit,
|
|
emergencyCategory := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
template PDU_ML3_NW_MS tr_ML3_MT_CC_CALL_PROC(integer tid) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := ?,
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
callProceeding := {
|
|
messageType := '000010'B,
|
|
nsd := '00'B,
|
|
repeatIndicator := *,
|
|
bearerCapability1 := *,
|
|
bearerCapability2 := *,
|
|
facility := *,
|
|
progressIndicator := *,
|
|
priorityGranted := *,
|
|
networkCCCapabilities := *
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_NW_MS tr_ML3_MT_CC_ALERTING(integer tid) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := ?,
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
alerting_NW_MS := {
|
|
messageType := '000001'B,
|
|
nsd := '00'B,
|
|
facility := *,
|
|
progressIndicator := *,
|
|
user_user := *
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_MS_NW ts_ML3_MO_CC_ALERTING(integer tid) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := '1'B,
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
alerting_MS_NW := {
|
|
messageType := '000001'B,
|
|
nsd := '00'B,
|
|
facility := omit,
|
|
user_user := omit,
|
|
ss_VersionIndicator := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_MS_NW ts_ML3_MT_CC_ALERTING(integer tid) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := '1'B,
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
alerting_MS_NW := {
|
|
messageType := '000001'B,
|
|
nsd := '00'B,
|
|
facility := omit,
|
|
user_user := omit,
|
|
ss_VersionIndicator := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_MS_NW ts_ML3_MO_CC_CONNECT(integer tid) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := '1'B,
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
connect_MS_NW := {
|
|
messageType := '000111'B,
|
|
nsd := '00'B,
|
|
facility := omit,
|
|
connectedSubAddress := omit,
|
|
user_user := omit,
|
|
ss_VersionIndicator := omit,
|
|
streamIdentifier := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_NW_MS tr_ML3_MT_CC_CONNECT(integer tid) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := '1'B,
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
connect_NW_MS := {
|
|
messageType := '000111'B,
|
|
nsd := '00'B,
|
|
facility := *,
|
|
progressIndicator := *,
|
|
connectedNumber := *,
|
|
connectedSubAddress := *,
|
|
user_user := *
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PDU_ML3_MS_NW ts_ML3_MO_CC_CONNECT_ACK(integer tid) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := '0'B,
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
connectAck := {
|
|
messageType := '001111'B,
|
|
nsd := '00'B
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_NW_MS tr_ML3_MT_CC_DISC(integer tid) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := ?,
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
disconnect_NW_MS := {
|
|
messageType := '100101'B,
|
|
nsd := '00'B,
|
|
cause := ?,
|
|
facility := *,
|
|
progressIndicator := *,
|
|
user_user := *,
|
|
allowedActions := *
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_NW_MS tr_ML3_MT_CC_RELEASE(integer tid) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := ?,
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
release_NW_MS := {
|
|
messageType := '101101'B,
|
|
nsd := '00'B,
|
|
cause := ?,
|
|
secondCause := *,
|
|
facility := *,
|
|
user_user := *
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_MS_NW ts_ML3_MO_CC_RELEASE(integer tid, BIT1 tid_remote, BIT7 cause) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := tid_remote,
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
release_MS_NW := {
|
|
messageType := '101101'B,
|
|
nsd := '00'B,
|
|
cause := ts_ML3_Cause(cause),
|
|
secondCause := omit,
|
|
facility := omit,
|
|
user_user := omit,
|
|
ss_VersionIndicator := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
template (value) PDU_ML3_MS_NW ts_ML3_MO_CC_REL_COMPL(integer tid) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := '0'B,
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
releaseComplete_MS_NW := {
|
|
messageType := '101010'B,
|
|
nsd := '00'B,
|
|
cause := omit,
|
|
facility := omit,
|
|
user_user := omit,
|
|
ss_VersionIndicator := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_NW_MS tr_ML3_MT_CC_REL_COMPL(integer tid) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := ?,
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
releaseComplete_NW_MS := {
|
|
messageType := '101010'B,
|
|
nsd := '00'B,
|
|
cause := *,
|
|
facility := *,
|
|
user_user := *
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template PDU_ML3_NW_MS tr_ML3_MT_MM_AUTH_REQ(template OCT16 rand := ?) := {
|
|
discriminator := '0101'B,
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
mm := {
|
|
authenticationRequest := {
|
|
messageType := '010010'B,
|
|
nsd := '00'B,
|
|
cipheringKeySequenceNumber := ?,
|
|
spare2_4 := ?,
|
|
authenticationParRAND := rand,
|
|
authenticationParAUTN := *
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PDU_ML3_MS_NW ts_ML3_MT_MM_AUTH_RESP_2G(OCT4 sres) := {
|
|
discriminator := '0101'B,
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
mm := {
|
|
authenticationResponse := {
|
|
messageType := '010100'B,
|
|
nsd := '00'B,
|
|
authenticationParSRES := sres,
|
|
authenticationParSRESext := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PDU_ML3_MS_NW ts_ML3_MT_MM_AUTH_RESP_3G(OCT4 sres, octetstring res) := {
|
|
discriminator := '0101'B,
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
mm := {
|
|
authenticationResponse := {
|
|
messageType := '010100'B,
|
|
nsd := '00'B,
|
|
authenticationParSRES := sres,
|
|
authenticationParSRESext := {
|
|
elementIdentifier := '21'O,
|
|
lengthIndicator := 0, /* overwritten */
|
|
valueField := res
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template PDU_ML3_MS_NW ts_ML3_MO_CC_CALL_CONF(integer tid,
|
|
template BearerCapability_TLV bcap := omit) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := '1'B, /* response from destination */
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
callConfirmed := {
|
|
messageType := '001000'B,
|
|
nsd := '00'B,
|
|
repeatIndicator := omit,
|
|
bearerCapability1 := bcap,
|
|
bearerCapability2 := omit,
|
|
cause := omit,
|
|
cC_Capabilities := omit,
|
|
streamIdentifier := omit,
|
|
supportedCodecs := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
template PDU_ML3_NW_MS tr_ML3_MT_CC_SETUP(integer tid, template hexstring called := *,
|
|
template hexstring calling := *,
|
|
template BearerCapability_TLV bcap := *) := {
|
|
discriminator := '0011'B,
|
|
tiOrSkip := {
|
|
transactionId := {
|
|
tio := int2bit(tid, 3),
|
|
tiFlag := '0'B, /* from originator */
|
|
tIExtension := omit
|
|
}
|
|
},
|
|
msgs := {
|
|
cc := {
|
|
setup_NW_MS := {
|
|
messageType := '000101'B,
|
|
nsd := '00'B,
|
|
bcRepeatIndicator := *,
|
|
bearerCapability1 := bcap,
|
|
bearerCapability2 := *,
|
|
facility := *,
|
|
progressIndicator := *,
|
|
signal := *,
|
|
callingPartyBCD_Number := tr_Calling(calling) ifpresent,
|
|
callingPartySubAddress := *,
|
|
calledPartyBCD_Number := tr_Called(called) ifpresent,
|
|
calledPartySubAddress := *,
|
|
redirectingPartyBCDNumber := *,
|
|
redirectingPartySubaddress := *,
|
|
llc_RepeatIndicator := *,
|
|
lowLayerCompatibility1 := *,
|
|
lowLayerCompatibility2 := *,
|
|
hlc_RepeatIndicator := *,
|
|
highLayerCompatibility1 := *,
|
|
highLayerCompatibility2 := *,
|
|
user_user := *,
|
|
priority := *,
|
|
alert := *,
|
|
networkCCCapabilities := *,
|
|
causeofNoCli := *,
|
|
backupBearerCapacity := *
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|