<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>