BSSMAP templates for LCS
Both BSSMAP-LE and BSSMAP use the LCS Cause IE with identical definition. In
order to not add further dependencies from BSSMAP_Templates.ttcn to
BSSAP_LE_Types.ttcn to BSSLAP_Types.ttcn, duplicate the LCS Cause enum.
Change-Id: Ifee698c128a5345f6bf0301ad4dac9e083285d56
diff --git a/library/BSSMAP_Templates.ttcn b/library/BSSMAP_Templates.ttcn
index 0ec5639..da822a9 100644
--- a/library/BSSMAP_Templates.ttcn
+++ b/library/BSSMAP_Templates.ttcn
@@ -103,6 +103,25 @@
GSM0808_CAUSE_DTM_HO_TIMER_EXPIRY ('1100010'B)
} with { variant "FIELDLENGTH(7)" };
+type enumerated BSSMAP_LcsCause {
+ BSSMAP_LCS_CAUSE_UNSPECIFIED ('00000000'B),
+ BSSMAP_LCS_CAUSE_SYSTEM_FAILURE ('00000001'B),
+ BSSMAP_LCS_CAUSE_PROTOCOL_ERROR ('00000010'B),
+ BSSMAP_LCS_CAUSE_DATA_MISSING_IN_REQ ('00000011'B),
+ BSSMAP_LCS_CAUSE_UNEXP_DATA_IN_REQ ('00000100'B),
+ BSSMAP_LCS_CAUSE_POS_METH_FAILURE ('00000101'B),
+ BSSMAP_LCS_CAUSE_TGT_MS_UNREACHABLE ('00000110'B),
+ BSSMAP_LCS_CAUSE_REQUEST_ABORTED ('00000111'B),
+ BSSMAP_LCS_CAUSE_FACILITY_NOTSUPP ('00001000'B),
+ BSSMAP_LCS_CAUSE_INTER_BSC_HO ('00001001'B),
+ BSSMAP_LCS_CAUSE_INTRA_BSC_HO ('00001010'B),
+ BSSMAP_LCS_CAUSE_CONGESTION ('00001011'B),
+ BSSMAP_LCS_CAUSE_INTER_NSE_CHG ('00001100'B),
+ BSSMAP_LCS_CAUSE_RA_UPDAT ('00001101'B),
+ BSSMAP_LCS_CAUSE_PTMSI_REALLOC ('00001110'B),
+ BSSMAP_LCS_CAUSE_GPRS_SUSPENSION ('00001111'B)
+} with { variant "FIELDLENGTH(8)" };
+
template PDU_BSSAP ts_BSSAP_BSSMAP := {
discriminator := '0'B,
spare := '0000000'B,
@@ -1693,6 +1712,92 @@
}
}
+template (value) BSSMAP_IE_LocationType ts_BSSMAP_IE_LocationType
+:= {
+ elementIdentifier := '44'O,
+ lengthIndicator := 1,
+ locationInformation := '00'O,
+ positioningMethod := omit
+}
+template (value) PDU_BSSAP ts_BSSMAP_Perform_Location_Request(template (omit) BSSMAP_IE_IMSI imsi,
+ template (omit) BSSMAP_IE_CellIdentifier cellIdentifier := omit
+ )
+modifies ts_BSSAP_BSSMAP := {
+ pdu := {
+ bssmap := {
+ performLocationRequest := {
+ messageType := '2B'O,
+ locationType := ts_BSSMAP_IE_LocationType,
+ cellIdentifier := cellIdentifier,
+ classmarkInformationType3 := omit,
+ lCS_ClientType := omit,
+ chosenChannel := omit,
+ lCS_Priority := omit,
+ lCS_QOS := omit,
+ gPS_AssistanceData := omit,
+ aPDU := omit,
+ iMSI := imsi,
+ iMEI := omit,
+ gANSS_LocationType := omit,
+ gANSS_AssistanceData := omit
+ }
+ }
+ }
+}
+
+template (present) BSSMAP_IE_LocationEstimate tr_BSSMAP_IE_LocationEstimate(template (present) octetstring geo_loc := ?)
+:= {
+ elementIdentifier := '45'O,
+ lengthIndicator := ?,
+ geographicLocation := geo_loc
+}
+
+function tr_BSSMAP_LcsCause(template (present) BSSMAP_LcsCause cause)
+return template (omit) BSSMAP_IE_LCSCause {
+ if (istemplatekind(cause, "omit")) {
+ return omit;
+ }
+ var template BSSMAP_IE_LCSCause ie := {
+ elementIdentifier := '47'O,
+ lengthIndicator := 1,
+ causeValue := int2bit(enum2int(valueof(cause)), 8),
+ diagnosticValue := omit
+ }
+ return ie;
+}
+
+template (present) PDU_BSSAP tr_BSSMAP_Perform_Location_Response(
+ template BSSMAP_IE_LocationEstimate locationEstimate := *,
+ template BSSMAP_IE_PositioningData positioningData := *,
+ template BSSMAP_IE_LCSCause lCS_Cause := *
+ )
+modifies tr_BSSAP_BSSMAP := {
+ pdu := {
+ bssmap := {
+ performLocationResponse := {
+ messageType := '2D'O,
+ locationEstimate := locationEstimate,
+ positioningData := positioningData,
+ decipheringKeys := *,
+ lCS_Cause := lCS_Cause,
+ velocityEstimate := *,
+ gANSS_PositioningData := *
+ }
+ }
+ }
+}
+
+template (present) PDU_BSSAP tr_BSSMAP_Perform_Location_Abort(template (present) BSSMAP_IE_LCSCause lCS_Cause := ?)
+modifies tr_BSSAP_BSSMAP := {
+ pdu := {
+ bssmap := {
+ performLocationAbort := {
+ messageType := '2E'O,
+ lCS_Cause := lCS_Cause
+ }
+ }
+ }
+}
} with { encode "RAW" };