aboutsummaryrefslogtreecommitdiffstats
path: root/library/BSSMAP_Templates.ttcn
diff options
context:
space:
mode:
Diffstat (limited to 'library/BSSMAP_Templates.ttcn')
-rw-r--r--library/BSSMAP_Templates.ttcn1158
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,