| module BSSAP_LE_Types { |
| |
| /* BSSAP_LE_Types, defining abstract TTCN-3 data types for the 3GPP BSSMAP-LE protocol. |
| * |
| * BSSMAP-LE is a 3GPP standard protocol used by SMLC and its peers in a GSM network. |
| * This file covers 3GPP TS 49.031 version 15.0.0 Release 15 |
| * |
| * (C) 2020 by Harald Welte <laforge@gnumonks.org> |
| * All rights reserved. |
| * |
| * Released under the terms of GNU General Public License, Version 2 or |
| * (at your option) any later version. |
| * |
| * SPDX-License-Identifier: GPL-2.0-or-later |
| */ |
| |
| import from General_Types all; |
| import from Osmocom_Types all; |
| import from BSSAP_Types all; |
| import from BSSLAP_Types all; |
| import from MobileL3_CommonIE_Types all; |
| |
| /* TS 49.031 Section 10.1 */ |
| type enumerated BSSMAP_LE_MsgType { |
| BSSMAP_LE_PERFORM_LOC_REQ ('00101011'B), |
| BSSMAP_LE_PERFORM_LOC_RESP ('00101101'B), |
| BSSMAP_LE_PERFORM_LOC_ABORT ('00101110'B), |
| BSSMAP_LE_PERFORM_LOC_INFO ('00101111'B), |
| BSSMAP_LE_ASSIST_INFO_REQ ('00100000'B), |
| BSSMAP_LE_ASSIST_INFO_RESP ('00100001'B), |
| |
| BSSMAP_LE_CONN_ORIENTED_INFO ('00101010'B), |
| BSSMAP_LE_CONN_LESS_INFO ('00111010'B), |
| |
| BSSMAP_LE_RESET ('00110000'B), |
| BSSMAP_LE_RESET_ACK ('00110001'B) |
| } with { variant "FIELDLENGTH(8)" }; |
| |
| /* TS 49.031 Section 10.2 */ |
| type enumerated BSSMAP_LE_IEI { |
| BSSMAP_LE_IEI_LCS_QoS ('00111110'B), |
| BSSMAP_LE_IEI_LCS_PRIORITY ('01000011'B), |
| BSSMAP_LE_IEI_LOCATION_TYPE ('01000100'B), |
| BSSMAP_LE_IEI_GANSS_LOCATION_TYPE ('10000010'B), |
| BSSMAP_LE_IEI_GEO_LOCATION ('01000101'B), |
| BSSMAP_LE_IEI_POSITIONING_DATA ('01000110'B), |
| BSSMAP_LE_IEI_GANSS_POS_DATA ('10000011'B), |
| BSSMAP_LE_IEI_VELOCITY_DATA ('01010101'B), |
| BSSMAP_LE_IEI_LCS_CAUSE ('01000111'B), |
| BSSMAP_LE_IEI_LCS_CLIENT_TYPE ('01001000'B), |
| BSSMAP_LE_IEI_APDU ('01001001'B), |
| BSSMAP_LE_IEI_NET_ELEM_ID ('01001010'B), |
| BSSMAP_LE_IEI_REQ_GPS_ASS_D ('01001011'B), |
| BSSMAP_LE_IEI_REQ_GANSS_ASS_D ('01000001'B), |
| BSSMAP_LE_IEI_DECIPH_KEYS ('01001100'B), |
| BSSMAP_LE_IEI_RET_ERR_REQ ('01001101'B), |
| BSSMAP_LE_IEI_RET_ERR_CAUSE ('01001110'B), |
| BSSMAP_LE_IEI_SEGMENTATION ('01001111'B), |
| BSSMAP_LE_IEI_CLASSMARK3_INFO ('00010011'B), |
| BSSMAP_LE_IEI_CAUSE ('00000100'B), |
| BSSMAP_LE_IEI_CELL_ID ('00000101'B), |
| BSSMAP_LE_IEI_CHOSEN_CHAN ('00100001'B), |
| BSSMAP_LE_IEI_IMSI ('00000000'B), |
| BSSMAP_LE_IEI_LCS_CAPABILITY ('01010000'B), |
| BSSMAP_LE_IEI_PKT_MEAS_REP ('01010001'B), |
| BSSMAP_LE_IEI_CELL_ID_LIST ('01010010'B), |
| BSSMAP_LE_IEI_IMEI ('10000000'B), |
| BSSMAP_LE_IEI_BSS_MLAT_CAP ('10000100'B), |
| BSSMAP_LE_IEI_CELL_INFO_LIST ('10000101'B), |
| BSSMAP_LE_IEI_BTS_RX_ACC_LVL ('10000110'B), |
| BSSMAP_LE_IEI_MLAT_METHOD ('10000111'B), |
| BSSMAP_LE_IEI_MLAT_TA ('10001000'B), |
| BSSMAP_LE_IEI_MS_SYNC_ACC ('10001001'B), |
| BSSMAP_LE_IEI_SHORT_ID_SET ('10001010'B), |
| BSSMAP_LE_IEI_RANDOM_ID_SET ('10001011'B), |
| BSSMAP_LE_IEI_SHORT_BSS_ID ('10001100'B), |
| BSSMAP_LE_IEI_RANDOM_ID ('10001101'B), |
| BSSMAP_LE_IEI_SHORT_ID ('10001110'B), |
| BSSMAP_LE_IEI_COVERAGE_CLASS ('10001111'B), |
| BSSMAP_LE_IEI_MTA_ACC_SEC_RQD ('10010000'B) |
| } with { variant "FIELDLENGTH(8)" }; |
| |
| /* Section 9.1 */ |
| type record BSSMAP_LE_PerfLocReq { |
| BSSMAP_LE_MsgType msg_type, |
| BSSMAP_LE_IE_LocationType location_type, |
| BSSMAP_IE_CellIdentifier cell_id, |
| BSSMAP_IE_ClassmarkInformationType3 cm3 optional, |
| BSSMAP_LE_IE_LcsClientType lcs_client_type optional, |
| BSSMAP_IE_ChosenChannel chosen_channel optional, |
| BSSMAP_LE_IE_LcsPriority lcs_priority optional, |
| BSSMAP_LE_IE_LcsQoS lcs_qos optional, |
| BSSMAP_LE_IE_ReqGpsAssD req_gps_ass_d optional, |
| BSSMAP_LE_IE_APDU bsslap_apdu optional, |
| BSSMAP_LE_IE_LcsCapability lcs_capability optional, |
| BSSMAP_LE_IE_PacketMeasRep packet_meas_rep optional, |
| BSSMAP_LE_IE_CellIdList meas_cell_id_list optional, |
| BSSMAP_LE_IE_IMSI imsi optional, |
| BSSMAP_LE_IE_IMEI imei optional |
| // TODO: more optional IEs |
| }; |
| |
| /* Section 9.2 */ |
| type record BSSMAP_LE_PerfLocResp { |
| BSSMAP_LE_MsgType msg_type, |
| BSSMAP_LE_IE_GeographicLoc geographic_loc optional, |
| BSSMAP_LE_IE_PositioningData pos_data optional, |
| BSSMAP_LE_IE_DecipheringKeys deciph_keys optional, |
| BSSMAP_LE_IE_LcsCause lcs_cause optional, |
| BSSMAP_LE_IE_VelocityData velocity_data optional, |
| BSSMAP_LE_IE_GanssPosData ganss_pos_data optional |
| }; |
| |
| /* Section 9.4 */ |
| type record BSSMAP_LE_PerfLocAbort { |
| BSSMAP_LE_MsgType msg_type, |
| BSSMAP_LE_IE_LcsCause lcs_cause |
| }; |
| |
| /* Section 9.8 */ |
| type record BSSMAP_LE_ConnOrientedInfo { |
| BSSMAP_LE_MsgType msg_type, |
| BSSMAP_LE_IE_APDU bsslap_apdu, |
| BSSMAP_LE_IE_Segmentation segmentation optional |
| // TODO: MLA related optional IEs |
| }; |
| |
| /* Section 9.9 */ |
| type record BSSMAP_LE_ConnLessInfo { |
| BSSMAP_LE_MsgType msg_type, |
| BSSMAP_LE_IE_NetElementId source_id, |
| BSSMAP_LE_IE_NetElementId dest_id, |
| BSSMAP_LE_IE_APDU bsslap_apdu optional, |
| BSSMAP_LE_IE_Segmentation segmentation optional, |
| BSSMAP_LE_IE_RetErrReq ret_err_req optional, |
| BSSMAP_LE_IE_RetErrCause ret_err_cause optional |
| }; |
| |
| /* Section 9.10 */ |
| type record BSSMAP_LE_Reset { |
| BSSMAP_LE_MsgType msg_type, |
| BSSMAP_IE_Cause cause |
| }; |
| |
| /* Section 9.11 */ |
| type record BSSMAP_LE_ResetAck { |
| BSSMAP_LE_MsgType msg_type |
| }; |
| |
| /* Section 9.12 */ |
| type record BSSMAP_LE_PerformLocInfo { |
| BSSMAP_LE_MsgType msg_type, |
| BSSMAP_IE_CellIdentifier cell_id, |
| BSSMAP_LE_IE_APDU bsslap_apdu optional |
| }; |
| |
| type union BSSMAP_LE_PDU { |
| BSSMAP_LE_PerfLocReq perf_loc_req, |
| BSSMAP_LE_PerfLocResp perf_loc_resp, |
| BSSMAP_LE_PerfLocAbort perf_loc_abort, |
| BSSMAP_LE_ConnOrientedInfo co_info, |
| BSSMAP_LE_ConnLessInfo cl_info, |
| BSSMAP_LE_Reset reset, |
| BSSMAP_LE_ResetAck reset_ack, |
| BSSMAP_LE_PerformLocInfo perf_loc_info, |
| /* The following BSSMAP messages defined in 3GPP TS 48.008 are applicable to the Lb interface to |
| * support signaling to a Type A LMU using an SDCCH */ |
| PDU_BSSMAP_CipherModeCommand cipherModeCommand, |
| PDU_BSSMAP_CipherModeComplete cipherModeComplete, |
| PDU_BSSMAP_CipherModeReject cipherModeReject, |
| PDU_BSSMAP_ClassmarkUpdate classmarkUpdate, |
| PDU_BSSMAP_ClearCommand clearCommand, |
| PDU_BSSMAP_ClearComplete clearComplete, |
| PDU_BSSMAP_ClearRequest clearRequest, |
| PDU_BSSMAP_CompleteLayer3Information completeLayer3Information, |
| PDU_BSSMAP_Confusion confusion, |
| PDU_BSSMAP_HandoverRequired handoverRequired, |
| PDU_BSSMAP_HandoverRequiredReject handoverRequiredReject, |
| PDU_BSSMAP_HandoverPerformed handoverPerformed, |
| PDU_BSSMAP_Paging paging |
| } with { |
| variant "TAG( |
| perf_loc_req, msg_type = BSSMAP_LE_PERFORM_LOC_REQ; |
| perf_loc_resp, msg_type = BSSMAP_LE_PERFORM_LOC_RESP; |
| perf_loc_abort, msg_type = BSSMAP_LE_PERFORM_LOC_ABORT; |
| co_info, msg_type = BSSMAP_LE_CONN_ORIENTED_INFO; |
| cl_info, msg_type = BSSMAP_LE_CONN_LESS_INFO; |
| reset, msg_type = BSSMAP_LE_RESET; |
| reset_ack, msg_type = BSSMAP_LE_RESET_ACK; |
| perf_loc_info, msg_type = BSSMAP_LE_PERFORM_LOC_INFO; |
| )" |
| }; |
| |
| /* Section 10.3 */ |
| type record BSSMAP_LE_IE_APDU { |
| BSSMAP_LE_IEI iei, |
| uint16_t len, |
| BSSMAP_LE_ProtocolId protocol_id, |
| BIT1 spare, |
| octetstring data |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_APDU)" |
| variant (len) "LENGTHTO(protocol_id,spare,data)" |
| }; |
| type enumerated BSSMAP_LE_ProtocolId { |
| BSSMAP_LE_PROT_RESERVED ('0000000'B), |
| BSSMAP_LE_PROT_BSSLAP ('0000001'B), |
| BSSMAP_LE_PROT_LLP ('0000010'B), |
| BSSMAP_LE_PROT_SMLCPP ('0000011'B) |
| } with { variant "FIELDLENGTH(7)" }; |
| |
| /* Section 10.8 */ |
| type record BSSMAP_LE_IE_DecipheringKeys { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| BIT7 spare, |
| boolean ciph_key_flag, |
| OCT7 cur_deciph_key, |
| OCT7 next_deciph_key |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_DECIPH_KEYS)" |
| variant (len) "LENGTHTO(spare,ciph_key_flag,cur_deciph_key,next_deciph_key)" |
| } |
| |
| /* Section 10.9 */ |
| type record BSSMAP_LE_IE_GeographicLoc { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| octetstring location |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_GEO_LOCATION)" |
| variant (len) "LENGTHTO(location)" |
| } |
| |
| /* Section 10.10 */ |
| type record BSSMAP_LE_IE_ReqGpsAssD { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| BIT16 flags, |
| octetstring sat_data |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_REQ_GPS_ASS_D)" |
| variant (len) "LENGTHTO(flags,sat_data)" |
| } |
| |
| /* Section 10.11 */ |
| type record BSSMAP_LE_IE_IMSI { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| MobileIdentityV imsi |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_IMSI)" |
| variant (len) "LENGTHTO(imsi)" |
| } |
| |
| /* Section 10.13 */ |
| type record BSSMAP_LE_IE_LcsCause { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| BSSMAP_LE_LcsCause cause, |
| OCT1 diag_val optional |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_IMSI)" |
| variant (len) "LENGTHTO(cause,diag_val)" |
| } |
| type enumerated BSSMAP_LE_LcsCause { |
| BSSMAP_LE_LCS_CAUSE_UNSPEIFIED ('00000000'B), |
| BSSMAP_LE_LCS_CAUSE_SYSTEM_FAILURE ('00000001'B), |
| BSSMAP_LE_LCS_CAUSE_PROTOCOL_ERROR ('00000010'B), |
| BSSMAP_LE_LCS_CAUSE_DATA_MISSING_IN_REQ ('00000011'B), |
| BSSMAP_LE_LCS_CAUSE_UNEXP_DATA_IN_REQ ('00000100'B), |
| BSSMAP_LE_LCS_CAUSE_POS_METH_FAILURE ('00000101'B), |
| BSSMAP_LE_LCS_CAUSE_TGT_MS_UNREACHABLE ('00000110'B), |
| BSSMAP_LE_LCS_CAUSE_REQUEST_ABORTED ('00000111'B), |
| BSSMAP_LE_LCS_CAUSE_FACILITY_NOTSUPP ('00001000'B), |
| BSSMAP_LE_LCS_CAUSE_INTER_BSC_HO ('00001001'B), |
| BSSMAP_LE_LCS_CAUSE_INTRA_BSC_HO ('00001010'B), |
| BSSMAP_LE_LCS_CAUSE_CONGESTION ('00001011'B), |
| BSSMAP_LE_LCS_CAUSE_INTER_NSE_CHG ('00001100'B), |
| BSSMAP_LE_LCS_CAUSE_RA_UPDAT ('00001101'B), |
| BSSMAP_LE_LCS_CAUSE_PTMSI_REALLOC ('00001110'B), |
| BSSMAP_LE_LCS_CAUSE_GPRS_SUSPENSION ('00001111'B) |
| } with { variant "FIELDLENGTH(8)" }; |
| |
| /* Section 10.14 */ |
| type record BSSMAP_LE_IE_LcsClientType { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| BSSMAP_LE_ClientType cltype |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_CAUSE)" |
| variant (len) "LENGTHTO(cltype)" |
| } |
| type enumerated BSSMAP_LE_ClientType { |
| BSSMAP_LE_LCS_CTYPE_VALUE_ADDED_UNSPECIFIED ('00000000'B), |
| BSSMAP_LE_LCS_CTYPE_PLMN_OPER_UNSPECIFIED ('00100000'B), |
| BSSMAP_LE_LCS_CTYPE_PLMN_OPER_BCAST_SERVICE ('00100001'B), |
| BSSMAP_LE_LCS_CTYPE_PLMN_OPER_OAM ('00100010'B), |
| BSSMAP_LE_LCS_CTYPE_PLMN_OPER_ANON_STATS ('00100011'B), |
| BSSMAP_LE_LCS_CTYPE_PLMN_OPER_TGT_MS_SVC ('00100100'B), |
| BSSMAP_LE_LCS_CTYPE_EMERG_SVC_UNSPECIFIED ('00110000'B), |
| BSSMAP_LE_LCS_CTYPE_LI_UNSPECIFIED ('01000000'B) |
| } with { variant "FIELDLENGTH(8)" }; |
| |
| /* Section 10.15 */ |
| type record BSSMAP_LE_IE_LcsPriority { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| OCT1 priority |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_LCS_PRIORITY)" |
| variant (len) "LENGTHTO(priority)" |
| } |
| |
| /* Section 10.16 */ |
| type record BSSMAP_LE_IE_LcsQoS { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| |
| BIT6 spare, |
| boolean vel, |
| boolean vert, |
| |
| boolean ha, |
| uint7_t horiz_acc, |
| |
| boolean va, |
| uint7_t vert_acc, |
| |
| BIT2 rt, |
| BIT6 spare2 |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_LCS_QoS)" |
| variant (len) "LENGTHTO(spare,vel,vert,ha,horiz_acc,va,vert_acc,rt,spare2)" |
| } |
| |
| /* Section 10.18 */ |
| type record BSSMAP_LE_IE_LocationType { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| BSSMAP_LE_LocInfo loc_info, |
| BSSMAP_LE_PosMethod pos_method optional |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_LOCATION_TYPE)" |
| variant (len) "LENGTHTO(loc_info,pos_method)" |
| variant (pos_method) "PRESENCE(loc_info = BSSMAP_LE_LOC_INFO_ASS_INFO_FOR_TGT_MS, |
| loc_info = BSSMAP_LE_LOC_INFO_DECIPH_KEYS_FOR_BCAST)" |
| } |
| type enumerated BSSMAP_LE_LocInfo { |
| BSSMAP_LE_LOC_INFO_CURRENT_GEOGRAPHIC_LOC ('00000000'B), |
| BSSMAP_LE_LOC_INFO_ASS_INFO_FOR_TGT_MS ('00000001'B), |
| BSSMAP_LE_LOC_INFO_DECIPH_KEYS_FOR_BCAST ('00000010'B) |
| } with { variant "FIELDLENGTH(8)" }; |
| type enumerated BSSMAP_LE_PosMethod { |
| BSSMAP_LE_POS_METHOD_RESERVED ('00000000'B), |
| BSSMAP_LE_POS_MOBILE_ASSISTED_EOTD ('00000001'B), |
| BSSMAP_LE_POS_MOBILE_BASED_EOTD ('00000010'B), |
| BSSMAP_LE_POS_ASSISTED_GPS ('00000011'B), |
| BSSMAP_LE_POS_ASSISTED_GANSS ('00000100'B), |
| BSSMAP_LE_POS_ASSISTED_GPS_AND_GANSS ('00000101'B) |
| } with { variant "FIELDLENGTH(8)" }; |
| |
| /* Section 10.19 */ |
| type record BSSMAP_LE_IE_NetElementId { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| BIT4 spare, |
| BSSMAP_LE_IdDiscr id_discr, |
| BSSMAP_LE_IdU u |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_NET_ELEM_ID)" |
| variant (len) "LENGTHTO(spare,id_discr,u)" |
| variant (u) "CROSSTAG( |
| cgi, id_discr = BSSMAP_LE_ID_DISC_CGI; |
| lac_ci, id_discr = BSSMAP_LE_ID_DISC_LAC_CI; |
| lai, id_discr = BSSMAP_LE_ID_DISC_LAI; |
| lac, id_discr = BSSMAP_LE_ID_DISC_LAC; |
| lmu, id_discr = BSSMAP_LE_ID_LMU; |
| )" |
| }; |
| type enumerated BSSMAP_LE_IdDiscr { |
| BSSMAP_LE_ID_DISC_CGI ('0000'B), |
| BSSMAP_LE_ID_DISC_LAC_CI ('0001'B), |
| BSSMAP_LE_ID_DISC_LAI ('0100'B), |
| BSSMAP_LE_ID_DISC_LAC ('0101'B), |
| BSSMAP_LE_ID_LMU ('0110'B) |
| } with { variant "FIELDLENGTH(4)" }; |
| type union BSSMAP_LE_IdU { |
| BSSMAP_LE_Id_CGI cgi, |
| BSSMAP_LE_Id_LAC_CI lac_ci, |
| BSSMAP_LE_Id_LAI lai, |
| uint16_t lac, |
| octetstring lmu |
| }; |
| type record BSSMAP_LE_Id_CGI { |
| HEX6n mcc_mnc, |
| uint16_t lac, |
| uint16_t ci |
| }; |
| type record BSSMAP_LE_Id_LAC_CI { |
| uint16_t lac, |
| uint16_t ci |
| }; |
| type record BSSMAP_LE_Id_LAI { |
| HEX6n mcc_mnc, |
| uint16_t lac |
| }; |
| |
| /* Section 10.20 */ |
| type record BSSMAP_LE_IE_PositioningData { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| BIT4 spare, |
| uint4_t discr, |
| BSSMAP_LE_PosMethList pos_meth |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_POSITIONING_DATA)" |
| variant (len) "LENGTHTO(spare,discr,pos_meth)" |
| }; |
| type record of BSSMAP_LE_PosMethodN BSSMAP_LE_PosMethList; |
| type record BSSMAP_LE_PosMethodN { |
| BSSMAP_LE_Method method, |
| BSSMAP_LE_Usage usage |
| }; |
| type enumerated BSSMAP_LE_Method { |
| BSSMAP_LE_METHOD_TA ('00000'B), |
| BSSMAP_LE_METHOD_RESERVED0 ('00001'B), |
| BSSMAP_LE_METHOD_RESERVED1 ('00010'B), |
| BSSMAP_LE_METHOD_MOBILE_ASS_EOTD ('00011'B), |
| BSSMAP_LE_METHOD_MOBILE_BASED_EOTD ('00100'B), |
| BSSMAP_LE_METHOD_MOBILE_ASS_GPS ('00101'B), |
| BSSMAP_LE_METHOD_MOBILE_BASED_GPS ('00110'B), |
| BSSMAP_LE_METHOD_CONVENTIONAL_GPS ('00111'B), |
| BSSMAP_LE_METHOD_UTDOA ('01000'B), |
| BSSMAP_LE_METHOD_CELL_ID ('01100'B) |
| } with { variant "FIELDLENGTH(5)" }; |
| type enumerated BSSMAP_LE_Usage { |
| BSSMAP_LE_USAGE_ATTEMPTED_UNSUCC ('000'B), |
| BSSMAP_LE_USAGE_ATTEMPTED_SUCC_NOT_USED ('001'B), |
| BSSMAP_LE_USAGE_ATTEMPTED_SUCC_USED_VRFY_NOT_GEN ('010'B), |
| BSSMAP_LE_USAGE_ATTEMPTED_SUCC_USED_GEN ('011'B), |
| BSSMAP_LE_USAGE_ATTEMPTED_SUCC_USAGE_UNDETERMINED ('100'B) |
| } with { variant "FIELDLENGTH(3)" }; |
| |
| /* Section 10.21 */ |
| type record BSSMAP_LE_IE_RetErrReq { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| OCT1 ret_err_type |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_RET_ERR_REQ)" |
| variant (len) "LENGTHTO(ret_err_type)" |
| } |
| |
| /* Section 10.22 */ |
| type record BSSMAP_LE_IE_RetErrCause { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| BSSMAP_LE_RetErrCause cause |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_RET_ERR_REQ)" |
| variant (len) "LENGTHTO(cause)" |
| } |
| type enumerated BSSMAP_LE_RetErrCause { |
| BSSMAP_LE_RE_CAUSE_UNSPECIFIED ('00000000'B), |
| BSSMAP_LE_RE_CAUSE_SYSTEM_FAILURE ('00000001'B), |
| BSSMAP_LE_RE_CAUSE_PROTOCOL_ERROR ('00000010'B), |
| BSSMAP_LE_RE_CAUSE_DEST_UNKNOWN ('00000011'B), |
| BSSMAP_LE_RE_CAUSE_DEST_UNREACHABLE ('00000100'B), |
| BSSMAP_LE_RE_CAUSE_CONGESTION ('00000101'B) |
| } with { variant "FIELDLENGTH(8)" }; |
| |
| /* Section 10.24 */ |
| type record BSSMAP_LE_IE_Segmentation { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| BIT3 spare, |
| boolean s_non_final, |
| uint4_t seg_nr, |
| OCT2 msg_id optional |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_SEGMENTATION)" |
| variant (len) "LENGTHTO(spare,s_non_final,seg_nr,msg_id)" |
| } |
| |
| /* Section 10.26 */ |
| type record BSSMAP_LE_IE_LcsCapability { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| octetstring lcs_cap |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_LCS_CAPABILITY)" |
| variant (len) "LENGTHTO(lcs_cap)" |
| } |
| |
| type record BSSMAP_LE_IE_PacketMeasRep { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| octetstring pkt_meas_rep |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_PKT_MEAS_REP)" |
| variant (len) "LENGTHTO(pkt_meas_rep)" |
| } |
| |
| type record BSSMAP_LE_IE_CellIdList { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| BSSLAP_CellIdList cell_id_list |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_CELL_ID_LIST)" |
| variant (len) "LENGTHTO(cell_id_list)" |
| } |
| |
| /* Section 10.29 */ |
| type record BSSMAP_LE_IE_IMEI { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| MobileIdentityV imei |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_IMEI)" |
| variant (len) "LENGTHTO(imei)" |
| } |
| |
| /* Section 10.30 */ |
| type record BSSMAP_LE_IE_VelocityData { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| octetstring data |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_VELOCITY_DATA)" |
| variant (len) "LENGTHTO(data)" |
| } |
| |
| /* Section 10.32 */ |
| type record BSSMAP_LE_IE_GanssPosData { |
| BSSMAP_LE_IEI iei, |
| uint8_t len, |
| BSSMAP_LE_GanssList list |
| } with { |
| variant "PRESENCE(iei = BSSMAP_LE_IEI_VELOCITY_DATA)" |
| variant (len) "LENGTHTO(list)" |
| } |
| type record of BSSMAP_LE_Ganss BSSMAP_LE_GanssList; |
| type record BSSMAP_LE_Ganss { |
| BSSMAP_LE_GanssMethod method, |
| BSSMAP_LE_GanssId id, |
| BSSMAP_LE_Usage usage |
| }; |
| type enumerated BSSMAP_LE_GanssMethod { |
| BSSMAP_LE_GANSS_METH_MS_BASED ('00'B), |
| BSSMAP_LE_GANSS_METH_MS_ASSISTED ('01'B), |
| BSSMAP_LE_GANSS_METH_MS_CONVENTIONAL ('10'B), |
| BSSMAP_LE_GANSS_METH_MS_RESERVED ('11'B) |
| } with { variant "FIELDLENGTH(2)" }; |
| type enumerated BSSMAP_LE_GanssId { |
| BSSMAP_LE_GANSS_ID_GALILEO ('000'B), |
| BSSMAP_LE_GANSS_ID_SBAS ('001'B), |
| BSSMAP_LE_GANSS_ID_MODERNIZED_GPS ('010'B), |
| BSSMAP_LE_GANSS_ID_QZSS ('011'B), |
| BSSMAP_LE_GANSS_ID_GLONASS ('100'B), |
| BSSMAP_LE_GANSS_ID_BDS ('101'B) |
| } with { variant "FIELDLENGTH(3)" }; |
| |
| /* FIXME: Further IEs */ |
| |
| |
| |
| |
| type union BSSMAPLEorDTAP { |
| BSSMAP_LE_PDU bssmap, |
| octetstring dtap |
| } |
| |
| type record PDU_BSSAP_LE { |
| BIT1 discriminator, // 0 = BSSMAP-LE; 1 = DTAP-LE |
| BIT7 spare, // always '0000000'B |
| OCT1 dlci optional, |
| LIN1 lengthIndicator, |
| BSSMAPLEorDTAP pdu |
| } with { |
| variant (lengthIndicator) "LENGTHTO(pdu)" |
| variant (pdu) "CROSSTAG(bssmap, discriminator='0'B; |
| dtap, discriminator='1'B)" |
| variant (dlci) "PRESENCE(discriminator='1'B)" |
| } |
| |
| |
| external function enc_PDU_BSSAP_LE(in PDU_BSSAP_LE pdu) return octetstring |
| with { extension "prototype(convert) encode(RAW)" } |
| external function dec_PDU_BSSAP_LE(in octetstring stream) return PDU_BSSAP_LE |
| with { extension "prototype(convert) decode(RAW)" } |
| |
| |
| } with { encode "RAW" ; } |