| 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 (value) PDU_ML3_MS_NW ts_ML3_MO_CC_START_DTMF(integer tid, charstring number) := { |
| discriminator := '0011'B, |
| tiOrSkip := { |
| transactionId := { |
| tio := int2bit(tid, 3), |
| tiFlag := '0'B, |
| tIExtension := omit |
| } |
| }, |
| msgs := { |
| cc := { |
| startDTMF := { |
| messageType := '110101'B, |
| nsd := '00'B, |
| keypadFacility := { |
| elementIdentifier := '2C'O, |
| keypadInformation := int2bit(char2int(number), 7), |
| spare_1 := '0'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 := * |
| } |
| } |
| } |
| } |
| |
| |
| |
| } |