diff options
Diffstat (limited to 'library/BSSMAP_Templates.ttcn')
-rw-r--r-- | library/BSSMAP_Templates.ttcn | 1158 |
1 files changed, 1122 insertions, 36 deletions
diff --git a/library/BSSMAP_Templates.ttcn b/library/BSSMAP_Templates.ttcn index da822a94..a93fb025 100644 --- a/library/BSSMAP_Templates.ttcn +++ b/library/BSSMAP_Templates.ttcn @@ -2,7 +2,7 @@ module BSSMAP_Templates { /* BSSMAP Templates, building on top of BSSAP_Types from Ericsson. * - * (C) 2017-2019 by Harald Welte <laforge@gnumonks.org> + * (C) 2017-2023 by Harald Welte <laforge@gnumonks.org> * contributions by sysmocom - s.f.m.c. GmbH * All rights reserved. * @@ -23,7 +23,16 @@ type integer BssmapCause; type integer SpeechVersion; type integer Channel; type integer ChannelMode; -type octetstring oldToNewBSSIEs; +//type octetstring BSSMAP_oldToNewBSSIEs; + +// Old BSS to New BSS Information - 48.008 subclause 3.2.2.58 +type record BSSMAP_oldToNewBSSIEs +{ + BSSAMAP_IE_LastUsedEUTRANPLMNId LastUsedEUTRANPLMNId optional + /* TODO: add other FIELDS here from specs */ +} +external function enc_BSSMAP_oldToNewBSSIEs(in BSSMAP_oldToNewBSSIEs val) return octetstring + with { extension "prototype(convert) encode(RAW)" }; /* 48.008 3.2.2.5 - this actually belongs to BSSAP_Types.ttcn */ type enumerated myBSSMAP_Cause { @@ -103,6 +112,36 @@ type enumerated myBSSMAP_Cause { GSM0808_CAUSE_DTM_HO_TIMER_EXPIRY ('1100010'B) } with { variant "FIELDLENGTH(7)" }; +/* 3GPP TS 48.008 3.2.2.11 Channel Type + * Transparent: Data Rate */ +const OCT1 GSM0808_DATA_RATE_TRANSP_32k0 := ('3a'O); +const OCT1 GSM0808_DATA_RATE_TRANSP_28k8 := ('39'O); +const OCT1 GSM0808_DATA_RATE_TRANSP_14k4 := ('18'O); +const OCT1 GSM0808_DATA_RATE_TRANSP_9k6 := ('10'O); +const OCT1 GSM0808_DATA_RATE_TRANSP_4k8 := ('11'O); +const OCT1 GSM0808_DATA_RATE_TRANSP_2k4 := ('12'O); +const OCT1 GSM0808_DATA_RATE_TRANSP_1k2 := ('13'O); +const OCT1 GSM0808_DATA_RATE_TRANSP_600 := ('14'O); +const OCT1 GSM0808_DATA_RATE_TRANSP_1200_75 := ('15'O); + +/* 3GPP TS 48.008 3.2.2.11 Channel Type + * Non-Transparent: Radio Interface Data Rate (preferred) */ +const OCT1 GSM0808_DATA_RATE_NON_TRANSP_12000_6000 := ('00'O); +const OCT1 GSM0808_DATA_RATE_NON_TRANSP_43k5 := ('34'O); +const OCT1 GSM0808_DATA_RATE_NON_TRANSP_29k0 := ('31'O); +const OCT1 GSM0808_DATA_RATE_NON_TRANSP_14k5 := ('14'O); +const OCT1 GSM0808_DATA_RATE_NON_TRANSP_12k0 := ('10'O); +const OCT1 GSM0808_DATA_RATE_NON_TRANSP_6k0 := ('11'O); + +/* 3GPP TS 48.008 3.2.2.11 Channel Type + * Non-Transparent: Allowed Radio Interface Data Rate (all possible allowed) */ +const OCT1 GSM0808_DATA_RATE_NON_TRANSP_ALLOWED_43k5 := ('40'O); +const OCT1 GSM0808_DATA_RATE_NON_TRANSP_ALLOWED_32k0 := ('20'O); +const OCT1 GSM0808_DATA_RATE_NON_TRANSP_ALLOWED_29k0 := ('10'O); +const OCT1 GSM0808_DATA_RATE_NON_TRANSP_ALLOWED_14k5 := ('08'O); +const OCT1 GSM0808_DATA_RATE_NON_TRANSP_ALLOWED_12k0 := ('02'O); +const OCT1 GSM0808_DATA_RATE_NON_TRANSP_ALLOWED_6k0 := ('01'O); + type enumerated BSSMAP_LcsCause { BSSMAP_LCS_CAUSE_UNSPECIFIED ('00000000'B), BSSMAP_LCS_CAUSE_SYSTEM_FAILURE ('00000001'B), @@ -198,10 +237,47 @@ template (value) BSSMAP_IE_CurrentChannelType1 ts_BSSMAP_IE_CurrentChannelType1( channelMode := int2bit(cm, 4) } -template (value) BSSMAP_IE_OldToNewBSSInfo ts_BSSMAP_IE_OldToNewBSSInfo(oldToNewBSSIEs val) := { +template (value) BSSMAP_oldToNewBSSIEs ts_BSSMAP_oldToNewBSSIEs(template (omit) BSSAMAP_IE_LastUsedEUTRANPLMNId last_used_eutran_plmn) := { + LastUsedEUTRANPLMNId := last_used_eutran_plmn +} +function f_ts_BSSMAP_oldToNewBSSIEs(template (omit) BSSAMAP_IE_LastUsedEUTRANPLMNId last_used_eutran_plmn) + return template (omit) BSSMAP_oldToNewBSSIEs { + if (istemplatekind(last_used_eutran_plmn, "omit")) { + return omit; + } else { + return ts_BSSMAP_oldToNewBSSIEs(last_used_eutran_plmn); + } +} +template (value) BSSMAP_IE_OldToNewBSSInfo ts_BSSMAP_IE_OldToNewBSSInfo(template (value) BSSMAP_oldToNewBSSIEs val) := { elementIdentifier := '3A'O, lengthIndicator := 0, /* overwritten by codec */ - oldToNewBSSIEs := val + oldToNewBSSIEs := enc_BSSMAP_oldToNewBSSIEs(valueof(val)) +} +function f_ts_BSSMAP_IE_OldToNewBSSInfo(template (omit) BSSMAP_oldToNewBSSIEs val) + return template (omit) BSSMAP_IE_OldToNewBSSInfo { + if (istemplatekind(val, "omit")) { + return omit; + } else { + return ts_BSSMAP_IE_OldToNewBSSInfo(val); + } +} + +template BSSMAP_IE_OldToNewBSSInfo tr_BSSMAP_IE_OldToNewBSSInfo(template (value) BSSMAP_oldToNewBSSIEs val) := { + elementIdentifier := '3A'O, + lengthIndicator := ?, /* overwritten by codec */ + oldToNewBSSIEs := enc_BSSMAP_oldToNewBSSIEs(valueof(val)) +} +function f_tr_BSSMAP_IE_OldToNewBSSInfo(template BSSMAP_oldToNewBSSIEs val := *) + return template BSSMAP_IE_OldToNewBSSInfo { + if (istemplatekind(val, "*")) { + return *; + } else if (istemplatekind(val, "?")) { + return ?; + } else if (istemplatekind(val, "omit")) { + return omit; + } else { + return tr_BSSMAP_IE_OldToNewBSSInfo(val); + } } template (value) BSSMAP_IE_Osmo_OsmuxSupport tr_BSSMAP_IE_Osmo_OsmuxSupport := { @@ -273,8 +349,17 @@ template BSSMAP_IE_CellIdentifier ts_BSSMAP_IE_CellID := { cellIdentification := ? } +template BSSMAP_IE_CellIdentifier tr_BSSMAP_IE_CellID := { + elementIdentifier := '05'O, + lengthIndicator := ?, + cellIdentifierDiscriminator := ?, + spare1_4 := '0000'B, + cellIdentification := ? +} + type uint16_t BssmapLAC; type uint16_t BssmapCI; +type uint16_t BssmapSAC; template BSSMAP_IE_CellIdentifier ts_CellId_CGI(hexstring mcc, hexstring mnc, BssmapLAC lac, BssmapCI ci) modifies ts_BSSMAP_IE_CellID := { @@ -283,7 +368,16 @@ modifies ts_BSSMAP_IE_CellID := { } } -template BSSMAP_IE_CellIdentifier ts_CellID_LAC_CI(BssmapLAC lac, BssmapCI ci) +template (present) BSSMAP_IE_CellIdentifier tr_CellId_CGI(template (present) OCT3 mcc_mnc, + template (present) BssmapLAC lac, + template (present) BssmapCI ci) +modifies tr_BSSMAP_IE_CellID := { + cellIdentification := { + cI_CGI := tr_BSSMAP_CI_CGI(mcc_mnc, lac, ci) + } +} + +template (value) BSSMAP_IE_CellIdentifier ts_CellID_LAC_CI(BssmapLAC lac, BssmapCI ci) modifies ts_BSSMAP_IE_CellID := { cellIdentification := { cI_LAC_CI := { @@ -293,6 +387,17 @@ modifies ts_BSSMAP_IE_CellID := { } } +template (present) BSSMAP_IE_CellIdentifier tr_CellID_LAC_CI(template (present) BssmapLAC lac, + template (present) BssmapCI ci) +modifies tr_BSSMAP_IE_CellID := { + cellIdentification := { + cI_LAC_CI := { + lac := f_tr_LAC(lac), + ci := f_tr_CI(ci) + } + } +} + template BSSMAP_IE_CellIdentifier ts_CellId_CI(BssmapCI ci) modifies ts_BSSMAP_IE_CellID := { cellIdentification := { @@ -300,6 +405,13 @@ modifies ts_BSSMAP_IE_CellID := { } } +template (present) BSSMAP_IE_CellIdentifier tr_CellId_CI(template (present) BssmapCI ci) +modifies tr_BSSMAP_IE_CellID := { + cellIdentification := { + cI_CI := f_tr_CI(ci) + } +} + template BSSMAP_IE_CellIdentifier ts_CellId_none modifies ts_BSSMAP_IE_CellID := { cellIdentification := { @@ -307,14 +419,72 @@ modifies ts_BSSMAP_IE_CellID := { } } +template BSSMAP_IE_CellIdentifier tr_CellId_none +modifies tr_BSSMAP_IE_CellID := { + cellIdentification := { + cI_noCell := ''O + } +} + +template (value) BSSMAP_IE_CellIdentifier ts_CellID_SAI(OCT3 mcc_mnc, BssmapLAC lac, BssmapSAC sac) +modifies ts_BSSMAP_IE_CellID := { + cellIdentification := { + cI_SAI := { + mcc_mnc := mcc_mnc, + lac := int2oct(lac, 2), + sac := int2oct(sac, 2) + } + } +} + +template (present) BSSMAP_IE_CellIdentifier tr_CellID_SAI(template (present) OCT3 mcc_mnc, + template (present) BssmapLAC lac, + template (present) BssmapSAC sac) +modifies tr_BSSMAP_IE_CellID := { + cellIdentification := { + cI_SAI := { + mcc_mnc := mcc_mnc, + lac := f_tr_LAC(lac), + sac := f_tr_SAC(sac) + } + } +} + +private function f_tr_LAC(template (present) BssmapLAC lac) +return template (present) OCT2 { + if (istemplatekind(lac, "?")) { + return ?; + } else { + return int2oct(valueof(lac), 2); + } +} + +private function f_tr_SAC(template (present) BssmapSAC sac) +return template (present) OCT2 { + if (istemplatekind(sac, "?")) { + return ?; + } else { + return int2oct(valueof(sac), 2); + } +} + +private function f_tr_CI(template (present) BssmapCI ci) +return template (present) OCT2 { + if (istemplatekind(ci, "?")) { + return ?; + } else { + return int2oct(valueof(ci), 2); + } +} + -template BSSMAP_IE_Layer3Information ts_BSSMAP_IE_L3Info(octetstring l3info) := { +template (value) BSSMAP_IE_Layer3Information ts_BSSMAP_IE_L3Info(template (value) octetstring l3info) := { elementIdentifier := '17'O, lengthIndicator := 0, layer3info := l3info } -template BSSMAP_IE_Layer3Information tr_BSSMAP_IE_L3Info(template octetstring l3info) := { +template (present) BSSMAP_IE_Layer3Information tr_BSSMAP_IE_L3Info(template (present) octetstring l3info) := { elementIdentifier := '17'O, lengthIndicator := ?, layer3info := l3info @@ -342,7 +512,8 @@ modifies ts_BSSAP_BSSMAP := { } template PDU_BSSAP tr_BSSMAP_ComplL3(template octetstring l3_info := ?, - template BSSMAP_IE_CellIdentifier cell_id := ?) + template BSSMAP_IE_CellIdentifier cell_id := ?, + template BSSMAP_IE_SpeechCodecList codec_list := *) modifies tr_BSSAP_BSSMAP := { pdu := { bssmap := { @@ -353,7 +524,7 @@ modifies tr_BSSAP_BSSMAP := { chosenChannel := *, lSAIdentifier := *, aPDU := *, - codecList := *, + codecList := codec_list, redirectAttemptFlag := *, sendSequenceNumber := *, iMSI := * @@ -395,6 +566,17 @@ template (value) BSSMAP_IE_ChannelType ts_BSSMAP_IE_ChannelType := { speechId_DataIndicator := Spdi_TCHF_FR } +template (present) BSSMAP_IE_ChannelType tr_BSSMAP_IE_ChannelType(template (present) BIT4 speech_data_ind, + template (present) OCT1 chan_rate_type, + template (present) octetstring speech_id) := { + elementIdentifier := '0B'O, + lengthIndicator := ?, + speechOrDataIndicator := speech_data_ind, + spare1_4 := '0000'B, + channelRateAndType := chan_rate_type, + speechId_DataIndicator := speech_id +} + template (value) BSSMAP_IE_ChannelType ts_BSSMAP_IE_ChannelTypeCTM modifies ts_BSSMAP_IE_ChannelType := { speechOrDataIndicator := '0100'B /* speech + CTM */ } @@ -431,7 +613,15 @@ template BSSMAP_IE_EncryptionInformation tr_BSSMAP_IE_EncrInfo(template OCT8 kc key := kc } +template BSSMAP_IE_ChosenEncryptionAlgorithm ts_BSSMAP_IE_ChosenEncryptionAlgorithm(OCT1 algorithmIdentifier) := { + elementIdentifier := '2C'O, + algorithmIdentifier := algorithmIdentifier +} +template BSSMAP_IE_ChosenEncryptionAlgorithm tr_BSSMAP_IE_ChosenEncryptionAlgorithm(template OCT1 algorithmIdentifier := ?) := { + elementIdentifier := '2C'O, + algorithmIdentifier := algorithmIdentifier +} template (value) BSSMAP_IE_CircuitIdentityCode ts_BSSMAP_IE_CIC(uint11_t span, uint5_t ts) := { elementIdentifier := '01'O, /* overwritten */ @@ -492,6 +682,11 @@ function f_tr_BSSMAP_IE_AoIP_TLA(charstring addr, template uint16_t udp_port) } } +template (present) BSSMAP_IE_KC128 tr_BSSMAP_IE_Kc128(template (present) OCT16 kc128) := { + elementIdentifier := '83'O, + kC128_Value := kc128 +} + template (value) BSSMAP_IE_KC128 ts_BSSMAP_IE_Kc128(OCT16 kc128) := { elementIdentifier := '83'O, kC128_Value := kc128 @@ -527,6 +722,19 @@ template (value) BSSMAP_FIELD_CodecElement ts_CodecAMR_H modifies ts_CodecBase : s0_7 := '00111111'B, s8_15 := '00000111'B /* S6 - S7 and S11 – S15 are reserved and coded with zeroes */ } +template (value) BSSMAP_FIELD_CodecElement ts_CodecAMR_WB modifies ts_CodecBase := { + codecType := FR_AMR_WB, + s0_7 := '00000001'B +} +template (value) BSSMAP_FIELD_CodecElement ts_CodecCSData modifies ts_CodecBase := { + codecType := CodecExtension, + tF := '0'B, /* Spare */ + pT := '0'B, /* CSDoTDM */ + pI := '1'B, /* CSDoIP */ + fI := '0'B, /* Spare */ + extendedCodecType := 'FD'O, /* CSData */ + s0_7 := '00000000'B /* R2, R3, Spare */ +} template BSSMAP_IE_SpeechCodecList ts_BSSMAP_IE_CodecList(template BSSMAP_FIELD_CodecElements elem) := { elementIdentifier := '7D'O, lengthIndicator := 0, /* overwritten */ @@ -538,6 +746,36 @@ template BSSMAP_IE_SpeechCodec ts_BSSMAP_IE_SpeechCodec(template BSSMAP_FIELD_Co codecElements := valueof(elem) } +function ts_BSSMAP_IE_CallIdentifier(template (omit) OCT4 cid) return template (omit) BSSMAP_IE_CallIdentifier { + if (istemplatekind(cid, "omit")) { + return omit; + } else { + var template (present) BSSMAP_IE_CallIdentifier ie := { + elementIdentifier := '7F'O, + callIdentifierInfo := cid + } + return ie; + } +} +function tr_BSSMAP_IE_CallIdentifier(template OCT4 cid) return template BSSMAP_IE_CallIdentifier { + if (istemplatekind(cid, "*")) { + return *; + } else if (istemplatekind(cid, "omit")) { + return omit; + } else { + var template BSSMAP_IE_CallIdentifier ie := { + elementIdentifier := '7F'O, + callIdentifierInfo := cid + } + return ie; + } +} + + +template (present) BSSMAP_IE_Osmo_OsmuxCID tr_OsmuxCID(template (present) INT1 cid := ?) := { + elementIdentifier := 'F1'O, + osmuxCID := cid +} template (value) BSSMAP_IE_Osmo_OsmuxCID ts_OsmuxCID(INT1 cid) := { elementIdentifier := 'F1'O, osmuxCID := cid @@ -787,7 +1025,8 @@ template PDU_BSSAP tr_BSSMAP_ClearRequest modifies tr_BSSAP_BSSMAP := { } template PDU_BSSAP ts_BSSMAP_HandoverRequired(BssmapCause cause, - template BSSMAP_FIELD_CellIdentificationList cid_list) + template BSSMAP_FIELD_CellIdentificationList cid_list, + template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit) modifies ts_BSSAP_BSSMAP := { pdu := { bssmap := { @@ -800,7 +1039,7 @@ modifies ts_BSSAP_BSSMAP := { currentChannelType1 := omit, speechVersion := omit, queueingIndicator := omit, - oldToNewBSSInfo := omit, + oldToNewBSSInfo := f_ts_BSSMAP_IE_OldToNewBSSInfo(oldToNewBSSIEs), sourceToTargetRNCTransparentInfo := omit, sourceToTargetRNCTransparentInfoCDMA := omit, gERANClassmark := omit, @@ -813,11 +1052,17 @@ modifies ts_BSSAP_BSSMAP := { } -template PDU_BSSAP tr_BSSMAP_HandoverRequired modifies tr_BSSAP_BSSMAP := { +template PDU_BSSAP tr_BSSMAP_HandoverRequired(template BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := *, + template (present) BSSMAP_FIELD_CellIdentificationList cid_list := ?) +modifies tr_BSSAP_BSSMAP := { pdu := { bssmap := { handoverRequired := { - messageType := '11'O + messageType := '11'O, + cellIdentifierList := { + cellIdentificationList := cid_list + }, + oldToNewBSSInfo := f_tr_BSSMAP_IE_OldToNewBSSInfo(oldToNewBSSIEs) } } } @@ -893,11 +1138,20 @@ template PDU_BSSAP tr_BSSMAP_HandoverFailure modifies tr_BSSAP_BSSMAP := { } } -template PDU_BSSAP tr_BSSMAP_HandoverRequest modifies tr_BSSAP_BSSMAP := { +template PDU_BSSAP tr_BSSMAP_HandoverRequest(template BSSMAP_IE_EncryptionInformation encryptionInformation := *, + template BSSMAP_IE_ChosenEncryptionAlgorithm chosenEncryptionAlgorithm := *, + template BSSMAP_IE_KC128 kC128 := *, + template BSSMAP_IE_SpeechCodecList codecList := * + ) + modifies tr_BSSAP_BSSMAP := { pdu := { bssmap := { handoverRequest := { - messageType := '10'O + messageType := '10'O, + encryptionInformation := encryptionInformation, + chosenEncryptionAlgorithm := chosenEncryptionAlgorithm, + codecList := codecList, + kC128 := kC128 } } } @@ -907,7 +1161,12 @@ template PDU_BSSAP ts_BSSMAP_HandoverRequest( template BSSMAP_IE_CircuitIdentityCode cic := omit, template BSSMAP_IE_AoIP_TransportLayerAddress aoip_tla := omit, template BSSMAP_IE_CellIdentifier cell_id_target := ts_CellID_LAC_CI(1, 0), - template BSSMAP_IE_CellIdentifier cell_id_source := ts_CellID_LAC_CI(1, 1) + template BSSMAP_IE_CellIdentifier cell_id_source := ts_CellID_LAC_CI(1, 1), + template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit, + template BSSMAP_IE_EncryptionInformation encryptionInformation := ts_BSSMAP_IE_EncrInfo('0000000000000000'O,'01'O), + template (omit) BSSMAP_IE_ChosenEncryptionAlgorithm chosenEncryptionAlgorithm := omit, + template (omit) BSSMAP_IE_KC128 kC128 := omit, + template (omit) BSSMAP_IE_SpeechCodecList codecList := omit ) modifies ts_BSSAP_BSSMAP := { pdu := { @@ -915,8 +1174,7 @@ modifies ts_BSSAP_BSSMAP := { handoverRequest := { messageType := '10'O, channelType := ts_BSSMAP_IE_ChannelType, - encryptionInformation := - ts_BSSMAP_IE_EncrInfo('0000000000000000'O,'01'O), + encryptionInformation := encryptionInformation, classmarkInformationType := { classmarkInformationType1 := { elementIdentifier := '1D'O, @@ -940,8 +1198,8 @@ modifies ts_BSSAP_BSSMAP := { groupCallReference := omit, talkerFlag := omit, configurationEvolutionIndication := omit, - chosenEncryptionAlgorithm := omit, - oldToNewBSSInfo := omit, + chosenEncryptionAlgorithm := chosenEncryptionAlgorithm, + oldToNewBSSInfo := f_ts_BSSMAP_IE_OldToNewBSSInfo(oldToNewBSSIEs), lSAInformation := omit, lSAAccessControlSuppression := omit, serviceHandover := omit, @@ -951,9 +1209,9 @@ modifies ts_BSSAP_BSSMAP := { sNAAccessInformation := omit, talkerPriority := omit, aoIPTransportLayer := aoip_tla, - codecList := omit, + codecList := codecList, callIdentifier := omit, - kC128 := omit, + kC128 := kC128, globalCallReference := omit, lCLS_Configuration := omit, connectionStatusControl := omit @@ -1110,6 +1368,35 @@ template BSSMAP_IE_IMSI tr_BSSMAP_Imsi(template hexstring imsi_digits) := { digits := imsi_digits } +template (value) BSSAMAP_IE_LastUsedEUTRANPLMNId ts_BSSMAP_LastUsedEUTRANPLMNId(OCT3 mcc_mnc) := { + elementIdentifier := '95'O, + mcc_mnc := mcc_mnc +} +template BSSAMAP_IE_LastUsedEUTRANPLMNId tr_BSSMAP_LastUsedEUTRANPLMNId(template OCT3 mcc_mnc) := { + elementIdentifier := '95'O, + mcc_mnc := mcc_mnc +} +function f_ts_BSSMAP_LastUsedEUTRANPLMNId(template (omit) OCT3 mcc_mnc) + return template (omit) BSSAMAP_IE_LastUsedEUTRANPLMNId { + if (not istemplatekind(mcc_mnc, "omit")) { + return ts_BSSMAP_LastUsedEUTRANPLMNId(valueof(mcc_mnc)); + } else { + return omit; + } +} +function f_tr_BSSMAP_LastUsedEUTRANPLMNId(template OCT3 mcc_mnc) +return template BSSAMAP_IE_LastUsedEUTRANPLMNId { + if (istemplatekind(mcc_mnc, "*")) { + return *; + } else if (istemplatekind(mcc_mnc, "?")) { + return ?; + } else if (istemplatekind(mcc_mnc, "omit")) { + return omit; + } else { + return ts_BSSMAP_LastUsedEUTRANPLMNId(valueof(mcc_mnc)); + } +} + template BSSMAP_FIELD_CellIdentificationList ts_BSSMAP_CIL_noCell := { cIl_noCell := ''O } @@ -1164,7 +1451,7 @@ template BSSMAP_FIELD_CellIdentificationList tr_BSSMAP_CIL_LAC(template RecordOf } -private function f_enc_mcc_mnc(GsmMcc mcc, GsmMnc mnc) return OCT3 { +function f_enc_mcc_mnc(GsmMcc mcc, GsmMnc mnc) return OCT3 { if (lengthof(mnc) == 2) { return hex2oct(mcc[1] & mcc[0] & 'F'H & mcc[2] & mnc[1] & mnc[0]); } else { @@ -1172,12 +1459,29 @@ private function f_enc_mcc_mnc(GsmMcc mcc, GsmMnc mnc) return OCT3 { } } +function f_dec_mcc_mnc(in OCT3 mcc_mnc, out GsmMcc mcc, out GsmMnc mnc) { + var hexstring hs := oct2hex(mcc_mnc); + mcc := hs[1] & hs[0] & hs[3]; + mnc := hs[5] & hs[4]; + if (hs[2] == 'F'H) { + mnc := mnc & hs[2]; + } +} + template (value) BSSMAP_FIELD_CellIdentification_CGI ts_BSSMAP_CI_CGI(GsmMcc mcc, GsmMnc mnc, GsmLac lac, GsmCellId ci) := { mcc_mnc := f_enc_mcc_mnc(mcc, mnc), lac := int2oct(lac, 2), ci := int2oct(ci, 2) } +template (present) BSSMAP_FIELD_CellIdentification_CGI tr_BSSMAP_CI_CGI(template (present) OCT3 mcc_mnc, + template (present) GsmLac lac, + template (present) GsmCellId ci) := { + mcc_mnc := mcc_mnc, + lac := f_tr_LAC(lac), + ci := f_tr_CI(ci) +} + template (value) BSSMAP_FIELD_CellIdentification_LAC_CI ts_BSSMAP_CI_LAC_CI(GsmLac lac, GsmCellId ci) := { lac := int2oct(lac, 2), ci := int2oct(ci, 2) @@ -1301,21 +1605,25 @@ modifies ts_BSSAP_BSSMAP := { } } -template PDU_BSSAP tr_BSSMAP_CipherModeCmd(template OCT1 alg, template OCT8 key) +template PDU_BSSAP tr_BSSMAP_CipherModeCmd2(template BSSMAP_IE_EncryptionInformation encryptionInformation := *, + template BSSMAP_IE_KC128 kC128 := *) modifies tr_BSSAP_BSSMAP := { pdu := { bssmap := { cipherModeCommand := { messageType := '53'O, layer3HeaderInfo := *, - encryptionInformation := tr_BSSMAP_IE_EncrInfo(key, alg), + encryptionInformation := encryptionInformation, cipherResponseMode := *, - kC128 := * + kC128 := kC128 } } } } +template PDU_BSSAP tr_BSSMAP_CipherModeCmd(template OCT1 alg, template OCT8 key, template BSSMAP_IE_KC128 kC128 := omit) + := tr_BSSMAP_CipherModeCmd2(tr_BSSMAP_IE_EncrInfo(key, alg), kC128); + template PDU_BSSAP ts_BSSMAP_CipherModeCompl(OCT1 alg) modifies ts_BSSAP_BSSMAP := { pdu := { @@ -1411,6 +1719,13 @@ template BSSMAP_IE_ClassmarkInformationType2 ts_CM2_default := { } } + +template BSSMAP_IE_ClassmarkInformationType3 ts_CM3_default := { + elementIdentifier := '13'O, + lengthIndicator := 0, /* overwritten */ + classmark3ValuePart := '01'O /* A5/4 supported */ +} + template PDU_BSSAP ts_BSSMAP_ClassmarkUpd(template BSSMAP_IE_ClassmarkInformationType2 cm2 := ts_CM2_default, template BSSMAP_IE_ClassmarkInformationType3 cm3 := omit) modifies ts_BSSAP_BSSMAP := { @@ -1453,6 +1768,18 @@ modifies ts_BSSAP_BSSMAP := { } } +template PDU_BSSAP tr_BSSMAP_ClassmarkRequest +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + classmarkRequest := { + messageType := '58'O, + talkerPriority := * + } + } + } +} + /* return Layer3 octetstring inside BSSAP PDU */ function f_bssap_extract_l3(PDU_BSSAP bssap) return template octetstring { if (ischosen(bssap.pdu.bssmap)) { @@ -1658,27 +1985,33 @@ modifies tr_BSSAP_BSSMAP := { } } -template PDU_BSSAP ts_BSSMAP_CommonId(hexstring imsi_digits) +template PDU_BSSAP ts_BSSMAP_CommonId(hexstring imsi_digits, + template (omit) OCT3 last_eutran_plmn := omit) modifies ts_BSSAP_BSSMAP := { pdu := { bssmap := { commonID := { messageType := '2F'O, iMSI := ts_BSSMAP_Imsi(imsi_digits), - sNAAccessInformation := omit + sNAAccessInformation := omit, + selectedPLMNId := omit, + lastUsedEUTRANPLMNId := f_ts_BSSMAP_LastUsedEUTRANPLMNId(last_eutran_plmn) } } } } -template PDU_BSSAP tr_BSSMAP_CommonId(template hexstring imsi_digits) +template PDU_BSSAP tr_BSSMAP_CommonId(template hexstring imsi_digits, + template BSSAMAP_IE_LastUsedEUTRANPLMNId lastUsedEUTRANPLMNId := *) modifies tr_BSSAP_BSSMAP := { pdu := { bssmap := { commonID := { messageType := '2F'O, iMSI := tr_BSSMAP_Imsi(imsi_digits), - sNAAccessInformation := * + sNAAccessInformation := *, + selectedPLMNId := *, + lastUsedEUTRANPLMNId := lastUsedEUTRANPLMNId } } } @@ -1720,9 +2053,762 @@ template (value) BSSMAP_IE_LocationType ts_BSSMAP_IE_LocationType positioningMethod := omit } -template (value) PDU_BSSAP ts_BSSMAP_Perform_Location_Request(template (omit) BSSMAP_IE_IMSI imsi, - template (omit) BSSMAP_IE_CellIdentifier cellIdentifier := omit - ) +template (value) BSSMAP_IE_LCSClientType +ts_BSSMAP_IE_LCSClientType(template (value) BIT4 category := '0010'B, + template (value) BIT4 subtype := '0000'B) := { + elementIdentifier := '48'O, + lengthIndicator := 0, /* overwritten */ + subtype := subtype, + category := category +} + +template (value) BSSMAP_IE_LCSPriority +ts_BSSMAP_IE_LCSPriority(template (value) OCT1 priority := '00'O) := { + elementIdentifier := '43'O, + lengthIndicator := 0, /* overwritten */ + priority := priority +} + +template (value) BSSMAP_IE_LCSQOS +ts_BSSMAP_IE_LCSQOS(template (value) BIT1 vCI := '0'B, + template (value) BIT1 vEL := '0'B, + template (value) BIT1 hAI := '1'B, + template (value) BIT7 hAV := '0010010'B, + template (value) BIT1 vAI := '0'B, + template (value) BIT7 vAV := '0000000'B) := { + elementIdentifier := '3E'O, + lengthIndicator := 0, /* overwritten */ + vCI := vCI, /* Vertical Coordinate Indicator: VC requested ('1'B) or not ('0'B) */ + vEL := vEL, /* report velocity if available (1) or not(0) */ + spare_1_6 := '000000'B, + horizontalAccuracy := hAV, /* Accuracy Horizontal (HA) */ + hAI := hAI, /* Horizontal Accuracy Indicator HA is specified (1) or not (0) */ + verticalAccuracy := vAV, /* Accuracy Vertical (VA) */ + vAI := vAI, /* Vertical Accuracy Indicator VA is specified (1) or not (0) */ + spare_2_6 := '000000'B, + rTC := '00'B /* Response Time is not specified */ +} + + +/* 3.2.2.55 */ +template (value) BSSMAP_IE_GroupCallReference +ts_BSSMAP_IE_GroupCallRef(template (value) GroupCallRef group_call_ref) :={ + elementIdentifier := '37'O, + lengthIndicator := 0, // overwritten + descrGroupbroadcastCallRef := group_call_ref +} +template (present) BSSMAP_IE_GroupCallReference +tr_BSSMAP_IE_GroupCallRef(template (present) GroupCallRef group_call_ref) :={ + elementIdentifier := '37'O, + lengthIndicator := ?, + descrGroupbroadcastCallRef := group_call_ref +} + +/* 3.2.2.88 */ +template (value) BSSMAP_IE_VGCS_FeatureFlags +ts_BSSMAP_IE_VGCS_FeatureFlags(BIT1 tp_ind, BIT2 as_ind, BIT1 bss_res, BIT1 tcp) := { + elementIdentifier := '69'O, + lengthIndicator := 0, // overwritten + TP_Ind := tp_ind, + AS_Ind := as_ind, + BSS_Res := bss_res, + tCP := tcp, + spare := '000'B +}; +template (present) BSSMAP_IE_VGCS_FeatureFlags +tr_BSSMAP_IE_VGCS_FeatureFlags(BIT1 tp_ind, BIT2 as_ind, BIT1 bss_res, BIT1 tcp) := { + elementIdentifier := '69'O, + lengthIndicator := ?, + TP_Ind := tp_ind, + AS_Ind := as_ind, + BSS_Res := bss_res, + tCP := tcp, + spare := ? +}; + +/* 3.2.2.98 */ +template (value) BSSMAP_IE_ApplicationData +ts_BSSMAP_IE_ApplicationData(template (value) OCT9 adi) := { + elementIdentifier := '78'O, + lengthIndicator := 0, // overwritten + applicationDataInfo := adi +}; +template (present) BSSMAP_IE_ApplicationData +tr_BSSMAP_IE_ApplicationData(template (present) OCT9 adi) := { + elementIdentifier := '78'O, + lengthIndicator := ?, + applicationDataInfo := adi +}; + +/* 3.2.2.99 */ +template (value) BSSMAP_IE_DataIdentity +ts_BSSMAP_IE_DataIdentity(template (value) DataIdentity data_id) := { + elementIdentifier := '79'O, + lengthIndicator := 0, // overwritten + dataIdentityInfo := data_id +}; +template (present) BSSMAP_IE_DataIdentity +tr_BSSMAP_IE_DataIdentity(template (present) DataIdentity data_id) := { + elementIdentifier := '79'O, + lengthIndicator := ?, + dataIdentityInfo := data_id +}; + +/* 3.2.2.52 */ +template (value) BSSMAP_IE_AssignmentRequirement +ts_BSSMAP_IE_AssRequirement(template (value) OCT1 ass_rqm) := { + elementIdentifier := '33'O, + assignmentRequirement := ass_rqm +} +template (present) BSSMAP_IE_AssignmentRequirement +tr_BSSMAP_IE_AssRequirement(template (present) OCT1 ass_rqm) := { + elementIdentifier := '33'O, + assignmentRequirement := ass_rqm +} + +/* 3.2.2.89 */ +function ts_BSSMAP_IE_TalkerPriority(template (omit) BIT2 prio) +return template (omit) BSSMAP_IE_TalkerPriority { + if (istemplatekind(prio, "omit")) { + return omit; + } else { + var template (present) BSSMAP_IE_TalkerPriority tp := { + elementIdentifier := '6A'O, + priority := prio, + spare := '000000'B + }; + return tp; + } +} +function tr_BSSMAP_IE_TalkerPriority(template BIT2 prio) +return template BSSMAP_IE_TalkerPriority { + if (istemplatekind(prio, "omit")) { + return omit; + } else if (istemplatekind(prio, "*")) { + return *; + } else { + var template BSSMAP_IE_TalkerPriority tp := { + elementIdentifier := '6A'O, + priority := prio, + spare := ? + } + return tp; + } +} + +/* 3.2.2.90 */ +template (value) BSSMAP_IE_EmergencySetIndication +ts_BSSMAP_IE_EmergencySetIndication := { + elementIdentifier := '6B'O +} +template (present) BSSMAP_IE_EmergencySetIndication +tr_BSSMAP_IE_EmergencySetIndication := { + elementIdentifier := '6B'O +} + + + + +/* Section 3.2.1.50 */ +template (value) PDU_BSSAP +ts_BSSMAP_VGCS_VBS_Setup(template (value) GroupCallRef group_call_ref, + template (omit) BSSMAP_IE_VGCS_FeatureFlags feature_flags := omit) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + vGCS_VBSSetup := { + messageType := '04'O, + groupCallReference := ts_BSSMAP_IE_GroupCallRef(group_call_ref), + priority := omit, + vGCS_FeatureFlags := feature_flags + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_VGCS_VBS_Setup(template (present) GroupCallRef group_call_ref, + template BSSMAP_IE_VGCS_FeatureFlags feature_flags := *) +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + vGCS_VBSSetup := { + messageType := '04'O, + groupCallReference := tr_BSSMAP_IE_GroupCallRef(group_call_ref), + priority := *, + vGCS_FeatureFlags := feature_flags + } + } + } +} + +/* Section 3.2.1.51 */ +template (value) PDU_BSSAP +ts_BSSMAP_VGCS_VBS_SetupAck(template (omit) BSSMAP_IE_VGCS_FeatureFlags feature_flags := omit) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + vGCS_VBSSetupAck := { + messageType := '05'O, + vGCS_FeatureFlags := feature_flags + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_VGCS_VBS_SetupAck(template BSSMAP_IE_VGCS_FeatureFlags feature_flags := *) +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + vGCS_VBSSetupAck := { + messageType := '05'O, + vGCS_FeatureFlags := feature_flags + } + } + } +} + +/* Section 3.2.1.52 */ +template (value) PDU_BSSAP +ts_BSSMAP_VGCS_VBS_SetupRefuse(BssmapCause cause) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + vGCS_VBSSetupRefuse := { + messageType := '06'O, + cause := ts_BSSMAP_IE_Cause(cause) + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_VGCS_VBS_SetupRefuse(template (present) myBSSMAP_Cause cause := ?) +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + vGCS_VBSSetupRefuse := { + messageType := '06'O, + cause := tr_BSSMAP_IE_Cause(cause) + } + } + } +} + +/* Section 3.2.1.53 */ +template (value) PDU_BSSAP +ts_BSSMAP_VGCS_VBS_AssignmentReq(template (value) BSSMAP_IE_ChannelType ch_type, + template (value) OCT1 ass_requirement, + template (value) BSSMAP_IE_CellIdentifier cell_id, + template (value) GroupCallRef group_call_ref, + template (omit) BSSMAP_IE_CircuitIdentityCode cic := omit, + template (omit) BSSMAP_IE_AoIP_TransportLayerAddress aoip := omit, + template (omit) OCT4 call_id := omit, + template (omit) BSSMAP_IE_SpeechCodecList codecList := omit) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + vGCS_VBSAssignmentRequest := { + messageType := '07'O, /* overwritten */ + channelType := ch_type, + assignmentRequirement := ts_BSSMAP_IE_AssRequirement(ass_requirement), + cellIdentifier := cell_id, + groupCallReference := ts_BSSMAP_IE_GroupCallRef(group_call_ref), + priority := omit, + circuitIdentityCode := cic, + downLinkDTX_Flag := omit, + encryptionInformation := omit, + vSTK_RAND := omit, + vSTK := omit, + cellIdentifierListSegment := omit, + aoIPTransportLayer := aoip, + callIdentifier := ts_BSSMAP_IE_CallIdentifier(call_id), + codecList := codecList + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_VGCS_VBS_AssignmentReq(template (present) BSSMAP_IE_ChannelType ch_type, + template (present) OCT1 ass_requirement, + template (present) BSSMAP_IE_CellIdentifier cell_id, + template (present) GroupCallRef group_call_ref, + template BSSMAP_IE_CircuitIdentityCode cic := *, + template BSSMAP_IE_AoIP_TransportLayerAddress aoip := *, + template OCT4 call_id := *, + template BSSMAP_IE_SpeechCodecList codecList := *) +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + vGCS_VBSAssignmentRequest := { + messageType := '07'O, /* overwritten */ + channelType := ch_type, + assignmentRequirement := tr_BSSMAP_IE_AssRequirement(ass_requirement), + cellIdentifier := cell_id, + groupCallReference := tr_BSSMAP_IE_GroupCallRef(group_call_ref), + priority := omit, + circuitIdentityCode := cic, + downLinkDTX_Flag := omit, + encryptionInformation := omit, + vSTK_RAND := omit, + vSTK := omit, + cellIdentifierListSegment := omit, + aoIPTransportLayer := aoip, + callIdentifier := tr_BSSMAP_IE_CallIdentifier(call_id), + codecList := codecList + } + } + } +} + +/* Section 3.2.1.54 */ +template (value) PDU_BSSAP +ts_BSSMAP_VGCS_VBS_AssignmentRes(template (value) BSSMAP_IE_ChannelType ch_type, + template (value) BSSMAP_IE_CellIdentifier cell_id, + template (omit) BSSMAP_IE_ChosenChannel chosen_ch := omit, + template (omit) BSSMAP_IE_CircuitIdentityCode cic := omit, + template (omit) BSSMAP_IE_AoIP_TransportLayerAddress aoip := omit, + template (omit) BSSMAP_IE_SpeechCodec speech_codec := omit, + template (omit) OCT4 call_id := omit) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + vGCS_VBSAssignmentResult := { + messageType := '1C'O, /* overwritten */ + channelType := ch_type, + cellIdentifier := cell_id, + chosenChannel := chosen_ch, + circuitIdentityCode := cic, + circuitPool := omit, + aoIPTransportLayer := aoip, + speechCodec := speech_codec, + callIdentifier := ts_BSSMAP_IE_CallIdentifier(call_id) + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_VGCS_VBS_AssignmentRes(template (present) BSSMAP_IE_ChannelType ch_type, + template (present) BSSMAP_IE_CellIdentifier cell_id, + template BSSMAP_IE_ChosenChannel chosen_ch := *, + template BSSMAP_IE_CircuitIdentityCode cic := omit, + template BSSMAP_IE_AoIP_TransportLayerAddress aoip := *, + template BSSMAP_IE_SpeechCodec speech_codec := *, + template OCT4 call_id := *) +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + vGCS_VBSAssignmentResult := { + messageType := '1C'O, /* overwritten */ + channelType := ch_type, + cellIdentifier := cell_id, + chosenChannel := chosen_ch, + circuitIdentityCode := cic, + circuitPool := *, + aoIPTransportLayer := aoip, + speechCodec := speech_codec, + callIdentifier := tr_BSSMAP_IE_CallIdentifier(call_id) + } + } + } +} + +/* Section 3.2.1.55 */ +template (value) PDU_BSSAP +ts_BSSMAP_VGCS_VBS_AssignmentFail(BssmapCause cause) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + vGCS_VBSAssignmentFailure := { + messageType := '1D'O, /* overwritten */ + cause := ts_BSSMAP_IE_Cause(cause), + /* we only implement AoIP for now... */ + circuitPool := omit, + circuitPoolList := omit, + codecList := omit + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_VGCS_VBS_AssignmentFail(template (present) myBSSMAP_Cause cause := ?) +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + vGCS_VBSAssignmentFailure := { + messageType := '1D'O, /* overwritten */ + cause := tr_BSSMAP_IE_Cause(cause), + /* we only implement AoIP for now... */ + circuitPool := omit, + circuitPoolList := omit, + codecList := omit + } + } + } +} + +/* Section 3.2.1.56 */ +template (value) PDU_BSSAP +ts_BSSMAP_VGCS_VBS_QueuingInd +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + vGCS_VBSQueuingIndication := { + messageType := '1E'O + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_VGCS_VBS_QueuingInd +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + vGCS_VBSQueuingIndication := { + messageType := '1E'O + } + } + } +} + +/* Section 3.2.1.57 */ +template (value) PDU_BSSAP ts_BSSMAP_UplinkReq +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkRequest := { + messageType := '1F'O, + talkerPriority := omit, + cellIdentifier := omit, + layer3Information := omit, + mobileIdentity := omit + } + } + } +} +template (present) PDU_BSSAP tr_BSSMAP_UplinkReq +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkRequest := { + messageType := '1F'O, + talkerPriority := *, + cellIdentifier := *, + layer3Information := *, + mobileIdentity := * + } + } + } +} +template (value) PDU_BSSAP +ts_BSSMAP_UplinkReq_L3(template (value) BIT2 priority, + template (omit) BSSMAP_IE_CellIdentifier cell_id, + template (value) octetstring l3_info) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkRequest := { + messageType := '1F'O, + talkerPriority := ts_BSSMAP_IE_TalkerPriority(priority), + cellIdentifier := cell_id, + layer3Information := ts_BSSMAP_IE_L3Info(l3_info), + mobileIdentity := omit + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_UplinkReq_L3(template (present) BIT2 priority, + template BSSMAP_IE_CellIdentifier cell_id, + template (present) octetstring l3_info) +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkRequest := { + messageType := '1F'O, + talkerPriority := tr_BSSMAP_IE_TalkerPriority(priority), + cellIdentifier := cell_id, + layer3Information := tr_BSSMAP_IE_L3Info(l3_info), + mobileIdentity := omit + } + } + } +} +template (value) PDU_BSSAP +ts_BSSMAP_UplinkReq_MI(template (omit) BIT2 priority, + template (omit) BSSMAP_IE_CellIdentifier cell_id, + template (value) BSSMAP_IE_MobileIdentity mobile_id) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkRequest := { + messageType := '1F'O, + talkerPriority := ts_BSSMAP_IE_TalkerPriority(priority), + cellIdentifier := cell_id, + layer3Information := omit, + mobileIdentity := mobile_id + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_UplinkReq_MI(template BIT2 priority, + template (omit) BSSMAP_IE_CellIdentifier cell_id, + template (present) BSSMAP_IE_MobileIdentity mobile_id) +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkRequest := { + messageType := '1F'O, + talkerPriority := tr_BSSMAP_IE_TalkerPriority(priority), + cellIdentifier := cell_id, + layer3Information := omit, + mobileIdentity := mobile_id + } + } + } +} + +/* 3.2.1.58 */ +template (value) PDU_BSSAP +ts_BSSMAP_UplinkReqAck(template (omit) BIT2 priority, + template (omit) BSSMAP_IE_EmergencySetIndication ems := omit, + template (omit) BSSMAP_IE_TalkerIdentity talker_id := omit) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkRequestAck := { + messageType := '27'O, + talkerPriority := ts_BSSMAP_IE_TalkerPriority(priority), + emergencySetIndication := ems, + talkerIdentity := talker_id + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_UplinkReqAck(template BIT2 priority, + template BSSMAP_IE_EmergencySetIndication ems := *, + template BSSMAP_IE_TalkerIdentity talker_id := *) +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkRequestAck := { + messageType := '27'O, + talkerPriority := tr_BSSMAP_IE_TalkerPriority(priority), + emergencySetIndication := ems, + talkerIdentity := talker_id + } + } + } +} + +/* 3.2.1.59 */ +template (value) PDU_BSSAP +ts_BSSMAP_UplinkReqConf(template (value) BSSMAP_IE_CellIdentifier cell_id, + template (omit) BSSMAP_IE_TalkerIdentity talker_id := omit, + template (value) octetstring l3_info) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkRequestConfirmation := { + messageType := '49'O, + cellIdentifier := cell_id, + talkerIdentity := talker_id, + layer3Information := ts_BSSMAP_IE_L3Info(l3_info) + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_UplinkReqConf(template (present) BSSMAP_IE_CellIdentifier cell_id, + template BSSMAP_IE_TalkerIdentity talker_id := *, + template (present) octetstring l3_info) +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkRequestConfirmation := { + messageType := '49'O, + cellIdentifier := cell_id, + talkerIdentity := talker_id, + layer3Information := tr_BSSMAP_IE_L3Info(l3_info) + } + } + } +} + + +/* 3.2.1.60 */ +template (value) PDU_BSSAP +ts_BSSMAP_UplinkRelInd(BssmapCause cause, template (omit) BIT2 prio) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkReleaseIndication := { + messageType := '4A'O, + cause := ts_BSSMAP_IE_Cause(cause), + talkerPriority := ts_BSSMAP_IE_TalkerPriority(prio) + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_UplinkRelInd(template (present) myBSSMAP_Cause cause, template BIT2 prio) +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkReleaseIndication := { + messageType := '4A'O, + cause := tr_BSSMAP_IE_Cause(cause), + talkerPriority := tr_BSSMAP_IE_TalkerPriority(prio) + } + } + } +} + + +/* 3.2.1.61 */ +template (value) PDU_BSSAP +ts_BSSMAP_UplinkRejCmd(BssmapCause cause, + template (omit) BIT2 cur_talker_prio := omit, + template (omit) BIT2 rej_talker_prio := omit, + template (omit) BSSMAP_IE_TalkerIdentity talker_id := omit) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkRejectCommand := { + messageType := '4B'O, + cause := ts_BSSMAP_IE_Cause(cause), + currentTalkerPriority := ts_BSSMAP_IE_TalkerPriority(cur_talker_prio), + rejectedTalkerPriority := ts_BSSMAP_IE_TalkerPriority(rej_talker_prio), + talkerIdentity := talker_id + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_UplinkRejCmd(template (present) myBSSMAP_Cause cause, + template BIT2 cur_talker_prio := *, + template BIT2 rej_talker_prio := *, + template BSSMAP_IE_TalkerIdentity talker_id := *) +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkRejectCommand := { + messageType := '4B'O, + cause := tr_BSSMAP_IE_Cause(cause), + currentTalkerPriority := tr_BSSMAP_IE_TalkerPriority(cur_talker_prio), + rejectedTalkerPriority := tr_BSSMAP_IE_TalkerPriority(rej_talker_prio), + talkerIdentity := talker_id + } + } + } +} + + +/* 3.2.1.62 */ +template (value) PDU_BSSAP +ts_BSSMAP_UplinkRelCmd(BssmapCause cause) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkReleaseCommand := { + messageType := '4C'O, + cause := ts_BSSMAP_IE_Cause(cause) + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_UplinkRelCmd(template (present) myBSSMAP_Cause cause) +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkReleaseCommand := { + messageType := '4C'O, + cause := tr_BSSMAP_IE_Cause(cause) + } + } + } +} + + +/* 3.2.1.63 */ +template (value) PDU_BSSAP +ts_BSSMAP_UplinkSeizedCmd(BssmapCause cause, + template (omit) BIT2 talker_prio := omit, + template (omit) BSSMAP_IE_EmergencySetIndication emerg := omit, + template (omit) BSSMAP_IE_TalkerIdentity talker_id := omit) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkSeizedCommand := { + messageType := '4D'O, + cause := ts_BSSMAP_IE_Cause(cause), + talkerPriority := ts_BSSMAP_IE_TalkerPriority(talker_prio), + emergencySetIndication := emerg, + talkerIdentity := talker_id + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_UplinkSeizedCmd(template (present) myBSSMAP_Cause cause, + template BIT2 talker_prio := *, + template BSSMAP_IE_EmergencySetIndication emerg := *, + template BSSMAP_IE_TalkerIdentity talker_id := *) +modifies tr_BSSAP_BSSMAP := { + pdu := { + bssmap := { + uplinkSeizedCommand := { + messageType := '4D'O, + cause := tr_BSSMAP_IE_Cause(cause), + talkerPriority := tr_BSSMAP_IE_TalkerPriority(talker_prio), + emergencySetIndication := emerg, + talkerIdentity := talker_id + } + } + } +} + + + +/* Section 3.2.1.82 */ +template (value) PDU_BSSAP +ts_BSSMAP_NotificationData(template (value) OCT9 app_data, template (value) DataIdentity data_identity) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + notificationData := { + messageType := '62'O, + applicationData := ts_BSSMAP_IE_ApplicationData(app_data), + dataIdentity := ts_BSSMAP_IE_DataIdentity(data_identity), + mSISDN := omit + } + } + } +} +template (present) PDU_BSSAP +tr_BSSMAP_NotificationData(template (present) OCT9 app_data, template (present) DataIdentity data_identity) +modifies ts_BSSAP_BSSMAP := { + pdu := { + bssmap := { + notificationData := { + messageType := '62'O, + applicationData := tr_BSSMAP_IE_ApplicationData(app_data), + dataIdentity := tr_BSSMAP_IE_DataIdentity(data_identity), + mSISDN := ? + } + } + } +} + + + +template (value) PDU_BSSAP +ts_BSSMAP_Perform_Location_Request(template (omit) BSSMAP_IE_IMSI imsi, + template (omit) BSSMAP_IE_CellIdentifier cellIdentifier := omit, + template (omit) BSSMAP_IE_LCSClientType clientType := ts_BSSMAP_IE_LCSClientType, + template (omit) BSSMAP_IE_LCSPriority priority := ts_BSSMAP_IE_LCSPriority, + template (omit) BSSMAP_IE_LCSQOS qos := ts_BSSMAP_IE_LCSQOS) modifies ts_BSSAP_BSSMAP := { pdu := { bssmap := { @@ -1731,10 +2817,10 @@ modifies ts_BSSAP_BSSMAP := { locationType := ts_BSSMAP_IE_LocationType, cellIdentifier := cellIdentifier, classmarkInformationType3 := omit, - lCS_ClientType := omit, + lCS_ClientType := clientType, chosenChannel := omit, - lCS_Priority := omit, - lCS_QOS := omit, + lCS_Priority := priority, + lCS_QOS := qos, gPS_AssistanceData := omit, aPDU := omit, iMSI := imsi, |