<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19764">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">TTCN-3 definitions for BSSMAP-LE and BSSLAP protocols<br><br>Both are part of GSM LCS and are spoken between BSC and SMLC<br><br>Change-Id: If31830be2c8e1b624579f6663e74955763db9d0e<br>---<br>A library/BSSAP_LE_Types.ttcn<br>A library/BSSLAP_Types.ttcn<br>A library/BSSMAP_LE_Templates.ttcn<br>3 files changed, 1,558 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/64/19764/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/BSSAP_LE_Types.ttcn b/library/BSSAP_LE_Types.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..ae7385b</span><br><span>--- /dev/null</span><br><span>+++ b/library/BSSAP_LE_Types.ttcn</span><br><span>@@ -0,0 +1,594 @@</span><br><span style="color: hsl(120, 100%, 40%);">+module BSSAP_LE_Types {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* BSSAP_LE_Types, defining abstract TTCN-3 data types for the 3GPP BSSMAP-LE protocol.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * BSSMAP-LE is a 3GPP standard protocol used by SMLC and its peers in a GSM network.</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file covers 3GPP TS 49.031 version 15.0.0 Release 15</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2020 by Harald Welte <laforge@gnumonks.org></span><br><span style="color: hsl(120, 100%, 40%);">+ * All rights reserved.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Released under the terms of GNU General Public License, Version 2 or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * SPDX-License-Identifier: GPL-2.0-or-later</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from General_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Osmocom_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from BSSAP_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from BSSLAP_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from MobileL3_CommonIE_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* TS 49.031 Section 10.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSMAP_LE_MsgType {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_PERFORM_LOC_REQ ('00101011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_PERFORM_LOC_RESP ('00101101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_PERFORM_LOC_ABORT ('00101110'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_PERFORM_LOC_INFO ('00101111'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_ASSIST_INFO_REQ ('00100000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_ASSIST_INFO_RESP ('00100001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_CONN_ORIENTED_INFO ('00101010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_CONN_LESS_INFO ('00111010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_RESET ('00110000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_RESET_ACK ('00110001'B)</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* TS 49.031 Section 10.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSMAP_LE_IEI {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_LCS_QoS ('00111110'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_LCS_PRIORITY ('01000011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_LOCATION_TYPE ('01000100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_GANSS_LOCATION_TYPE ('10000010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_GEO_LOCATION ('01000101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_POSITIONING_DATA ('01000110'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_GANSS_POS_DATA ('10000011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_VELOCITY_DATA ('01010101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_LCS_CAUSE ('01000111'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_LCS_CLIENT_TYPE ('01001000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_APDU ('01001001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_NET_ELEM_ID ('01001010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_REQ_GPS_ASS_D ('01001011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_REQ_GANSS_ASS_D ('01000001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_DECIPH_KEYS ('01001100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_RET_ERR_REQ ('01001101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_RET_ERR_CAUSE ('01001110'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_SEGMENTATION ('01001111'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_CLASSMARK3_INFO ('00010011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_CAUSE ('00000100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_CELL_ID ('00000101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_CHOSEN_CHAN ('00100001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_IMSI ('00000000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_LCS_CAPABILITY ('01010000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_PKT_MEAS_REP ('01010001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_CELL_ID_LIST ('01010010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_IMEI ('10000000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_BSS_MLAT_CAP ('10000100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_CELL_INFO_LIST ('10000101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_BTS_RX_ACC_LVL ('10000110'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_MLAT_METHOD ('10000111'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_MLAT_TA ('10001000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_MS_SYNC_ACC ('10001001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_SHORT_ID_SET ('10001010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_RANDOM_ID_SET ('10001011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_SHORT_BSS_ID ('10001100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_RANDOM_ID ('10001101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_SHORT_ID ('10001110'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_COVERAGE_CLASS ('10001111'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI_MTA_ACC_SEC_RQD ('10010000'B)</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 9.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_PerfLocReq {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_MsgType msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_LocationType location_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_IE_CellIdentifier cell_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_IE_ClassmarkInformationType3 cm3 optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_LcsClientType lcs_client_type optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_IE_ChosenChannel chosen_channel optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_LcsPriority lcs_priority optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_LcsQoS lcs_qos optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_ReqGpsAssD req_gps_ass_d optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_APDU bsslap_apdu optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_LcsCapability lcs_capability optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_PacketMeasRep packet_meas_rep optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_CellIdList meas_cell_id_list optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_IMSI imsi optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_IMEI imei optional</span><br><span style="color: hsl(120, 100%, 40%);">+ // TODO: more optional IEs</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 9.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_PerfLocResp {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_MsgType msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_GeographicLoc geographic_loc optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_PositioningData pos_data optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_DecipheringKeys deciph_keys optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_LcsCause lcs_cause optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_VelocityData velocity_data optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_GanssPosData ganss_pos_data optional</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 9.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_PerfLocAbort {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_MsgType msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_LcsCause lcs_cause</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 9.8 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_ConnOrientedInfo {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_MsgType msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_APDU bsslap_apdu,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_Segmentation segmentation optional</span><br><span style="color: hsl(120, 100%, 40%);">+ // TODO: MLA related optional IEs</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 9.9 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_ConnLessInfo {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_MsgType msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_NetElementId source_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_NetElementId dest_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_APDU bsslap_apdu optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_Segmentation segmentation optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_RetErrReq ret_err_req optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_RetErrCause ret_err_cause optional</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 9.10 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_Reset {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_MsgType msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_IE_Cause cause</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 9.11 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_ResetAck {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_MsgType msg_type</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 9.12 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_PerformLocInfo {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_MsgType msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_IE_CellIdentifier cell_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IE_APDU bsslap_apdu optional</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type union BSSMAP_LE_PDU {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_PerfLocReq perf_loc_req,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_PerfLocResp perf_loc_resp,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_PerfLocAbort perf_loc_abort,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_ConnOrientedInfo co_info,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_ConnLessInfo cl_info,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_Reset reset,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_ResetAck reset_ack,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_PerformLocInfo perf_loc_info,</span><br><span style="color: hsl(120, 100%, 40%);">+ /* The following BSSMAP messages defined in 3GPP TS 48.008 are applicable to the Lb interface to</span><br><span style="color: hsl(120, 100%, 40%);">+ * support signaling to a Type A LMU using an SDCCH */</span><br><span style="color: hsl(120, 100%, 40%);">+ PDU_BSSMAP_CipherModeCommand cipherModeCommand,</span><br><span style="color: hsl(120, 100%, 40%);">+ PDU_BSSMAP_CipherModeComplete cipherModeComplete,</span><br><span style="color: hsl(120, 100%, 40%);">+ PDU_BSSMAP_CipherModeReject cipherModeReject,</span><br><span style="color: hsl(120, 100%, 40%);">+ PDU_BSSMAP_ClassmarkUpdate classmarkUpdate,</span><br><span style="color: hsl(120, 100%, 40%);">+ PDU_BSSMAP_ClearCommand clearCommand,</span><br><span style="color: hsl(120, 100%, 40%);">+ PDU_BSSMAP_ClearComplete clearComplete,</span><br><span style="color: hsl(120, 100%, 40%);">+ PDU_BSSMAP_ClearRequest clearRequest,</span><br><span style="color: hsl(120, 100%, 40%);">+ PDU_BSSMAP_CompleteLayer3Information completeLayer3Information,</span><br><span style="color: hsl(120, 100%, 40%);">+ PDU_BSSMAP_Confusion confusion,</span><br><span style="color: hsl(120, 100%, 40%);">+ PDU_BSSMAP_HandoverRequired handoverRequired,</span><br><span style="color: hsl(120, 100%, 40%);">+ PDU_BSSMAP_HandoverRequiredReject handoverRequiredReject,</span><br><span style="color: hsl(120, 100%, 40%);">+ PDU_BSSMAP_HandoverPerformed handoverPerformed,</span><br><span style="color: hsl(120, 100%, 40%);">+ PDU_BSSMAP_Paging paging</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "TAG(</span><br><span style="color: hsl(120, 100%, 40%);">+ perf_loc_req, msg_type = BSSMAP_LE_PERFORM_LOC_REQ;</span><br><span style="color: hsl(120, 100%, 40%);">+ perf_loc_resp, msg_type = BSSMAP_LE_PERFORM_LOC_RESP;</span><br><span style="color: hsl(120, 100%, 40%);">+ perf_loc_abort, msg_type = BSSMAP_LE_PERFORM_LOC_ABORT;</span><br><span style="color: hsl(120, 100%, 40%);">+ co_info, msg_type = BSSMAP_LE_CONN_ORIENTED_INFO;</span><br><span style="color: hsl(120, 100%, 40%);">+ cl_info, msg_type = BSSMAP_LE_CONN_LESS_INFO;</span><br><span style="color: hsl(120, 100%, 40%);">+ reset, msg_type = BSSMAP_LE_RESET;</span><br><span style="color: hsl(120, 100%, 40%);">+ reset_ack, msg_type = BSSMAP_LE_RESET_ACK;</span><br><span style="color: hsl(120, 100%, 40%);">+ perf_loc_info, msg_type = BSSMAP_LE_PERFORM_LOC_INFO;</span><br><span style="color: hsl(120, 100%, 40%);">+ )"</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.3 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_APDU {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 spare,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_ProtocolId protocol_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring data</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_APDU)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(spare,protocol_id,data)"</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSMAP_LE_ProtocolId {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_PROT_RESERVED ('0000000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_PROT_BSSLAP ('0000001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_PROT_LLP ('0000010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_PROT_SMLCPP ('0000011'B)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDLENGTH(7)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.8 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_DecipheringKeys {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT7 spare,</span><br><span style="color: hsl(120, 100%, 40%);">+ boolean ciph_key_flag,</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT7 cur_deciph_key,</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT7 next_deciph_key</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_DECIPH_KEYS)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(spare,ciph_key_flag,cur_deciph_key,next_deciph_key)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.9 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_GeographicLoc {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring location</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_GEO_LOCATION)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(location)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.10 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_ReqGpsAssD {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT16 flags,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring sat_data</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_REQ_GPS_ASS_D)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(flags,sat_data)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.11 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_IMSI {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ MobileIdentityV imsi</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_IMSI)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(imsi)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.13 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_LcsCause {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LcsCause cause,</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT1 diag_val optional</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_IMSI)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(cause,diag_val)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSMAP_LE_LcsCause {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_UNSPEIFIED ('00000000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_SYSTEM_FAILURE ('00000001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_PROTOCOL_ERROR ('00000010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_DATA_MISSING_IN_REQ ('00000011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_UNEXP_DATA_IN_REQ ('00000100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_POS_METH_FAILURE ('00000101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_TGT_MS_UNREACHABLE ('00000110'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_REQUEST_ABORTED ('00000111'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_FACILITY_NOTSUPP ('00001000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_INTER_BSC_HO ('00001001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_INTRA_BSC_HO ('00001010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_CONGESTION ('00001011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_INTER_NSE_CHG ('00001100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_RA_UPDAT ('00001101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_PTMSI_REALLOC ('00001110'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CAUSE_GPRS_SUSPENSION ('00001111'B)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDLENGTH(8)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.14 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_LcsClientType {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_ClientType cltype</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_CAUSE)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(cltype)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSMAP_LE_ClientType {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CTYPE_VALUE_ADDED_UNSPECIFIED ('00000000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CTYPE_PLMN_OPER_UNSPECIFIED ('00100000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CTYPE_PLMN_OPER_BCAST_SERVICE ('00100001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CTYPE_PLMN_OPER_OAM ('00100010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CTYPE_PLMN_OPER_ANON_STATS ('00100011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CTYPE_PLMN_OPER_TGT_MS_SVC ('00100100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CTYPE_EMERG_SVC_UNSPECIFIED ('00110000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LCS_CTYPE_LI_UNSPECIFIED ('01000000'B)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDLENGTH(8)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.15 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_LcsPriority {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT1 priority</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_LCS_PRIORITY)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(priority)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.16 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_LcsQoS {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT6 spare,</span><br><span style="color: hsl(120, 100%, 40%);">+ boolean vel,</span><br><span style="color: hsl(120, 100%, 40%);">+ boolean vert,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ boolean ha,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint7_t horiz_acc,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ boolean va,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint7_t vert_acc,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT2 rt,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT6 spare2</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_LCS_QoS)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(spare,vel,vert,ha,horiz_acc,va,vert_acc,rt,spare2)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.18 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_LocationType {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LocInfo loc_info,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_PosMethod pos_method optional</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_LOCATION_TYPE)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(loc_info,pos_method)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (pos_method) "PRESENCE(loc_info = BSSMAP_LE_LOC_INFO_ASS_INFO_FOR_TGT_MS,</span><br><span style="color: hsl(120, 100%, 40%);">+ loc_info = BSSMAP_LE_LOC_INFO_DECIPH_KEYS_FOR_BCAST)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSMAP_LE_LocInfo {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LOC_INFO_CURRENT_GEOGRAPHIC_LOC ('00000000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LOC_INFO_ASS_INFO_FOR_TGT_MS ('00000001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_LOC_INFO_DECIPH_KEYS_FOR_BCAST ('00000010'B)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDLENGTH(8)" };</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSMAP_LE_PosMethod {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_POS_METHOD_RESERVED ('00000000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_POS_MOBILE_ASSISTED_EOTD ('00000001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_POS_MOBILE_BASED_EOTD ('00000010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_POS_ASSISTED_GPS ('00000011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_POS_ASSISTED_GANSS ('00000100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_POS_ASSISTED_GPS_AND_GANSS ('00000101'B)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDLENGTH(8)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.19 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_NetElementId {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT4 spare,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IdDiscr id_discr,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IdU u</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_NET_ELEM_ID)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(spare,id_discr,u)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (u) "CROSSTAG(</span><br><span style="color: hsl(120, 100%, 40%);">+ cgi, id_discr = BSSMAP_LE_ID_DISC_CGI;</span><br><span style="color: hsl(120, 100%, 40%);">+ lac_ci, id_discr = BSSMAP_LE_ID_DISC_LAC_CI;</span><br><span style="color: hsl(120, 100%, 40%);">+ lai, id_discr = BSSMAP_LE_ID_DISC_LAI;</span><br><span style="color: hsl(120, 100%, 40%);">+ lac, id_discr = BSSMAP_LE_ID_DISC_LAC;</span><br><span style="color: hsl(120, 100%, 40%);">+ lmu, id_discr = BSSMAP_LE_ID_LMU;</span><br><span style="color: hsl(120, 100%, 40%);">+ )"</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSMAP_LE_IdDiscr {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_ID_DISC_CGI ('0000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_ID_DISC_LAC_CI ('0001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_ID_DISC_LAI ('0100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_ID_DISC_LAC ('0101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_ID_LMU ('0110'B)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDLENGTH(4)" };</span><br><span style="color: hsl(120, 100%, 40%);">+type union BSSMAP_LE_IdU {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_Id_CGI cgi,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_Id_LAC_CI lac_ci,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_Id_LAI lai,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t lac,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring lmu</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_Id_CGI {</span><br><span style="color: hsl(120, 100%, 40%);">+ HEX6n mcc_mnc,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t lac,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t ci</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_Id_LAC_CI {</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t lac,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t ci</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_Id_LAI {</span><br><span style="color: hsl(120, 100%, 40%);">+ HEX6n mcc_mnc,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t lac</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.20 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_PositioningData {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT4 spare,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint4_t discr,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_PosMethList pos_meth</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_POSITIONING_DATA)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(spare,discr,pos_meth)"</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+type record of BSSMAP_LE_PosMethodN BSSMAP_LE_PosMethList;</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_PosMethodN {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_Method method,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_Usage usage</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSMAP_LE_Method {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_METHOD_TA ('00000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_METHOD_RESERVED0 ('00001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_METHOD_RESERVED1 ('00010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_METHOD_MOBILE_ASS_EOTD ('00011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_METHOD_MOBILE_BASED_EOTD ('00100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_METHOD_MOBILE_ASS_GPS ('00101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_METHOD_MOBILE_BASED_GPS ('00110'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_METHOD_CONVENTIONAL_GPS ('00111'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_METHOD_UTDOA ('01000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_METHOD_CELL_ID ('01100'B)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDLENGTH(5)" };</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSMAP_LE_Usage {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_USAGE_ATTEMPTED_UNSUCC ('000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_USAGE_ATTEMPTED_SUCC_NOT_USED ('001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_USAGE_ATTEMPTED_SUCC_USED_VRFY_NOT_GEN ('010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_USAGE_ATTEMPTED_SUCC_USED_GEN ('011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_USAGE_ATTEMPTED_SUCC_USAGE_UNDETERMINED ('100'B)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDLENGTH(3)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.21 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_RetErrReq {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT1 ret_err_type</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_RET_ERR_REQ)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(ret_err_type)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.22 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_RetErrCause {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_RetErrCause cause</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_RET_ERR_REQ)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(cause)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSMAP_LE_RetErrCause {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_RE_CAUSE_UNSPECIFIED ('00000000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_RE_CAUSE_SYSTEM_FAILURE ('00000001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_RE_CAUSE_PROTOCOL_ERROR ('00000010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_RE_CAUSE_DEST_UNKNOWN ('00000011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_RE_CAUSE_DEST_UNREACHABLE ('00000100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_RE_CAUSE_CONGESTION ('00000101'B)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDLENGTH(8)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.24 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_Segmentation {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT3 spare,</span><br><span style="color: hsl(120, 100%, 40%);">+ boolean s_non_final,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint4_t seg_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT2 msg_id optional</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_SEGMENTATION)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(spare,s_non_final,seg_nr,msg_id)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.26 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_LcsCapability {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring lcs_cap</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_LCS_CAPABILITY)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(lcs_cap)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_PacketMeasRep {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring pkt_meas_rep</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_PKT_MEAS_REP)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(pkt_meas_rep)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_CellIdList {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CellIdList cell_id_list</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_CELL_ID_LIST)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(cell_id_list)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.29 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_IMEI {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ MobileIdentityV imei</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_IMEI)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(imei)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.30 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_VelocityData {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring data</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_VELOCITY_DATA)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(data)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 10.32 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_IE_GanssPosData {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_GanssList list</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSMAP_LE_IEI_VELOCITY_DATA)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(list)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+type record of BSSMAP_LE_Ganss BSSMAP_LE_GanssList;</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_LE_Ganss {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_GanssMethod method,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_GanssId id,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_Usage usage</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSMAP_LE_GanssMethod {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_GANSS_METH_MS_BASED ('00'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_GANSS_METH_MS_ASSISTED ('01'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_GANSS_METH_MS_CONVENTIONAL ('10'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_GANSS_METH_MS_RESERVED ('11'B)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDLENGTH(2)" };</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSMAP_LE_GanssId {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_GANSS_ID_GALILEO ('000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_GANSS_ID_SBAS ('001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_GANSS_ID_MODERNIZED_GPS ('010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_GANSS_ID_QZSS ('011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_GANSS_ID_GLONASS ('100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_GANSS_ID_BDS ('101'B)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDLENGTH(3)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* FIXME: Further IEs */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type union BSSMAPLEorDTAP {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_PDU bssmap,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring dtap</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type record PDU_BSSAP_LE {</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 discriminator, // 0 = BSSMAP-LE; 1 = DTAP-LE</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT7 spare, // always '0000000'B</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT1 dlci optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ LIN1 lengthIndicator,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAPLEorDTAP pdu</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (lengthIndicator) "LENGTHTO(pdu)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (pdu) "CROSSTAG(bssmap, discriminator='0'B;</span><br><span style="color: hsl(120, 100%, 40%);">+ dtap, discriminator='1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (dlci) "PRESENCE(discriminator='1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+external function enc_PDU_BSSAP_LE(in PDU_BSSAP_LE pdu) return octetstring</span><br><span style="color: hsl(120, 100%, 40%);">+with { extension "prototype(convert) encode(RAW)" }</span><br><span style="color: hsl(120, 100%, 40%);">+external function dec_PDU_BSSAP_LE(in octetstring stream) return PDU_BSSAP_LE</span><br><span style="color: hsl(120, 100%, 40%);">+with { extension "prototype(convert) decode(RAW)" }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+} with { encode "RAW" ; variant "FIELDORDER(msb)" }</span><br><span>diff --git a/library/BSSLAP_Types.ttcn b/library/BSSLAP_Types.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..90c3953</span><br><span>--- /dev/null</span><br><span>+++ b/library/BSSLAP_Types.ttcn</span><br><span>@@ -0,0 +1,530 @@</span><br><span style="color: hsl(120, 100%, 40%);">+module BSSLAP_Types {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* BSSLAP_Types, defining abstract TTCN-3 data types for the 3GPP BSSLAP protocol.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * BSSLAP is a 3GPP standard protocol used between BSC and SMLC in a GSM network.</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file covers 3GPP TS 48.071 version 15.0.0 Release 15</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2020 by Harald Welte <laforge@gnumonks.org></span><br><span style="color: hsl(120, 100%, 40%);">+ * All rights reserved.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Released under the terms of GNU General Public License, Version 2 or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * SPDX-License-Identifier: GPL-2.0-or-later</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from General_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Osmocom_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* 3GPP TS 48.071 Table 5.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSLAP_IEI {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_TA ('00000001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_CELL_ID ('00001001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_CHAN_DESC ('00010000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_MEAS_REP ('00010100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_CAUSE ('00011000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_RRLP_FLAG ('00011001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_RRLP ('00011011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_CELL_ID_LIST ('00011100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_ENH_MEAS_REP ('00011101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_LAC ('00011110'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_FREQ_LIST ('00100001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_MS_POWER ('00100010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_DELTA_TIMER ('00100011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_SERVING_CELL_ID ('00100100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_ENCR_KEY ('00100101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_CIPH_MODE_SET ('00100110'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_CHAN_MODE ('00100111'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_MR_CONFIG ('00101000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_POLLING_REPETITION ('00101001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_PACKET_CHAN_DESC ('00101010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_TLLI ('00101011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_TFI ('00101100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_TBF_START_TIME ('00101101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_PWRUP_START_TIME ('00101110'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_LONG_ENCR_KEY ('00101111'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI_CONCUR_POS_PROC_F ('00110000'B)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDLENGTH(8)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* 3GPP TS 48.071 Section 5.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSLAP_MsgType {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MSGT_TA_REQUEST ('00000001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MSGT_TA_RESPONSE ('00000010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MSGT_REJECT ('00001010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MSGT_RESET ('00001011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MSGT_ABORT ('00001100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MSGT_TA_LAYER3 ('00001101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MSGT_MS_POS_CMD ('00001111'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MSGT_MS_POS_RESP ('00010000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MSGT_UTDOA_REQ ('00010001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MSGT_UTDOA_RESP ('00010010'B)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDLENGTH(8)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 4.2.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_TaRequest {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MsgType msg_type</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 4.2.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_TaResponse {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MsgType msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_CellId serving_cell_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_TimingAdvance timing_advance,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_MeasRep meas_rep optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_EnhMeasRep enh_meas_rep optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_CellIdList meas_cell_id_list optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_ConcurMethodF concur_meth_flag optional</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 4.2.5 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_Reject {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MsgType msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_Cause cause</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 4.2.6 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_Reset {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MsgType msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_CellId cell_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_TimingAdvance timing_advance,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_ChanDesc chan_desc,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_Cause cause,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_MeasRep meas_rep optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_EnhMeasRep enh_meas_rep optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_CellIdList meas_cell_id_list optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_LAC lac optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_FreqList freq_list optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_ChanMode chan_mode optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_MultiRateConfig mr_config optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_PacketChanDesc pkt_chan_desc optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_TLLI tlli optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_TFI tfi optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_StartingTime tbf_start_time optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_EncryptionKey encr_key optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_CiphModeSet ciph_mode_set optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_LongEncryptionKey long_encr_key optional</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 4.2.7 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_Abort {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MsgType msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_Cause cause</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 4.2.8 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_TA_Layer3 {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MsgType msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_TimingAdvance timing_advance,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_MeasRep meas_rep optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_EnhMeasRep enh_meas_rep optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_CellIdList meas_cell_id_list optional</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 4.2.9 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_MS_PosCmd {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MsgType msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_RrlpFlag flag,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_Rrlp rrlp_info</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 4.2.10 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_MS_PosResp {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MsgType msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_RrlpFlag flag,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_Rrlp rrlp_info,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_TimingAdvance timing_advance optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_MeasRep meas_rep optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_EnhMeasRep enh_meas_rep optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_CellIdList meas_cell_id_list optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_ConcurMethodF concur_meth_flag optional</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 4.2.11 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_UTDOA_Req {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MsgType msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_DeltaTimer delta_timer optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IE_PollingRep polling_repetition optional</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type union BSSLAP_PDU {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_TaRequest ta_req,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_TaResponse ta_resp,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_Reject reject,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_Reset reset,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_Abort abort,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_TA_Layer3 ta_layer3,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MS_PosCmd ms_pos_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_MS_PosResp ms_pos_resp,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_UTDOA_Req utdoa_req</span><br><span style="color: hsl(120, 100%, 40%);">+ // TODO: U-TDOA Resp</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "TAG(</span><br><span style="color: hsl(120, 100%, 40%);">+ ta_req, msg_type = BSSLAP_MSGT_TA_REQUEST;</span><br><span style="color: hsl(120, 100%, 40%);">+ ta_resp, msg_type = BSSLAP_MSGT_TA_RESPONSE;</span><br><span style="color: hsl(120, 100%, 40%);">+ reject, msg_type = BSSLAP_MSGT_REJECT;</span><br><span style="color: hsl(120, 100%, 40%);">+ reset, msg_type = BSSLAP_MSGT_RESET;</span><br><span style="color: hsl(120, 100%, 40%);">+ abort, msg_type = BSSLAP_MSGT_ABORT;</span><br><span style="color: hsl(120, 100%, 40%);">+ ta_layer3, msg_type = BSSLAP_MSGT_TA_LAYER3;</span><br><span style="color: hsl(120, 100%, 40%);">+ ms_pos_cmd, msg_type = BSSLAP_MSGT_MS_POS_CMD;</span><br><span style="color: hsl(120, 100%, 40%);">+ ms_pos_resp, msg_type = BSSLAP_MSGT_MS_POS_RESP;</span><br><span style="color: hsl(120, 100%, 40%);">+ utdoa_req, msg_type = BSSLAP_MSGT_UTDOA_REQ;</span><br><span style="color: hsl(120, 100%, 40%);">+ )"</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_TimingAdvance {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t ta</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_TA)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_CellId {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t cell_id</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_CELL_ID)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.8 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_ChanDesc {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT3 chan_desc</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_CHAN_DESC)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.12 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_MeasRep {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring meas_rep</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSLAP_IEI_MEAS_REP)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(meas_rep)"</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.14 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_Cause {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_Cause cause</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_CAUSE)" };</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSLAP_Cause {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CAUSE_CONGESTION ('00000000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CAUSE_CHAN_MODE_NOT_SUPP ('00000001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CAUSE_POS_PROC_NOT_SUPP ('00000010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CAUSE_OTHER_RADIO_EVT_FAIL ('00000011'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CAUSE_INTRA_BSS_HO ('00000100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CAUSE_SUPERV_TIMER_EXPIRED ('00000101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CAUSE_INTER_BSS_HO ('00000110'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CAUSE_LOSS_SIG_CONN_MS ('00000111'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CAUSE_INCORR_SERV_CELL_ID ('00001000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CAUSE_BSSAP_LE_SEGMENT_ERR ('00001001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CAUSE_CONCUR_POS_PROC_NOT_EN ('00001010'B)</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.15 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_RrlpFlag {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT7 spare,</span><br><span style="color: hsl(120, 100%, 40%);">+ boolean not_a_pos_cmd</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_RRLP_FLAG)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.16 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_Rrlp {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring rrlp_apdu</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSLAP_IEI_RRLP)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(rrlp_apdu)"</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.17 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_CellIdList {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CellIdList cell_id_list</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSLAP_IEI_CELL_ID_LIST)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(cell_id_list)"</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+type record of BSSLAP_CellIdListEnt BSSLAP_CellIdList;</span><br><span style="color: hsl(120, 100%, 40%);">+type union BSSLAP_CellIdListEnt {</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT4 spare,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CellIdDiscr discr,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CellIdListEntU u</span><br><span style="color: hsl(120, 100%, 40%);">+}// with {</span><br><span style="color: hsl(120, 100%, 40%);">+//};</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSLAP_CellIdDiscr {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CIDL_DISC_CGI ('0000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CIDL_DISC_LAC_CI ('0001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CIDL_DISC_3G_1 ('0010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CIDL_DISC_3G_2 ('0011'B)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDLENGTH(4)" };</span><br><span style="color: hsl(120, 100%, 40%);">+type union BSSLAP_CellIdListEntU {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CellIdListEntCGI cgi,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CellIdListEntLACCI lac_ci,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CellIdListEnt3G1 umts_cont1,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_CellIdListEnt3G2 umts_cont2</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_CellIdListEntCGI {</span><br><span style="color: hsl(120, 100%, 40%);">+ HEX6n mcc_mnc,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t lac,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t ci</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_CellIdListEntLACCI {</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t lac,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t ci</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_CellIdListEnt3G1 {</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT9 cont</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_CellIdListEnt3G2 {</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT6 cont</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.18 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_EnhMeasRep {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring meas_rep</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSLAP_IEI_ENH_MEAS_REP)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(meas_rep)"</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.19 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_LAC {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t lac</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_LAC)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.20 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_FreqList {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring freq_list</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSLAP_IEI_FREQ_LIST)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(freq_list)"</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.21 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_MsPower {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t ms_pwr</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_MS_POWER)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.22 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_DeltaTimer {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t timer_val</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_MS_POWER)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.23 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_ServingCellId {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring val // FIXME: like TS 08.08</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSLAP_IEI_SERVING_CELL_ID)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(val)"</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.24 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_EncryptionKey {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT8 kc</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_ENCR_KEY)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.25 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_CiphModeSet {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 spare,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT3 iei2,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT3 algo_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ boolean sc</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_CIPH_MODE_SET)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.26 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_ChanMode {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT1 mode</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_CHAN_MODE)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.27 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_MultiRateConfig {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+ /* TODO: Unify with TS 48.018 */</span><br><span style="color: hsl(120, 100%, 40%);">+ uint3_t mr_speech_ver,</span><br><span style="color: hsl(120, 100%, 40%);">+ boolean nscb,</span><br><span style="color: hsl(120, 100%, 40%);">+ boolean icmi,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 spare,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint2_t start_mode,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring parameters</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE(iei = BSSLAP_IEI_MR_CONFIG)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (len) "LENGTHTO(mr_speech_ver,nscb,icmi,spare,start_mode,parameters)"</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.28 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_PollingRep {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT2 spare,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint6_t num_rep</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_MR_CONFIG)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.29 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_PacketChanDesc {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT4 chan_desc</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_PACKET_CHAN_DESC)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.30 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_TLLI {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT4 tlli</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_TLLI)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.31 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_TFI {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT3 spare,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint5_t tfi</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_TFI)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.32 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_StartingTime {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint5_t t1_p,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint6_t t3,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint6_t t2</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_TBF_START_TIME)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.33 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_LongEncryptionKey {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT16 kc</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_LONG_ENCR_KEY)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 5.34 */</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSLAP_IE_ConcurMethodF {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_IEI iei,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_ConcurMethodF flag</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "PRESENCE(iei = BSSLAP_IEI_CONCUR_POS_PROC_F)" };</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated BSSLAP_ConcurMethodF {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_SECOND_CONCUR_ALLOWED ('00000000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSLAP_SECOND_CONCUR_DISALLOWED ('11111111'B)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDLENGTH(8)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+external function enc_BSSLAP_PDU(in BSSLAP_PDU msg) return octetstring</span><br><span style="color: hsl(120, 100%, 40%);">+ with { extension "prototype(convert) encode(RAW)" };</span><br><span style="color: hsl(120, 100%, 40%);">+external function dec_BSSLAP_PDU(in octetstring stream) return BSSLAP_PDU</span><br><span style="color: hsl(120, 100%, 40%);">+ with { extension "prototype(convert) decode(RAW)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) BSSLAP_PDU ts_BSSLAP_TA_Req := {</span><br><span style="color: hsl(120, 100%, 40%);">+ ta_req := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSLAP_MSGT_TA_REQUEST</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) BSSLAP_PDU tr_BSSLAP_TA_Req := {</span><br><span style="color: hsl(120, 100%, 40%);">+ ta_req := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSLAP_MSGT_TA_REQUEST</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) BSSLAP_PDU</span><br><span style="color: hsl(120, 100%, 40%);">+ts_BSSLAP_TA_Resp(uint16_t cell_id, uint8_t ta) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ ta_resp := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSLAP_MSGT_TA_RESPONSE,</span><br><span style="color: hsl(120, 100%, 40%);">+ serving_cell_id := ts_BSSLAP_IE_CellId(cell_id),</span><br><span style="color: hsl(120, 100%, 40%);">+ timing_advance := ts_BSSLAP_IE_TA(ta),</span><br><span style="color: hsl(120, 100%, 40%);">+ meas_rep := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ enh_meas_rep := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ meas_cell_id_list := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ concur_meth_flag := omit</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) BSSLAP_PDU</span><br><span style="color: hsl(120, 100%, 40%);">+tr_BSSLAP_TA_Resp(template (present) uint16_t cell_id, template (present) uint8_t ta) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ ta_resp := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSLAP_MSGT_TA_RESPONSE,</span><br><span style="color: hsl(120, 100%, 40%);">+ serving_cell_id := tr_BSSLAP_IE_CellId(cell_id),</span><br><span style="color: hsl(120, 100%, 40%);">+ timing_advance := tr_BSSLAP_IE_TA(ta),</span><br><span style="color: hsl(120, 100%, 40%);">+ meas_rep := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ enh_meas_rep := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ meas_cell_id_list := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ concur_meth_flag := *</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) BSSLAP_PDU</span><br><span style="color: hsl(120, 100%, 40%);">+ts_BSSLAP_Reject(BSSLAP_Cause cause) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ reject := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSLAP_MSGT_REJECT,</span><br><span style="color: hsl(120, 100%, 40%);">+ cause := ts_BSSLAP_IE_Cause(cause)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) BSSLAP_PDU</span><br><span style="color: hsl(120, 100%, 40%);">+tr_BSSLAP_Reject(template (present) BSSLAP_Cause cause) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ reject := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSLAP_MSGT_REJECT,</span><br><span style="color: hsl(120, 100%, 40%);">+ cause := tr_BSSLAP_IE_Cause(cause)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) BSSLAP_PDU</span><br><span style="color: hsl(120, 100%, 40%);">+ts_BSSLAP_Abort(BSSLAP_Cause cause) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ abort := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSLAP_MSGT_ABORT,</span><br><span style="color: hsl(120, 100%, 40%);">+ cause := ts_BSSLAP_IE_Cause(cause)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) BSSLAP_PDU</span><br><span style="color: hsl(120, 100%, 40%);">+tr_BSSLAP_Abort(template (present) BSSLAP_Cause cause) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ abort := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSLAP_MSGT_ABORT,</span><br><span style="color: hsl(120, 100%, 40%);">+ cause := tr_BSSLAP_IE_Cause(cause)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) BSSLAP_IE_TimingAdvance ts_BSSLAP_IE_TA(uint8_t ta) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSLAP_IEI_TA,</span><br><span style="color: hsl(120, 100%, 40%);">+ ta := ta</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) BSSLAP_IE_TimingAdvance tr_BSSLAP_IE_TA(template (present) uint8_t ta) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSLAP_IEI_TA,</span><br><span style="color: hsl(120, 100%, 40%);">+ ta := ta</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) BSSLAP_IE_CellId ts_BSSLAP_IE_CellId(uint16_t cell_id) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSLAP_IEI_CELL_ID,</span><br><span style="color: hsl(120, 100%, 40%);">+ cell_id := cell_id</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) BSSLAP_IE_CellId tr_BSSLAP_IE_CellId(template (present) uint16_t cell_id) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSLAP_IEI_CELL_ID,</span><br><span style="color: hsl(120, 100%, 40%);">+ cell_id := cell_id</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) BSSLAP_IE_Cause ts_BSSLAP_IE_Cause(BSSLAP_Cause cause) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSLAP_IEI_CAUSE,</span><br><span style="color: hsl(120, 100%, 40%);">+ cause := cause</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) BSSLAP_IE_Cause tr_BSSLAP_IE_Cause(template (present) BSSLAP_Cause cause) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSLAP_IEI_CAUSE,</span><br><span style="color: hsl(120, 100%, 40%);">+ cause := cause</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+} with { encode "RAW" };</span><br><span>diff --git a/library/BSSMAP_LE_Templates.ttcn b/library/BSSMAP_LE_Templates.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..70805e7</span><br><span>--- /dev/null</span><br><span>+++ b/library/BSSMAP_LE_Templates.ttcn</span><br><span>@@ -0,0 +1,434 @@</span><br><span style="color: hsl(120, 100%, 40%);">+module BSSMAP_LE_Templates {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* BSSMAP-LE Templates, building on top of BSSAP_LE_Types.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2017-2020 by Harald Welte <laforge@gnumonks.org></span><br><span style="color: hsl(120, 100%, 40%);">+ * contributions by sysmocom - s.f.m.c. GmbH</span><br><span style="color: hsl(120, 100%, 40%);">+ * All rights reserved.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Released under the terms of GNU General Public License, Version 2 or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * SPDX-License-Identifier: GPL-2.0-or-later</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from General_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Osmocom_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from GSM_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from BSSAP_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from BSSAP_LE_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from BSSMAP_Templates all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from L3_Templates all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+function ts_BSSMAP_LE_LcsCause(template (omit) BSSMAP_LE_LcsCause cause)</span><br><span style="color: hsl(120, 100%, 40%);">+return template (omit) BSSMAP_LE_IE_LcsCause {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (istemplatekind(cause, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+ return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ var template (omit) BSSMAP_LE_IE_LcsCause ie := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSMAP_LE_IEI_IMSI,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ cause := cause,</span><br><span style="color: hsl(120, 100%, 40%);">+ diag_val := omit</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ return ie;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+function tr_BSSMAP_LE_LcsCause(template BSSMAP_LE_LcsCause cause)</span><br><span style="color: hsl(120, 100%, 40%);">+return template BSSMAP_LE_IE_LcsCause {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (istemplatekind(cause, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+ return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ var template BSSMAP_LE_IE_LcsCause ie := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSMAP_LE_IEI_IMSI,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ cause := cause,</span><br><span style="color: hsl(120, 100%, 40%);">+ diag_val := *</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ return ie;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+function ts_BSSMAP_LE_GeographicLoc(template (omit) octetstring loc)</span><br><span style="color: hsl(120, 100%, 40%);">+return template (omit) BSSMAP_LE_IE_GeographicLoc {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (istemplatekind(loc, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+ return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ var template (omit) BSSMAP_LE_IE_GeographicLoc ie := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSMAP_LE_IEI_GEO_LOCATION,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ location := loc</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ return ie;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+function tr_BSSMAP_LE_GeographicLoc(template octetstring loc)</span><br><span style="color: hsl(120, 100%, 40%);">+return template BSSMAP_LE_IE_GeographicLoc {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (istemplatekind(loc, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+ return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ var template BSSMAP_LE_IE_GeographicLoc ie := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSMAP_LE_IEI_GEO_LOCATION,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ location := loc</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ return ie;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PDU_BSSAP_LE ts_BSSAP_LE_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ discriminator := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0000000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ dlci := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ lengthIndicator := 0, /* overwritten by codec */</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bssmap := -</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) PDU_BSSAP_LE tr_BSSAP_LE_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ discriminator := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0000000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ dlci := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ lengthIndicator := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bssmap := ?</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PDU_BSSAP_LE ts_BSSAP_LE_DTAP(octetstring dtap, template (value) OCT1 dlci) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ discriminator := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0000000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ dlci := dlci,</span><br><span style="color: hsl(120, 100%, 40%);">+ lengthIndicator := 0, /* overwritten by codec */</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ dtap := dtap</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) PDU_BSSAP_LE tr_BSSAP_LE_DTAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ discriminator := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0000000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ dlci := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ lengthIndicator := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ dtap := ?</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+function ts_BSSMAP_LE_IMSI(template (omit) hexstring imsi) return template (omit) BSSMAP_LE_IE_IMSI {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (istemplatekind(imsi, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+ return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) BSSMAP_LE_IE_IMSI res := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSMAP_LE_IEI_IMSI,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ imsi := ts_MI_IMSI(valueof(imsi))</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+ return res;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+function tr_BSSMAP_LE_IMSI(template hexstring imsi) return template BSSMAP_LE_IE_IMSI {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (istemplatekind(imsi, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+ return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ template BSSMAP_LE_IE_IMSI res := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSMAP_LE_IEI_IMSI,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ imsi := tr_MI_IMSI(imsi)</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+ return res;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) BSSMAP_LE_IE_LocationType ts_BSSMAP_LE_LocType(template (value) BSSMAP_LE_LocInfo li,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (omit) BSSMAP_LE_PosMethod pm := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSMAP_LE_IEI_LOCATION_TYPE,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ loc_info := li,</span><br><span style="color: hsl(120, 100%, 40%);">+ pos_method := pm</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) BSSMAP_LE_IE_LocationType tr_BSSMAP_LE_LocType(template (present) BSSMAP_LE_LocInfo li,</span><br><span style="color: hsl(120, 100%, 40%);">+ template BSSMAP_LE_PosMethod pm := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSMAP_LE_IEI_LOCATION_TYPE,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ loc_info := li,</span><br><span style="color: hsl(120, 100%, 40%);">+ pos_method := pm</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 9.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PDU_BSSAP_LE ts_BSMAP_LE_PerfLocReq(BSSMAP_LE_LocInfo loc_info := BSSMAP_LE_LOC_INFO_CURRENT_GEOGRAPHIC_LOC,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) BSSMAP_IE_CellIdentifier cell_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (omit) hexstring imsi)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+modifies ts_BSSAP_LE_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bssmap := {</span><br><span style="color: hsl(120, 100%, 40%);">+ perf_loc_req := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSMAP_LE_PERFORM_LOC_REQ,</span><br><span style="color: hsl(120, 100%, 40%);">+ location_type := ts_BSSMAP_LE_LocType(loc_info),</span><br><span style="color: hsl(120, 100%, 40%);">+ cell_id := cell_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ cm3 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ lcs_client_type := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ chosen_channel := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ lcs_priority := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ lcs_qos := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ req_gps_ass_d := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ bsslap_apdu := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ lcs_capability := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ packet_meas_rep := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ meas_cell_id_list := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ imsi := ts_BSSMAP_LE_IMSI(imsi),</span><br><span style="color: hsl(120, 100%, 40%);">+ imei := omit</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) PDU_BSSAP_LE tr_BSMAP_LE_PerfLocReq(BSSMAP_LE_LocInfo loc_info := BSSMAP_LE_LOC_INFO_CURRENT_GEOGRAPHIC_LOC,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (present) BSSMAP_IE_CellIdentifier cell_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ template hexstring imsi)</span><br><span style="color: hsl(120, 100%, 40%);">+modifies tr_BSSAP_LE_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bssmap := {</span><br><span style="color: hsl(120, 100%, 40%);">+ perf_loc_req := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSMAP_LE_PERFORM_LOC_REQ,</span><br><span style="color: hsl(120, 100%, 40%);">+ location_type := tr_BSSMAP_LE_LocType(loc_info),</span><br><span style="color: hsl(120, 100%, 40%);">+ cell_id := cell_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ cm3 := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ lcs_client_type := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ chosen_channel := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ lcs_priority := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ lcs_qos := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ req_gps_ass_d := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ bsslap_apdu := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ lcs_capability := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ packet_meas_rep := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ meas_cell_id_list := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ imsi := tr_BSSMAP_LE_IMSI(imsi),</span><br><span style="color: hsl(120, 100%, 40%);">+ imei := *</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 9.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PDU_BSSAP_LE ts_BSMAP_LE_PerfLocResp(BSSMAP_LE_LocInfo loc_info := BSSMAP_LE_LOC_INFO_CURRENT_GEOGRAPHIC_LOC,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (omit) octetstring geo_loc,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (omit) BSSMAP_LE_LcsCause cause)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+modifies ts_BSSAP_LE_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bssmap := {</span><br><span style="color: hsl(120, 100%, 40%);">+ perf_loc_resp := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSMAP_LE_PERFORM_LOC_RESP,</span><br><span style="color: hsl(120, 100%, 40%);">+ geographic_loc := ts_BSSMAP_LE_GeographicLoc(geo_loc),</span><br><span style="color: hsl(120, 100%, 40%);">+ pos_data := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ deciph_keys := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ lcs_cause := ts_BSSMAP_LE_LcsCause(cause),</span><br><span style="color: hsl(120, 100%, 40%);">+ velocity_data := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ ganss_pos_data := omit</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) PDU_BSSAP_LE tr_BSMAP_LE_PerfLocResp(template BSSMAP_LE_LocInfo loc_info := BSSMAP_LE_LOC_INFO_CURRENT_GEOGRAPHIC_LOC,</span><br><span style="color: hsl(120, 100%, 40%);">+ template octetstring geo_loc,</span><br><span style="color: hsl(120, 100%, 40%);">+ template BSSMAP_LE_LcsCause cause)</span><br><span style="color: hsl(120, 100%, 40%);">+modifies tr_BSSAP_LE_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bssmap := {</span><br><span style="color: hsl(120, 100%, 40%);">+ perf_loc_resp := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSMAP_LE_PERFORM_LOC_RESP,</span><br><span style="color: hsl(120, 100%, 40%);">+ geographic_loc := tr_BSSMAP_LE_GeographicLoc(geo_loc),</span><br><span style="color: hsl(120, 100%, 40%);">+ pos_data := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ deciph_keys := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ lcs_cause := tr_BSSMAP_LE_LcsCause(cause),</span><br><span style="color: hsl(120, 100%, 40%);">+ velocity_data := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ ganss_pos_data := *</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 9.8 */</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PDU_BSSAP_LE ts_BSSMAP_LE_ConnInfo(BSSMAP_LE_ProtocolId prot_id, octetstring data,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (omit) BSSMAP_LE_IE_Segmentation segm := omit)</span><br><span style="color: hsl(120, 100%, 40%);">+modifies ts_BSSAP_LE_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bssmap := {</span><br><span style="color: hsl(120, 100%, 40%);">+ co_info := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSMAP_LE_CONN_ORIENTED_INFO,</span><br><span style="color: hsl(120, 100%, 40%);">+ bsslap_apdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSMAP_LE_IEI_APDU,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ protocol_id := prot_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ data := data</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+ segmentation := segm</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) PDU_BSSAP_LE tr_BSSMAP_LE_ConnInfo(template (present) BSSMAP_LE_ProtocolId prot_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (present) octetstring data,</span><br><span style="color: hsl(120, 100%, 40%);">+ template BSSMAP_LE_IE_Segmentation segm := omit)</span><br><span style="color: hsl(120, 100%, 40%);">+modifies tr_BSSAP_LE_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bssmap := {</span><br><span style="color: hsl(120, 100%, 40%);">+ co_info := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSMAP_LE_CONN_ORIENTED_INFO,</span><br><span style="color: hsl(120, 100%, 40%);">+ bsslap_apdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSMAP_LE_IEI_APDU,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ protocol_id := prot_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ data := data</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+ segmentation := segm</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 9.10 */</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PDU_BSSAP_LE ts_BSSMAP_LE_Reset(myBSSMAP_Cause cause) modifies ts_BSSAP_LE_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bssmap := {</span><br><span style="color: hsl(120, 100%, 40%);">+ reset := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSMAP_LE_RESET,</span><br><span style="color: hsl(120, 100%, 40%);">+ cause := ts_BSSMAP_IE_Cause(enum2int(cause))</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) PDU_BSSAP_LE tr_BSSMAP_LE_Reset modifies tr_BSSAP_LE_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bssmap := {</span><br><span style="color: hsl(120, 100%, 40%);">+ reset := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSMAP_LE_RESET,</span><br><span style="color: hsl(120, 100%, 40%);">+ cause := ?</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 9.11 */</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PDU_BSSAP_LE ts_BSSMAP_LE_ResetAck modifies ts_BSSAP_LE_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bssmap := {</span><br><span style="color: hsl(120, 100%, 40%);">+ reset := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSMAP_LE_RESET_ACK</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) PDU_BSSAP_LE tr_BSSMAP_LE_ResetAck modifies tr_BSSAP_LE_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bssmap := {</span><br><span style="color: hsl(120, 100%, 40%);">+ reset_ack := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSMAP_LE_RESET_ACK</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+function ts_BSSMAP_LE_APDU(BSSMAP_LE_ProtocolId prot_id, template (omit) octetstring data)</span><br><span style="color: hsl(120, 100%, 40%);">+return template (omit) BSSMAP_LE_IE_APDU {</span><br><span style="color: hsl(120, 100%, 40%);">+ var BSSMAP_LE_IE_APDU ie := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSMAP_LE_IEI_APDU,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := 0, // overwritten</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ protocol_id := prot_id</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ if (istemplatekind(data, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+ return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ ie.data := valueof(data);</span><br><span style="color: hsl(120, 100%, 40%);">+ return ie;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+function tr_BSSMAP_LE_APDU(template BSSMAP_LE_ProtocolId prot_id, template octetstring data)</span><br><span style="color: hsl(120, 100%, 40%);">+return template BSSMAP_LE_IE_APDU {</span><br><span style="color: hsl(120, 100%, 40%);">+ var template BSSMAP_LE_IE_APDU ie := {</span><br><span style="color: hsl(120, 100%, 40%);">+ iei := BSSMAP_LE_IEI_APDU,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ protocol_id := prot_id</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ if (istemplatekind(data, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+ return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+ } else if (istemplatekind(data, "*")) {</span><br><span style="color: hsl(120, 100%, 40%);">+ return *;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ ie.data := valueof(data);</span><br><span style="color: hsl(120, 100%, 40%);">+ return ie;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Section 9.12 */</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PDU_BSSAP_LE ts_BSSMAP_LE_PerformLocInfo(BSSMAP_IE_CellIdentifier cell_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_LE_ProtocolId prot_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (omit) octetstring data)</span><br><span style="color: hsl(120, 100%, 40%);">+modifies ts_BSSAP_LE_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bssmap := {</span><br><span style="color: hsl(120, 100%, 40%);">+ perf_loc_info := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSMAP_LE_PERFORM_LOC_INFO,</span><br><span style="color: hsl(120, 100%, 40%);">+ cell_id := cell_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ bsslap_apdu := ts_BSSMAP_LE_APDU(prot_id, data)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) PDU_BSSAP_LE tr_BSSMAP_LE_PerformLocInfo(template (present) BSSMAP_IE_CellIdentifier cell_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ template BSSMAP_LE_ProtocolId prot_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ template octetstring data)</span><br><span style="color: hsl(120, 100%, 40%);">+modifies tr_BSSAP_LE_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bssmap := {</span><br><span style="color: hsl(120, 100%, 40%);">+ perf_loc_info := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := BSSMAP_LE_PERFORM_LOC_INFO,</span><br><span style="color: hsl(120, 100%, 40%);">+ cell_id := cell_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ bsslap_apdu := tr_BSSMAP_LE_APDU(prot_id, data)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* return Layer3 octetstring inside BSSAP-LE PDU */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_bssap_le_extract_l3(PDU_BSSAP_LE bssap) return template octetstring {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ischosen(bssap.pdu.bssmap)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ return bssap.pdu.dtap;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template PDU_BSSAP_LE tr_BSSMAP_LE_Paging(template hexstring imsi_digits := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template OCT4 tmsi := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ template BSSMAP_IE_ChannelNeeded chneed := *)</span><br><span style="color: hsl(120, 100%, 40%);">+modifies tr_BSSAP_LE_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+ pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bssmap := {</span><br><span style="color: hsl(120, 100%, 40%);">+ paging := {</span><br><span style="color: hsl(120, 100%, 40%);">+ messageType := '52'O,</span><br><span style="color: hsl(120, 100%, 40%);">+ iMSI := tr_BSSMAP_Imsi(imsi_digits),</span><br><span style="color: hsl(120, 100%, 40%);">+ tMSI := tr_BSSMAP_IE_TMSI(tmsi) ifpresent,</span><br><span style="color: hsl(120, 100%, 40%);">+ cellIdentifierList := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ channelNeeded := chneed,</span><br><span style="color: hsl(120, 100%, 40%);">+ eMLPP_Priority := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ pagingInformation := omit /* only VGCS/VBS flag */</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+} with { encode "RAW" };</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19764">change 19764</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19764"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: If31830be2c8e1b624579f6663e74955763db9d0e </div>
<div style="display:none"> Gerrit-Change-Number: 19764 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>